(Arne Babenhauserheide)
2013-11-24: turned the hello-world server into a mockup for a generic comment- turned the hello-world server into a mockup for a generic comment-serving service.
diff --git a/examples/hello-world-server.w b/examples/hello-world-server.w
--- a/examples/hello-world-server.w
+++ b/examples/hello-world-server.w
@@ -1,10 +1,21 @@
#!./wisp-multiline.sh
; !#
+use-modules
+ web server
+ web request
+ web response
+ web uri
+ rnrs unicode
+ rnrs bytevectors ; for utf8->string
+
; first the plain text header
define : header
' : content-type . : text/plain
+define : header-html
+ ' : content-type . : text/html
+
; now content building functions
define : timestring
string-join
@@ -34,12 +45,51 @@ define : hello-world-handler request req
header
content
-; finally run the webserver
-use-modules : web server
+define : show-comments request comments-hash-table
+ let*
+ : path : uri-path : request-uri request
+ uri-components : split-and-decode-uri-path path
+ string-join
+ list "<!DOCTYPE html><html><head><title>Comments</title></head><body><form action='" path "' method='post'>
+ <input type='text' name='comment' />
+ <input type='submit' name='submit' value='Save' />
+</form>"
+ hash-ref comments-hash-table uri-components
+ string-join uri-components
+ . "</body></html>\n"
+
+define : change-comment-content current to-add
+ if current
+ string-join : list "<div class='comment'>" to-add "</div><div class='commentsep'></div>" current
+ string-join : list "<div class='comment'>" to-add "</div>"
+
+define : body->comment request-body
+ let : : request-string : utf8->string request-body
+ substring request-string
+ string-length "comment="
+ string-index request-string #\& ; FIXME: This will break for comments with &. Ignore that: This is just a mockup.
+
+define : add-comment request request-body comments-hash-table
+ let : : uri-components : split-and-decode-uri-path : uri-path : request-uri request
+ hash-set! comments-hash-table uri-components
+ change-comment-content
+ hash-ref comments-hash-table uri-components
+ body->comment request-body
+ show-comments request comments-hash-table
+
+
+define global-comment-hash-table : make-hash-table
+
+define : uri-comment-showing-handler request request-body
+ values
+ header-html
+ if request-body
+ add-comment request request-body global-comment-hash-table
+ show-comments request global-comment-hash-table
display "Server starting. Test it at http://127.0.0.1:8081"
newline
-run-server hello-world-handler 'http ' : #:port 8081
+; run-server hello-world-handler 'http ' : #:port 8081
-
+run-server uri-comment-showing-handler 'http ' : #:port 8081