diff options
Diffstat (limited to 'htmlform.txi')
-rw-r--r-- | htmlform.txi | 343 |
1 files changed, 131 insertions, 212 deletions
diff --git a/htmlform.txi b/htmlform.txi index c16818f..ffa0665 100644 --- a/htmlform.txi +++ b/htmlform.txi @@ -1,162 +1,182 @@ - - - @code{(require 'html-form)} +@ftindex html-form -@defvar *html:output-port* -Procedure names starting with @samp{html:} send their output -to the port @var{*html:output-port*}. @var{*html:output-port*} is initially the current output port. -@end defvar - - -@defun make-atval txt +@defun html:atval txt Returns a string with character substitutions appropriate to send @var{txt} as an @dfn{attribute-value}. @cindex attribute-value @end defun - -@defun make-plain txt +@defun html:plain txt Returns a string with character substitutions appropriate to send @var{txt} as an @dfn{plain-text}. @cindex plain-text @end defun - -@defun html:start-page title backlink @dots{} -Outputs headers for an HTML page named @var{title}. +@defun html:meta name content +Returns a tag of meta-information suitable for passing as the +third argument to @code{html:head}. The tag produced is @samp{<META +NAME="@var{name}" CONTENT="@var{content}">}. The string or symbol @var{name} can be +@samp{author}, @samp{copyright}, @samp{keywords}, @samp{description}, +@samp{date}, @samp{robots}, @dots{}. @end defun - -@defun html:end-page -Outputs HTML codes to end a page. +@defun html:http-equiv name content +Returns a tag of HTTP information suitable for passing as the +third argument to @code{html:head}. The tag produced is @samp{<META +HTTP-EQUIV="@var{name}" CONTENT="@var{content}">}. The string or symbol @var{name} can be +@samp{Expires}, @samp{PICS-Label}, @samp{Content-Type}, +@samp{Refresh}, @dots{}. @end defun +@defun html:meta-refresh delay uri -@defun html:pre line1 line @dots{} -Writes (using @code{html:printf}) the strings @var{line1}, @var{lines} as -@dfn{PRE}formmated plain text (rendered in fixed-width font). -@cindex PRE -Newlines are inserted between @var{line1}, @var{lines}. HTML tags (@samp{<tag>}) -within @var{lines} will be visible verbatim. -@end defun +@defunx html:meta-refresh delay -@defun html:comment line1 line @dots{} -Writes (using @code{html:printf}) the strings @var{line1} as HTML -comments. +Returns a tag suitable for passing as the third argument to +@code{html:head}. If @var{uri} argument is supplied, then @var{delay} seconds after +displaying the page with this tag, Netscape or IE browsers will fetch +and display @var{uri}. Otherwise, @var{delay} seconds after displaying the page with +this tag, Netscape or IE browsers will fetch and redisplay this page. @end defun +@defun html:head title backlink tags @dots{} -@section HTML Tables -@defun html:start-table caption +@defunx html:head title backlink -@end defun - - -@defun html:end-table +@defunx html:head title +Returns header string for an HTML page named @var{title}. If @var{backlink} is a string, +it is used verbatim between the @samp{H1} tags; otherwise @var{title} is +used. If string arguments @var{tags} ... are supplied, then they are +included verbatim within the @t{<HEAD>} section. @end defun - -@defun html:heading columns -Outputs a heading row for the currently-started table. +@defun html:body body @dots{} +Returns HTML string to end a page. @end defun - -@defun html:href-heading columns urls -Outputs a heading row with column-names @var{columns} linked to URLs @var{urls}. +@defun html:pre line1 line @dots{} +Returns the strings @var{line1}, @var{lines} as @dfn{PRE}formmated plain text +@cindex PRE +(rendered in fixed-width font). Newlines are inserted between @var{line1}, +@var{lines}. HTML tags (@samp{<tag>}) within @var{lines} will be visible verbatim. @end defun - -@defun make-row-converter k foreigns - - -The positive integer @var{k} is the primary-key-limit (number of -primary-keys) of the table. @var{foreigns} is a list of the filenames of -foreign-key field pages and #f for non foreign-key fields. - -@code{make-row-converter} returns a procedure taking a row for its single argument. This -returned procedure prints the table row to @var{*html:output-port*}. +@defun html:comment line1 line @dots{} +Returns the strings @var{line1} as HTML comments. @end defun +@section HTML Forms -@defun table-name->filename table-name - -Returns the symbol @var{table-name} converted to a filename. +@defun html:form method action body @dots{} +The symbol @var{method} is either @code{get}, @code{head}, @code{post}, +@code{put}, or @code{delete}. The strings @var{body} form the body of the +form. @code{html:form} returns the HTML @dfn{form}. +@cindex form @end defun - - -@defun table->html caption db table-name match-key1 @dots{} - -Writes HTML for @var{db} table @var{table-name} to @var{*html:output-port*}. - -The optional @var{match-key1} @dots{} arguments restrict actions to a subset of -the table. @xref{Table Operations, match-key}. +@defun html:hidden name value +Returns HTML string which will cause @var{name}=@var{value} in form. @end defun - -@defun table->page db table-name index-filename - -Writes a complete HTML page to @var{*html:output-port*}. The string -@var{index-filename} names the page which refers to this one. +@defun html:checkbox pname default +Returns HTML string for check box. @end defun - -@defun catalog->html db caption - -Writes HTML for the catalog table of @var{db} to @var{*html:output-port*}. +@defun html:text pname default size @dots{} +Returns HTML string for one-line text box. @end defun +@defun html:text-area pname default-list +Returns HTML string for multi-line text box. +@end defun -@defun catalog->page db caption +@defun html:select pname arity default-list foreign-values +Returns HTML string for pull-down menu selector. +@end defun -Writes a complete HTML page for the catalog of @var{db} to -@var{*html:output-port*}. +@defun html:buttons pname arity default-list foreign-values +Returns HTML string for any-of selector. @end defun +@defun form:submit submit-label command -@section HTML Forms +@defunx form:submit submit-label +The string or symbol @var{submit-label} appears on the button which submits the form. +If the optional second argument @var{command} is given, then @code{*command*=@var{command}} +and @code{*button*=@var{submit-label}} are set in the query. Otherwise, +@code{*command*=@var{submit-label}} is set in the query. +@end defun + +@defun form:image submit-label image-src +The @var{image-src} appears on the button which submits the form. +@end defun +@defun form:reset +Returns a string which generates a @dfn{reset} button. +@cindex reset +@end defun +@defun form:element pname arity default-list foreign-values +Returns a string which generates an INPUT element for the field +named @var{pname}. The element appears in the created form with its +representation determined by its @var{arity} and domain. For domains which +are foreign-keys: +@table @code +@item single +select menu +@item optional +select menu +@item nary +check boxes +@item nary1 +check boxes +@end table +If the foreign-key table has a field named @samp{visible-name}, then +the contents of that field are the names visible to the user for +those choices. Otherwise, the foreign-key itself is visible. +For other types of domains: -@defun html:start-form method action -The symbol @var{method} is either @code{get}, @code{head}, @code{post}, -@code{put}, or @code{delete}. @code{html:start-form} prints the header for an HTML -@dfn{form}. -@cindex form +@table @code +@item single +text area +@item optional +text area +@item boolean +check box +@item nary +text area +@item nary1 +text area +@end table @end defun +@defun form:delimited pname doc aliat arity default-list foreign-values -@defun html:end-form pname submit-label -@code{html:end-form} prints the footer for an HTML @dfn{form}. The string @var{submit-label} -@cindex form -appears on the button which submits the form. + +Returns a HTML string for a form element embedded in a line of a +delimited list. Apply map @code{form:delimited} to the list returned by +@code{command->p-specs}. @end defun +@defun command->p-specs rdb command-table command -@defun command->html rdb command-table command method action -The symbol @var{command-table} names a command table in the @var{rdb} relational -database. +The symbol @var{command-table} names a command table in the @var{rdb} relational database. +The symbol @var{command} names a key in @var{command-table}. -@code{command->html} writes an HTML-2.0 @dfn{form} for command @var{command} to the -@cindex form -current-output-port. The @samp{SUBMIT} button, which is labeled @var{command}, -invokes the URI @var{action} with method @var{method} with a hidden attribute -@code{*command*} bound to the command symbol submitted. - -An action may invoke a CGI script -(@samp{http://www.my-site.edu/cgi-bin/search.cgi}) or HTTP daemon -(@samp{http://www.my-site.edu:8001}). +@code{command->p-specs} returns a list of lists of @var{pname}, @var{doc}, @var{aliat}, +@var{arity}, @var{default-list}, and @var{foreign-values}. The +returned list has one element for each parameter of command @var{command}. This example demonstrates how to create a HTML-form for the @samp{build} command. @@ -165,122 +185,21 @@ command. (require (in-vicinity (implementation-vicinity) "build.scm")) (call-with-output-file "buildscm.html" (lambda (port) - (fluid-let ((*html:output-port* port)) - (html:start-page 'commands) - (command->html - build '*commands* 'build 'post - (or "/cgi-bin/build.cgi" - "http://localhost:8081/buildscm")) - html:end-page))) -@end example -@end defun - - - - - - -@c node HTTP and CGI service, Printing Scheme, HTML Forms, Textual Conversion Packages -@section HTTP and CGI service - -@code{(require 'html-form)} - - -@defun cgi:serve-command rdb command-table -Reads a @samp{"POST"} or @samp{"GET"} query from -@code{(current-input-port)} and executes the encoded command from @var{command-table} -in relational-database @var{rdb}. - -This example puts up a plain-text page in response to a CGI query. - -@example -(display "Content-Type: text/plain") (newline) (newline) -(require 'html-form) -(load (in-vicinity (implementation-vicinity) "build.scm")) -(cgi:serve-command build '*commands*) + (display + (string-append + (html:head 'commands) + (html:body + (sprintf #f "<H2>%s:</H2><BLOCKQUOTE>%s</BLOCKQUOTE>\\n" + (html:plain 'build) + (html:plain ((comtab 'get 'documentation) 'build))) + (html:form + 'post + (or "http://localhost:8081/buildscm" "/cgi-bin/build.cgi") + (apply html:delimited-list + (apply map form:delimited + (command->p-specs build '*commands* 'build))) + (form:submit 'build) + (form:reset)))) + port))) @end example @end defun - - -@defun serve-urlencoded-command rdb command-table urlencoded -Reads attribute-value pairs from @var{urlencoded}, converts them to -parameters and invokes the @var{rdb} command named by the parameter -@code{*command*}. -@end defun - - - - - - - - -@defun http:serve-query input-port output-port serve-proc -reads the @dfn{query-string} from @var{input-port}. If this is a valid -@cindex query-string -@samp{"POST"} or @samp{"GET"} query, then @code{http:serve-query} calls @var{serve-proc} with two -arguments, the query-string and the header-alist. - -Otherwise, @code{http:serve-query} replies (to @var{output-port}) with appropriate HTML describing the -problem. -@end defun - - -This example services HTTP queries from port 8081: - -@example -(define socket (make-stream-socket AF_INET 0)) -(socket:bind socket 8081) -(socket:listen socket 10) -(dynamic-wind - (lambda () #f) - (lambda () - (do ((port (socket:accept socket) - (socket:accept socket))) - (#f) - (dynamic-wind - (lambda () #f) - (lambda () - (fluid-let ((*html:output-port* port)) - (http:serve-query - port port - (lambda (query-string header) - (http:send-header - '(("Content-Type" . "text/plain"))) - (with-output-to-port port - (lambda () - (serve-urlencoded-command - build '*commands* query-string))))))) - (lambda () (close-port port))))) - (lambda () (close-port socket))) -@end example - - -@defun http:read-request-line port -Reads the first non-blank line from @var{port} and, if successful, -returns a list of three itmes from the request-line: - -@enumerate 0 - -@item Method - -Either one of the symbols @code{options}, @code{get}, @code{head}, -@code{post}, @code{put}, @code{delete}, or @code{trace}; Or a string. - -@item Request-URI - -A string. At the minimum, it will be the string @samp{"/"}. - -@item HTTP-Version - -A string. For example, @samp{HTTP/1.0}. -@end enumerate -@end defun - - -@defun cgi:read-query-string -Reads the @dfn{query-string} from @code{(current-input-port)}. -@cindex query-string -@code{cgi:read-query-string} reads a @samp{"POST"} or @samp{"GET"} queries, depending on the -value of @code{(getenv "REQUEST_METHOD")}. -@end defun |