Top Level Namespace

Defined Under Namespace

Modules: Safe, TDiary Classes: CGI, Comment, Diary, Object, PStore, PStoreRuby18Exception, Paragraph, RackCGI, RefererDiary, String

Constant Summary collapse

TDIARY_VERSION =
TDiary::VERSION
SP_PREFIX =

50sp.rb - select-plugins plugin

'sp'
SF_PREFIX =

60sf.rb - select-filters plugin This file is based on 50sp.rb Revision: 1.5 Modified by KURODA Hiraku.

'sf'

Instance Method Summary collapse

Instance Method Details

#anchor(s) ⇒ Object

make anchor string



488
489
490
491
492
493
494
495
496
497
498
# File 'lib/tdiary/plugin/00default.rb', line 488

def anchor( s )
	if /^([\-\d]+)#?([pct]\d*)?$/ =~ s then
		if $2 then
			"?date=#$1##$2"
		else
			"?date=#$1"
		end
	else
		""
	end
end

#author_mail_tagObject



291
292
293
294
295
296
297
# File 'lib/tdiary/plugin/00default.rb', line 291

def author_mail_tag
	if @conf.author_mail and not(@conf.author_mail.empty?) then
		%Q[<link rev="made" href="mailto:#{h @conf.author_mail}">]
	else
		''
	end
end

#author_name_tagObject



283
284
285
286
287
288
289
# File 'lib/tdiary/plugin/00default.rb', line 283

def author_name_tag
	if @conf.author_name and not(@conf.author_name.empty?) then
		%Q[<meta name="author" content="#{h @conf.author_name}">]
	else
		''
	end
end

#auto_migration_spam_champuruObject



158
159
160
161
162
163
# File 'lib/tdiary/plugin/10spamfilter.rb', line 158

def auto_migration_spam_champuru
	# auto migration of spam-champuru shutdown.
	if @conf['spamlookup.ip.list'].scan(/dnsbl\.spam-champuru\.livedoor\.com/).size > 0
		@conf['spamlookup.ip.list'].gsub!(/dnsbl\.spam-champuru\.livedoor\.com/, "bsb.spamlookup.net")
	end
end

#brlObject



777
# File 'lib/tdiary/plugin/00default.rb', line 777

def brl; '<br clear="left">';  end

#brrObject

layout



776
# File 'lib/tdiary/plugin/00default.rb', line 776

def brr; '<br clear="right">'; end


226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'lib/tdiary/plugin/00default.rb', line 226

def calc_links
	if /day|edit/ =~ @mode or (@cgi.mobile_agent? and /latest|month|nyear/ =~ @mode) then
		today = @date.strftime('%Y%m%d')
		days = []
		yms = []
		this_month = today[0,6]

		@years.keys.each do |y|
			yms += @years[y].collect {|m| y + m}
		end
		yms |= [this_month]
		yms.sort!
		yms.unshift(nil).push(nil)
		yms[yms.index(this_month) - 1, 3].each do |ym|
			next unless ym
			now = @cgi.params['date'] # backup
			cgi = @cgi.clone
			cgi.params['date'] = [ym]
			m = TDiaryMonthWithoutFilter.new(cgi, '', @conf)
			@cgi.params['date'] = now # restore
			m.diaries.delete_if {|date,diary| !diary.visible?}
			days += m.diaries.keys.sort
		end
		days |= [today]
		days.sort!
		days.unshift(nil).push(nil)
		@navi_user_days = days[days.index(today) - 1, 3]
		@prev_day = @navi_user_days[0]
		@next_day = @navi_user_days[2]
	elsif @mode == 'nyear'
		y = 2000 # specify leam year
		m, d = @cgi.params['date'][0].scan(/^(\d\d)(\d\d)$/)[0]
		@prev_day = (Time.local(y, m, d) - 24*60*60).strftime( '%Y%m%d' )
		@next_day = (Time.local(y, m, d) + 24*60*60).strftime( '%Y%m%d' )
	end
end

#calendarObject

make calendar



170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/tdiary/plugin/00default.rb', line 170

