@code{(require 'db->html)} @ftindex db->html @defun html:table options row @dots{} @end defun @defun html:caption caption align @defunx html:caption caption @var{align} can be @samp{top} or @samp{bottom}. @end defun @defun html:heading columns Outputs a heading row for the currently-started table. @end defun @defun html:href-heading columns uris Outputs a heading row with column-names @var{columns} linked to URIs @var{uris}. @end defun @defun html:linked-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{html:linked-row-converter} returns a procedure taking a row for its single argument. This returned procedure returns the html string for that table row. @end defun @defun table-name->filename table-name Returns the symbol @var{table-name} converted to a filename. @end defun @defun table->linked-html caption db table-name match-key1 @dots{} Returns HTML string for @var{db} table @var{table-name} chopped into 50-row HTML tables. Every foreign-key value is linked to the page (of the table) defining that key. The optional @var{match-key1} @dots{} arguments restrict actions to a subset of the table. @xref{Table Operations, match-key}. @end defun @defun table->linked-page db table-name index-filename arg @dots{} Returns a complete HTML page. The string @var{index-filename} names the page which refers to this one. The optional @var{args} @dots{} arguments restrict actions to a subset of the table. @xref{Table Operations, match-key}. @end defun @defun catalog->html db caption arg @dots{} Returns HTML string for the catalog table of @var{db}. @end defun @subsection HTML editing tables @noindent A client can modify one row of an editable table at a time. For any change submitted, these routines check if that row has been modified during the time the user has been editing the form. If so, an error page results. @noindent The behavior of edited rows is: @itemize @bullet @item If no fields are changed, then no change is made to the table. @item If the primary keys equal null-keys (parameter defaults), and no other user has modified that row, then that row is deleted. @item If only primary keys are changed, there are non-key fields, and no row with the new keys is in the table, then the old row is deleted and one with the new keys is inserted. @item If only non-key fields are changed, and that row has not been modified by another user, then the row is changed to reflect the fields. @item If both keys and non-key fields are changed, and no row with the new keys is in the table, then a row is created with the new keys and fields. @item If fields are changed, all fields are primary keys, and no row with the new keys is in the table, then a row is created with the new keys. @end itemize @noindent After any change to the table, a @code{sync-database} of the database is performed. @defun command:modify-table table-name null-keys update delete retrieve @defunx command:modify-table table-name null-keys update delete @defunx command:modify-table table-name null-keys update @defunx command:modify-table table-name null-keys Returns procedure (of @var{db}) which returns procedure to modify row of @var{table-name}. @var{null-keys} is the list of @dfn{null} keys indicating the row is @cindex null to be deleted when any matches its corresponding primary key. Optional arguments @var{update}, @var{delete}, and @var{retrieve} default to the @code{row:update}, @code{row:delete}, and @code{row:retrieve} of @var{table-name} in @var{db}. @end defun @defun command:make-editable-table rdb table-name arg @dots{} Given @var{table-name} in @var{rdb}, creates parameter and @code{*command*} tables for editing one row of @var{table-name} at a time. @code{command:make-editable-table} returns a procedure taking a row argument which returns the HTML string for editing that row. Optional @var{args} are expressions (lists) added to the call to @code{command:modify-table}. The domain name of a column determines the expected arity of the data stored in that column. Domain names ending in: @table @samp @item * have arity @samp{nary}; @item + have arity @samp{nary1}. @end table @end defun @defun html:editable-row-converter k names edit-point edit-converter The positive integer @var{k} is the primary-key-limit (number of primary-keys) of the table. @var{names} is a list of the field-names. @var{edit-point} is the list of primary-keys denoting the row to edit (or #f). @var{edit-converter} is the procedure called with @var{k}, @var{names}, and the row to edit. @code{html:editable-row-converter} returns a procedure taking a row for its single argument. This returned procedure returns the html string for that table row. Each HTML table constructed using @code{html:editable-row-converter} has first @var{k} fields (typically the primary key fields) of each row linked to a text encoding of these fields (the result of calling @code{row->anchor}). The page so referenced typically allows the user to edit fields of that row. @end defun @subsection HTML databases @defun db->html-files db dir index-filename caption @var{db} must be a relational database. @var{dir} must be #f or a non-empty string naming an existing sub-directory of the current directory. @code{db->html-files} creates an html page for each table in the database @var{db} in the sub-directory named @var{dir}, or the current directory if @var{dir} is #f. The top level page with the catalog of tables (captioned @var{caption}) is written to a file named @var{index-filename}. @end defun @defun db->html-directory db dir index-filename @defunx db->html-directory db dir @var{db} must be a relational database. @var{dir} must be a non-empty string naming an existing sub-directory of the current directory or one to be created. The optional string @var{index-filename} names the filename of the top page, which defaults to @file{index.html}. @code{db->html-directory} creates sub-directory @var{dir} if neccessary, and calls @code{(db->html-files @var{db} @var{dir} @var{index-filename} @var{dir})}. The @samp{file:} URI of @var{index-filename} is returned. @end defun @defun db->netscape db dir index-filename @defunx db->netscape db dir @code{db->netscape} is just like @code{db->html-directory}, but calls @code{browse-url} with the uri for the top page after the pages are created. @end defun