at posts/single.html

自動的にセクションアンカーをつける tDiary プラグイン

tDiary の day にタイトルをつけている人が皆無な件 - HsbtDiaryより。

確かに feed ではすでに day という単位ではなく、section という単位で生成されている以上、day のデフォルト Permalink は

example.com/diary/yyyymmdd.html

よりは

example.com/diary/yyyymmdd.html#p01

の方がいいかもしれないなー。

そうそう。 TinyURL を通すとセクションアンカーが消えるとか、はてなブックマークでアンカー付きとそうでない Permalink が分かれてしまうとかいうことがちょっとイヤ。

#p01 より /p01 の方がいいというツッコミがあったりするけど、その日の日記をまとめて読みたい(昨日の OAuth 日記はまさにそれ)とか、ツッコミをどこに表示するのかとか、 Permalink が複数できるとかいう問題がでてきちゃう。 なので、とりあえずセクションアンカー (#p01 とかのアレ) 無しでの日記へのアクセスは、自動的に最初のセクションアンカーを付けるようにするプラグインを書いた。

  • 日別表示 (@mode == 'day') かつアンカーが無い場合 (YYYYMMDD.html) に
  • 最初のアンカーを付ける (YYYYMMDD.html#p01)

ようにしている。 何か副作用があるかもしれないけど、使ってみないことには分からないのでこの日記に入れている。

#
# day2section.rb - tDiary plugin
#
# When a visitor accesses to day page without section anchor, navigate to first section.
#
# Copyright (c) MATSUOKA Kohei <http://www.machu.jp/>
# Distributed under the GPL
#
add_header_proc do
  if @mode == 'day'
    <<-SCRIPT
    <script type="text/javascript">
    window.onload = function() {
      if(location.hash == "") {
        location.replace(location.href + "#p01");
      }
    }
    </script>
    SCRIPT
  end
end

ソースは CodeRepos にコミットした。 CodeRepos といえば、おとといコミットした Flickr プラグインが、直後に修正されていてビックリした。嬉しいなぁ。

追記 - いきなり修正

window.onload に関数を割り当てていたんだけど、他に window.onload を使っているプラグインがあった場合に競合してしまうことに気がついた。 なので、代わりに footer_proc を使うように修正してコミット

#
# day2section.rb - tDiary plugin
#
# When a visitor accesses to day page without section anchor, navigate to first section.
#
# Copyright (c) MATSUOKA Kohei <http://www.machu.jp/>
# Distributed under the GPL
#
add_footer_proc do
  if @mode == 'day'
    <<-SCRIPT
    <script type="text/javascript">
    if(location.hash == "") {
      location.replace(location.href + "#p01");
    }
    </script>
    SCRIPT
  end
end

関連する日記