! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs db db.sqlite db.postgresql http http.server http.server.dispatchers http.server.responses http.server.static furnace.actions furnace.json io io.files json.writer kernel math.parser namespaces semantic-db sequences strings tangle.path ; IN: tangle GENERIC: render* ( content templater -- output ) GENERIC: render ( content templater -- ) TUPLE: echo-template ; C: echo-template M: echo-template render* drop ; ! METHOD: render* { string echo-template } drop ; M: object render render* write ; TUPLE: tangle db seq templater ; C: tangle : with-tangle ( tangle quot -- ) [ [ db>> ] [ seq>> ] bi ] dip with-db ; : node-response ( id -- response ) load-node [ node-content ] [ <404> ] if* ; : display-node ( params -- response ) [ "node_id" swap at* [ string>number node-response ] [ drop <400> ] if ] [ <400> ] if* ; : submit-node ( params -- response ) [ "node_content" swap at* [ create-node id>> number>string ] [ drop <400> ] if ] [ <400> ] if* ; : ( -- responder ) [ params get display-node ] >>display [ params get submit-node ] >>submit ; TUPLE: path-responder ; C: path-responder M: path-responder call-responder* ( path responder -- response ) drop path>file [ node-content ] [ <404> ] if* ; TUPLE: tangle-dispatcher < dispatcher tangle ; : ( tangle -- dispatcher ) tangle-dispatcher new-dispatcher swap >>tangle >>default "resource:extra/tangle/resources" "resources" add-responder "node" add-responder [ all-node-ids ] >>display "all" add-responder ; M: tangle-dispatcher call-responder* ( path dispatcher -- response ) dup tangle>> [ find-responder call-responder ] with-tangle ;