From 88c59b16399eccb08d63a6f35a3f63233ae4de12 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Tue, 23 Sep 2008 03:35:09 -0500 Subject: [PATCH] New webapps.calculator demo --- extra/webapps/calculator/calculator.factor | 44 ++++++++++++++++++++++ extra/webapps/calculator/calculator.xml | 28 ++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 extra/webapps/calculator/calculator.factor create mode 100644 extra/webapps/calculator/calculator.xml diff --git a/extra/webapps/calculator/calculator.factor b/extra/webapps/calculator/calculator.factor new file mode 100644 index 0000000000..f1416fb02d --- /dev/null +++ b/extra/webapps/calculator/calculator.factor @@ -0,0 +1,44 @@ +! Copyright (C) 2008 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: furnace.actions furnace.redirection +http.server.dispatchers html.forms validators urls accessors +math ; +IN: webapps.calculator + +TUPLE: calculator < dispatcher ; + +: <calculator-action> ( -- action ) + <page-action> + + [ + { { "z" [ [ v-number ] v-optional ] } } validate-params + ] >>init + + { calculator "calculator" } >>template + + [ + { + { "x" [ v-number ] } + { "y" [ v-number ] } + } validate-params + + URL" $calculator" "x" value "y" value + "z" set-query-param + <redirect> + ] >>submit ; + +: <calculator> ( -- responder ) + calculator new-dispatcher + <calculator-action> >>default ; + +! Deployment example +USING: db.sqlite furnace.alloy namespaces http.server ; + +: calculator-db ( -- params db ) "calculator.db" sqlite-db ; + +: run-calculator ( -- ) + <calculator> + calculator-db <alloy> + main-responder set-global + 8080 httpd ; + +MAIN: run-calculator diff --git a/extra/webapps/calculator/calculator.xml b/extra/webapps/calculator/calculator.xml new file mode 100644 index 0000000000..ed8e60d89a --- /dev/null +++ b/extra/webapps/calculator/calculator.xml @@ -0,0 +1,28 @@ +<?xml version='1.0' ?> + +<t:chloe xmlns:t="http://factorcode.org/chloe/1.0"> + + <head> <title>Calculator</title> </head> + + <body> + <h1>Calculator</h1> + + <t:form t:action="$calculator"> + + <table> + <tr><td>First value:</td><td> <t:field t:name="x" /> </td></tr> + <tr><td>Second value:</td><td> <t:field t:name="y" /> </td></tr> + </table> + + <input type="SUBMIT" value="Compute" /> + + <t:if t:value="z"> + <br/> + + Result: <t:label t:name="z" /> + </t:if> + + </t:form> + </body> + +</t:chloe>