細かいことは以前の日記に書いてあるので、ここではビャッとソースを引用。
# 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