Hikiハック

30分プログラム、その53。Hikiをちょっとだけ改造しよう。

内輪Wikiで、TODO管理をしていたら、誰かから『sageでやれ』と怒られた。いい機会なので、sageでやりやすいように改造しよう。

  • sage自体は「タイムスタンプを更新する」チェックボックスをはずせばいい
  • 毎回はずすのは面倒
  • そうだ、前回、はずしたかつけたかを記憶させておけばいいんだ

で、この辺の処理はhiki/command.rbでおこなわれているので、そのあたりを読んでみると

  • cmd_saveで、データを書きこんだあと、dbにキーワードやタイトルなどの属性を保存している
  • cmd_viewで、data[:update_timestamp]に' checked'が代入される

なので、保存時にチェックボックスの値を保存して、表示するときにそれに従ってチェックボックスを設定するように変更。

Index: hiki/command.rb
===================================================================
--- hiki/command.rb	(リビジョン 5)
+++ hiki/command.rb	(作業コピー)
@@ -320,7 +320,7 @@
       data[:differ]         = differ
       data[:body]        = preview_text ? formatter.apply_tdiary_theme(preview_text) :  nil
       data[:keyword]        ||= CGI.escapeHTML( @db.get_attribute(page, :keyword).join("\n") )
-      data[:update_timestamp] ||= ' checked'
+      data[:update_timestamp] ||= @db.get_attribute(page, :update_timestamp) == 'off' ? '' : ' checked'
       data[:page_title]     = page_title
       data[:form_proc]      = @plugin.form_proc
       data[:session_id]     = @session_id || ''
@@ -364,7 +364,8 @@
         if @plugin.save( page, text, md5hex, update_timestamp )
           keyword = @params['keyword'][0].split("\n").collect {|k|
             k.chomp.strip}.delete_if{|k| k.size == 0}
-          attr = [[:keyword, keyword.uniq], [:title, title]]
+          attr = [[:keyword, keyword.uniq], [:title, title],[:update_timestamp,
+                                                             update_timestamp ? update_timestamp : 'off']]
           attr << [:editor, @plugin.user]
           @db.set_attribute(page, attr)
         else
  • リビジョン5っていうのは、勝手につかってるSubversionのリビジョンであって、本家とは関係ない