/ 最近 .rdf 追記 編集 設定 本棚

脳log[20050614] プラグイン:index_list.rb: 「最新」「月」表示に目次を。



2005年06月14日 (火)

[tDiary]プラグイン:index_list.rb: 「最新」「月」表示に目次を。

細かいことは以前の日記に書いてあるので、ここではビャッとソースを引用。

# index_list.rb
#
# 「最新」「月」表示に対応した目次を表示。
# recent_listやtitle_listと違い日付のリンク先は日別表示でなくページ内。
# その為に、diary.rhtmlをいじって日付にアンカーを付ける必要がある。
# 骨格にrecent_list.rbを使用。
# [2005-06-15] tdiary-2.1.1 N日表示対応
# [2005-04-20] 月表示では昇順に。

def index_list(date_format = nil, show_title = true)
	if(@mode == 'latest')
		limit = @conf.latest_limit;
	elsif(@mode == 'month')
		limit = 31;
	else
		return '';
	end
	date_format ||= @date_format;
	latest_start_ymd = @date.strftime('%Y%m%d');
	result = %Q[<ul class="index-list">\n];
	b = lambda {|ymd|
		next if(@mode == 'latest' && latest_start_ymd < ymd);
		break if(limit <= 0);
		diary = @diaries[ymd];
		next unless(diary.visible?);

		result << %Q[\t<li><a href="##{ymd}">#{diary.date.strftime(date_format)}</a>];
		if(show_title && diary.title)
			result << %Q[ #{diary.title}];
		end
		result << %Q[\n\t\t<ul class="index-list-item">\n];
		i = 1;
		if(!@plugin_files.grep(/\/category.rb$/).empty? && diary.categorizable?)
			diary.each_section{|section|
				result << "\t\t<li>";
				result << section.categories.collect{|c| category_anchor("#{c}")}.join;
				result << ' '+section.stripped_subtitle_to_html if(section.stripped_subtitle);
				result << "</li>\n";
				i += 1;
			}
		else
			diary.each_section{|section|
				if(section.subtitle)
					result << %Q[\t\t<li>#{section.subtitle_to_html}</li>\n];
				end
				i += 1;
			}
		end
		result << "\t\t</ul>\n\t</li>\n";
		limit -= 1;
	}
	begin
		@diaries.keys.sort.send( (@mode=='latest' ? :reverse_each : :each), &b);
	rescue LocalJumpError # <- break
		# Procオブジェクトで breakは使えないのだろうけど
		# それをブロックとして渡してるんやからエラーにせんでもええやん。> ruby-1.8.2
	end
	result << "<ul>";
	return apply_plugin(result);
end