# -*- coding: utf-8 -*- # whatsnew.rb # # 名称: # What's Newプラグイン # # 概要: # 未読のセクションに指定したマークをつけることができます. # # 使い方: # tdiary.conf の @section_anchor の先頭に以下のように <%= whats_new %> を追加します. # # @section_anchor = '<%= whats_new %>_' # # セクションの未読/既読によって <%= whats_new %> の部分があらかじめ指 # 定したマークで置き換えられます.デフォルトでは未読セクションでは # "!!!NEW!!!",既読セクションでは "" に展開されます. # # 注:Revision が 1.1 の whats_new.rb の説明では, の中に # <%= whats_new %> を含めるように書いていましたが,sanchorで画像を # 表示するようなテーマでは,whats_new の出力と sanchor の画像が重 # なってしまうという問題がありました. # この変更に伴い,既読時のデフォルトは '' に変更しました. # # 置き換えられる文字列を変更したい場合は tdiary.conf 中で # # @options['whats_new.new_mark'] = 'NEW!' # @options['whats_new.read_mark'] = '既' # # のように指定します. # # Copyright (c) 2002 Junichiro KITA # Distributed under the GPL # @whats_new = {}.taint def whats_new return apply_plugin( @whats_new[:read_mark] ) unless @cgi @whats_new[:section] += 1 t = @whats_new[:current_date] + "%03d" % @whats_new[:section] if t > @whats_new[:this_time] @whats_new[:this_time] = t end # 初回もしくは cookie を使わない設定の場合は機能しない return apply_plugin( @whats_new[:read_mark] ) if @whats_new[:last_time] == "00000000000" if t > @whats_new[:last_time] apply_plugin( @whats_new[:new_mark] ) else apply_plugin( @whats_new[:read_mark] ) end end add_body_enter_proc do |date| if @cgi @whats_new[:current_date] = Time::at(date).strftime('%Y%m%d') @whats_new[:section] = 0 @whats_new[:last_time] end "" end add_header_proc do if @cgi if @cgi.cookies['tdiary_whats_new'][0] @whats_new[:this_time] = @whats_new[:last_time] = @cgi.cookies['tdiary_whats_new'][0] else # 初めて,もしくは cookie は使わない設定 @whats_new[:this_time] = @whats_new[:last_time] = "00000000000" end @whats_new[:new_mark] = @options['whats_new.new_mark'] || '!!!new!!!' @whats_new[:read_mark] = @options['whats_new.read_mark'] || '' end "" end add_footer_proc do if @cgi.script_name if @whats_new[:this_time] > @whats_new[:last_time] cookie_path = File::dirname(@cgi.script_name) cookie_path += '/' if cookie_path !~ /\/$/ cookie = CGI::Cookie::new({ 'name' => 'tdiary_whats_new', 'value' => [@whats_new[:this_time]], 'path' => cookie_path, 'expires' => Time::now.gmtime + 90*24*60*60 }) add_cookie(cookie) end end "" end # Local Variables: # mode: ruby # indent-tabs-mode: t # tab-width: 3 # ruby-indent-level: 3 # End: # vim: ts=3