Add other sections. Fix typo.
This commit is contained in:
parent
46d17a3ee4
commit
e319430837
|
@ -448,6 +448,54 @@ of a session via the following procedures.
|
|||
restricted in future versions of the \surflet server.
|
||||
\end{desc}
|
||||
|
||||
The \exi{surflets/continuations} also offers procedures to access the
|
||||
continuations.
|
||||
|
||||
\defun{get-continuations}{session}{list}
|
||||
\begin{desc}
|
||||
Returns a list of all continuations of the \var{session}. The list
|
||||
elements are pairs with the \ex{car} being the session and the
|
||||
\ex{cdr} being the continuation.
|
||||
\end{desc}
|
||||
|
||||
\defun{delete-continuation!}{session-continuation}{undefined}
|
||||
\begin{desc}
|
||||
Removes the specified continuation from the continuation table.
|
||||
\var{session-continuation} is a pair as returned from
|
||||
\ex{get-continuations}. It is no error if the session or the
|
||||
continuation does not exist anymore.
|
||||
|
||||
The access to this functions is currently unrestricted but may be
|
||||
restricted in future versions of the \surflet server.
|
||||
\end{desc}
|
||||
|
||||
\defun{continuation-id}{session-continuation}{number}
|
||||
\begin{desc}
|
||||
Returns the continuation ID of the continuation specified by
|
||||
\var{session-continuation} which is a pair as returned by
|
||||
\ex{get-continuations}.
|
||||
\end{desc}
|
||||
|
||||
The \exi{surflets/ids} structure provides procedures to determine the
|
||||
session and continuation IDs of the current session. See also the
|
||||
entry for \ex{resume-url-ids} some where else in this document.
|
||||
|
||||
\defun{my-session-id}{surlfet-request}{number}
|
||||
\defunx{my-continuation-id}{surlfet-request}{number}
|
||||
\defunx{my-ids}{surlfet-request}{number number}
|
||||
\begin{desc}
|
||||
These return the session and continuation ID that where used to
|
||||
access the current session. The procedures work for every
|
||||
\var{surflet-request} except for the inital one that \ex{main}
|
||||
gets. The values returned by \ex{my-ids} are the session and the
|
||||
continuation ID in this order.
|
||||
\end{desc}
|
||||
|
||||
\defun{surflet-file-name}{surlfet-request}{string}
|
||||
\begin{desc}
|
||||
This returns the name of the \surflet of the current session.
|
||||
\end{desc}
|
||||
|
||||
|
||||
\subsubsection{Session data}
|
||||
The \surflet handler distinguishes three kinds of \keyword{session
|
||||
|
@ -512,7 +560,7 @@ the \ex{status-code} syntax.
|
|||
continuation-URLs.
|
||||
\end{desc}
|
||||
|
||||
\defun{send/error}{status-code surflet-request [messages]}{\noreturn}
|
||||
\defun{send-error}{status-code surflet-request [messages]}{\noreturn}
|
||||
\begin{desc}
|
||||
This sends an error response to the client. \var{status-code} is
|
||||
the status code of the error, see section \ref{sec:http-responses} for
|
||||
|
@ -828,6 +876,7 @@ for the double naming \ex{resume-url} and continuation-URL.
|
|||
\end{desc}
|
||||
|
||||
|
||||
|
||||
\subsection{Input fields}
|
||||
|
||||
The \surflets support all input fields defined for HTML~2.0 and allow
|
||||
|
@ -1293,8 +1342,7 @@ The \surflets library allow you to determine which link or button a
|
|||
\end{desc}
|
||||
|
||||
% There is \defsyn or \defsyntax command yet, so I hack it on my own.
|
||||
{\par\medskip{\index{case-returned-via}
|
||||
\hbox to \linewidth{\ttchars{{\ttt{(case-returned-via \synvar{key} \synvar{clause} \ldots)}} \hfill syntax}}}%
|
||||
\defsyn{case-returned-via}{\synvar{key} \synvar{clause} \ldots}
|
||||
% This said:
|
||||
% (case-returned-via \synvar{key} \synvar{clause} \ldots) syntax
|
||||
%\defvar{(case-returned-via \synvar{key} \synvar{clause} \ldots)}{syntax}
|
||||
|
@ -1472,3 +1520,145 @@ Replacing the \ex{main} procedure with the following definition will
|
|||
\end{alltt}
|
||||
|
||||
|
||||
\subsection{Outdater}
|
||||
|
||||
The \surflets library allows the user to navigate through the web
|
||||
pages back and forth as she sees fit. However, sometimes you want
|
||||
to make sure, that a submission is done only once. For this, the
|
||||
\surflets provide \ex{outdater} objects that take care of this.
|
||||
|
||||
\defun{make-outdater}{}{outdater}
|
||||
\begin{desc}
|
||||
Creates an outdater object.
|
||||
\end{desc}
|
||||
|
||||
\defsyn{if-outdated}{\synvar{outdater} \synvar{consequence}
|
||||
\synvar{alternative}}
|
||||
\begin{desc}
|
||||
Using the \synvar{outdater}, this makes sure, the
|
||||
\synvar{alternative} is executed at most once, \ie the first time
|
||||
the \synvar{outdater} is used in such a form, the
|
||||
\synvar{alternative} is evaluated. Every subsequent evaluation of
|
||||
the \ex{if-outdated} form with the \synvar{outdater} will evaluate
|
||||
the \synvar{consequence}, usually something similar to what
|
||||
\ex{show-outdated} does.
|
||||
\end{desc}
|
||||
|
||||
\defun{show-outdated}{url}{\noreturn}
|
||||
\begin{desc}
|
||||
Emits a regular web page to the client informing the user (in
|
||||
English) that ``the page or action you requested relies on outdated
|
||||
data''. It offers a ``reload'' link that points to \var{url} to get
|
||||
current data. Usually, \var{url} is a callback URL the calls the
|
||||
according procedure. See the admin \surlets for examples, \eg
|
||||
\ex{scheme/web-server/root/surlfets/admin-surflet.scm}.
|
||||
\end{desc}
|
||||
|
||||
|
||||
\subsection{Simple SUrflets}
|
||||
|
||||
PLT offers an API to create simple servlets (which are their analogues
|
||||
to our \surflets). The \exi{simple-surflet-api} structure offers
|
||||
the procedures with the same name as in the PLT API. With that,
|
||||
\surflets can look as simple as this
|
||||
(\ex{scheme/web-server/root/surlfets/add-simple.scm, see also
|
||||
\ex{simple-surflet.scm} in the same directory for a larger example}:
|
||||
|
||||
\begin{alltt}
|
||||
(define-structure surflet surflet-interface
|
||||
(open scheme-with-scsh
|
||||
surflets
|
||||
simple-surflet-api
|
||||
)
|
||||
(begin
|
||||
|
||||
(define (main req)
|
||||
(let* ((number-1 (single-query (make-number "First number:")))
|
||||
(number-2 (single-query (make-number "Second number:"))))
|
||||
(inform (format #f "~a + ~a = ~a"
|
||||
number-1
|
||||
number-2
|
||||
(+ number-1 number-2))))
|
||||
(final-page "Session finished."))
|
||||
|
||||
))
|
||||
\end{alltt}
|
||||
|
||||
The procedures are the following.
|
||||
|
||||
\defun{single-query}{query}{any type}
|
||||
\begin{desc}
|
||||
Asks the user one single questions based on \var{query} and returns
|
||||
her answer.
|
||||
\end{desc}
|
||||
|
||||
\defun{queries}{queries}{list}
|
||||
\begin{desc}
|
||||
Asks the user multiple questions based on the list of \var{queries}
|
||||
and returns her answers in a list.
|
||||
\end{desc}
|
||||
|
||||
\defun{form-query}{named-queries}{list}
|
||||
\begin{desc}
|
||||
Asks the user multiple queries based on the list of
|
||||
\var{named-queries} and returns her answers in a pseudo association
|
||||
list. \var{named-queries} is a list of two element lists. The
|
||||
first element of those lists is a symbol identifying the query, the
|
||||
second is the query. The resulting pseudo association list contains
|
||||
two element lists, where the first element is the symbol and the
|
||||
second element the user's answer to the query. The result can be
|
||||
read using the \ex{extract/single} and \ex{extract} procedures.
|
||||
\end{desc}
|
||||
|
||||
\defun{inform}{title [text \ldots]}{surflet-request}
|
||||
\begin{desc}
|
||||
Sends a web page title \var{title} with the \var{text} to the user
|
||||
as an information. The returned \ex{surflet-request} is usually
|
||||
discarded. Takes at least one argument.
|
||||
\end{desc}
|
||||
|
||||
\defun{final-page}{title [text \ldots]}{\noreturn}
|
||||
\begin{desc}
|
||||
This sends the last page of the session to the user, titled
|
||||
\var{title} and containing \var{text}. This is the analog to
|
||||
\ex{send/finish}. Takes at least one argument.
|
||||
\end{desc}
|
||||
|
||||
\defun{make-text}{invitation}{query}
|
||||
\defun{make-number}{invitation}{query}
|
||||
\defun{make-password}{text}{query}
|
||||
\defun{make-boolean}{invitation}{query}
|
||||
\defun{make-radio}{invitation choices}{query}
|
||||
\defun{make-yes-no}{invitation yes-text no-text}{query}
|
||||
\begin{desc}
|
||||
These create the various queries. \var{invitation} is a text
|
||||
displayed in front of the input field, \eg ``Please enter your
|
||||
password:''. \ex{make-text} creates a text input field,
|
||||
\ex{make-number} creates a number input field (\ie a text input field
|
||||
that only accepts numbers as inputs), \ex{make-password} creates a
|
||||
password input field, \ex{make-boolean} creates a checkbox,
|
||||
\ex{make-radio} creates a group of radio buttons of which only one
|
||||
can be selected and \ex{make-yes-no} creates a radio group that
|
||||
allows the choices \var{yes-text} and \var{no-text}.
|
||||
|
||||
The value of \ex{make-text}, \ex{make-number} and \ex{make-password}
|
||||
is the text or number entered into the input field. The value of
|
||||
\ex{make-boolean} is \sharpt or \sharpf. The value of
|
||||
\ex{make-radio} and \ex{make-yes-no} is the selected choice, a
|
||||
string.
|
||||
\end{desc}
|
||||
|
||||
\defun{extract/single}{symbol table}{any value}
|
||||
\defunx{extract}{symbol table}{list}
|
||||
\begin{desc}
|
||||
Return the answer of a user to a query. \var{table} is the result
|
||||
of \ex{form-query}, \var{symbol} the symbol used to identify the
|
||||
query of interest. For \ex{extract/single}, it is an error if there
|
||||
is more than one query in \var{table} that is identified by
|
||||
\var{symbol}.
|
||||
\end{desc}
|
||||
|
||||
% shift-reset
|
||||
% profiling
|
||||
% handle-fatal
|
||||
% thread safe counter
|
||||
|
|
Loading…
Reference in New Issue