ももらぼっ!にっき


2008年05月22日 [長年日記]

_ [tDiary] 日記の一部を隠す。

…何てことできないかなぁ。

まだ、公開できる文章になっていないものを一時的に登録しておいたり、人に見せたくないアイディアを書き留めておいたり。 そんな使い方をしたいのだけど、「この日の日記を隠す」だと、1日の間に公開したいセクションと公開したくないセクションを分けられない。

なので、[hidden]タグを付けておけば、見えないようになる…みたいなことができないかなーと。

_ [tDiary] hide_category.rbプラグイン。

ということで、やってみた。 まだいろいろとおかしなところはあるけど、とりあえず本文だけは隠れている模様。

# hide_category.rb
#
# カテゴリに[hidden]があると、そのセクションを非表示にするプラグイン。
#
# 注意!
#   このプラグイン内で@diariesの中身を書き換えています。
#   その為、defaultio.rbで日記を保存していることが前提です。
#   pstoreio.rbで日記を保存していると、非表示にしたセクションが消えちゃうと思います。
#
#   具体的には以下の前提の上に成り立っています。
#   * 日記を表示するだけでは、TDiary::TDiaryBase::DIRTY_DIARYフラグが立たないこと。
#   * 日記データを保存するのは、TDiary::TDiaryBase::DIRTY_DIARYフラグが立っているときだけ。
#

#TODO ./ja/hide_category.rbへ移動すること
def hide_category_conf_title
  '非表示カテゴリの設定'
end

def hide_category_conf_html
  <<-HTML
  <p>
    現在、以下の機能に未対応です。(他にもあるかもですが)
    <ul>
      <li>カテゴリの一覧表示</li>
      <li>recent_list.rb</li>
    </ul>
    その為、非表示のセクションのタイトルは見えてしまいます。
  </p>
  <hr />
  <h3>非表示にするカテゴリ名</h3>
  <p>
    非表示にしたいカテゴリ名を指定します。
    デフォルトでは「hidden」が設定されます。
    空で更新した場合には、デフォルト値が使用されます。
  </p>
  <p>
  <input type="text" name="hide_category.category_name"
    value="#{@conf['hide_category.category_name']}" />
  </p>
  HTML
end

# 非表示カテゴリを削除
if ['day', 'comment', 'month', 'nyear', 'latest'].include?(@mode)
  cgi = CGI.new
  def cgi.referer; nil; end
  category_name = @options['hide_category.category_name'] || 'hidden'

  @diaries.each do |date, diary|
    next unless diary.methods.include?('delete_section')
    now_index = 1
    indexes = []
    diary.each_section do |section|
      if section.categories.include?(category_name)
        indexes.push now_index
      end
      now_index += 1
    end
    indexes.reverse_each do |index|
      diary.delete_section(index)
    end
  end
end

# 設定
add_conf_proc('hide_category', hide_category_conf_title, 'etc') do
  category_name = ''
  if @mode == 'saveconf'
    category_name = @cgi.params['hide_category.category_name'][0]
  else
    category_name = @conf['hide_category.category_name']
  end
  if category_name.nil? || category_name.length == 0
    category_name = 'hidden' 
  end
  @conf['hide_category.category_name'] = category_name

  hide_category_conf_html
end

_ とりあえず。

簡易的だけど、さくらのサーバに移行が完了しました。 まだ、過去の日記とか掲示板とかが移行できてないけど、それはまぁぼちぼち。

まだ、ドメインの移行ができてないので、.htaccessでリダイレクトしてます。 こんな感じで。

Redirect permanent / http://momo-lab.sakura.ne.jp/

さくらで独自ドメインを使うようにしたら、元々のドメイン(momo-lab.sakura.ne.jp)ってどうなるのかな…。 こっちのドメインで運用しているところがあるので、両方使えるといいんだけどな。

_ [tDiary] hide_category2.rb プラグイン。

ちょっと違ったアプローチで試してみました。 私はにっきをRDスタイルで書いているので、とりあえず、それ限定で。

# hide_category2.rb
module ::TDiary
  class RdDiary
    alias :each_section_orig :each_section

    def each_section
      each_section_orig do |section|
        next if section.categories.include?('hidden')
        yield section
      end
    end

    def to_src
      r = ''
      each_section_orig do |section|
        r << section.to_src
      end
      r
    end
  end
end

xx_style.rbのeach_sectionを無理やり書き換えてしまう、というアプローチ。 単純にeach_sectionを書き換えるだけでは、to_srcまで変わってしまい保存データからも[hidden]なセクションが消えてしまったので、to_srcも置き換えています。 スタイルによって実装を変えないといけなさそうだったので、とりあえず自分の使っているRDスタイルだけ作ってみたんだけど、今度はいい感じで動いているっぽいです。

…まぁ、これをテストする過程で、[hidden]で書いていた日記を全て消してしまったんだけどねorz