! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs furnace.actions furnace.boilerplate furnace.redirection help.html help.topics html.components html.forms http.server http.server.dispatchers http.server.static io.directories io.files.temp io.servers kernel namespaces sequences splitting unicode urls ; IN: webapps.help TUPLE: help-webapp < dispatcher ; : fixup-words ( title href -- title' href' ) dup "word-" head? [ dup ".html" ?tail drop "," split1-last nip dup ":" append '[ " (" _ 3append ")" append _ ?head drop ] dip ] when ; : links ( apropos -- seq ) [ swap fixup-words ] { } assoc>map ; : ?links ( has-links? apropos -- has-links? seq/f ) links [ f ] [ nip t swap ] if-empty ; :: ( help-dir -- action ) { help-webapp "search" } >>template [ f "search" param [ unicode:blank? ] trim dup "search" set-value [ help-dir [ [ article-apropos ?links "articles" set-value ] [ word-apropos ?links "words" set-value ] [ vocab-apropos ?links "vocabs" set-value ] tri ] with-directory ] unless-empty not "empty" set-value help-nav "nav" set-value { help-webapp "search" } ] >>display { help-webapp "help" } >>template ; : help-url ( topic -- url ) topic>filename "$help-webapp/content/" prepend >url ; : ( -- action ) [ "handbook" >link help-url ] >>display ; :: ( help-dir -- webapp ) help-webapp new-dispatcher "" add-responder help-dir "search" add-responder help-dir "content" add-responder ; : run-help-webapp ( -- ) "docs" cache-file main-responder set-global 8080 httpd wait-for-server ; MAIN: run-help-webapp