[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なんかも静的書き出しにすればパフォーマンスが良くなるかも.