Prepare for SUrflet API documentation.
This commit is contained in:
parent
bfb4068c9a
commit
c1b264b9b1
|
@ -20,13 +20,16 @@
|
|||
%%tableofcontents
|
||||
%%sloppy
|
||||
|
||||
\section{Introduction}
|
||||
\section{Howto}
|
||||
\label{sec:surflethowto}
|
||||
|
||||
This howto gives a short introduction in how to write a \surflet. It
|
||||
is concentrated on the practical side rather on describing the
|
||||
\surflet API in detail to give you instant succes in running your own
|
||||
surflets. The \surflet API will be described in the SUnet
|
||||
documentation eventually.
|
||||
surflets. See section \ref{sec:surflet-api} for the (technical) API
|
||||
description.
|
||||
|
||||
\subsection{Introduction}
|
||||
%\marginpar{\surflets are pieces of code for web site scripting.}
|
||||
For those who don't know it already, \surflets are pieces of code that
|
||||
can be executed interactively through a website. There is a \surflet
|
||||
|
@ -55,7 +58,7 @@ of the SUnet webserver and scsh. The environment variable
|
|||
\typew{\$sunet} refers to the top level directory of your sunet
|
||||
installation. On my system this is \name{/home/andreas/sw/sunet}.
|
||||
|
||||
\section{How to run the SUnet webserver that handles \surflets}
|
||||
\subsection{How to run the SUnet webserver that handles \surflets}
|
||||
|
||||
The following sections will show pieces of \surflet code you might
|
||||
want to try out. Therefore you need the SUnet webserver running with
|
||||
|
@ -160,12 +163,12 @@ The \typew{--help} option will show you more parameters that you can
|
|||
adjust, but you won't need them for this howto.
|
||||
|
||||
|
||||
\section{How to send web pages}
|
||||
\subsection{How to send web pages}
|
||||
|
||||
This section will discuss some of the various ways in which you can
|
||||
send a web page to a browser that contacted your \surflet.
|
||||
|
||||
\subsection{My first \surflet}
|
||||
\subsubsection{My first \surflet}
|
||||
\label{sec:first-surflet}
|
||||
|
||||
Traditionally, your first program in any programming language prints
|
||||
|
@ -300,7 +303,7 @@ strings. Everything else like using valid HTML tags or valid
|
|||
attributes is your responsibility.
|
||||
|
||||
|
||||
\subsection{Dynamic content}
|
||||
\subsubsection{Dynamic content}
|
||||
|
||||
Let's extend our first \surflet example by some dynamic content, \eg
|
||||
by displaying the current time using scsh's \name{format-date}
|
||||
|
@ -348,7 +351,7 @@ unquote feature. Of course, you can build your list in any way you
|
|||
want; the quasiquote notation is just a convenient way to do it.
|
||||
|
||||
|
||||
\subsection{Several web pages in a row}
|
||||
\subsubsection{Several web pages in a row}
|
||||
|
||||
The previous example \surflets only showed one page and finished
|
||||
afterwards. Here, we want to present to web pages in a row. We use
|
||||
|
@ -400,11 +403,11 @@ variables keep their modified values, allowing communication between
|
|||
sessions of the same \surflet.\footnote{If you want to change a
|
||||
variable via side effects but you don't want to interfere with other
|
||||
session, you can use \name{set-session-data!} and
|
||||
\name{get-session-data}. See the API documentation for further
|
||||
information.}
|
||||
\name{get-session-data}. See the API documentation in section
|
||||
\ref{sec:surflet-api}for further information.}
|
||||
|
||||
|
||||
\subsection{Begin and end of sessions}
|
||||
\subsubsection{Begin and end of sessions}
|
||||
|
||||
So far I don't have mentioned too much details about sessions. The
|
||||
reason is, as mentioned before, that the \surflet handler takes of the
|
||||
|
@ -431,7 +434,7 @@ sending function is \name{send-html} which just sends a web page.
|
|||
\name{send-html} does not return and does not touch the session of
|
||||
your \surflet instance.
|
||||
|
||||
\subsection{Abbreviations in SXML}
|
||||
\subsubsection{Abbreviations in SXML}
|
||||
\label{sxml-abbrvs}
|
||||
|
||||
The example in subsection ``Several web pages in a row'' wrote down
|
||||
|
@ -456,14 +459,14 @@ The last abbreviation, \name{surflet-form}, is discussed in the next
|
|||
section.
|
||||
|
||||
|
||||
\section{How to write web forms}
|
||||
\subsection{How to write web forms}
|
||||
|
||||
The \surflets come along with a libary for easy user interaction. The
|
||||
following subsections will show how to write web forms and how to get
|
||||
the data the user has entered.
|
||||
|
||||
|
||||
\subsection{Simple web forms}
|
||||
\subsubsection{Simple web forms}
|
||||
|
||||
Let's write a \surflet that reads user input and prints it out on the
|
||||
next page:
|
||||
|
@ -605,9 +608,9 @@ user data with \name{input-field-value}.
|
|||
\end{itemize}
|
||||
|
||||
The complete list of functions that create \name{input-fields} can be
|
||||
found in the API.
|
||||
found in the API in section \ref{sec:surflet-api}.
|
||||
|
||||
\subsection{Return types other than strings}
|
||||
\subsubsection{Return types other than strings}
|
||||
\label{subsec:input-return}
|
||||
|
||||
As the user interaction elements are first class values in a \surflet,
|
||||
|
@ -680,7 +683,7 @@ the user's input, we will get the associated price for the sweet.
|
|||
Again, this works not only with numbers, but with any arbitrary Scheme
|
||||
value (\eg functions or records).
|
||||
|
||||
\subsection{Sending error messages}
|
||||
\subsubsection{Sending error messages}
|
||||
|
||||
If a user tries to forge a \surflet-URL (\eg by extracting the
|
||||
continuation URL from the HTML source and editing it), your \surflet
|
||||
|
@ -783,14 +786,15 @@ does not appear in the data the browser sends to the server. Thus,
|
|||
raise an error which is not a ``real'' error as you migh expect it.
|
||||
|
||||
|
||||
\subsection{Your own input fields}
|
||||
\subsubsection{Your own input fields}
|
||||
|
||||
The \surflet library contains constructors for all input fields that
|
||||
are described in the HTML~2.0 standard. See the \surflet API for a
|
||||
complete list. The \surflet library also allows you to create your
|
||||
own input fields, \eg an input field that only accepts valid dates as
|
||||
its input. This subsection gives you a short overview how to do
|
||||
this. You will find the details in the \surflet API.
|
||||
are described in the HTML~2.0 standard. See the \surflet API in
|
||||
section \ref{sec:surflet-api} for a complete list. The \surflet
|
||||
library also allows you to create your own input fields, \eg an input
|
||||
field that only accepts valid dates as its input. This subsection
|
||||
gives you a short overview how to do this. You will find the details
|
||||
in the \surflet API.
|
||||
|
||||
Let's have a look at an \surflet that uses its own input field. The
|
||||
``input field'', called nibble input field, consists of eight check
|
||||
|
@ -923,7 +927,7 @@ again. We create, use and evaluate the nibble input field as we do
|
|||
with every other input field.
|
||||
|
||||
|
||||
\section{Program flow control}
|
||||
\subsection{Program flow control}
|
||||
|
||||
With the techniques shown so far it is rather difficult to create a
|
||||
web page that has several different successor webpages rather than
|
||||
|
@ -934,7 +938,7 @@ the mark after \name{send-html/suspend} has returned. The other
|
|||
method is to bind a callback function to each link that is called when
|
||||
the user selects the link. This section shows both methods.
|
||||
|
||||
\subsection{Dispatching to more than one successor web page}
|
||||
\subsubsection{Dispatching to more than one successor web page}
|
||||
|
||||
The basic idea of dispatching is to add a mark to a link and evaluate
|
||||
it after the user has clicked on a link and \name{send-html/suspend}
|
||||
|
@ -1037,7 +1041,7 @@ shortly. Of course, it is your choice if you want to use
|
|||
\name{case-returned-via} or explicitly \name{returned-via}.
|
||||
|
||||
|
||||
\subsection{Annotated dispatching}
|
||||
\subsubsection{Annotated dispatching}
|
||||
|
||||
The approach shown in the previous subsection has one major drawback:
|
||||
the meaning of an address becomes clear only when you look at the
|
||||
|
@ -1127,7 +1131,7 @@ via which the user has left the web page. \name{returned-via} returns
|
|||
created with this address (which is not really possible in this
|
||||
example).
|
||||
|
||||
\subsection{Callbacks}
|
||||
\subsubsection{Callbacks}
|
||||
|
||||
The other method to lead to different successor web pages is using
|
||||
callbacks. A callback is a function that is called if the user leaves
|
||||
|
@ -1212,7 +1216,7 @@ calling a function with several arguments and of different amount each
|
|||
time is also possible if you only use a single function for the
|
||||
callback.
|
||||
|
||||
\section{Data management}
|
||||
\subsection{Data management}
|
||||
|
||||
When you write web programs, there are usually two kinds of data that
|
||||
you use: data that is local to each instance of a \surflet, \eg the
|
||||
|
@ -1341,13 +1345,13 @@ endless states of the \surflet.
|
|||
\name{cancel} shows the final page with the amount of clicks
|
||||
performed.
|
||||
|
||||
\section{My own SXML}
|
||||
\subsection{My own SXML}
|
||||
|
||||
Section \ref{sec:SXML} introduced SXML, the way how \surflets
|
||||
represent HTML. This section will show you, how you can create your
|
||||
own rules to translate from SXML to HTML.
|
||||
|
||||
\subsection{Terms and theoretical background}
|
||||
\subsubsection{Terms and theoretical background}
|
||||
|
||||
This subsection will introduce the main concepts of the translation
|
||||
process and some necessary terms we will use in the following.
|
||||
|
@ -1401,7 +1405,7 @@ standard conversion rule set the text conversion rule performs HTML
|
|||
escaping, \eg for the ampersand (\&).
|
||||
|
||||
|
||||
\section{Outlook}
|
||||
\subsubsection{Outlook}
|
||||
|
||||
More to come soon about \surflets consisting of different parts and
|
||||
individual SXML.
|
||||
|
|
|
@ -3,9 +3,12 @@
|
|||
\newcommand{\typew}[1]{\texttt{#1}}
|
||||
|
||||
The \surflet server enables you to write server side scripted web
|
||||
programs in Scheme. Currently, there is only the howto available.
|
||||
The complete API is supposed to come soon. There are lot of example
|
||||
files in \typew{httpd/surflet/webserver/root/surflets} from which you
|
||||
programs in Scheme.
|
||||
%Currently, there is only the howto available.
|
||||
%The complete API is supposed to come soon.
|
||||
There are lot of example files in
|
||||
\typew{scheme/httpd/surflet/webserver/root/surflets} from which you
|
||||
can copy freely.
|
||||
|
||||
\input{surflethowto}
|
||||
\input{surfletapi}
|
||||
|
|
Loading…
Reference in New Issue