[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[kahua-dev:01238] css ファイルを任意のタイミングで生成して静的書き出し
こんばんは柴田です.
- CSSレンダリングインタプリタ
- サーバ起動直後に実行するフック
- レンダリング結果の静的書き出し機能
を追加しました.
** CSSレンダリングインタプリタ
`((css
(h1 :class aa h2 :id bb h3 #\, h4 > h5 h6
(text-align left !important)
(color "#29661"))
(:id aaa
(color "#29661"))
(:class aaa
(color "#29661"))))
上のようなノード作れば
"""
h1.aa h2#bb h3 , h4 > h5 h6{
text-align:left !important;
color:#29661;
}
#aaa{
color:#29661;
}
.aaa{
color:#29661;
}
"""
が生成されてブラウザへ送られます.
** サーバ起動時に実行するフック
(kahua-add-hook! 'initial thunk)
と書く事で,サーバ起動直後にthunkが呼ばれます.
thunkはDBがアクティブな状態で呼ばれるので,永続オブジェクトを参照するような
コードも登録できます.
** レンダリング結果の静的書き出し機能
(kahua-write-static-file path nodes context)
と書く事で,nodesをcontextに従ってレンダリングした結果をpathへ書き出します.
実際に書き出されるpathは(kahua-static-document-path path)になります.
(kahua-render "test.html"
'((html (body "a"))) '())
とすれば,中身が "<html><body>a</body\n></html\n>" のファイルを
/var/www/kahua/test.html に書き出します.(初期設定でインストールした場合)
以上3つの機能を使うと,永続オブジェクトを使ってCSSを動的に生成してから
その結果を静的ファイルに書き出して利用できます.
{{{
(define (write-status-css)
(kahua-write-static-file #`",(kahua-worker-type)/status.css"
`((css
,@(map
(lambda (status)
`(:class ,(code-of status)
(background-color ,(color-of status))))
(make-kahua-collection <status>))))
()))
(kahua-add-hook! 'initial write-status-css)
}}}
オブジェクトの更新時にwrite-status-cssを呼べば静的ファイルも最新に
保てるし,RSSなんかも静的書き出しにすればパフォーマンスが良くなるかも.