! Copyright (C) 2004 Chris Double. ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met: ! ! 1. Redistributions of source code must retain the above copyright notice, ! this list of conditions and the following disclaimer. ! ! 2. Redistributions in binary form must reproduce the above copyright notice, ! this list of conditions and the following disclaimer in the documentation ! and/or other materials provided with the distribution. ! ! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, ! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND ! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR ! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ! ! A Smalltalk-like browser that runs in the httpd server using ! cont-responder facilities. ! IN: browser-responder USING: html cont-responder kernel io namespaces words lists prettyprint memory sequences ; : option ( current text -- ) #! Output the HTML option tag for the given text. If #! it is equal to the current string, make the option selected. 2dup = [ "\n" write drop ; : vocab-list ( vocab -- ) #! Write out the HTML for the list of vocabularies. Make the currently #! selected vocab be 'vocab'. ; : word-list ( vocab word -- ) #! Write out the HTML for the list of words in a vocabulary. Make the 'word' item #! the currently selected option. ; : word-source ( vocab word -- ) #! Write the source for the given word from the vocab as HTML. swap lookup [ [ see ] with-simple-html-output ] when* ; : vm-statistics ( -- ) #! Display statistics about the vm.
 room. 
; : browser-body ( vocab word -- ) #! Write out the HTML for the body of the main browser page.
"Vocabularies" write "Words" write "Source" write
over vocab-list 2dup word-list word-source
vm-statistics ; : browser-title ( vocab word -- ) #! Output the HTML title for the browser. "Factor Browser - " write swap write " - " write write ; : browser-style ( -- ) #! Stylesheet for browser pages ; : browse ( vocab word -- ) #! Display a Smalltalk like browser for exploring words. [ 2dup browser-title browser-style
browser-body
] show-final ; : browser-responder ( -- ) #! Start the Smalltalk-like browser. "query" get [ [ "vocab" swap assoc ] keep "word" swap assoc ] [ "browser-responder" "browse" ] ifte* browse ;