トップ «前の日記(2008-01-05(Sat)) 最新 次の日記(2008-01-08(Tue))» 編集

ぽっぺん日記@karashi.org


2008-01-06(Sun) [長年日記]

_ tDiary用AutoPagerize化pluginを書き直した

こないだ書いたpluginがいまいちなので、全面的に書き直した。

今回はパッチにしてみようかとも考えたけれど、未来方向が<link rel="prev">、過去方向が<link rel="next">と指定してあって、トリッキーなのでpluginにしておいた。 まぁ、tDiaryが正式にAutoPagerizeに対応すれば用がなくなる代物だけど。

改善点は下記の通り。

  • navi_itemにrel属性を追加するのではなく、ヘッダに<link>タグに追加するようにした。
  • すべての日記で過去方向に読み込まれるようにした。
  • 上書きするメソッドをindex_page_tagだけにした。

このpluginを使うためには、pluginを有効にした後、、[編集] - [設定] - [ヘッダ・フッタ]から編集画面に入って、

  • ヘッダの最初に<div class="autopagerize_page_element">(tDiaryでAutoPagerizeを使う - capsctrldays (2007-09-01)の通り、<div class="main">を、<div class="main autopagerize_page_element">に変更することをオススメ)。
  • フッタのページ区切りとなる場所に、<div class="autopagerize_insert_before">&nbsp;</div>

を入れてください。

ダウンロードはこちらから。→autopagerize.rb

コードも貼っておきます。ツッコミ歓迎。

#
# autopagerize.rb - tDiary plugin
#
# add <link rel="prev"> and <link rel="next"> tags for AutoPagerize
#
# Copyright (C) 2008 MATSUI Shinsuke <poppen@karashi.org>
# You can redistribute it and/or modify it under GPL2.
#

#
# HTML header
#
def index_page_tag
	result = ''
	if @index_page and @index_page.size > 0 then
		result << %Q[<link rel="index" title="#{h navi_index}" href="#{h @index_page}">\n\t]
	end
	if @prev_day then
		case @mode
		when 'day'
			result << %Q[<link rel="next" title="#{navi_prev_diary( Time::local(*@prev_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]) )}" href="#{h @index}#{anchor @prev_day}">\n\t]
		when 'nyear'
			result << %Q[<link rel="next" title="#{navi_prev_nyear( Time::local(*@prev_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]) )}" href="#{h @index}#{anchor @prev_day[4,4]}">\n\t]
		end
	end
	if @next_day then
		case @mode
		when 'day'
			result << %Q[<link rel="prev" title="#{navi_next_diary( Time::local(*@next_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]) )}" href="#{h @index}#{anchor @next_day}">\n\t]
		when 'nyear'
			result << %Q[<link rel="prev" title="#{h navi_next_nyear( Time::local(*@next_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]) )}" href="#{h @index}#{anchor @next_day[4,4]}">\n\t]
		end
	end
	if @mode == 'month' && !(months = _create_month).empty? then
		prev_month = months['prev_month']
		next_month = months['next_month']
		if prev_month then
			result << %Q[<link rel="next" title="#{h navi_prev_month}" href="#{h @index}#{anchor( prev_month )}">\n\t]
		end
		if next_month then
			result << %Q[<link rel="prev" title="#{h navi_next_month}" href="#{h @index}#{anchor( next_month )}">\n\t]
		end
	end
	if @mode == 'latest' then
		if @conf['ndays.prev'] then
			result << %Q[<link rel="next" title="#{h navi_prev_ndays}" href="#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}">\n\t]
		end
		if @conf['ndays.next'] then
			result << %Q[<link rel="prev" title="#{h navi_next_ndays}" href="#{h @index}#{anchor( @conf['ndays.next'] + '-' + @conf.latest_limit.to_s )}">\n\t]
		end
	end
	result << %Q[<link rel="start" title="#{navi_latest}" href="#{h @index}">\n\t]
	result.chop.chop
end

def _create_month
	result = {}
	ym = []
	@years.keys.each do |y|
		ym += @years[y].collect {|m| y + m}
	end
	ym.sort!
	now = @date.strftime( '%Y%m' )
	return '' unless ym.index( now )
	result['prev_month'] = ym.index( now ) == 0 ? nil : ym[ym.index( now )-1]
	result['next_month'] = ym[ym.index( now )+1]
	result
end

# Local Variables:
# mode: ruby
# indent-tabs-mode: t
# tab-width: 3
# ruby-indent-level: 3
# End:
# vi: ts=3 sw=3

2007/1/8追記

もうちょっとシンプルなpluginを書きました。

[]
本日のPingbacks(全0件)

トップ «前の日記(2008-01-05(Sat)) 最新 次の日記(2008-01-08(Tue))» 編集