def calendar
	result = %Q[<div class="calendar">\n]
	@years.keys.sort.each do |year|
		result << %Q[<div class="year">#{year}|]
		@years[year.to_s].sort.each do |month|
			m = "#{year}#{month}"
			result << %Q[<a href="#{h @conf.index}#{anchor m}">#{month}</a>|]
		end
		result << "</div>\n"
	end
	result << "</div>"
end

#category_anchor(c) ⇒ Object

category



110
# File 'lib/tdiary/plugin/en/00default.rb', line 110

def category_anchor(c); "[#{c}]"; end

#charsetObject



263
264
265
266
267
268
269
# File 'lib/tdiary/plugin/00default.rb', line 263

def charset
	if @cgi.mobile_agent? then
		@conf.mobile_encoding
	else
		@conf.encoding
	end
end

#comment_body_labelObject



60
# File 'lib/tdiary/plugin/en/00default.rb', line 60

def comment_body_label; 'Comment'; end

#comment_body_label_shortObject



61
# File 'lib/tdiary/plugin/en/00default.rb', line 61

def comment_body_label_short; 'Comment'; end

#comment_date(time) ⇒ Object



64
# File 'lib/tdiary/plugin/en/00default.rb', line 64

def comment_date( time ); time.strftime( "(#{@conf.date_format} %H:%M)" ); end

#comment_descriptionObject

make comment form



582
583
584
585
586
587
588
589
590
# File 'lib/tdiary/plugin/00default.rb', line 582

def comment_description
	 begin
		if @conf.options['comment_description'].length > 0 then
			 return @conf.options['comment_description']
		end
	 rescue
	 end
	 comment_description_default
end

#comment_description_defaultObject



53
# File 'lib/tdiary/plugin/en/00default.rb', line 53

def comment_description_default; 'Add a TSUKKOMI or Comment please. E-mail address will be shown to only me.'; end

#comment_description_shortObject



55
# File 'lib/tdiary/plugin/en/00default.rb', line 55

def comment_description_short; 'TSUKKOMI!!'; end

#comment_formObject



649
650
651
652
653
654
655
# File 'lib/tdiary/plugin/00default.rb', line 649

def comment_form
	return '' unless @mode == 'day'
	return '' if bot?
	return '' if hide_comment_day_limit

	comment_form_text
end

#comment_form_mobileObject



661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
# File 'lib/tdiary/plugin/00default.rb', line 661

def comment_form_mobile
	return '' if @conf.hide_comment_form
	return '' if bot?
	return '' if hide_comment_day_limit

	if @diaries[@date.strftime('%Y%m%d')].count_comments( true ) >= @conf.comment_limit_per_day then
		return "<HR><P>#{comment_limit_label}</P>"
	end

	return <<-FORM
		<HR>
		<FORM METHOD="POST" ACTION="#{h @conf.index}">
			<INPUT TYPE="HIDDEN" NAME="date" VALUE="#{@date.strftime( '%Y%m%d' )}">
			<P>#{comment_description_short}<BR>
			#{comment_name_label_short}: <INPUT NAME="name"><BR>
			#{comment_form_mobile_mail_field}
			#{comment_body_label_short}:<BR>
			<TEXTAREA NAME="body" COLS="100%" ROWS="5"></TEXTAREA><BR>
			<INPUT TYPE="SUBMIT" NAME="comment" value="#{comment_submit_label_short}"></P>
		</FORM>
	FORM
end

#comment_form_mobile_mail_fieldObject



657
658
659
# File 'lib/tdiary/plugin/00default.rb', line 657

def comment_form_mobile_mail_field
	%Q|#{comment_mail_label_short}: <INPUT NAME="mail"><BR>|
end

#comment_form_textObject



592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
# File 'lib/tdiary/plugin/00default.rb', line 592

def comment_form_text
	unless @diary then
		@diary = @diaries[@date.strftime( '%Y%m%d' )]
		return '' unless @diary
	end

	r = ''
	unless @conf.hide_comment_form then
		r = <<-FORM
			<div class="form">
		FORM
		if @diary.count_comments( true ) >= @conf.comment_limit_per_day then
			r << <<-FORM
				<div class="caption"><a name="c">#{comment_limit_label}</a></div>
			FORM
		else
			r << <<-FORM
				<div class="caption"><a name="c">#{comment_description}</a></div>
				<form class="comment" name="comment-form" method="post" action="#{h @conf.index}"><div>
				<input type="hidden" name="date" value="#{ @date.strftime( '%Y%m%d' )}">
				<div class="field name">
					#{comment_name_label}:<input class="field" name="name" value="#{h( @conf.to_native(@cgi.cookies['tdiary'][0] || '' ))}">
				</div>
				<div class="field mail">
					#{comment_mail_label}:<input class="field" name="mail" value="#{h( @cgi.cookies['tdiary'][1] || '' )}">
				</div>
				<div class="textarea">
					#{comment_body_label}:<textarea name="body" cols="60" rows="5"></textarea>
				</div>
				<div class="button">
					<input type="submit" name="comment" value="#{h comment_submit_label}">
				</div>
				</div></form>
			FORM
		end
		r << <<-FORM
			</div>
		FORM
	end
	r
end

#comment_lengthObject

‘comment_length’ returns length of shorten comment on recent or monthly view.



70
71
72
# File 'lib/tdiary/lang/en.rb', line 70

def comment_length
	120
end

#comment_limit_labelObject



54
# File 'lib/tdiary/plugin/en/00default.rb', line 54

def comment_limit_label; 'You cannot make more TSUKKOMI because it has over limit.'; end

#comment_mail(text) ⇒ Object



752
753
754
755
# File 'lib/tdiary/plugin/00default.rb', line 752

def comment_mail( text )
	# no action in default.
	# override by each plugins.
end

#comment_mail_basic_htmlObject



269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# File 'lib/tdiary/plugin/en/00default.rb', line 269

def comment_mail_basic_html
	@conf['comment_mail.header'] = '' unless @conf['comment_mail.header']
	@conf['comment_mail.receivers'] = '' unless @conf['comment_mail.receivers']
	@conf['comment_mail.sendhidden'] = false unless @conf['comment_mail.sendhidden']

	<<-HTML
	<h3 class="subtitle">Notify TSUKKOMI by E-mail</h3>
	#{"<p>Select notify or not when your diary gets a new TSUKKOMI. So TSUKKOMI mail need SMTP server settings in tdiary.conf.</p>" unless @cgi.mobile_agent?}
	<p><select name="comment_mail.enable">
		<option value="true"#{" selected" if @conf['comment_mail.enable']}>Send Mail</option>
        <option value="false"#{" selected" unless @conf['comment_mail.enable']}>Don't Send</option>
	</select></p>
	<h3 class="subtitle">Receivers</h3>
	#{"<p>Sepecify receivers of TSUKKOMI mail, 1 address per 1 line. If you dose not specify, TSUKKOMI mails will be sent to your address.</p>" unless @cgi.mobile_agent?}
	<p><textarea name="comment_mail.receivers" cols="40" rows="3">#{h( @conf['comment_mail.receivers'].gsub( /[, ]+/, "\n") )}</textarea></p>
	<h3 class="subtitle">Mail header</h3>
	#{"<p>Specify a string insert to beginning of mail subject. The subject have a style of \"your_specified_string:DATE-SERIAL NAME\". \"date\" is formatted as same as diary's date you specified. But when you specify another date style in this string, subject style is changed to \"your_specified_string-SERIAL NAME\" (ex: \"hoge:%Y-%m-%d\")</p>" unless @cgi.mobile_agent?}
	<p><input name="comment_mail.header" value="#{h @conf['comment_mail.header']}"></p>
	<h3 class="subtitle">About hidden TSUKKOMI</h3>
	#{"<p>Some TSUKKOMI are hidden by filters. You can decide which sending E-mail by hidden TSUKKOMI.</p>" unless @cgi.mobile_agent?}
	<p><label for="comment_mail.sendhidden"><input type="checkbox" id="comment_mail.sendhidden" name="comment_mail.sendhidden" value="#{" checked" if @conf['comment_mail.sendhidden']}">Send mail by hidden TSUKKOMI</label></p>
	HTML
end

#comment_mail_basic_settingObject



757
758
759
760
761
762
763
764
# File 'lib/tdiary/plugin/00default.rb', line 757

def comment_mail_basic_setting
	if @mode == 'saveconf' then
		@conf['comment_mail.enable'] = @cgi.params['comment_mail.enable'][0] == 'true' ? true : false
		@conf['comment_mail.receivers'] = @cgi.params['comment_mail.receivers'][0].strip.gsub( /[\n\r]+/, ',' )
		@conf['comment_mail.header'] = @cgi.params['comment_mail.header'][0]
		@conf['comment_mail.sendhidden'] = @cgi.params['comment_mail.sendhidden'][0] == 'true' ? true : false
	end
end

#comment_mail_conf_labelObject



267
# File 'lib/tdiary/plugin/en/00default.rb', line 267

def comment_mail_conf_label; 'TSUKKOMI Mail'; end

#comment_mail_labelObject



58
# File 'lib/tdiary/plugin/en/00default.rb', line 58

def comment_mail_label; 'E-mail'; end

#comment_mail_label_shortObject



59
# File 'lib/tdiary/plugin/en/00default.rb', line 59

def comment_mail_label_short; 'Mail'; end

#comment_mail_mime(str) ⇒ Object

TSUKKOMI mail



263
264
265
# File 'lib/tdiary/plugin/en/00default.rb', line 263

def comment_mail_mime( str )
	[str.dup]
end

#comment_mail_sendObject

service methods for comment_mail



702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
# File 'lib/tdiary/plugin/00default.rb', line 702

def comment_mail_send
	return unless @comment
	return unless @conf['comment_mail.enable']
	return unless @conf['comment_mail.sendhidden'] or @comment.visible?

	case @conf['comment_mail.receivers']
	when Array
		# for compatibility
		receivers = @conf['comment_mail.receivers']
	when String
		receivers = @conf['comment_mail.receivers'].split( /[, ]+/ )
	else
		receivers = []
	end
	receivers = [@conf.author_mail] if receivers.compact.empty?
	return if receivers.empty?

	require 'socket'

	name = comment_mail_mime( @conf.to_mail( @comment.name ) )[0]
	body = @comment.body.sub( /[\r\n]+\Z/, '' )
	mail = @comment.mail
	mail = @conf.author_mail unless mail =~ %r<[0-9a-zA-Z_.-]+@[\(\)%!0-9a-zA-Z_$@.&+-,'"*-]+>
	mail = receivers[0] if mail.empty?

	now = Time::now
	g = now.dup.gmtime
	l = Time::local( g.year, g.month, g.day, g.hour, g.min, g.sec )
	tz = (g.to_i - l.to_i) / 36
	date = now.strftime( "%a, %d %b %Y %X " ) + sprintf( "%+05d", tz )

	serial = @diaries[@date.strftime( '%Y%m%d' )].count_comments( true )
	message_id = %Q!<tdiary.#{[@conf['comment_mail.header'] || ''].pack('m').gsub(/\n/,'')}.#{now.strftime('%Y%m%d%H%M%S')}.#{serial}@#{Socket::gethostname}>!

	mail_header = (@conf['comment_mail.header'] || '').dup
	mail_header << ":#{@conf.date_format}" unless /%[a-zA-Z%]/ =~ mail_header
	mail_header = @date.strftime( mail_header )
	mail_header = comment_mail_mime( @conf.to_mail( mail_header ) ).join( "\n " ) #if /[\x80-\xff]/ =~ mail_header

	rmail = ''
	begin
		rmail = File::open( "#{TDiary::PATH}/../views/mail.rtxt.#{@conf.lang}" ){|f| f.read }
	rescue
		rmail = File::open( "#{TDiary::PATH}/../views/mail.rtxt" ){|f| f.read }
	end
	text = @conf.to_mail( ERB::new( rmail.untaint ).result( binding ) )
	receivers.each { |i| i.untaint }
	comment_mail( text, receivers )
end

#comment_name_labelObject



56
# File 'lib/tdiary/plugin/en/00default.rb', line 56

def comment_name_label; 'Name'; end

#comment_name_label_shortObject



57
# File 'lib/tdiary/plugin/en/00default.rb', line 57

def comment_name_label_short; 'Name'; end

#comment_newObject



52
# File 'lib/tdiary/plugin/en/00default.rb', line 52

def comment_new; 'Add a TSUKKOMI'; end

#comment_submit_labelObject



62
# File 'lib/tdiary/plugin/en/00default.rb', line 62

def comment_submit_label; 'Submit'; end

#comment_submit_label_shortObject



63
# File 'lib/tdiary/plugin/en/00default.rb', line 63

def comment_submit_label_short; 'Submit'; end

#comment_todayObject



50
# File 'lib/tdiary/plugin/en/00default.rb', line 50

def comment_today; "Today's TSUKKOMI"; end

#comment_total(total) ⇒ Object



51
# File 'lib/tdiary/plugin/en/00default.rb', line 51

def comment_total( total ); "(Total: #{total})"; end

#conf_logger_listObject



950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
# File 'lib/tdiary/plugin/00default.rb', line 950

def conf_logger_list
	log_level_list = ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"]
	r = ''

	@conf['log_level'] ||= "INFO"

	log_level_list.each do |level|
		if level == @conf['log_level'] then
			select = " selected"
		end
		r << %Q|<option value="#{h level}"#{select}>#{level}</option>|
	end

	r << %Q|</select></p>|
end

#conf_theme_listObject

themes



830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
# File 'lib/tdiary/plugin/00default.rb', line 830

def conf_theme_list
	r = ''
	t = -1
	@conf_theme_list.each_with_index do |theme, index|
		if theme[0] == @conf.theme then
			select = " selected"
			t = index
		end
		r << %Q|<option value="#{h theme[0]}"#{select}>#{theme[1]}</option>|
	end
	img = t == -1 ? 'nowprinting' : @conf.theme.sub(/^.*\//, '')
	r << <<-HTML
	</select>
	<input name="css" size="30" value="#{h @conf.css}">
	</p>
	<p><img id="theme_thumbnail" src="http://www.tdiary.org/theme.image/#{img}.jpg" alt="#{@theme_thumbnail_label}"></p>
	#{@theme_location_comment unless @cgi.mobile_agent?}
	HTML
end

#content_script_typeObject



279
280
281
# File 'lib/tdiary/plugin/00default.rb', line 279

def content_script_type
	%Q[<meta http-equiv="Content-Script-Type" content="text/javascript; charset=#{h charset}">]
end

#convert_element(data) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/tdiary/plugin/90migrate.rb', line 31

def convert_element( data )
	case data
	when Hash, Array
		data.each_with_index do |e, i|
			if String === e
				data[i] = @conf.migrate_to_utf8( e )
			else
				convert_element( e )
			end
		end
	else
		data.instance_variables.each do |e|
			var = data.instance_variable_get( e )
			if String === var
				data.instance_variable_set( e, @conf.migrate_to_utf8( var ) )
			else
				convert_element( var )
			end
		end
	end
end

#convert_pstore(file) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/tdiary/plugin/90migrate.rb', line 7

def convert_pstore( file )
	require "pstore"

	db = PStore.new( file )
	begin
		roots = db.transaction{ db.roots }
	rescue ArgumentError
		if /\Aundefined class\/module (.+?)(::)?\z/ =~ $!.message
			klass = $1
			if /EmptdiaryString\z/ =~ klass
				eval( "class #{klass} < String; end" )
			else
				eval( "class #{klass}; end" )
			end
			retry
		end
	end
	db.transaction do
		roots.each do |root|
			convert_element( db[root] )
		end
	end
end

#css_tagObject



405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
# File 'lib/tdiary/plugin/00default.rb', line 405

def css_tag
	if @mode =~ /conf$/ then
		css = "#{h theme_url}/conf.css"
	elsif @conf.theme and @conf.theme.length > 0
		location, name = @conf.theme.split(/\//, 2)
		unless name
			name = location
			location = 'local'
		end
		css = __send__("theme_url_#{location}", name)
	else
		css = @conf.css
	end
	title = File::basename( css, '.css' )
	<<-CSS
<meta http-equiv="content-style-type" content="text/css">
	<link rel="stylesheet" href="#{h theme_url}/base.css" type="text/css" media="all">
	<link rel="stylesheet" href="#{h css}" title="#{h title}" type="text/css" media="all">
	CSS
end

#default_ogpObject



336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
# File 'lib/tdiary/plugin/00default.rb', line 336

def default_ogp
	if @conf.options2['sp.selected'] && @conf.options2['sp.selected'].include?('ogp.rb')
		if defined?(@conf.banner)
			%Q[<meta content="#{base_url}images/ogimage.png" property="og:image">]
		end
	else
		uri = @conf.index.dup
		uri[0, 0] = base_url if %r|^https?://|i !~ @conf.index
		uri.gsub!( %r|/\./|, '/' )
		image = File.join(uri, "#{theme_url}/ogimage.png")
		if @mode == 'day' then
			uri += anchor( @date.strftime( '%Y%m%d' ) )
		end
		%Q[<meta content="#{title_tag.gsub(/<[^>]*>/, "")}" property="og:title">
		<meta content="#{(@mode == 'day') ? 'article' : 'website'}" property="og:type">
		<meta content="#{h image}" property="og:image">
		<meta content="#{h uri}" property="og:url">]
	end
end

#description_tagObject



356
357
358
359
360
361
362
# File 'lib/tdiary/plugin/00default.rb', line 356

def description_tag
	if @conf.description and not(@conf.description.empty?) then
		%Q[<meta name="description" content="#{h @conf.description}">]
	else
		''
	end
end

#dnsblfilter_conf_htmlObject



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/tdiary/plugin/en/10spamfilter.rb', line 62

def dnsblfilter_conf_html
	r = <<-HTML
	<h3>Domain Blacklist Services</h3>
	<p>List of IP based Domain Blacklist Services</p>
	<p><textarea name="spamlookup.ip.list" cols="70" rows="5">#{h @conf['spamlookup.ip.list']}</textarea></p>
	<p>List of Domain Blacklist Services</p>
	<p><textarea name="spamlookup.domain.list" cols="70" rows="5">#{h @conf['spamlookup.domain.list']}</textarea></p>
	<p>List of Safe Domain. Example for search engine.</p>
	<p><textarea name="spamlookup.safe_domain.list" cols="70" rows="10">#{h @conf['spamlookup.safe_domain.list']}</textarea></p>
	HTML

	r
end

#doctypeObject

define DOCTYPE



197
198
199
# File 'lib/tdiary/plugin/00default.rb', line 197

def doctype
	%Q[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">]
end

#encodingObject

‘encoding’ method returns String of HTTP or HTML charactor encoding.



19
20
21
# File 'lib/tdiary/lang/en.rb', line 19

def encoding
	'UTF-8'
end

#encoding_oldObject



23
24
25
# File 'lib/tdiary/lang/en.rb', line 23

def encoding_old
	'UTF-8'
end

#hide_comment_day_limitObject



684
685
686
687
688
689
690
691
692
693
694
695
696
697
# File 'lib/tdiary/plugin/00default.rb', line 684

def hide_comment_day_limit
	if @conf.options.include?('spamfilter.date_limit') &&
			@conf.options['spamfilter.date_limit'] &&
			/\A\d+\z/ =~ @conf.options['spamfilter.date_limit'].to_s
		date_limit = @conf.options['spamfilter.date_limit'].to_s.to_i
		now = Time.now
		today = Time.local(now.year, now.month, now.day)
		limit = today - 24 * 60 * 60 * date_limit
		if @date < limit
			return true
		end
	end
	return false
end

#html_langObject

tDiary language setup: Japanese(ja)

Copyright © 2001-2011, TADA Tadashi <[email protected]> You can redistribute it and/or modify it under GPL2. or any later version



12
13
14
# File 'lib/tdiary/lang/en.rb', line 12

def html_lang
	'en-US'
end

#icon_tagObject



324
325
326
327
328
329
330
331
332
333
334
# File 'lib/tdiary/plugin/00default.rb', line 324

def icon_tag
	if @conf.icon and not(@conf.icon.empty?) then
		if /\.ico$/ =~ @conf.icon then
			%Q[<link rel="shortcut icon" href="#{h @conf.icon}">]
		else
			%Q[<link rel="icon" href="#{h @conf.icon}">]
		end
	else
		''
	end
end

#index_page_tagObject



299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
# File 'lib/tdiary/plugin/00default.rb', line 299

def index_page_tag
	result = ''
	if @conf.index_page and @conf.index_page.size > 0 then
		result << %Q[<link rel="index" title="#{h navi_index}" href="#{h @conf.index_page}">\n\t]
	end
	if @prev_day then
		case @mode
		when 'day'
			result << %Q[<link rel="prev" title="#{navi_prev_diary( Time::local(*@prev_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]) )}" href="#{h @conf.index}#{anchor @prev_day}">\n\t]
		when 'nyear'
			result << %Q[<link rel="prev" title="#{navi_prev_nyear( Time::local(*@prev_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]) )}" href="#{h @conf.index}#{anchor @prev_day[4,4]}">\n\t]
		end
	end
	if @next_day then
		case @mode
		when 'day'
			result << %Q[<link rel="next" title="#{navi_next_diary( Time::local(*@next_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]) )}" href="#{h @conf.index}#{anchor @next_day}">\n\t]
		when 'nyear'
			result << %Q[<link rel="next" title="#{h navi_next_nyear( Time::local(*@next_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]) )}" href="#{h @conf.index}#{anchor @next_day[4,4]}">\n\t]
		end
	end
	result << %Q[<link rel="start" title="#{navi_latest}" href="#{h @conf.index}">\n\t]
	result.chop.chop
end

#insert(file) ⇒ Object

insert file. only enable unless @secure.



186
187
188
189
190
191
192
# File 'lib/tdiary/plugin/00default.rb', line 186

def insert( file )
	begin
		File::readlines( file ).join
	rescue
		%Q[<p class="message">#$! (#{h $!.class})<br>cannot read #{h file}.</p>]
	end
end

#jquery_tagObject



364
365
366
# File 'lib/tdiary/plugin/00default.rb', line 364

def jquery_tag
	%Q[<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js" type="text/javascript"></script>]
end

#js_urlObject



379
380
381
# File 'lib/tdiary/plugin/00default.rb', line 379

def js_url
	@cgi.is_a?(RackCGI) ? 'assets' : 'js'
end

#label_no_refererObject



12
# File 'lib/tdiary/plugin/en/05referer.rb', line 12

def label_no_referer; "Today's Links Excluding List"; end

#label_only_volatileObject



13
# File 'lib/tdiary/plugin/en/05referer.rb', line 13

def label_only_volatile; "Volatile Links List"; end

#label_referer_tableObject



14
# File 'lib/tdiary/plugin/en/05referer.rb', line 14

def label_referer_table; "Today's Links Conversion Rule"; end

#last_modified_headerObject



271
272
273
274
275
276
277
# File 'lib/tdiary/plugin/00default.rb', line 271

def last_modified_header
	if @last_modified then
		%Q|<meta http-equiv="Last-Modified" content="#{CGI::rfc1123_date( @last_modified )}">|
	else
		''
	end
end

#latest_day?(diary) ⇒ Boolean

Returns:

  • (Boolean)


99
100
101
102
103
104
# File 'lib/tdiary/plugin/05referer.rb', line 99

def latest_day?( diary )
	return false unless diary
	y = @years.keys.sort[-1]
	m = @years[y].sort[-1]
	diary.date.year == y.to_i and diary.date.month == m.to_i and diary.date.day == @diaries.keys.sort[-1][6,2].to_i
end


507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
# File 'lib/tdiary/plugin/00default.rb', line 507

def make_category_link( subtitle )
	r = ''
	if subtitle
		if respond_to?( :category_anchor ) then
			r << subtitle.sub( /^(\[([^\[]+?)\])+/ ) do
				$&.gsub( /\[(.*?)\]/ ) do
					$1.split( /,/ ).collect do |c|
						category_anchor( "#{CGI::unescapeHTML c}" )
					end.join
				end
			end
		else
			r << subtitle
		end
	end
	r
end

#migrate_to_utf8(str) ⇒ Object

‘migrate_to_utf8’ method converts string to UTF-8, but dummy in en.



37
38
39
# File 'lib/tdiary/lang/en.rb', line 37

def migrate_to_utf8( str )
	str.dup
end

#mobile_encodingObject

‘mobile_encoding’ method returns charactor encoding in mobile mode.



30
31
32
# File 'lib/tdiary/lang/en.rb', line 30

def mobile_encoding
	'UTF-8'
end

#mobile_label_hidden_diaryObject



105
# File 'lib/tdiary/plugin/en/00default.rb', line 105

def mobile_label_hidden_diary; 'This day is HIDDEN.'; end

#mobile_naviObject



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/tdiary/plugin/00default.rb', line 147

def mobile_navi
	result = []
	if @navi_user_days and @navi_user_days[0]
		result << %Q[<A HREF="#{h @conf.index}#{anchor @navi_user_days[0]}" ACCESSKEY="*">[*]#{mobile_navi_prev_diary}</A>]
	end
	if @mode != 'latest'
		result << %Q[<A HREF="#{h @conf.index}" ACCESSKEY="0">[0]#{mobile_navi_latest}</A>]
	end
	if @navi_user_days and @navi_user_days[2]
		result << %Q[<A HREF="#{h @conf.index}#{anchor @navi_user_days[2]}" ACCESSKEY="#">[#]#{mobile_navi_next_diary}</A>]
	end
	if @mode == 'day' then
		result << %Q[<A HREF="#{h @conf.update}?edit=true;year=#{@date.year};month=#{@date.month};day=#{@date.day}" ACCESSKEY="5">[5]#{mobile_navi_edit}</A>]
	else
		result << %Q[<A HREF="#{h @conf.update}" ACCESSKEY="5">[5]#{mobile_navi_update}</A>]
	end
	result << %Q[<A HREF="#{h @conf.update}?conf=default" ACCESSKEY="8">[8]#{mobile_navi_preference}</A>] unless /^(latest|month|day|conf|nyear)$/ === @mode
	result.join('|')
end

#mobile_navi_editObject



101
# File 'lib/tdiary/plugin/en/00default.rb', line 101

def mobile_navi_edit; "Edit"; end

#mobile_navi_latestObject

labels (for mobile)



99
# File 'lib/tdiary/plugin/en/00default.rb', line 99

def mobile_navi_latest; 'Latest'; end

#mobile_navi_next_diaryObject



104
# File 'lib/tdiary/plugin/en/00default.rb', line 104

def mobile_navi_next_diary; 'Next'; end

#mobile_navi_preferenceObject



102
# File 'lib/tdiary/plugin/en/00default.rb', line 102

def mobile_navi_preference; 'Prefs'; end

#mobile_navi_prev_diaryObject



103
# File 'lib/tdiary/plugin/en/00default.rb', line 103

def mobile_navi_prev_diary; 'Prev'; end

#mobile_navi_updateObject



100
# File 'lib/tdiary/plugin/en/00default.rb', line 100

def mobile_navi_update; 'Update'; end

#my(a, str, title = nil) ⇒ Object

make anchor tag in my diary



548
549
550
551
552
553
554
555
556
557
558
# File 'lib/tdiary/plugin/00default.rb', line 548

def my( a, str, title = nil )
	date, _, frag = a.scan( /^(\d{4}|\d{6}|\d{8}|\d{8}-\d+)([^\d]*)?#?([pct]\d+)?$/ )[0]
	anc = frag ? "#{date}#{frag}" : date
	index = /^https?:/ =~ @conf.index ? '' : base_url
	index += @conf.index.sub(%r|^\./|, '')
	if title then
		%Q[<a href="#{h index}#{anchor anc}" title="#{h title}">#{str}</a>]
	else
		%Q[<a href="#{h index}#{anchor anc}">#{str}</a>]
	end
end

make navigation buttons



32
33
34
35
36
37
# File 'lib/tdiary/plugin/00default.rb', line 32

def navi
	result = %Q[<div class="adminmenu">\n]
	result << navi_user
	result << navi_admin
	result << %Q[</div>]
end


137
138
139
140
141
142
143
144
145
# File 'lib/tdiary/plugin/00default.rb', line 137

def navi_admin
	if @mode == 'day' then
		result = navi_item( "#{h @conf.update}?edit=true;year=#{@date.year};month=#{@date.month};day=#{@date.day}", h(navi_edit), "nofollow" )
	else
		result = navi_item( h(@conf.update), h(navi_update), "nofollow")
	end
	result << navi_item( "#{h @conf.update}?conf=default", h(navi_preference) ) if /^(latest|month|day|comment|conf|nyear|category.*)$/ !~ @mode
	result
end


72
# File 'lib/tdiary/plugin/en/00default.rb', line 72

def navi_edit; "Edit"; end


68
# File 'lib/tdiary/plugin/en/00default.rb', line 68

def navi_index; 'Top'; end


39
40
41
42
43
# File 'lib/tdiary/plugin/00default.rb', line 39

def navi_item( link, label, rel = nil )
	result = %Q[<span class="adminmenu"><a href="#{link}"]
	result << %Q[ rel="#{rel}"] if rel
	result << %Q[>#{label}</a></span>\n]
end


69
# File 'lib/tdiary/plugin/en/00default.rb', line 69

def navi_latest; 'Latest'; end


75
# File 'lib/tdiary/plugin/en/00default.rb', line 75

def navi_next_diary(date); "Next(#{date.strftime(@conf.date_format)})"; end


77
# File 'lib/tdiary/plugin/en/00default.rb', line 77

def navi_next_month; "Next month"; end


81
# File 'lib/tdiary/plugin/en/00default.rb', line 81

def navi_next_ndays; "#{@conf.latest_limit} days after"; end


79
# File 'lib/tdiary/plugin/en/00default.rb', line 79

def navi_next_nyear(date); "Next(#{date.strftime('%m-%d')})"; end


70
# File 'lib/tdiary/plugin/en/00default.rb', line 70

def navi_oldest; 'Oldest'; end


73
# File 'lib/tdiary/plugin/en/00default.rb', line 73

def navi_preference; "Preference"; end


74
# File 'lib/tdiary/plugin/en/00default.rb', line 74

def navi_prev_diary(date); "Prev(#{date.strftime(@conf.date_format)})"; end


76
# File 'lib/tdiary/plugin/en/00default.rb', line 76

def navi_prev_month; "Prev month"; end


80
# File 'lib/tdiary/plugin/en/00default.rb', line 80

def navi_prev_ndays; "#{@conf.latest_limit} days before"; end


78
# File 'lib/tdiary/plugin/en/00default.rb', line 78

def navi_prev_nyear(date); "Prev(#{date.strftime('%m-%d')})"; end


71
# File 'lib/tdiary/plugin/en/00default.rb', line 71

def navi_update; "Append"; end


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/tdiary/plugin/00default.rb', line 45

def navi_user
	result = navi_user_default

	case @mode
	when 'latest'
		result << navi_user_latest
	when 'day'
		result << navi_user_day
	when 'month'
		result << navi_user_month
	when 'nyear'
		result << navi_user_nyear
	when 'edit'
		result << navi_user_edit
	else
		result << navi_user_else
	end
	result
end


79
80
81
82
83
84
85
86
87
# File 'lib/tdiary/plugin/00default.rb', line 79

def navi_user_day
	result = ''
	if @navi_user_days then
		result << navi_item( "#{h @conf.index}#{anchor @navi_user_days[0]}", "&laquo;#{h navi_prev_diary(navi_user_format(@navi_user_days[0]))}" ) if @navi_user_days[0]
		result << navi_item( h(@conf.index), h(navi_latest) )
		result << navi_item( "#{h @conf.index}#{anchor @navi_user_days[2]}", "#{h navi_next_diary(navi_user_format(@navi_user_days[2]))}&raquo;" ) if @navi_user_days[2]
	end
	result
end


65
66
67
68
69
# File 'lib/tdiary/plugin/00default.rb', line 65

def navi_user_default
	result = ''
	result << navi_item( h(@conf.index_page), h(navi_index) ) unless @conf.index_page.empty?
	result
end


115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/tdiary/plugin/00default.rb', line 115

def navi_user_edit
	result = ''
	if @prev_day then
		a = @prev_day.scan( /^(\d{4})(\d\d)(\d\d)$/ ).flatten
		result << navi_item( "#{h @conf.update}?edit=true;year=#{a[0]};month=#{a[1]};day=#{a[2]}", "&laquo;#{h navi_prev_diary(Time::local(*@prev_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]))}" )
	end
	result << navi_item( h(@conf.index), h(navi_latest) )
	if @next_day then
		a = @next_day.scan( /^(\d{4})(\d\d)(\d\d)$/ ).flatten
		result << navi_item( "#{h @conf.update}?edit=true;year=#{a[0]};month=#{a[1]};day=#{a[2]}", "#{h navi_next_diary(Time::local(*@next_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]))}&raquo;" )
	end
	result
end


129
130
131
# File 'lib/tdiary/plugin/00default.rb', line 129

def navi_user_else
	navi_item( h(@conf.index), h(navi_latest) )
end


133
134
135
# File 'lib/tdiary/plugin/00default.rb', line 133

def navi_user_format( day )
	Time::local( *day.scan( /^(\d{4})(\d\d)(\d\d)$/ )[0] )
end


71
72
73
74
75
76
77
# File 'lib/tdiary/plugin/00default.rb', line 71

def navi_user_latest
	result = ''
	result << navi_item( "#{h @conf.index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "&laquo;#{navi_prev_ndays}", "next" ) if @conf['ndays.prev'] and not bot?
	result << navi_item( h(@conf.index), h(navi_latest) ) if @cgi.params['date'][0]
	result << navi_item( "#{h @conf.index}#{anchor( @conf['ndays.next'] + '-' + @conf.latest_limit.to_s )}", "#{navi_next_ndays}&raquo;", "prev") if @conf['ndays.next'] and not bot?
	result
end


89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/tdiary/plugin/00default.rb', line 89

def navi_user_month
	ym = []
	@years.keys.each do |y|
		ym += @years[y].collect {|m| y + m}
	end
	ym.sort!
	now = @date.strftime( '%Y%m' )
	return '' unless ym.index( now )
	prev_month = ym.index( now ) == 0 ? nil : ym[ym.index( now )-1]
	next_month = ym[ym.index( now )+1]

	result = ''
	result << navi_item( "#{h @conf.index}#{anchor( prev_month )}", "&laquo;#{h navi_prev_month}" ) if prev_month and not bot?
	result << navi_item( h(@conf.index), h(navi_latest) )
	result << navi_item( "#{h @conf.index}#{anchor( next_month )}", "#{h navi_next_month}&raquo;" ) if next_month and not bot?
	result
end


107
108
109
110
111
112
113
# File 'lib/tdiary/plugin/00default.rb', line 107

def navi_user_nyear
	result = ''
	result << navi_item( "#{h @conf.index}#{anchor @prev_day[4,4]}", "&laquo;#{h navi_prev_nyear(Time::local(*@prev_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]))}" ) if @prev_day
	result << navi_item( h(@conf.index), h(navi_latest) ) unless @mode == 'latest'
	result << navi_item( "#{h @conf.index}#{anchor @next_day[4,4]}", "#{h navi_next_nyear(Time::local(*@next_day.scan(/^(\d{4})(\d\d)(\d\d)$/)[0]))}&raquo;" ) if @next_day
	result
end

#no_diaryObject

labels (normal)



49
# File 'lib/tdiary/plugin/en/00default.rb', line 49

def no_diary; "No diary on #{@date.strftime( @conf.date_format )}"; end

#nyear_diary_labelObject



92
# File 'lib/tdiary/plugin/en/00default.rb', line 92

def nyear_diary_label; "my old days"; end

#nyear_diary_titleObject



93
# File 'lib/tdiary/plugin/en/00default.rb', line 93

def nyear_diary_title; "same days in past"; end


470
471
472
473
474
475
476
477
478
479
480
481
482
483
# File 'lib/tdiary/plugin/00default.rb', line 470

def nyear_link( date, title )
	if @conf.show_nyear and @mode != 'nyear' and !@cgi.mobile_agent? then
		m = date.strftime( '%m' )
		d = date.strftime( '%d' )
		years = @years.find_all {|year, months| months.include? m}
		if years.length >= 2 then
			%Q|#{title} <span class="nyear">[<a href="#{h @conf.index}#{anchor m + d}" title="#{h(nyear_diary_title)}">#{nyear_diary_label}</a>]</span>|
		else
			title
		end
	else
		title
	end
end

#old_ruby_alertObject

old ruby alert



1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
# File 'lib/tdiary/plugin/00default.rb', line 1004

def old_ruby_alert
	if RUBY_VERSION < '2.0.0' and !@conf['old_ruby_alert.hide']
		%Q|<div class="alert-warn">
			<a href="#" class="action-button" id="alert-old-ruby">&times;</a>
			#{old_ruby_alert_message}
		</div>|
	else
		''
	end
end

#old_ruby_alert_messageObject

old ruby alert



380
381
382
# File 'lib/tdiary/plugin/en/00default.rb', line 380

def old_ruby_alert_message
	"お使いのRuby #{RUBY_VERSION}は次のリリースからサポート対象外になります。"
end

#preview_commandObject



571
572
573
574
575
576
577
# File 'lib/tdiary/plugin/00default.rb', line 571

def preview_command
	if @mode == 'form' or @cgi.valid?( 'appendpreview' ) then
		'appendpreview'
	else
		'replacepreview'
	end
end

#preview_labelObject



90
# File 'lib/tdiary/plugin/en/00default.rb', line 90

def preview_label; 'Preview'; end

#referer_add_to_diary(diary, body) ⇒ Object



164
165
166
167
168
169
170
171
# File 'lib/tdiary/plugin/05referer.rb', line 164

def referer_add_to_diary( diary, body )
	return unless body
	body.lines.each do |r|
		count, ref = r.chomp.split( / /, 2 )
		next unless ref
		diary.add_referer( ref.chomp, count.to_i )
	end
end

#referer_file_name(diary) ⇒ Object



142
143
144
# File 'lib/tdiary/plugin/05referer.rb', line 142

def referer_file_name( diary )
	diary.date.strftime( "#{@conf.data_path}%Y/%Y%m%d.tdr" )
end

#referer_load(file, diary) ⇒ Object



150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/tdiary/plugin/05referer.rb', line 150

def referer_load( file, diary )
	begin
		File::open( file, 'rb' ) do |fh|
			fh.flock( File::LOCK_SH )
			fh.gets # read magic
			fh.read.split( /\r?\n\.\r?\n/ ).each do |l|
				headers, body = @conf.io_class.parse_tdiary( l )
				yield( headers, @conf.to_native( body ) )
			end
		end
	rescue Errno::ENOENT
	end
end

#referer_load_current(diary) ⇒ Object



173
174
175
176
177
178
# File 'lib/tdiary/plugin/05referer.rb', line 173

def referer_load_current( diary )
	return unless diary
	referer_load( referer_file_name( diary ), diary ) do |headers, body|
		referer_add_to_diary( diary, body )
	end
end

#referer_load_volatile(diary) ⇒ Object



180
181
182
183
184
185
186
# File 'lib/tdiary/plugin/05referer.rb', line 180

def referer_load_volatile( diary )
	referer_load( referer_volatile_file_name, diary ) do |headers, body|
		diary.current_date = headers['Date']
		referer_add_to_diary( diary, body )
	end
	diary.current_date = nil
end

#referer_of_today_long(diary, limit) ⇒ Object



239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'lib/tdiary/plugin/05referer.rb', line 239

def referer_of_today_long( diary, limit )
	return '' if bot?
	result = ''

	if diary and diary.count_referers != 0 then
		result << %Q[<div class="caption">#{referer_today}</div>\n]
		result << %Q[<ul>\n]
		diary.each_referer( limit ) do |count,ref|
			result << %Q[<li>#{count} <a rel="nofollow" href="#{h ref}">#{h disp_referer( @conf.referer_table, ref )}</a></li>\n]
		end
		result << '</ul>'
	end

	if @referer_volatile and latest_day?( diary ) and @referer_volatile.count_referers != 0 then
		result << %Q[<div class="caption">#{volatile_referer}</div>\n]
		result << %Q[<ul>\n]
		@referer_volatile.each_referer( limit ) do |count,ref|
			result << %Q[<li>#{count} <a rel="nofollow" href="#{h ref}">#{h disp_referer( @conf.referer_table, ref )}</a></li>\n]
		end
		result << '</ul>'
	end
	result
end

#referer_of_today_short(diary, limit) ⇒ Object

referer of today



235
236
237
# File 'lib/tdiary/plugin/05referer.rb', line 235

def referer_of_today_short( diary, limit )
	''
end

#referer_save(file, diary) ⇒ Object



188
189
190
191
192
193
194
195
196
# File 'lib/tdiary/plugin/05referer.rb', line 188

def referer_save( file, diary )
	File::open( file, File::WRONLY | File::CREAT ) do |fh|
		fh.flock( File::LOCK_EX )
		fh.rewind
		fh.truncate( 0 )
		fh.puts( ::TDiary::TDIARY_MAGIC )
		yield( fh )
	end
end

#referer_save_current(diary, referer) ⇒ Object



206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/tdiary/plugin/05referer.rb', line 206

def referer_save_current( diary, referer )
	return unless referer

	# checking only volatile list
	ref = CGI::unescape( referer.sub( /#.*$/, '' ).sub( /\?\d{8}$/, '' ) )
	@conf.only_volatile.each do |volatile|
		return if /#{volatile}/i =~ ref
	end

	diary.add_referer( referer )
	referer_save( referer_file_name( diary ), diary ) do |fh|
		referer_write_from_diary( fh, diary )
	end
end

#referer_save_triggerObject



17
18
19
20
21
22
23
24
25
26
# File 'lib/tdiary/plugin/05referer.rb', line 17

def referer_save_trigger
	return unless @conf.io_class.to_s == 'TDiary::IO::Default'
	return unless @mode =~ /^(latest|day|edit|append|replace)$/

	if @date then
		diary = @diaries[@date.strftime( '%Y%m%d' )]
		diary.clear_referers if diary
	end
	referer_update( diary )
end

#referer_save_volatile(diary, referer) ⇒ Object



221
222
223
224
225
226
227
228
229
230
# File 'lib/tdiary/plugin/05referer.rb', line 221

def referer_save_volatile( diary, referer )
	# to prevend the increase in file size
	return if diary.count_referers > 10000
	diary.add_referer( referer ) if referer
	referer_save( referer_volatile_file_name, diary ) do |fh|
		diary.each_date do |date|
			referer_write_from_diary( fh, diary )
		end
	end
end

#referer_todayObject

05referer.rb: Japanese resource of referer plugin

Copyright © 2006, TADA Tadashi <[email protected]> You can redistribute it and/or modify it under GPL2 or any later version.



9
# File 'lib/tdiary/plugin/en/05referer.rb', line 9

def referer_today; "Today's Links"; end

#referer_update(diary) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/tdiary/plugin/05referer.rb', line 106

def referer_update( diary )
	# ignore an invalid URL including a non-ASCII character
	return if @cgi.referer && !@cgi.referer.match(/^[!-~]+$/)

	@referer_volatile = RefererDiary::new( @conf.latest_limit )

	case @mode
	when 'latest'
		if @cgi.referer and !@conf.referer_day_only then
			referer_load_volatile( @referer_volatile )
			referer_save_volatile( @referer_volatile, @cgi.referer )
		end

	when 'day'
		if diary
			referer_load_current( diary )
			referer_save_current( diary, @cgi.referer )
			if latest_day?( diary ) then
				referer_load_volatile( @referer_volatile )
			elsif @cgi.referer
				referer_load_volatile( @referer_volatile )
				referer_save_volatile( @referer_volatile, @cgi.referer )
			end
		end

	when "edit"
		referer_load_current( diary )
		referer_load_volatile( @referer_volatile ) if latest_day?( diary )

	when /^(append|replace)$/
		referer_load_volatile( @referer_volatile )
		@referer_volatile.clear_oldest_referer( @date.strftime( '%Y%m%d' ) )
		referer_save_volatile( @referer_volatile, nil )
	end
end

#referer_volatile_file_nameObject



146
147
148
# File 'lib/tdiary/plugin/05referer.rb', line 146

def referer_volatile_file_name
	"#{@conf.data_path}volatile.tdr"
end

#referer_write_from_diary(fh, diary) ⇒ Object



198
199
200
201
202
203
204
# File 'lib/tdiary/plugin/05referer.rb', line 198

def referer_write_from_diary( fh, diary )
	fh.puts( "Date: #{diary.date.strftime( '%Y%m%d' )}\n\n" )
	diary.each_referer( diary.count_referers ) do |count,ref|
		fh.puts( "#{count} #{ref}" )
	end
	fh.puts( '.' )
end

#robot_controlObject



441
442
443
444
445
446
447
# File 'lib/tdiary/plugin/00default.rb', line 441

def robot_control
	if /^form|edit|preview|showcomment$/ =~ @mode then
		'<meta name="robots" content="noindex,nofollow">'
	else
		''
	end
end

#saveconf_commentObject

comments



880
881
882
883
884
885
886
887
888
889
# File 'lib/tdiary/plugin/00default.rb', line 880

def saveconf_comment
	if @mode == 'saveconf' then
		@conf.show_comment = @cgi.params['show_comment'][0] == 'true' ? true : false
		@conf.comment_limit = @cgi.params['comment_limit'][0].to_i
		@conf.comment_limit = 3 if @conf.comment_limit < 1

		@conf.comment_limit_per_day = @cgi.params['comment_limit_per_day'][0].to_i
		@conf.comment_limit_per_day = 0 if @conf.comment_limit_per_day < 0
	end
end

#saveconf_csrf_protectionObject



891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
# File 'lib/tdiary/plugin/00default.rb', line 891

def saveconf_csrf_protection
	if @mode == 'saveconf' then
		err = nil
		check_method = 0
		case @cgi.params['check_enabled']
		when ['true']
		else
			err = :param
		end
		case @cgi.params['check_referer']
		when ['true']
			check_method |= 1
		when ['false']
			check_method |= 0
		else
			err = :param
		end
		case @cgi.params['check_key']
		when ['true']
			check_method |= 2
		when ['false']
			check_method |= 0
		else
			err = :param
		end
		err = :param if check_method == 0
		check_key = ''
		key_seed = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
		1.upto(30) do
			check_key << key_seed[rand( key_seed.length )]
		end

		if check_method & 2 != 0 && (!check_key || check_key == '') then
			err ||= :key
		end

		unless err
			old_key = @conf['csrf_protection_key']
			old_method = @conf['csrf_protection_method']
			@conf['csrf_protection_method'] = check_method
			@conf['csrf_protection_key'] = check_key
			if (check_method & 2 == 2 &&
			    (old_method & 2 == 0 || old_key != check_key))
				@conf.save
				raise ForceRedirect, "#{h @conf.update}?conf=csrf_protection#{@cgi.referer ? '&amp;referer_exists=true' : ''}"
			end
		end
		err
	else
		nil
	end
end

#saveconf_defaultObject

basic (default)



787
788
789
790
791
792
793
794
795
796
797
798
799
800
# File 'lib/tdiary/plugin/00default.rb', line 787

def saveconf_default
	if @mode == 'saveconf' then
		@conf.html_title = @conf.to_native( @cgi.params['html_title'][0] )
		@conf.author_name = @conf.to_native( @cgi.params['author_name'][0] )
		@conf.author_mail = @cgi.params['author_mail'][0]
		@conf.index_page = @cgi.params['index_page'][0]
		@conf.description = @conf.to_native( @cgi.params['description'][0] )
		@conf.icon = @cgi.params['icon'][0]
		@conf.banner = @cgi.params['banner'][0]
		@conf['base_url'] = @cgi.params['base_url'][0]
		@conf.x_frame_options = @cgi.params['x_frame_options'][0]
		@conf.x_frame_options = nil if @conf.x_frame_options.empty?
	end
end

#saveconf_displayObject

diaplay



811
812
813
814
815
816
817
818
819
820
# File 'lib/tdiary/plugin/00default.rb', line 811

def saveconf_display
	if @mode == 'saveconf' then
		@conf.section_anchor = @conf.to_native( @cgi.params['section_anchor'][0] )
		@conf.comment_anchor = @conf.to_native( @cgi.params['comment_anchor'][0] )
		@conf.date_format = @conf.to_native( @cgi.params['date_format'][0] )
		@conf.latest_limit = @cgi.params['latest_limit'][0].to_i
		@conf.latest_limit = 10 if @conf.latest_limit < 1
		@conf.show_nyear = @cgi.params['show_nyear'][0] == 'true' ? true : false
	end
end

#saveconf_headerObject

header/footer (header)



803
804
805
806
807
808
# File 'lib/tdiary/plugin/00default.rb', line 803

def saveconf_header
	if @mode == 'saveconf' then
		@conf.header = @conf.to_native( @cgi.params['header'][0] ).lines.map{|s| s.chomp}.join( "\n" ).sub( /\n+\z/, '' )
		@conf.footer = @conf.to_native( @cgi.params['footer'][0] ).lines.map{|s| s.chomp}.join( "\n" ).sub( /\n+\z/, '' )
	end
end

#saveconf_loggerObject



944
945
946
947
948
# File 'lib/tdiary/plugin/00default.rb', line 944

def saveconf_logger
	if @mode == 'saveconf' then
		@conf['log_level'] = @cgi.params['log_level'][0]
	end
end

#saveconf_recommendfilterObject



966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
# File 'lib/tdiary/plugin/00default.rb', line 966

def saveconf_recommendfilter
	if @mode == 'saveconf' && @cgi.params['recommend.filter'][0] == 'true' then
		@conf['sf.selected'] = ""
		@conf['comment_description'] = "ツッコミ・コメントがあればどうぞ! URIは1つまで入力可能です。"

		if @sp_path.inject(false){|r, dir| r || FileTest.exist?("#{dir}/hide-mail-field.rb") }
			if @conf['sp.selected']
				@conf['sp.selected'].concat("hide-mail-field.rb\n")
			else
				@conf['sp.selected'] = "hide-mail-field.rb\n"
			end
			@conf['spamfilter.bad_mail_patts'] = "@"
			@conf['comment_description'].concat("spam対策でE-mail欄は隠してあります。もしE-mail欄が見えていても、何も入力しないで下さい。")
		end

		@conf['spamfilter.bad_comment_patts'] = "href=\r\nurl=\r\nURL=\r\n"
		@conf['spamfilter.bad_ip_addrs'] = ""
		@conf['spamfilter.bad_uri_patts'] = ""
		@conf['spamfilter.bad_uri_patts_for_mails'] = false
		@conf['spamfilter.date_limit'] = "7"
		@conf['spamfilter.debug_file'] = ""
		@conf['spamfilter.debug_mode'] = false
		@conf['spamfilter.filter_mode'] = false
		@conf['spamfilter.hide_commentform'] = true
		@conf['spamfilter.linkcheck'] = 1
		@conf['spamfilter.max_rate'] = "0"
		@conf['spamfilter.max_uris'] = "1"
		@conf['spamfilter.resolv_check'] = true
		@conf['spamfilter.resolv_check_mode'] = false
		@conf['spamlookup.domain.list'] = "bsb.spamlookup.net\r\nsc.surbl.org\r\nrbl.bulkfeeds.jp"
		@conf['spamlookup.ip.list'] = "dnsbl.spam-champuru.livedoor.com"
		@conf['spamlookup.safe_domain.list'] = "www.google.com\r\nwww.google.co.jp\r\nezsch.ezweb.ne.jp\r\nwww.yahoo.co.jp\r\nsearch.mobile.yahoo.co.jp\r\nwww.bing.com"
	end
end

#saveconf_refererObject

referer preference



266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# File 'lib/tdiary/plugin/05referer.rb', line 266

def saveconf_referer
	if @mode == 'saveconf' then
		@conf.show_referer = @cgi.params['show_referer'][0] == 'true' ? true : false

		no_referer2 = []
		@conf.to_native( @cgi.params['no_referer'][0] ).lines.each do |ref|
			ref.strip!
			no_referer2 << ref if ref.length > 0
		end
		@conf.no_referer2 = no_referer2

		only_volatile2 = []
		@conf.to_native( @cgi.params['only_volatile'][0] ).lines.each do |ref|
			ref.strip!
			only_volatile2 << ref if ref.length > 0
		end
		@conf.only_volatile2 = only_volatile2

		referer_table2 = []
		@conf.to_native( @cgi.params['referer_table'][0] ).lines.each do |pair|
			u, n = pair.sub( /[\r\n]+/, '' ).split( /[ \t]+/, 2 )
			referer_table2 << [u,n] if u and n
		end
		@conf.referer_table2 = referer_table2
	end
end

#saveconf_themeObject



865
866
867
868
869
870
871
872
873
874
875
876
877
# File 'lib/tdiary/plugin/00default.rb', line 865

def saveconf_theme
	if @mode == 'saveconf' then
		@conf.theme = @cgi.params['theme'][0]
		@conf.css = @cgi.params['css'][0]
	end
	@conf_theme_list = methods.inject([]) {|conf_theme_list, method|
		if /^theme_list_/ =~ method.to_s
			__send__(method, conf_theme_list)
		else
			conf_theme_list
		end
	}.sort.compact.uniq
end

#saveconf_timezoneObject

timezone



823
824
825
826
827
# File 'lib/tdiary/plugin/00default.rb', line 823

def saveconf_timezone
	if @mode == 'saveconf' then
		@conf.hour_offset = @cgi.params['hour_offset'][0].to_f
	end
end

#script_tagObject



383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
# File 'lib/tdiary/plugin/00default.rb', line 383

def script_tag
	require 'uri'
	query = script_tag_query_string
	html = @javascripts.sort.map {|script|
		if URI(script).scheme or script =~ %r|\A//|
			%Q|<script src="#{script}" type="text/javascript"></script>|
		else
			%Q|<script src="#{js_url}/#{script}#{query}" type="text/javascript"></script>|
		end
	}.join( "\n\t" )
	html << "\n" << <<-HEAD
		<script type="text/javascript"><!--
		#{@javascript_setting.map{|a| "#{a[0]} = #{a[1]};"}.join("\n\t\t")}
		//-->
		</script>
	HEAD
end

#script_tag_query_stringObject



375
376
377
# File 'lib/tdiary/plugin/00default.rb', line 375

def script_tag_query_string
	"?#{TDIARY_VERSION}#{Time::now.strftime('%Y%m%d')}"
end

#sf_doc_url(file) ⇒ Object

url of the document



32
33
34
# File 'lib/tdiary/plugin/60sf.rb', line 32

def sf_doc_url( file )
	"http://docs.tdiary.org/#{@conf.lang}/?#{CGI::escape( file )}"
end

#sf_filtersObject



143
144
145
# File 'lib/tdiary/plugin/60sf.rb', line 143

def sf_filters
	@sf_filters||[]
end

#sf_hash_from_dirs(dirs) ⇒ Object

hash of paths from array of dirs



18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/tdiary/plugin/60sf.rb', line 18

def sf_hash_from_dirs( dirs )
	r = Hash.new
	dirs.each do |dir|
		Dir::glob( "#{dir}/*.rb" ).each do |path|
			filename = File.basename( path )
			unless r[ filename ] then
				r[ filename ] = path
			end
		end
	end
	r
end

#sf_li_plugins(paths, is_checked) ⇒ Object

<li> list of plugins



37
38
39
40
41
42
43
44
45
# File 'lib/tdiary/plugin/60sf.rb', line 37

def sf_li_plugins( paths, is_checked )
	r = ''
	paths.collect { |path| File.basename( path ) }.sort.each do |file|
		r += <<-_HTML
			<li><input name="#{SF_PREFIX}.#{h file}" type="checkbox" value="t"#{'checked' if is_checked}><a href="#{h sf_doc_url( file )}">#{h file}</a>
		_HTML
	end
	r
end

#sf_list_plugins(sf_opt) ⇒ Object

lists of plugins



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/tdiary/plugin/60sf.rb', line 48

def sf_list_plugins( sf_opt )
	r = ''
	if ( sf_opt && !sf_opt.empty? ) then
		# categorize the available plugins
		used = Array.new
		notused = Array.new
		unknown = Array.new
		# File.basenmame needed to read option from 01sp.rb <= 1.10
		selected_array = sf_option( 'selected' ) ? sf_option( 'selected').split( /\n/ ).collect{ |p| File.basename( p ) } : []
		notselected_array = sf_option( 'notselected' ) ? sf_option( 'notselected').split( /\n/ ).collect{ |p| File.basename( p ) } : []
		sf_opt.keys.each do |path|
			if selected_array.include?( path ) then
				used << path
			elsif notselected_array.include?( path ) then
				notused << path
			else
				unknown << path
			end
		end

		# list up
		r += @sf_label_please_select
		unless unknown.empty? then
			r += @sf_label_new
			r += "<ul>\n"
			r += sf_li_plugins( unknown, sf_option( 'usenew' ) )
			r += "</ul>\n"
		end
		# selected plugins
		unless used.empty? then
			r += @sf_label_used
			r += "<ul>\n"
			r += sf_li_plugins( used, true )
			r += "</ul>\n"
		end
		# not selected plugins
		unless notused.empty? then
			r += @sf_label_notused
			r += "<ul>\n"
			r += sf_li_plugins( notused, false )
			r += "</ul>\n"
		end
	else
		r += @sf_label_noplugin
	end
	r
end

#sf_option(key) ⇒ Object

get plugin option



13
14
15
# File 'lib/tdiary/plugin/60sf.rb', line 13

def sf_option( key )
	@conf["#{SF_PREFIX}.#{key}"]
end

#shorten(str, len = 120) ⇒ Object

‘shorten’ method cuts string length.



58
59
60
61
62
63
64
65
# File 'lib/tdiary/lang/en.rb', line 58

def shorten( str, length = 120 )
	matched = str.gsub( /\n/, ' ' ).scan( /^.{0,#{length - 2}}/u )[0]
	unless $'.empty?
		matched + '..'
	else
		matched
	end
end

#smartphone_tagObject



426
427
428
429
430
431
432
433
434
435
436
437
438
439
# File 'lib/tdiary/plugin/00default.rb', line 426

def smartphone_tag
	if @cgi.smartphone? then
	<<-CSS
<meta name = "viewport" content = "width = device-width">
	<style type="text/css"><!--
	form.comment textarea {
		width: 80%;
	}
	--></style>
	CSS
	else
		''
	end
end

#sp_doc_url(file) ⇒ Object

url of the document



35
36
37
# File 'lib/tdiary/plugin/50sp.rb', line 35

def sp_doc_url( file )
	"http://docs.tdiary.org/#{@conf.lang}/?#{CGI::escape( file )}"
end

#sp_hash_from_dirs(dirs) ⇒ Object

hash of paths from array of dirs



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/tdiary/plugin/50sp.rb', line 21

def sp_hash_from_dirs( dirs )
	r = Hash.new
	dirs.each do |dir|
		Dir::glob( "#{dir}/*.rb" ).each do |path|
			filename = File.basename( path )
			unless r[ filename ] then
				r[ filename ] = path
			end
		end
	end
	r
end

#sp_li_plugins(paths, is_checked) ⇒ Object

<li> list of plugins



40
41
42
43
44
45
46
47
48
# File 'lib/tdiary/plugin/50sp.rb', line 40

def sp_li_plugins( paths, is_checked )
	r = ''
	paths.collect { |path| File.basename( path ) }.sort.each do |file|
		r += <<-_HTML
			<li><input name="#{SP_PREFIX}.#{h file}" type="checkbox" value="t"#{'checked' if is_checked}><a href="#{h sp_doc_url( file )}">#{h file}</a>
		_HTML
	end
	r
end

#sp_list_plugins(sp_opt) ⇒ Object

lists of plugins



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/tdiary/plugin/50sp.rb', line 51

def sp_list_plugins( sp_opt )
	r = ''
	if ( sp_opt && !sp_opt.empty? ) then
		# categorize the available plugins
		used = Array.new
		notused = Array.new
		unknown = Array.new
		# File.basenmame needed to read option from 01sp.rb <= 1.10
		selected_array = sp_option( 'selected' ) ? sp_option( 'selected').split( /\n/ ).collect{ |p| File.basename( p ) } : []
		notselected_array = sp_option( 'notselected' ) ? sp_option( 'notselected').split( /\n/ ).collect{ |p| File.basename( p ) } : []
		sp_opt.keys.each do |path|
			if selected_array.include?( path ) then
				used << path
			elsif notselected_array.include?( path ) then
				notused << path
			else
				unknown << path
			end
		end

		# list up
		r += @sp_label_please_select
		unless unknown.empty? then
			r += @sp_label_new
			r += "<ul>\n"
			r += sp_li_plugins( unknown, sp_option( 'usenew' ) )
			r += "</ul>\n"
		end
		# selected plugins
		unless used.empty? then
			r += @sp_label_used
			r += "<ul>\n"
			r += sp_li_plugins( used, true )
			r += "</ul>\n"
		end
		# not selected plugins
		unless notused.empty? then
			r += @sp_label_notused
			r += "<ul>\n"
			r += sp_li_plugins( notused, false )
			r += "</ul>\n"
		end
	else
		r += @sp_label_noplugin
	end
	r
end

#sp_option(key) ⇒ Object

get plugin option



16
17
18
# File 'lib/tdiary/plugin/50sp.rb', line 16

def sp_option( key )
	@conf["#{SP_PREFIX}.#{key}"]
end

#spamfilter_conf_htmlObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/tdiary/plugin/en/10spamfilter.rb', line 9

def spamfilter_conf_html
	r = <<-HTML
	<h3>Basic filters</h3>
	<p>Which dou you want to do spam TSUKKOMI finally?<br>
			<select name="spamfilter.filter_mode">
			<option value="true"#{" selected" if @conf['spamfilter.filter_mode']}>hide</option>
			<option value="false"#{" selected" unless @conf['spamfilter.filter_mode']}>dispose</option>
		</select>
	</p>
	<p>It is spam when TSUKKOMI body has URIs over this value.<br>
		<input type="text" name="spamfilter.max_uris" value="#{h @conf['spamfilter.max_uris']}" size="5"></p>
	<p>It is spam when percentage of URI charctors in TSUKKOMI body is over this value.<br>
		<input type="text" name="spamfilter.max_rate" value="#{h @conf['spamfilter.max_rate']}" size="5"></p>
	<p>It is spam when TSUKKOMI body has URIs match with these patterns.<br>
		<textarea name="spamfilter.bad_uri_patts" cols="60" rows="8">#{h( @conf['spamfilter.bad_uri_patts'] || '' )}</textarea></p>
	<p>It is spam when TSUKKOMI body matches with these patterns.<br>
		<textarea name="spamfilter.bad_comment_patts" cols="60" rows="8">#{h( @conf['spamfilter.bad_comment_patts'] || '' )}</textarea></p>
	<p>It is spam when mail address matches with these patterns.<br>
		<textarea name="spamfilter.bad_mail_patts" cols="60" rows="8">#{h( @conf['spamfilter.bad_mail_patts'] || '' )}</textarea></p>
	<p>Use patterns of URI for checking mail address.<br>
		<select name="spamfilter.bad_uri_patts_for_mails">
			<option value="true"#{" selected" if @conf['spamfilter.bad_uri_patts_for_mails']}>ON</option>
			<option value="false"#{" selected" unless @conf['spamfilter.bad_uri_patts_for_mails']}>OFF</option>
		</select></p>

	<h3>Date</h3>
	<p>Javascript is used to display TSUKKOMI from into<br>
		<input type="text" name="spamfilter.date_limit" value="#{h @conf['spamfilter.date_limit']}" size="5">days before (null: no limit, 0: only today)
	</p>

	<h3>IP address filters</h3>
	<p>It is spam when sender IP address matches these patterns. You have to specify complete IP address or part of IP address ends by '.'.<br>
		<textarea name="spamfilter.bad_ip_addrs" cols="60" rows="8">#{h( @conf['spamfilter.bad_ip_addrs'] || '' )}</textarea></p>
	</p>
	<h3>Description of TSUKKOMI</h3>
	<p>Show messeges and spam conditions for your subscribers.<br><textarea name="comment_description" cols="70" rows="5">#{h comment_description}</textarea></p>
	HTML

	unless @conf.secure then
	r << <<-HTML
	<h3>for Debug</h3>
	<p>Debug mode.<br>
		<select name="filter.debug_mode">
			<option value="0"#{" selected" if @conf['filter.debug_mode'] == 0}>OFF</option>
			<option value="1"#{" selected" if @conf['filter.debug_mode'] == 1}>Only spam</option>
			<option value="2"#{" selected" if @conf['filter.debug_mode'] == 2}>Full</option>
		</select></p>
	HTML
	end

	r
end

#style_howtoObject

link to HOWTO write diary



42
43
44
# File 'lib/tdiary/plugin/en/00default.rb', line 42

def style_howto
	%Q|/<a href="http://docs.tdiary.org/en/?#{h @conf.style}Style">How to write</a>|
end

#submit_commandObject

other resources



563
564
565
566
567
568
569
# File 'lib/tdiary/plugin/00default.rb', line 563

def submit_command
	if @mode == 'form' or @cgi.valid?( 'appendpreview' ) then
		'append'
	else
		'replace'
	end
end

#submit_labelObject



83
84
85
86
87
88
89
# File 'lib/tdiary/plugin/en/00default.rb', line 83

def submit_label
	if @mode == 'form' or @cgi.valid?( 'appendpreview' ) then
		'Append'
	else
		'Replace'
	end
end


525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
# File 'lib/tdiary/plugin/00default.rb', line 525

def subtitle_link( date, index, subtitle )
	r = ''

	if @cgi.mobile_agent? then
		r << %Q[<A NAME="p#{'%02d' % index}">*</A> ]
		r << %Q|(#{h @author})| if @multi_user and @author and subtitle
	else
		if date then
			r << "<a "
			r << %Q[name="p#{'%02d' % index}" ] if @anchor_name
			param = "#{date.strftime( '%Y%m%d' )}#p#{'%02d' % index}"
			titleattr = (not subtitle or subtitle.empty?) ? '' : %Q[ title="#{remove_tag( apply_plugin( subtitle )).gsub( /"/, "&quot;" )}"]
			r << %Q[href="#{h @conf.index}#{anchor param}"#{titleattr}>#{@conf.section_anchor}</a> ]
		end

		r << %Q[(#{h @author}) ] if @multi_user and @author and subtitle
	end
	r << make_category_link( subtitle )
end

#theme_list_local(list) ⇒ Object



850
851
852
853
854
855
856
857
858
859
# File 'lib/tdiary/plugin/00default.rb', line 850

def theme_list_local(list)
	theme_paths = [::TDiary::PATH, TDiary.server_root].map {|d| "#{d}/theme/*" }
	Dir::glob( theme_paths ).sort.map {|dir|
		theme = dir.sub( %r[.*/theme/], '')
		next unless FileTest::file?( "#{dir}/#{theme}.css".untaint )
		name = theme.split( /_/ ).collect{|s| s.capitalize}.join( ' ' )
		list << ["local/#{theme}",name]
	}
	list
end

#theme_urlObject



401
402
403
# File 'lib/tdiary/plugin/00default.rb', line 401

def theme_url
	@cgi.is_a?(RackCGI) ? 'assets' : 'theme'
end

#theme_url_local(theme) ⇒ Object



861
862
863
# File 'lib/tdiary/plugin/00default.rb', line 861

def theme_url_local(theme)
	"#{h theme_url}/#{h theme}/#{h theme}.css"
end

#title_of_day(date, title) ⇒ Object



456
457
458
459
460
461
462
463
464
# File 'lib/tdiary/plugin/00default.rb', line 456

def title_of_day( date, title )
	r = <<-HTML
	<span class="date">
	<a href="#{h @conf.index}#{anchor( date.strftime( '%Y%m%d' ) )}">#{date.strftime @conf.date_format}</a>
	</span>
	<span class="title">#{title}</span>
	HTML
	return r.gsub( /^\t+/, '' ).chomp
end

#title_tagObject

header



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/tdiary/plugin/en/00default.rb', line 12

def title_tag
	r = "<title>#{h @conf.html_title}"
	case @mode
	when 'day', 'comment'
		r << "(#{@date.strftime( '%Y-%m-%d' )})" if @date
	when 'month'
		r << "(#{@date.strftime( '%Y-%m' )})" if @date
	when 'form'
		r << '(Append)'
	when 'edit'
		r << '(Edit)'
	when 'preview'
		r << '(Preview)'
	when 'showcomment'
		r << '(TSUKKOMI Status Change Completed)'
	when 'conf'
		r << '(Preferences)'
	when 'saveconf'
		r << '(Preferences Changed)'
	when 'nyear'
		years = @diaries.keys.map {|ymd| ymd.sub(/^\d{4}/, "")}
		r << "(#{years[0].sub( /^(\d\d)/, '\1-')}[#{nyear_diary_label}])" if @date
	end
	r << '</title>'
end

#to_mail(str) ⇒ Object

‘to_mail’ method converts string automatically to E-mail encoding.



51
52
53
# File 'lib/tdiary/lang/en.rb', line 51

def to_mail( str )
	str.dup
end

#to_mobile(str) ⇒ Object

‘to_mobile’ method converts string automatically to mobile mode encoding.



44
45
46
# File 'lib/tdiary/lang/en.rb', line 44

def to_mobile( str )
	str.dup
end

#to_utf8(str, charset = nil) ⇒ Object

convert to UTF-8



769
770
771
# File 'lib/tdiary/plugin/00default.rb', line 769

def to_utf8( str, charset = nil )
	@conf.to_native( str, charset )
end

#trackback_todayObject



65
# File 'lib/tdiary/plugin/en/00default.rb', line 65

def trackback_today; "Today's TrackBacks"; end

#trackback_total(total) ⇒ Object



66
# File 'lib/tdiary/plugin/en/00default.rb', line 66

def trackback_total( total ); "(Total: #{total})"; end

#volatile_refererObject



10
# File 'lib/tdiary/plugin/en/05referer.rb', line 10

def volatile_referer; "Links to old diaries"; end