require 'tdiary/comment_manager'
require 'tdiary/referer_manager'
require 'erb'
module TDiary
module Style
module BaseSection
attr_reader :subtitle, :author
attr_reader :categories, :stripped_subtitle
attr_reader :subtitle_to_html, :stripped_subtitle_to_html, :body_to_html
def body
@body.dup
end
def body=(str)
@body = str
end
def html4(date, idx, opt)
r = %Q[
\n]
r << %Q[<%=section_enter_proc( Time.at( #{date.to_i} ) )%>\n]
r << do_html4( date, idx, opt )
r << %Q[<%=section_leave_proc( Time.at( #{date.to_i} ) )%>\n]
r << "
\n"
end
def chtml(date, idx, opt)
r = %Q[<%=section_enter_proc( Time.at( #{date.to_i} ) )%>\n]
r << do_html4( date, idx, opt )
r << %Q[<%=section_leave_proc( Time.at( #{date.to_i} ) )%>\n]
end
def to_s
to_src
end
def categories_to_string
@categories = categories
cat_str = ""
categories.each {|cat| cat_str << "[#{cat}]"}
cat_str << " " unless cat_str.empty?
end
end
module BaseDiary
include ::ERB::Util
include CommentManager
include RefererManager
def init_diary
init_comments
init_referers
@show = true
end
def date
@date
end
def set_date( date )
if date.class == String then
y, m, d = date.scan( /^(\d{4})(\d\d)(\d\d)$/ )[0]
raise ArgumentError::new( 'date string needs YYYYMMDD format.' ) unless y
@date = Time::local( y, m, d )
else
@date = date
end
end
def title
@title || ''
end
def set_title( title )
@title = title
@last_modified = Time::now
end
def last_modified
# 日本語を含むツッコミを入れると diary.last_modified が String になる (原因不明)
# (PStore 保存前は Time だが, 保存後に String となる)
# 暫定的に String だったら Time へ変換する
if @last_modified.instance_of? String
@last_modified = Time.at(0)
elsif @last_modified
@last_modified
else
Time::at( 0 )
end
end
def last_modified=( lm )
@last_modified = lm
end
def visible?
@show != false;
end
def show( s )
@show = s
end
def replace(date, title, body)
set_date( date )
set_title( title )
@sections = []
append( body )
end
def each_section
@sections.each do |section|
yield section
end
end
def delete_section(index)
@sections.delete_at(index - 1)
end
def eval_rhtml( opt, path = "#{File.dirname(__FILE__)}/../.." )
ERB.new(File.read("#{path}/views/#{opt['prefix']}diary.rhtml").untaint).result(binding)
end
def to_src
r = ''
each_section do |section|
r << section.to_src
end
r
end
def to_html( opt = {}, mode = :HTML )
case mode
when :CHTML
to_chtml( opt )
else
to_html4( opt )
end
end
def to_html4(opt)
r = ''
idx = 1
each_section do |section|
r << section.html4( date, idx, opt )
idx += 1
end
r
end
def to_chtml( opt )
r = ''
idx = 1
each_section do |section|
r << section.chtml( date, idx, opt )
idx += 1
end
r
end
def to_s
"date=#{date.strftime('%Y%m%d')}, title=#{title}, body=[#{@sections.join('][')}]"
end
end
#
# module CategorizableDiary
#
module CategorizableDiary
def categorizable?; true; end
end
#
# module UncategorizableDiary
#
module UncategorizableDiary
def categorizable?; false; end
end
end
end
# Local Variables:
# mode: ruby
# indent-tabs-mode: t
# tab-width: 3
# ruby-indent-level: 3
# End:
# vim: ts=3