WiLiKi/マクロ/comment
1行コメントマクロの習作
- なかなか思い通りのものが作れない
- いちおう動くようになった。
- wiliki.scm の中が簡単にいじれるといいんだが...
使用方法
1行コメントをつけたいページに下記のように書く。
[[$comment]]
一度書き込むと、下記のように展開される。
- [[$$comment XXXX-XXXXXXXXX]]
コメント
毎日コメントSPAMを書かれてさすがにうざいので、デモ用のコメント欄は消しました。 下記のソースを元に自分で試してみてください。
ソース
; ; WiLiKi comment macro by zu ; (use gauche.regexp) (select-module wiliki.macro) (define (cmd-comment arg) `((form (@ (method POST) (action "index.cgi")) (br) (input (@ (type hidden) (name c) (value comment))) (input (@ (type hidden) (name id) (value ,arg))) (input (@ (type hidden) (name p) (value ,(ref (wiliki:current-page) 'key)))) (input (@ (type hidden) (name l) (value ,(wiliki:lang)))) (input (@ (type hidden) (name mtime) (value ,(ref (wiliki:current-p age) 'mtime)))) (input (@ (type text) (name user)(size 10))) (input (@ (type text) (name comment)(size 50))) (br) (input (@ (type submit) (name submit) (value submit))) )) ) (define (cmd-comment-init) `(,(format "- [[$$comment ~s-~d]]" (gensym) (sys-time))) ) (define-reader-macro (comment arg) (cmd-comment arg)) (define-writer-macro (comment) (cmd-comment-init)) (select-module wiliki) (define-method wiliki-main ((self)) (cgi-main (lambda (param) (let ((pagename (get-page-name self param)) (command (cgi-get-parameter "c" param)) (language (cgi-get-parameter "l" param :convert string->symbol))) (parameterize ((wiliki self) (lang (or language (language-of self)))) (cgi-output-character-encoding (output-charset)) (textdomain (lang)) (cond ;; command may #t if we're looking at the page named "c". ((or (not command) (eq? command #t)) (with-db (cut cmd-view pagename))) ((equal? command "lv") (with-db (cut cmd-lwp-view pagename))) ((equal? command "e") (with-db (cut cmd-edit pagename))) ((equal? command "a") (with-db cmd-all)) ((equal? command "r") (with-db cmd-recent-changes)) ((equal? command "h") (with-db (cut cmd-history pagename))) ((equal? command "hd") (with-db (cut cmd-diff pagename (cgi-get-parameter "t" param :convert x->integer :default 0) (cgi-get-parameter "t1" param :convert x->integer :default 0)))) ((equal? command "hv") (with-db (cut cmd-viewold pagename (cgi-get-parameter "t" param :convert x->integer :default 0)))) ((equal? command "s") (with-db (cut cmd-search (cgi-get-parameter "key" param :convert cv-in)))) ((equal? command "c") (with-db (cut (if (cgi-get-parameter "commit" param :default #f) cmd-commit-edit cmd-preview) pagename (cgi-get-parameter "content" param :convert cv-in) (cgi-get-parameter "mtime" param :convert x->integer :default 0) (cgi-get-parameter "logmsg" param :convert cv-in) (cgi-get-parameter "donttouch" param :default #f)) :write)) ((equal? command "comment") (if (or (string=? (cgi-get-parameter "id" param :default "") "") (string=? (cgi-get-parameter "comment" param :default "") "")) (with-db (cut cmd-view pagename)) (with-db (cut cmd-commit-edit pagename (let* ((page (ref (wiliki-db-get pagename #f) 'content)) (user (cgi-get-parameter "user" param :convert cv-i n)) (comment (cgi-get-parameter "comment" param :convert c v-in)) (id (cgi-get-parameter "id" param :convert cv-in)) (form (regexp-quote (format "- [[$$comment ~a]]" id)))) (regexp-replace (string->regexp form) page (format "- ~a [~a](./?.md) ~a\r\n\\0" comment user (wiliki:format-time (sys-time))))) (cgi-get-parameter "mtime" param :convert x->integer :default 0) "" #f) :write))) ((equal? command "rss") (with-db (cut rss-page (db)))) )))) :merge-cookies #t :on-error error-page))
[[$$include WiLiKi/マクロ]]