# coding: utf-8
#
# index_list.rb
#
# 「最新」「月」表示に対応した目次を表示。
# recent_listやtitle_listと違い日付のリンク先は日別表示でなくページ内。
# その為に、diary.rhtmlをいじって日付にアンカーを付ける必要がある。
# 骨格にrecent_list.rbを使用。
#
# [2009-02 ] This plugin is obsolete. Use toc.rb instead.
# [2008-08-14] ERB::Util.h( diary.title ).
# [2008-06-07] セクションインデックスを修正。
# [2008-05-20] サブタイトルにアンカーを追加。(これで 2008-04-11の変更が有効に働く)
# [2008-04-11] サブタイトル全体を本文へのリンクに。
# [2007-12-28] skip hidden section. (hidden == section.subtitle_to_html.empty?)
# [2007-12-12] fix typo.
# [2005-09-25] tDiary-2.1.2.20050917で導入された title_procを使うことで、
# diary.rhtmlをいじらなくてよくなった。
# [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[\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- #{diary.date.strftime(date_format)}];
if(show_title && diary.title)
result << %Q[ #{h diary.title}];
end
has_section = (true == diary.each_section{ break true } or false);
result << %Q[\n\t\t\n" if has_section;
result << "\t
\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 << "
";
return apply_plugin(result);
end
add_title_proc{|date, title|
title.sub(/