(= *chismakspath* "arc/chismaksball") (ensure-dir *chismakspath*) (= *chismaksmax* (or (most idfn (map [coerce _ 'int] (keep (let rx (re "[0-9]") [re-match rx _]) (dir *chismakspath*)))) 0)) (deftem chismistem parent nil text "" replies nil) (def ch-urlencode (s) (let code [coerce _ 'int 16] (tostring (forlen i s (if (some (s i) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890") (pr (s i)) (is (s i) #\space) (pr "+") (pr "%" (coerce (code:s i) 'string 16))))))) (defmemo chisms (i) (errsafe:temload 'chismistem (file-join *chismakspath* (string i)))) (def chismsupdate (i) (w/outfile p (file-join *chismakspath* (string i)) (write (tablist:chisms i) p))) (mac chismispage (title . body) `(tag (html) (tag (head) (tag (title) (let title ,title (if title (pr title " - ")) (pr "Chismaksball!")))) (tag (body) ,@body))) (defop chismis req (chismispage nil (withs ( chosen (arg req "p") chobj (when chosen (chisms chosen)) ) (tag (div) (w/bars (tag (b) (link "random" "chismaksball")) (awhen (and chobj chobj!parent) (link "parent" (tostring:pr "?p=" (ch-urlencode it)))))) (tag (div) (if chobj (pr:eschtml chobj!text) (prn "chismaks not found!"))) (when chobj (tag (div style "font-size: 60%") (w/bars (w/link (chismispage "sasabat pa..." (tag (div) (w/bars (tag (b) (link "random" "chismaksball")) (link "yoko na sumabat..." (+ "chismis?p=" (ch-urlencode chosen))))) (tag (div) (pr:eschtml chobj!text)) (tag (div style "font-size: 60%; font-style: bold") (pr "Replying: ")) (arform chismissubmit (tag (input type 'hidden name 'parent value chosen) nil) (textarea "ch" 8 42) (br) (submit))) (prn "reply")) (awhen chobj!replies (w/rlink (+ "chismis?p=" (ch-urlencode (random-elt it))) (prn "random reply")))))) (arform chismissubmit (tag (div style "font-size: 60%; font-style: bold") (pr "Bagong chismaks:")) (textarea "ch" 8 42) (br) (submit))))) (def chismissubmit (req) (awhen (arg req "ch") (let num (++ *chismaksmax*) (awhen (arg req "parent") (push (string num) ((chisms it) 'replies)) (chismsupdate it)) (w/outfile p (file-join *chismakspath* (string num)) (write (tablist:inst 'chismistem 'parent (arg req "parent") 'text it) p)))) "chismaksball") (defopr chismaksball req (aif (dir *chismakspath*) (tostring:pr "chismis?p=" (ch-urlencode:random-elt it)) "chismis"))
-----