X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=extra%2Fwebapps%2Fhelp%2Fhelp.factor;h=faa1b11a5a511488b4e58ddcea7e9f836fc8c3fe;hp=6f2c4f004250c303287ad68f5cbc9ae8943e7b83;hb=3db5f47bade7e2b8eb36c0c77398e6c1e10a6e55;hpb=f0552acccebbc97b6a8990ef43ea7e0698e1bc54 diff --git a/extra/webapps/help/help.factor b/extra/webapps/help/help.factor index 6f2c4f0042..faa1b11a5a 100644 --- a/extra/webapps/help/help.factor +++ b/extra/webapps/help/help.factor @@ -1,38 +1,66 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel accessors http.server.dispatchers -http.server.static furnace.actions furnace.redirection urls -validators locals io.files html.forms help.html ; +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 simple-tokenizer 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 ; + +: ?tokenize ( str -- str' ) + [ tokenize ] [ drop 1array ] recover ; + :: ( help-dir -- action ) { help-webapp "search" } >>template - [ - { - { "search" [ 1 v-min-length 50 v-max-length v-one-line ] } - } validate-params - - help-dir [ - "search" value article-apropos "articles" set-value - "search" value word-apropos "words" set-value - "search" value vocab-apropos "vocabs" set-value - ] with-directory + f "search" param [ unicode:blank? ] trim + dup "search" set-value [ + help-dir [ + ?tokenize concat + [ 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" } - ] >>submit ; + ] >>display + + { help-webapp "help" } >>template ; + +: help-url ( topic -- url ) + topic>filename "$help-webapp/content/" prepend >url ; : ( -- action ) - - { help-webapp "help" } >>template ; + + [ "handbook" >link help-url ] >>display ; -: ( help-dir -- webapp ) +:: ( help-dir -- webapp ) help-webapp new-dispatcher - "" add-responder - over "search" add-responder - swap "content" add-responder ; + "" 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