tdiary 3.2.2.20130507

Sign up to get free protection for your applications and to get access to all the features.
Files changed (509) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +16 -0
  4. data/.travis.yml +29 -0
  5. data/Capfile +2 -0
  6. data/ChangeLog +3173 -0
  7. data/Gemfile +58 -0
  8. data/Gemfile.lock +201 -0
  9. data/LICENSE +340 -0
  10. data/Procfile +1 -0
  11. data/README.md +33 -0
  12. data/Rakefile +26 -0
  13. data/bin/tdiary +7 -0
  14. data/config.ru +61 -0
  15. data/data/.htaccess +2 -0
  16. data/doc/HOWTO-authenticate-in-rack.md +89 -0
  17. data/doc/HOWTO-make-io.md +305 -0
  18. data/doc/HOWTO-make-plugin.md +279 -0
  19. data/doc/HOWTO-make-theme.md +67 -0
  20. data/doc/HOWTO-testing-tDiary.md +44 -0
  21. data/doc/HOWTO-use-plugin.md +148 -0
  22. data/doc/HOWTO-write-tDiary.en.md +131 -0
  23. data/doc/HOWTO-write-tDiary.md +136 -0
  24. data/doc/INSTALL-paas.md +202 -0
  25. data/doc/INSTALL.md +160 -0
  26. data/doc/README.en.md +174 -0
  27. data/doc/README.md +56 -0
  28. data/doc/UPGRADE.md +164 -0
  29. data/doc/doc.css +115 -0
  30. data/dot.htaccess +27 -0
  31. data/index.fcgi +45 -0
  32. data/index.rb +57 -0
  33. data/js/00default.js +60 -0
  34. data/js/01conf.js +62 -0
  35. data/js/02edit.coffee +5 -0
  36. data/js/02edit.js +15 -0
  37. data/js/amazon.js +43 -0
  38. data/js/calendar3.js +130 -0
  39. data/js/caretposition.js +170 -0
  40. data/js/category.js +29 -0
  41. data/js/category_autocomplete.js +96 -0
  42. data/js/comment_ajax.js +27 -0
  43. data/js/draft.js +149 -0
  44. data/js/highlight.js +36 -0
  45. data/js/image.js +181 -0
  46. data/misc/convert2.rb +123 -0
  47. data/misc/filter/antispamservice.rb +101 -0
  48. data/misc/filter/limitdays.rb +40 -0
  49. data/misc/filter/linkcheck.rb +81 -0
  50. data/misc/filter/plugin/antispamservice.rb +82 -0
  51. data/misc/filter/plugin/en/antispamservice.rb +21 -0
  52. data/misc/filter/plugin/ja/antispamservice.rb +20 -0
  53. data/misc/lib/README +4 -0
  54. data/misc/lib/compatible.rb +1 -0
  55. data/misc/lib/fcgi_patch.rb +90 -0
  56. data/misc/migrate.rb +157 -0
  57. data/misc/paas/cloudfoundry/Gemfile +26 -0
  58. data/misc/paas/cloudfoundry/Gemfile.lock +85 -0
  59. data/misc/paas/heroku/Gemfile +22 -0
  60. data/misc/paas/heroku/Gemfile.lock +85 -0
  61. data/misc/paas/sqale/Gemfile +19 -0
  62. data/misc/paas/sqale/Gemfile.lock +85 -0
  63. data/misc/paas/sqale/Procfile +1 -0
  64. data/misc/paas/sqale/dot.env +1 -0
  65. data/misc/plugin/ChangeLog.DO_NOT_UPDATE +2333 -0
  66. data/misc/plugin/a.rb +211 -0
  67. data/misc/plugin/amazon.rb +403 -0
  68. data/misc/plugin/amazon/README.en +17 -0
  69. data/misc/plugin/amazon/README.ja +29 -0
  70. data/misc/plugin/amazon/amazonimg.rb +113 -0
  71. data/misc/plugin/amazon/large.png +0 -0
  72. data/misc/plugin/amazon/medium.png +0 -0
  73. data/misc/plugin/amazon/small.png +0 -0
  74. data/misc/plugin/append-css.rb +51 -0
  75. data/misc/plugin/bq.rb +48 -0
  76. data/misc/plugin/calendar2.rb +184 -0
  77. data/misc/plugin/calendar3.rb +256 -0
  78. data/misc/plugin/category.rb +779 -0
  79. data/misc/plugin/category_autocomplete.rb +33 -0
  80. data/misc/plugin/comment_ajax.rb +11 -0
  81. data/misc/plugin/comment_mail-qmail.rb +57 -0
  82. data/misc/plugin/comment_mail-sendmail.rb +56 -0
  83. data/misc/plugin/comment_mail-smtp.rb +59 -0
  84. data/misc/plugin/comment_rank.rb +36 -0
  85. data/misc/plugin/counter.rb +631 -0
  86. data/misc/plugin/daily_theme.rb +55 -0
  87. data/misc/plugin/disp_referrer.rb +1486 -0
  88. data/misc/plugin/doctype-html401tr.rb +16 -0
  89. data/misc/plugin/draft.rb +20 -0
  90. data/misc/plugin/dropdown_calendar.rb +32 -0
  91. data/misc/plugin/edit_today.rb +50 -0
  92. data/misc/plugin/en/a.rb +10 -0
  93. data/misc/plugin/en/amazon.rb +71 -0
  94. data/misc/plugin/en/append-css.rb +17 -0
  95. data/misc/plugin/en/bq.rb +12 -0
  96. data/misc/plugin/en/calendar2.rb +12 -0
  97. data/misc/plugin/en/category.rb +204 -0
  98. data/misc/plugin/en/counter.rb +48 -0
  99. data/misc/plugin/en/daily_theme.rb +14 -0
  100. data/misc/plugin/en/disp_referrer.rb +387 -0
  101. data/misc/plugin/en/dropdown_calendar.rb +14 -0
  102. data/misc/plugin/en/edit_today.rb +22 -0
  103. data/misc/plugin/en/hide-mail-field.rb +19 -0
  104. data/misc/plugin/en/highlight.rb +29 -0
  105. data/misc/plugin/en/image.rb +54 -0
  106. data/misc/plugin/en/kw.rb +22 -0
  107. data/misc/plugin/en/makerss.rb +47 -0
  108. data/misc/plugin/en/pb-show.rb +21 -0
  109. data/misc/plugin/en/ping.rb +16 -0
  110. data/misc/plugin/en/recent_comment.rb +44 -0
  111. data/misc/plugin/en/recent_comment3.rb +56 -0
  112. data/misc/plugin/en/recent_rss.rb +33 -0
  113. data/misc/plugin/en/referer_scheme.rb +48 -0
  114. data/misc/plugin/en/search_control.rb +74 -0
  115. data/misc/plugin/en/search_form.rb +22 -0
  116. data/misc/plugin/en/speed_comment.rb +19 -0
  117. data/misc/plugin/en/tb-show.rb +37 -0
  118. data/misc/plugin/en/todo.rb +43 -0
  119. data/misc/plugin/en/weather.rb +185 -0
  120. data/misc/plugin/en/xmlrpc.rb +14 -0
  121. data/misc/plugin/footnote.rb +92 -0
  122. data/misc/plugin/gradation.rb +39 -0
  123. data/misc/plugin/gradient.rb +36 -0
  124. data/misc/plugin/hide-mail-field.rb +50 -0
  125. data/misc/plugin/highlight.rb +22 -0
  126. data/misc/plugin/html_anchor.rb +34 -0
  127. data/misc/plugin/image.rb +290 -0
  128. data/misc/plugin/ja/amazon.rb +89 -0
  129. data/misc/plugin/ja/bq.rb +13 -0
  130. data/misc/plugin/ja/calendar2.rb +12 -0
  131. data/misc/plugin/ja/category.rb +212 -0
  132. data/misc/plugin/ja/daily_theme.rb +15 -0
  133. data/misc/plugin/ja/disp_referrer.rb +644 -0
  134. data/misc/plugin/ja/edit_today.rb +23 -0
  135. data/misc/plugin/ja/hide-mail-field.rb +20 -0
  136. data/misc/plugin/ja/highlight.rb +30 -0
  137. data/misc/plugin/ja/makerss.rb +44 -0
  138. data/misc/plugin/ja/my-sequel.rb +52 -0
  139. data/misc/plugin/ja/pb-show.rb +23 -0
  140. data/misc/plugin/ja/ping.rb +17 -0
  141. data/misc/plugin/ja/recent_comment.rb +45 -0
  142. data/misc/plugin/ja/recent_comment3.rb +57 -0
  143. data/misc/plugin/ja/recent_rss.rb +34 -0
  144. data/misc/plugin/ja/referer_scheme.rb +86 -0
  145. data/misc/plugin/ja/search_control.rb +75 -0
  146. data/misc/plugin/ja/search_form.rb +32 -0
  147. data/misc/plugin/ja/tb-show.rb +38 -0
  148. data/misc/plugin/ja/todo.rb +46 -0
  149. data/misc/plugin/ja/weather.rb +402 -0
  150. data/misc/plugin/ja/xmlrpc.rb +15 -0
  151. data/misc/plugin/kw.rb +150 -0
  152. data/misc/plugin/list.rb +40 -0
  153. data/misc/plugin/makelirs.rb +89 -0
  154. data/misc/plugin/makerss.rb +744 -0
  155. data/misc/plugin/my-ex.rb +68 -0
  156. data/misc/plugin/my-sequel.rb +539 -0
  157. data/misc/plugin/navi_user.rb +19 -0
  158. data/misc/plugin/number_anchor.rb +47 -0
  159. data/misc/plugin/pb-show.rb +165 -0
  160. data/misc/plugin/ping.rb +99 -0
  161. data/misc/plugin/pre_wrap.rb +19 -0
  162. data/misc/plugin/random_google.rb +165 -0
  163. data/misc/plugin/recent_comment.rb +82 -0
  164. data/misc/plugin/recent_comment3.rb +192 -0
  165. data/misc/plugin/recent_list.rb +91 -0
  166. data/misc/plugin/recent_namazu.rb +50 -0
  167. data/misc/plugin/recent_rss.rb +305 -0
  168. data/misc/plugin/referer-antibot.rb +53 -0
  169. data/misc/plugin/referer-utf8.rb +12 -0
  170. data/misc/plugin/referer_scheme.rb +87 -0
  171. data/misc/plugin/search_control.rb +227 -0
  172. data/misc/plugin/search_form.rb +53 -0
  173. data/misc/plugin/sn.rb +107 -0
  174. data/misc/plugin/speed_comment.rb +68 -0
  175. data/misc/plugin/squeeze.rb +272 -0
  176. data/misc/plugin/src.rb +30 -0
  177. data/misc/plugin/tb-show.rb +212 -0
  178. data/misc/plugin/title_list.rb +41 -0
  179. data/misc/plugin/title_tag.rb +80 -0
  180. data/misc/plugin/tlink.rb +163 -0
  181. data/misc/plugin/todo.rb +182 -0
  182. data/misc/plugin/weather.rb +505 -0
  183. data/misc/plugin/whatsnew.rb +100 -0
  184. data/misc/plugin/xmlrpc.rb +80 -0
  185. data/misc/plugin/xmlrpc/README +20 -0
  186. data/misc/plugin/xmlrpc/xmlrpc.rb +575 -0
  187. data/misc/style/emptdiary/README.rd +83 -0
  188. data/misc/style/emptdiary/README.rd.en +78 -0
  189. data/misc/style/emptdiary/emptdiary_style.rb +199 -0
  190. data/misc/style/etdiary/README.rd +83 -0
  191. data/misc/style/etdiary/etdiary_style.rb +446 -0
  192. data/misc/style/gfm/gfm_style.rb +194 -0
  193. data/misc/style/rd/README.rd +71 -0
  194. data/misc/style/rd/rd_style.rb +366 -0
  195. data/misc/style/wiki/README +116 -0
  196. data/misc/style/wiki/README.en +101 -0
  197. data/misc/style/wiki/wiki_parser.rb +273 -0
  198. data/misc/style/wiki/wiki_style.rb +478 -0
  199. data/misc/theme_convert/Readme.rd +21 -0
  200. data/misc/theme_convert/append.rcss +150 -0
  201. data/misc/theme_convert/theme_convert.rb +453 -0
  202. data/plugin/00default.rb +1015 -0
  203. data/plugin/05referer.rb +298 -0
  204. data/plugin/10spamfilter.rb +183 -0
  205. data/plugin/50sp.rb +146 -0
  206. data/plugin/60sf.rb +152 -0
  207. data/plugin/90migrate.rb +109 -0
  208. data/plugin/en/00default.rb +390 -0
  209. data/plugin/en/05referer.rb +49 -0
  210. data/plugin/en/10spamfilter.rb +81 -0
  211. data/plugin/en/50sp.rb +56 -0
  212. data/plugin/en/60sf.rb +60 -0
  213. data/plugin/ja/00default.rb +401 -0
  214. data/plugin/ja/05referer.rb +47 -0
  215. data/plugin/ja/10spamfilter.rb +79 -0
  216. data/plugin/ja/50sp.rb +66 -0
  217. data/plugin/ja/60sf.rb +73 -0
  218. data/public/.gitkeep +0 -0
  219. data/public/images/.gitkeep +0 -0
  220. data/public/javascripts/.gitkeep +0 -0
  221. data/public/stylesheets/.gitkeep +0 -0
  222. data/skel/category.rhtml +9 -0
  223. data/skel/conf.rhtml +23 -0
  224. data/skel/day.rhtml +33 -0
  225. data/skel/diary.rhtml +83 -0
  226. data/skel/footer.rhtml +8 -0
  227. data/skel/header.rhtml +10 -0
  228. data/skel/i.category.rhtml +6 -0
  229. data/skel/i.conf.rhtml +14 -0
  230. data/skel/i.day.rhtml +28 -0
  231. data/skel/i.diary.rhtml +17 -0
  232. data/skel/i.footer.rhtml +2 -0
  233. data/skel/i.header.rhtml +3 -0
  234. data/skel/i.latest.rhtml +24 -0
  235. data/skel/i.month.rhtml +39 -0
  236. data/skel/i.search.rhtml +5 -0
  237. data/skel/i.update.rhtml +40 -0
  238. data/skel/i.update.rhtml.en +40 -0
  239. data/skel/latest.rhtml +27 -0
  240. data/skel/mail.rtxt +18 -0
  241. data/skel/mail.rtxt.en +18 -0
  242. data/skel/month.rhtml +27 -0
  243. data/skel/plugin_error.rhtml +27 -0
  244. data/skel/preview.rhtml +85 -0
  245. data/skel/preview.rhtml.en +72 -0
  246. data/skel/referer.rhtml +24 -0
  247. data/skel/search.rhtml +14 -0
  248. data/skel/tdiary.rconf +76 -0
  249. data/skel/update.rhtml +103 -0
  250. data/skel/update.rhtml.en +83 -0
  251. data/spec/acceptance/append_comment_spec.rb +94 -0
  252. data/spec/acceptance/append_diary_spec.rb +98 -0
  253. data/spec/acceptance/bugfix/encoding_error_spec.rb +27 -0
  254. data/spec/acceptance/save_conf_comment_spec.rb +87 -0
  255. data/spec/acceptance/save_conf_default_spec.rb +169 -0
  256. data/spec/acceptance/save_conf_dnsbl_spec.rb +152 -0
  257. data/spec/acceptance/save_conf_filter_spec.rb +50 -0
  258. data/spec/acceptance/save_conf_plugin_spec.rb +69 -0
  259. data/spec/acceptance/save_conf_referer_spec.rb +60 -0
  260. data/spec/acceptance/save_conf_security_spec.rb +280 -0
  261. data/spec/acceptance/support/helpers.rb +49 -0
  262. data/spec/acceptance/support/paths.rb +7 -0
  263. data/spec/acceptance/update_diary_spec.rb +113 -0
  264. data/spec/acceptance/view_category_spec.rb +38 -0
  265. data/spec/acceptance/view_comment_spec.rb +67 -0
  266. data/spec/acceptance/view_diary_spec.rb +126 -0
  267. data/spec/acceptance/view_referer_spec.rb +31 -0
  268. data/spec/acceptance_helper.rb +101 -0
  269. data/spec/core/compatible_spec.rb +54 -0
  270. data/spec/core/core_ext_spec.rb +59 -0
  271. data/spec/core/plugin_spec.rb +389 -0
  272. data/spec/core/rack/assets/precompile_spec.rb +76 -0
  273. data/spec/core/rack/html_anchor_spec.rb +57 -0
  274. data/spec/core/rack/valid_request_path_spec.rb +67 -0
  275. data/spec/core/style/emptdiary_style_spec.rb +165 -0
  276. data/spec/core/style/etdiary_style_spec.rb +512 -0
  277. data/spec/core/style/gfm_style_spec.rb +334 -0
  278. data/spec/core/style/rd_style_spec.rb +202 -0
  279. data/spec/core/style/tdiary_style_spec.rb +240 -0
  280. data/spec/core/style/wiki_style_spec.rb +441 -0
  281. data/spec/fixtures/ascii8bit-pstore.db +0 -0
  282. data/spec/fixtures/invalid-sequence-volatile.tdr +9 -0
  283. data/spec/fixtures/just_installed.conf +1 -0
  284. data/spec/fixtures/plugin/ja/sample.rb +4 -0
  285. data/spec/fixtures/plugin/sample.rb +6 -0
  286. data/spec/fixtures/sample.rb +12 -0
  287. data/spec/fixtures/tdiary.conf.gem +212 -0
  288. data/spec/fixtures/tdiary.conf.rack +212 -0
  289. data/spec/fixtures/tdiary.conf.rdb +227 -0
  290. data/spec/fixtures/tdiary.conf.secure +204 -0
  291. data/spec/fixtures/tdiary.conf.webrick +212 -0
  292. data/spec/javascripts/00default_spec.js +35 -0
  293. data/spec/javascripts/fixtures/00default.html +1 -0
  294. data/spec/javascripts/support/jasmine.yml +76 -0
  295. data/spec/plugin/bq_spec.rb +24 -0
  296. data/spec/plugin/plugin_helper.rb +203 -0
  297. data/spec/spec_helper.rb +32 -0
  298. data/tdiary.conf.beginner +244 -0
  299. data/tdiary.conf.sample +345 -0
  300. data/tdiary.conf.sample-en +333 -0
  301. data/tdiary.gemspec +26 -0
  302. data/tdiary.rb +151 -0
  303. data/tdiary/admin.rb +236 -0
  304. data/tdiary/application.rb +57 -0
  305. data/tdiary/author_only_base.rb +171 -0
  306. data/tdiary/base.rb +220 -0
  307. data/tdiary/cli.rb +116 -0
  308. data/tdiary/comment.rb +40 -0
  309. data/tdiary/comment_manager.rb +94 -0
  310. data/tdiary/compatible.rb +72 -0
  311. data/tdiary/config.rb +270 -0
  312. data/tdiary/core_ext.rb +122 -0
  313. data/tdiary/deploy.rb +50 -0
  314. data/tdiary/dispatcher.rb +77 -0
  315. data/tdiary/dispatcher/index_main.rb +122 -0
  316. data/tdiary/dispatcher/update_main.rb +101 -0
  317. data/tdiary/environment.rb +15 -0
  318. data/tdiary/filter.rb +48 -0
  319. data/tdiary/filter/default.rb +54 -0
  320. data/tdiary/filter/spam.rb +304 -0
  321. data/tdiary/io/base.rb +70 -0
  322. data/tdiary/io/cache/file.rb +123 -0
  323. data/tdiary/io/cache/memcached.rb +88 -0
  324. data/tdiary/io/cache/redis.rb +100 -0
  325. data/tdiary/io/default.rb +297 -0
  326. data/tdiary/io/pstore.rb +252 -0
  327. data/tdiary/io/rdb.rb +213 -0
  328. data/tdiary/lang/en.rb +79 -0
  329. data/tdiary/lang/ja.rb +72 -0
  330. data/tdiary/plugin.rb +375 -0
  331. data/tdiary/rack/assets/precompile.rb +37 -0
  332. data/tdiary/rack/auth/basic.rb +38 -0
  333. data/tdiary/rack/auth/omniauth.rb +51 -0
  334. data/tdiary/rack/html_anchor.rb +31 -0
  335. data/tdiary/rack/valid_request_path.rb +36 -0
  336. data/tdiary/referer_manager.rb +80 -0
  337. data/tdiary/request.rb +217 -0
  338. data/tdiary/response.rb +29 -0
  339. data/tdiary/server.rb +85 -0
  340. data/tdiary/style.rb +194 -0
  341. data/tdiary/style/tdiary_style.rb +198 -0
  342. data/tdiary/style/wiki_style.rb +213 -0
  343. data/tdiary/tasks.rb +1 -0
  344. data/tdiary/tasks/assets.rake +31 -0
  345. data/tdiary/tasks/auth.rake +28 -0
  346. data/tdiary/tasks/db.rake +110 -0
  347. data/tdiary/tasks/doc.rake +31 -0
  348. data/tdiary/tasks/heroku.rake +37 -0
  349. data/tdiary/tasks/jasmine.rake +16 -0
  350. data/tdiary/tasks/rdoc.rake +24 -0
  351. data/tdiary/tasks/release.rake +122 -0
  352. data/tdiary/tasks/rspec.rake +51 -0
  353. data/tdiary/tasks/server.rake +33 -0
  354. data/tdiary/tasks/test.rake +17 -0
  355. data/tdiary/version.rb +3 -0
  356. data/tdiary/view.rb +468 -0
  357. data/tdiary/view_helper.rb +15 -0
  358. data/test/disp_referrer_test.rb +93 -0
  359. data/test/my-sequel_test.rb +238 -0
  360. data/test/test_helper.rb +7 -0
  361. data/test/test_plugin_helper.rb +64 -0
  362. data/test/test_plugin_helper_test.rb +28 -0
  363. data/test/weather_test.rb +33 -0
  364. data/theme/base.css +268 -0
  365. data/theme/conf.block.png +0 -0
  366. data/theme/conf.css +254 -0
  367. data/theme/default/README +11 -0
  368. data/theme/default/body.png +0 -0
  369. data/theme/default/default.css +743 -0
  370. data/theme/help.png +0 -0
  371. data/theme/loading.gif +0 -0
  372. data/theme/tdiary1/README +7 -0
  373. data/theme/tdiary1/tdiary1.css +394 -0
  374. data/theme/tdiary2/README +19 -0
  375. data/theme/tdiary2/tdiary2.css +624 -0
  376. data/update.fcgi +45 -0
  377. data/update.rb +57 -0
  378. data/vendor/hikidoc-0.0.6/COPYING +28 -0
  379. data/vendor/hikidoc-0.0.6/NEWS +30 -0
  380. data/vendor/hikidoc-0.0.6/NEWS.ja +30 -0
  381. data/vendor/hikidoc-0.0.6/README +86 -0
  382. data/vendor/hikidoc-0.0.6/README.ja +83 -0
  383. data/vendor/hikidoc-0.0.6/Rakefile +68 -0
  384. data/vendor/hikidoc-0.0.6/TextFormattingRules +320 -0
  385. data/vendor/hikidoc-0.0.6/TextFormattingRules.ja +318 -0
  386. data/vendor/hikidoc-0.0.6/bin/hikidoc +66 -0
  387. data/vendor/hikidoc-0.0.6/lib/hikidoc.rb +914 -0
  388. data/vendor/hikidoc-0.0.6/setup.rb +1360 -0
  389. data/vendor/hikidoc-0.0.6/test/run-test.rb +13 -0
  390. data/vendor/hikidoc-0.0.6/test/test_hikidoc.rb +506 -0
  391. data/vendor/imagesize-0.1.1/Manifest.txt +19 -0
  392. data/vendor/imagesize-0.1.1/README.txt +49 -0
  393. data/vendor/imagesize-0.1.1/lib/image_size.rb +305 -0
  394. data/vendor/imagesize-0.1.1/lib/image_size/version.rb +9 -0
  395. data/vendor/imagesize-0.1.1/setup.rb +1585 -0
  396. data/vendor/imagesize-0.1.1/test/2-4-7.png +0 -0
  397. data/vendor/imagesize-0.1.1/test/4_1_2.gif +0 -0
  398. data/vendor/imagesize-0.1.1/test/bmp.bmp +0 -0
  399. data/vendor/imagesize-0.1.1/test/cursor.xbm +6 -0
  400. data/vendor/imagesize-0.1.1/test/detect.swf +0 -0
  401. data/vendor/imagesize-0.1.1/test/pbm.pbm +0 -0
  402. data/vendor/imagesize-0.1.1/test/pcx.pcx +0 -0
  403. data/vendor/imagesize-0.1.1/test/pgm.pgm +5 -0
  404. data/vendor/imagesize-0.1.1/test/test.xpm +38 -0
  405. data/vendor/imagesize-0.1.1/test/test_helper.rb +2 -0
  406. data/vendor/imagesize-0.1.1/test/test_image_size.rb +71 -0
  407. data/vendor/imagesize-0.1.1/test/tiff.tiff +0 -0
  408. data/vendor/imagesize-0.1.1/test/tokyo_tower.jpg +0 -0
  409. data/vendor/imagesize-0.1.1/test/tower_e.gif.psd +0 -0
  410. data/vendor/jasmine-jquery-1.4.2/jasmine-jquery.js +548 -0
  411. data/vendor/jquery-1.8/jquery.js +9227 -0
  412. data/vendor/rdtool-0.6.38/COPYING.txt +339 -0
  413. data/vendor/rdtool-0.6.38/Gemfile +3 -0
  414. data/vendor/rdtool-0.6.38/HISTORY +318 -0
  415. data/vendor/rdtool-0.6.38/LGPL-2.1 +502 -0
  416. data/vendor/rdtool-0.6.38/LICENSE.txt +58 -0
  417. data/vendor/rdtool-0.6.38/README.html +66 -0
  418. data/vendor/rdtool-0.6.38/README.ja.html +73 -0
  419. data/vendor/rdtool-0.6.38/README.rd +76 -0
  420. data/vendor/rdtool-0.6.38/README.rd.ja +85 -0
  421. data/vendor/rdtool-0.6.38/Rakefile +152 -0
  422. data/vendor/rdtool-0.6.38/TODO +22 -0
  423. data/vendor/rdtool-0.6.38/bin/rd2 +283 -0
  424. data/vendor/rdtool-0.6.38/bin/rdswap.rb +207 -0
  425. data/vendor/rdtool-0.6.38/doc/rd-draft.html +456 -0
  426. data/vendor/rdtool-0.6.38/doc/rd-draft.ja.html +466 -0
  427. data/vendor/rdtool-0.6.38/doc/rd-draft.rd +479 -0
  428. data/vendor/rdtool-0.6.38/doc/rd-draft.rd.ja +487 -0
  429. data/vendor/rdtool-0.6.38/lib/rd/block-element.rb +114 -0
  430. data/vendor/rdtool-0.6.38/lib/rd/complex-list-item.rb +65 -0
  431. data/vendor/rdtool-0.6.38/lib/rd/desclist.rb +55 -0
  432. data/vendor/rdtool-0.6.38/lib/rd/document-struct.rb +46 -0
  433. data/vendor/rdtool-0.6.38/lib/rd/dot.rd2rc +18 -0
  434. data/vendor/rdtool-0.6.38/lib/rd/element.rb +160 -0
  435. data/vendor/rdtool-0.6.38/lib/rd/filter.rb +255 -0
  436. data/vendor/rdtool-0.6.38/lib/rd/head-filter.rb +14 -0
  437. data/vendor/rdtool-0.6.38/lib/rd/inline-element.rb +233 -0
  438. data/vendor/rdtool-0.6.38/lib/rd/labeled-element.rb +14 -0
  439. data/vendor/rdtool-0.6.38/lib/rd/list.rb +57 -0
  440. data/vendor/rdtool-0.6.38/lib/rd/loose-struct.rb +11 -0
  441. data/vendor/rdtool-0.6.38/lib/rd/methodlist.rb +57 -0
  442. data/vendor/rdtool-0.6.38/lib/rd/output-format-visitor.rb +30 -0
  443. data/vendor/rdtool-0.6.38/lib/rd/package.rb +4 -0
  444. data/vendor/rdtool-0.6.38/lib/rd/parser-util.rb +14 -0
  445. data/vendor/rdtool-0.6.38/lib/rd/post-install +1 -0
  446. data/vendor/rdtool-0.6.38/lib/rd/pre-setup.rb +18 -0
  447. data/vendor/rdtool-0.6.38/lib/rd/rbl-file.rb +69 -0
  448. data/vendor/rdtool-0.6.38/lib/rd/rbl-suite.rb +37 -0
  449. data/vendor/rdtool-0.6.38/lib/rd/rd-struct.rb +86 -0
  450. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-lib.rb +266 -0
  451. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-opt.rb +34 -0
  452. data/vendor/rdtool-0.6.38/lib/rd/rd2html-lib.rb +490 -0
  453. data/vendor/rdtool-0.6.38/lib/rd/rd2html-opt.rb +67 -0
  454. data/vendor/rdtool-0.6.38/lib/rd/rd2man-lib.rb +251 -0
  455. data/vendor/rdtool-0.6.38/lib/rd/rd2rdo-lib.rb +19 -0
  456. data/vendor/rdtool-0.6.38/lib/rd/rd2rmi-lib.rb +32 -0
  457. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.ry +518 -0
  458. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.tab.rb +1061 -0
  459. data/vendor/rdtool-0.6.38/lib/rd/rdfmt.rb +15 -0
  460. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.ry +503 -0
  461. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.tab.rb +1243 -0
  462. data/vendor/rdtool-0.6.38/lib/rd/rdvisitor.rb +214 -0
  463. data/vendor/rdtool-0.6.38/lib/rd/reference-resolver.rb +114 -0
  464. data/vendor/rdtool-0.6.38/lib/rd/search-file.rb +14 -0
  465. data/vendor/rdtool-0.6.38/lib/rd/tree.rb +103 -0
  466. data/vendor/rdtool-0.6.38/lib/rd/version.rb +41 -0
  467. data/vendor/rdtool-0.6.38/lib/rd/visitor.rb +86 -0
  468. data/vendor/rdtool-0.6.38/rdtool.gemspec +125 -0
  469. data/vendor/rdtool-0.6.38/setup.rb +1596 -0
  470. data/vendor/rdtool-0.6.38/test/data/includee1.html +1 -0
  471. data/vendor/rdtool-0.6.38/test/data/includee2.html +1 -0
  472. data/vendor/rdtool-0.6.38/test/data/includee3.nothtml +1 -0
  473. data/vendor/rdtool-0.6.38/test/data/includee4.xhtml +0 -0
  474. data/vendor/rdtool-0.6.38/test/data/label.rbl +2 -0
  475. data/vendor/rdtool-0.6.38/test/data/label2.rbl +2 -0
  476. data/vendor/rdtool-0.6.38/test/data/sub/includee2.html +1 -0
  477. data/vendor/rdtool-0.6.38/test/data/sub/includee4.html +0 -0
  478. data/vendor/rdtool-0.6.38/test/dummy-observer.rb +6 -0
  479. data/vendor/rdtool-0.6.38/test/dummy.rb +33 -0
  480. data/vendor/rdtool-0.6.38/test/temp-dir.rb +19 -0
  481. data/vendor/rdtool-0.6.38/test/test-block-parser.rb +46 -0
  482. data/vendor/rdtool-0.6.38/test/test-desclist-item.rb +219 -0
  483. data/vendor/rdtool-0.6.38/test/test-document-element.rb +46 -0
  484. data/vendor/rdtool-0.6.38/test/test-document-struct.rb +66 -0
  485. data/vendor/rdtool-0.6.38/test/test-element.rb +46 -0
  486. data/vendor/rdtool-0.6.38/test/test-headline.rb +80 -0
  487. data/vendor/rdtool-0.6.38/test/test-inline-parser.rb +46 -0
  488. data/vendor/rdtool-0.6.38/test/test-list-item.rb +54 -0
  489. data/vendor/rdtool-0.6.38/test/test-list.rb +53 -0
  490. data/vendor/rdtool-0.6.38/test/test-methodlist-item.rb +73 -0
  491. data/vendor/rdtool-0.6.38/test/test-nonterminal-element.rb +170 -0
  492. data/vendor/rdtool-0.6.38/test/test-nonterminal-inline.rb +33 -0
  493. data/vendor/rdtool-0.6.38/test/test-output-format-visitor.rb +48 -0
  494. data/vendor/rdtool-0.6.38/test/test-parser-util.rb +41 -0
  495. data/vendor/rdtool-0.6.38/test/test-rbl-file.rb +156 -0
  496. data/vendor/rdtool-0.6.38/test/test-rbl-suite.rb +43 -0
  497. data/vendor/rdtool-0.6.38/test/test-rd2html-lib.rb +496 -0
  498. data/vendor/rdtool-0.6.38/test/test-rdtree.rb +17 -0
  499. data/vendor/rdtool-0.6.38/test/test-rdvisitor.rb +29 -0
  500. data/vendor/rdtool-0.6.38/test/test-reference-resolver.rb +202 -0
  501. data/vendor/rdtool-0.6.38/test/test-reference.rb +132 -0
  502. data/vendor/rdtool-0.6.38/test/test-search-file.rb +22 -0
  503. data/vendor/rdtool-0.6.38/test/test-terminal-inline.rb +41 -0
  504. data/vendor/rdtool-0.6.38/test/test-textblock.rb +44 -0
  505. data/vendor/rdtool-0.6.38/test/test-tree.rb +82 -0
  506. data/vendor/rdtool-0.6.38/test/test-version.rb +57 -0
  507. data/vendor/rdtool-0.6.38/test/test-visitor.rb +230 -0
  508. data/vendor/rdtool-0.6.38/utils/rd-mode.el +464 -0
  509. metadata +666 -0
@@ -0,0 +1,1015 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # 00default.rb: default plugins
4
+ #
5
+ # Copyright (C) 2010, TADA Tadashi <t@tdtds.jp>
6
+ # You can redistribute it and/or modify it under GPL2.
7
+ #
8
+
9
+ #
10
+ # setting @date
11
+ #
12
+ unless @date
13
+ if @diary then
14
+ @date = @diary.date
15
+ else
16
+ @date = case @mode
17
+ when 'day'
18
+ Time::local( *@cgi.params['date'][0].scan( /^(\d{4})(\d\d)(\d\d)/ ).flatten )
19
+ when 'month'
20
+ Time::local( *@cgi.params['date'][0].scan( /^(\d{4})(\d\d)/ ).flatten )
21
+ when 'edit'
22
+ Time::local( @cgi.params['year'][0].to_i, @cgi.params['month'][0].to_i, @cgi.params['day'][0].to_i )
23
+ else
24
+ nil
25
+ end
26
+ end
27
+ end
28
+
29
+ #
30
+ # make navigation buttons
31
+ #
32
+ def navi
33
+ result = %Q[<div class="adminmenu">\n]
34
+ result << navi_user
35
+ result << navi_admin
36
+ result << %Q[</div>]
37
+ end
38
+
39
+ def navi_item( link, label, rel = nil )
40
+ result = %Q[<span class="adminmenu"><a href="#{link}"]
41
+ result << %Q[ rel="#{rel}"] if rel
42
+ result << %Q[>#{label}</a></span>\n]
43
+ end
44
+
45
+ def navi_user
46
+ result = navi_user_default
47
+
48
+ case @mode
49
+ when 'latest'
50
+ result << navi_user_latest
51
+ when 'day'
52
+ result << navi_user_day
53
+ when 'month'
54
+ result << navi_user_month
55
+ when 'nyear'
56
+ result << navi_user_nyear
57
+ when 'edit'
58
+ result << navi_user_edit
59
+ else
60
+ result << navi_user_else
61
+ end
62
+ result
63
+ end
64
+
65
+ def navi_user_default
66
+ result = ''
67
+ result << navi_item( h(@conf.index_page), h(navi_index) ) unless @conf.index_page.empty?
68
+ result
69
+ end
70
+
71
+ def navi_user_latest
72
+ result = ''
73
+ 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?
74
+ result << navi_item( h(@conf.index), h(navi_latest) ) if @cgi.params['date'][0]
75
+ 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?
76
+ result
77
+ end
78
+
79
+ def navi_user_day
80
+ result = ''
81
+ if @navi_user_days then
82
+ 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]
83
+ result << navi_item( h(@conf.index), h(navi_latest) )
84
+ 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]
85
+ end
86
+ result
87
+ end
88
+
89
+ def navi_user_month
90
+ ym = []
91
+ @years.keys.each do |y|
92
+ ym += @years[y].collect {|m| y + m}
93
+ end
94
+ ym.sort!
95
+ now = @date.strftime( '%Y%m' )
96
+ return '' unless ym.index( now )
97
+ prev_month = ym.index( now ) == 0 ? nil : ym[ym.index( now )-1]
98
+ next_month = ym[ym.index( now )+1]
99
+
100
+ result = ''
101
+ result << navi_item( "#{h @conf.index}#{anchor( prev_month )}", "&laquo;#{h navi_prev_month}" ) if prev_month and not bot?
102
+ result << navi_item( h(@conf.index), h(navi_latest) )
103
+ result << navi_item( "#{h @conf.index}#{anchor( next_month )}", "#{h navi_next_month}&raquo;" ) if next_month and not bot?
104
+ result
105
+ end
106
+
107
+ def navi_user_nyear
108
+ result = ''
109
+ 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
110
+ result << navi_item( h(@conf.index), h(navi_latest) ) unless @mode == 'latest'
111
+ 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
112
+ result
113
+ end
114
+
115
+ def navi_user_edit
116
+ result = ''
117
+ if @prev_day then
118
+ a = @prev_day.scan( /^(\d{4})(\d\d)(\d\d)$/ ).flatten
119
+ 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]))}" )
120
+ end
121
+ result << navi_item( h(@conf.index), h(navi_latest) )
122
+ if @next_day then
123
+ a = @next_day.scan( /^(\d{4})(\d\d)(\d\d)$/ ).flatten
124
+ 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;" )
125
+ end
126
+ result
127
+ end
128
+
129
+ def navi_user_else
130
+ navi_item( h(@conf.index), h(navi_latest) )
131
+ end
132
+
133
+ def navi_user_format( day )
134
+ Time::local( *day.scan( /^(\d{4})(\d\d)(\d\d)$/ )[0] )
135
+ end
136
+
137
+ def navi_admin
138
+ if @mode == 'day' then
139
+ result = navi_item( "#{h @conf.update}?edit=true;year=#{@date.year};month=#{@date.month};day=#{@date.day}", h(navi_edit), "nofollow" )
140
+ else
141
+ result = navi_item( h(@conf.update), h(navi_update), "nofollow")
142
+ end
143
+ result << navi_item( "#{h @conf.update}?conf=default", h(navi_preference) ) if /^(latest|month|day|comment|conf|nyear|category.*)$/ !~ @mode
144
+ result
145
+ end
146
+
147
+ def mobile_navi
148
+ result = []
149
+ if @navi_user_days and @navi_user_days[0]
150
+ result << %Q[<A HREF="#{h @conf.index}#{anchor @navi_user_days[0]}" ACCESSKEY="*">[*]#{mobile_navi_prev_diary}</A>]
151
+ end
152
+ if @mode != 'latest'
153
+ result << %Q[<A HREF="#{h @conf.index}" ACCESSKEY="0">[0]#{mobile_navi_latest}</A>]
154
+ end
155
+ if @navi_user_days and @navi_user_days[2]
156
+ result << %Q[<A HREF="#{h @conf.index}#{anchor @navi_user_days[2]}" ACCESSKEY="#">[#]#{mobile_navi_next_diary}</A>]
157
+ end
158
+ if @mode == 'day' then
159
+ 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>]
160
+ else
161
+ result << %Q[<A HREF="#{h @conf.update}" ACCESSKEY="5">[5]#{mobile_navi_update}</A>]
162
+ end
163
+ result << %Q[<A HREF="#{h @conf.update}?conf=default" ACCESSKEY="8">[8]#{mobile_navi_preference}</A>] unless /^(latest|month|day|conf|nyear)$/ === @mode
164
+ result.join('|')
165
+ end
166
+
167
+ #
168
+ # make calendar
169
+ #
170
+ def calendar
171
+ result = %Q[<div class="calendar">\n]
172
+ @years.keys.sort.each do |year|
173
+ result << %Q[<div class="year">#{year}|]
174
+ @years[year.to_s].sort.each do |month|
175
+ m = "#{year}#{month}"
176
+ result << %Q[<a href="#{h @conf.index}#{anchor m}">#{month}</a>|]
177
+ end
178
+ result << "</div>\n"
179
+ end
180
+ result << "</div>"
181
+ end
182
+
183
+ #
184
+ # insert file. only enable unless @secure.
185
+ #
186
+ def insert( file )
187
+ begin
188
+ File::readlines( file ).join
189
+ rescue
190
+ %Q[<p class="message">#$! (#{h $!.class})<br>cannot read #{h file}.</p>]
191
+ end
192
+ end
193
+
194
+ #
195
+ # define DOCTYPE
196
+ #
197
+ def doctype
198
+ %Q[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">]
199
+ end
200
+
201
+ #
202
+ # default HTML header
203
+ #
204
+ add_header_proc do
205
+ calc_links
206
+ <<-HEADER
207
+ <meta http-equiv="Content-Type" content="text/html; charset=#{h charset}">
208
+ <meta name="generator" content="tDiary #{h TDIARY_VERSION}">
209
+ #{last_modified_header}
210
+ #{content_script_type}
211
+ #{author_name_tag}
212
+ #{author_mail_tag}
213
+ #{index_page_tag}
214
+ #{mobile_link_discovery}
215
+ #{icon_tag}
216
+ #{description_tag}
217
+ #{jquery_tag.chomp}
218
+ #{script_tag.chomp}
219
+ #{css_tag.chomp}
220
+ #{smartphone_tag.chomp}
221
+ #{title_tag.chomp}
222
+ #{robot_control.chomp}
223
+ HEADER
224
+ end
225
+
226
+ def calc_links
227
+ if /day|edit/ =~ @mode or (@cgi.mobile_agent? and /latest|month|nyear/ =~ @mode) then
228
+ today = @date.strftime('%Y%m%d')
229
+ days = []
230
+ yms = []
231
+ this_month = today[0,6]
232
+
233
+ @years.keys.each do |y|
234
+ yms += @years[y].collect {|m| y + m}
235
+ end
236
+ yms |= [this_month]
237
+ yms.sort!
238
+ yms.unshift(nil).push(nil)
239
+ yms[yms.index(this_month) - 1, 3].each do |ym|
240
+ next unless ym
241
+ now = @cgi.params['date'] # backup
242
+ cgi = @cgi.clone
243
+ cgi.params['date'] = [ym]
244
+ m = TDiaryMonthWithoutFilter.new(cgi, '', @conf)
245
+ @cgi.params['date'] = now # restore
246
+ m.diaries.delete_if {|date,diary| !diary.visible?}
247
+ days += m.diaries.keys.sort
248
+ end
249
+ days |= [today]
250
+ days.sort!
251
+ days.unshift(nil).push(nil)
252
+ @navi_user_days = days[days.index(today) - 1, 3]
253
+ @prev_day = @navi_user_days[0]
254
+ @next_day = @navi_user_days[2]
255
+ elsif @mode == 'nyear'
256
+ y = 2000 # specify leam year
257
+ m, d = @cgi.params['date'][0].scan(/^(\d\d)(\d\d)$/)[0]
258
+ @prev_day = (Time.local(y, m, d) - 24*60*60).strftime( '%Y%m%d' )
259
+ @next_day = (Time.local(y, m, d) + 24*60*60).strftime( '%Y%m%d' )
260
+ end
261
+ end
262
+
263
+ def charset
264
+ if @cgi.mobile_agent? then
265
+ @conf.mobile_encoding
266
+ else
267
+ @conf.encoding
268
+ end
269
+ end
270
+
271
+ def last_modified_header
272
+ if @last_modified then
273
+ %Q|<meta http-equiv="Last-Modified" content="#{CGI::rfc1123_date( @last_modified )}">|
274
+ else
275
+ ''
276
+ end
277
+ end
278
+
279
+ def content_script_type
280
+ %Q[<meta http-equiv="Content-Script-Type" content="text/javascript; charset=#{h charset}">]
281
+ end
282
+
283
+ def author_name_tag
284
+ if @conf.author_name and not(@conf.author_name.empty?) then
285
+ %Q[<meta name="author" content="#{h @conf.author_name}">]
286
+ else
287
+ ''
288
+ end
289
+ end
290
+
291
+ def author_mail_tag
292
+ if @conf.author_mail and not(@conf.author_mail.empty?) then
293
+ %Q[<link rev="made" href="mailto:#{h @conf.author_mail}">]
294
+ else
295
+ ''
296
+ end
297
+ end
298
+
299
+ def index_page_tag
300
+ result = ''
301
+ if @conf.index_page and @conf.index_page.size > 0 then
302
+ result << %Q[<link rel="index" title="#{h navi_index}" href="#{h @conf.index_page}">\n\t]
303
+ end
304
+ if @prev_day then
305
+ case @mode
306
+ when 'day'
307
+ 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]
308
+ when 'nyear'
309
+ 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]
310
+ end
311
+ end
312
+ if @next_day then
313
+ case @mode
314
+ when 'day'
315
+ 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]
316
+ when 'nyear'
317
+ 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]
318
+ end
319
+ end
320
+ result << %Q[<link rel="start" title="#{navi_latest}" href="#{h @conf.index}">\n\t]
321
+ result.chop.chop
322
+ end
323
+
324
+ def mobile_link_discovery
325
+ return '' unless /^(latest|day)$/ =~ @mode
326
+ uri = @conf.index.dup
327
+ uri[0, 0] = base_url if %r|^https?://|i !~ @conf.index
328
+ uri.gsub!( %r|/\./|, '/' )
329
+ if @mode == 'day' then
330
+ uri += anchor( @date.strftime( '%Y%m%d' ) )
331
+ end
332
+ %Q[<link rel="alternate" media="handheld" type="text/html" href="#{h uri}">]
333
+ end
334
+
335
+ def icon_tag
336
+ if @conf.icon and not(@conf.icon.empty?) then
337
+ if /\.ico$/ =~ @conf.icon then
338
+ %Q[<link rel="shortcut icon" href="#{h @conf.icon}">]
339
+ else
340
+ %Q[<link rel="icon" href="#{h @conf.icon}">]
341
+ end
342
+ else
343
+ ''
344
+ end
345
+ end
346
+
347
+ def description_tag
348
+ if @conf.description and not(@conf.description.empty?) then
349
+ %Q[<meta name="description" content="#{h @conf.description}">]
350
+ else
351
+ ''
352
+ end
353
+ end
354
+
355
+ def jquery_tag
356
+ %Q[<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js" type="text/javascript"></script>]
357
+ end
358
+
359
+ enable_js( '00default.js' )
360
+ add_js_setting( '$tDiary.style', "'#{@conf.style.downcase.sub( /\Ablog/, '' )}'" )
361
+
362
+ if /^form|edit|preview|showcomment/ =~ @mode
363
+ enable_js( '02edit.js' )
364
+ end
365
+
366
+ def script_tag_query_string
367
+ "?#{TDIARY_VERSION}#{Time::now.strftime('%Y%m%d')}"
368
+ end
369
+
370
+ def js_url
371
+ defined?(Rack) ? 'assets' : 'js'
372
+ end
373
+
374
+ def script_tag
375
+ require 'uri'
376
+ query = script_tag_query_string
377
+ html = @javascripts.sort.map {|script|
378
+ if URI(script).scheme
379
+ %Q|<script src="#{script}" type="text/javascript"></script>|
380
+ else
381
+ %Q|<script src="#{js_url}/#{script}#{query}" type="text/javascript"></script>|
382
+ end
383
+ }.join( "\n\t" )
384
+ html << "\n" << <<-HEAD
385
+ <script type="text/javascript"><!--
386
+ #{@javascript_setting.map{|a| "#{a[0]} = #{a[1]};"}.join("\n\t\t")}
387
+ //-->
388
+ </script>
389
+ HEAD
390
+ end
391
+
392
+ def theme_url
393
+ defined?(Rack) ? 'assets' : 'theme'
394
+ end
395
+
396
+ def css_tag
397
+ if @mode =~ /conf$/ then
398
+ css = "#{h theme_url}/conf.css"
399
+ elsif @conf.theme and @conf.theme.length > 0
400
+ css = "#{h theme_url}/#{h @conf.theme}/#{h @conf.theme}.css"
401
+ else
402
+ css = @conf.css
403
+ end
404
+ title = File::basename( css, '.css' )
405
+ <<-CSS
406
+ <meta http-equiv="content-style-type" content="text/css">
407
+ <link rel="stylesheet" href="#{h theme_url}/base.css" type="text/css" media="all">
408
+ <link rel="stylesheet" href="#{h css}" title="#{h title}" type="text/css" media="all">
409
+ CSS
410
+ end
411
+
412
+ def smartphone_tag
413
+ if @cgi.smartphone? then
414
+ <<-CSS
415
+ <meta name = "viewport" content = "width = device-width">
416
+ <style type="text/css"><!--
417
+ form.comment textarea {
418
+ width: 80%;
419
+ }
420
+ --></style>
421
+ CSS
422
+ else
423
+ ''
424
+ end
425
+ end
426
+
427
+ def robot_control
428
+ if /^form|edit|preview|showcomment$/ =~ @mode then
429
+ '<meta name="robots" content="noindex,nofollow">'
430
+ else
431
+ ''
432
+ end
433
+ end
434
+
435
+ #
436
+ # title of day
437
+ #
438
+ add_title_proc do |date, title|
439
+ title_of_day( date, title )
440
+ end
441
+
442
+ def title_of_day( date, title )
443
+ r = <<-HTML
444
+ <span class="date">
445
+ <a href="#{h @conf.index}#{anchor( date.strftime( '%Y%m%d' ) )}">#{date.strftime @conf.date_format}</a>
446
+ </span>
447
+ <span class="title">#{title}</span>
448
+ HTML
449
+ return r.gsub( /^\t+/, '' ).chomp
450
+ end
451
+
452
+ add_title_proc do |date, title|
453
+ nyear_link( date, title )
454
+ end
455
+
456
+ def nyear_link( date, title )
457
+ if @conf.show_nyear and @mode != 'nyear' and !@cgi.mobile_agent? then
458
+ y = date.strftime( '%Y' )
459
+ m = date.strftime( '%m' )
460
+ d = date.strftime( '%d' )
461
+ years = @years.find_all {|year, months| months.include? m}
462
+ if years.length >= 2 then
463
+ %Q|#{title} <span class="nyear">[<a href="#{h @conf.index}#{anchor m + d}" title="#{h(nyear_diary_title(date, years))}">#{nyear_diary_label date, years}</a>]</span>|
464
+ else
465
+ title
466
+ end
467
+ else
468
+ title
469
+ end
470
+ end
471
+
472
+ #
473
+ # make anchor string
474
+ #
475
+ def anchor( s )
476
+ if /^([\-\d]+)#?([pct]\d*)?$/ =~ s then
477
+ if $2 then
478
+ "?date=#$1##$2"
479
+ else
480
+ "?date=#$1"
481
+ end
482
+ else
483
+ ""
484
+ end
485
+ end
486
+
487
+ #
488
+ # subtitle
489
+ #
490
+ add_subtitle_proc do |date, index, subtitle|
491
+ subtitle_link( date, index, subtitle )
492
+ end
493
+
494
+ def make_category_link( subtitle )
495
+ r = ''
496
+ if subtitle
497
+ if respond_to?( :category_anchor ) then
498
+ r << subtitle.sub( /^(\[([^\[]+?)\])+/ ) do
499
+ $&.gsub( /\[(.*?)\]/ ) do
500
+ $1.split( /,/ ).collect do |c|
501
+ category_anchor( "#{CGI::unescapeHTML c}" )
502
+ end.join
503
+ end
504
+ end
505
+ else
506
+ r << subtitle
507
+ end
508
+ end
509
+ r
510
+ end
511
+
512
+ def subtitle_link( date, index, subtitle )
513
+ r = ''
514
+
515
+ if @cgi.mobile_agent? then
516
+ r << %Q[<A NAME="p#{'%02d' % index}">*</A> ]
517
+ r << %Q|(#{h @author})| if @multi_user and @author and subtitle
518
+ else
519
+ if date then
520
+ r << "<a "
521
+ r << %Q[name="p#{'%02d' % index}" ] if @anchor_name
522
+ param = "#{date.strftime( '%Y%m%d' )}#p#{'%02d' % index}"
523
+ titleattr = (not subtitle or subtitle.empty?) ? '' : %Q[ title="#{remove_tag( apply_plugin( subtitle )).gsub( /"/, "&quot;" )}"]
524
+ r << %Q[href="#{h @conf.index}#{anchor param}"#{titleattr}>#{@conf.section_anchor}</a> ]
525
+ end
526
+
527
+ r << %Q[(#{h @author}) ] if @multi_user and @author and subtitle
528
+ end
529
+ r << make_category_link( subtitle )
530
+ end
531
+
532
+ #
533
+ # make anchor tag in my diary
534
+ #
535
+ def my( a, str, title = nil )
536
+ date, noise, frag = a.scan( /^(\d{4}|\d{6}|\d{8}|\d{8}-\d+)([^\d]*)?#?([pct]\d+)?$/ )[0]
537
+ anc = frag ? "#{date}#{frag}" : date
538
+ index = /^https?:/ =~ @conf.index ? '' : base_url
539
+ index += @conf.index.sub(%r|^\./|, '')
540
+ if title then
541
+ %Q[<a href="#{h index}#{anchor anc}" title="#{h title}">#{str}</a>]
542
+ else
543
+ %Q[<a href="#{h index}#{anchor anc}">#{str}</a>]
544
+ end
545
+ end
546
+
547
+ #
548
+ # other resources
549
+ #
550
+ def submit_command
551
+ if @mode == 'form' or @cgi.valid?( 'appendpreview' ) then
552
+ 'append'
553
+ else
554
+ 'replace'
555
+ end
556
+ end
557
+
558
+ def preview_command
559
+ if @mode == 'form' or @cgi.valid?( 'appendpreview' ) then
560
+ 'appendpreview'
561
+ else
562
+ 'replacepreview'
563
+ end
564
+ end
565
+
566
+ #
567
+ # make comment form
568
+ #
569
+ def comment_description
570
+ begin
571
+ if @conf.options['comment_description'].length > 0 then
572
+ return @conf.options['comment_description']
573
+ end
574
+ rescue
575
+ end
576
+ comment_description_default
577
+ end
578
+
579
+ def comment_form_text
580
+ unless @diary then
581
+ @diary = @diaries[@date.strftime( '%Y%m%d' )]
582
+ return '' unless @diary
583
+ end
584
+
585
+ r = ''
586
+ unless @conf.hide_comment_form then
587
+ r = <<-FORM
588
+ <div class="form">
589
+ FORM
590
+ if @diary.count_comments( true ) >= @conf.comment_limit_per_day then
591
+ r << <<-FORM
592
+ <div class="caption"><a name="c">#{comment_limit_label}</a></div>
593
+ FORM
594
+ else
595
+ r << <<-FORM
596
+ <div class="caption"><a name="c">#{comment_description}</a></div>
597
+ <form class="comment" name="comment-form" method="post" action="#{h @conf.index}"><div>
598
+ <input type="hidden" name="date" value="#{ @date.strftime( '%Y%m%d' )}">
599
+ <div class="field name">
600
+ #{comment_name_label}:<input class="field" name="name" value="#{h( @conf.to_native(@cgi.cookies['tdiary'][0] || '' ))}">
601
+ </div>
602
+ <div class="field mail">
603
+ #{comment_mail_label}:<input class="field" name="mail" value="#{h( @cgi.cookies['tdiary'][1] || '' )}">
604
+ </div>
605
+ <div class="textarea">
606
+ #{comment_body_label}:<textarea name="body" cols="60" rows="5"></textarea>
607
+ </div>
608
+ <div class="button">
609
+ <input type="submit" name="comment" value="#{h comment_submit_label}">
610
+ </div>
611
+ </div></form>
612
+ FORM
613
+ end
614
+ r << <<-FORM
615
+ </div>
616
+ FORM
617
+ end
618
+ r
619
+ end
620
+
621
+ add_footer_proc do
622
+ if @mode != 'day' or bot? then
623
+ ''
624
+ elsif hide_comment_day_limit
625
+ r = ''
626
+ r << <<-JS
627
+ <script type="text/javascript"><!--
628
+ document.getElementById('comment-form-section').innerHTML = '#{comment_form_text.gsub( /[\r\n]/, '' ).gsub( /<\//, '<\\/' )}';
629
+ //--></script>
630
+ JS
631
+ else
632
+ ''
633
+ end
634
+ end
635
+
636
+ def comment_form
637
+ return '' unless @mode == 'day'
638
+ return '' if bot?
639
+ return '' if hide_comment_day_limit
640
+
641
+ comment_form_text
642
+ end
643
+
644
+ def comment_form_mobile_mail_field
645
+ %Q|#{comment_mail_label_short}: <INPUT NAME="mail"><BR>|
646
+ end
647
+
648
+ def comment_form_mobile
649
+ return '' if @conf.hide_comment_form
650
+ return '' if bot?
651
+ return '' if hide_comment_day_limit
652
+
653
+ if @diaries[@date.strftime('%Y%m%d')].count_comments( true ) >= @conf.comment_limit_per_day then
654
+ return "<HR><P>#{comment_limit_label}</P>"
655
+ end
656
+
657
+ return <<-FORM
658
+ <HR>
659
+ <FORM METHOD="POST" ACTION="#{h @conf.index}">
660
+ <INPUT TYPE="HIDDEN" NAME="date" VALUE="#{@date.strftime( '%Y%m%d' )}">
661
+ <P>#{comment_description_short}<BR>
662
+ #{comment_name_label_short}: <INPUT NAME="name"><BR>
663
+ #{comment_form_mobile_mail_field}
664
+ #{comment_body_label_short}:<BR>
665
+ <TEXTAREA NAME="body" COLS="100%" ROWS="5"></TEXTAREA><BR>
666
+ <INPUT TYPE="SUBMIT" NAME="comment" value="#{comment_submit_label_short}"></P>
667
+ </FORM>
668
+ FORM
669
+ end
670
+
671
+ def hide_comment_day_limit
672
+ if @conf.options.include?('spamfilter.date_limit') &&
673
+ @conf.options['spamfilter.date_limit'] &&
674
+ /\A\d+\z/ =~ @conf.options['spamfilter.date_limit'].to_s
675
+ date_limit = @conf.options['spamfilter.date_limit'].to_s.to_i
676
+ now = Time.now
677
+ today = Time.local(now.year, now.month, now.day)
678
+ limit = today - 24 * 60 * 60 * date_limit
679
+ if @date < limit
680
+ return true
681
+ end
682
+ end
683
+ return false
684
+ end
685
+
686
+ #
687
+ # service methods for comment_mail
688
+ #
689
+ def comment_mail_send
690
+ return unless @comment
691
+ return unless @conf['comment_mail.enable']
692
+ return unless @conf['comment_mail.sendhidden'] or @comment.visible?
693
+
694
+ case @conf['comment_mail.receivers']
695
+ when Array
696
+ # for compatibility
697
+ receivers = @conf['comment_mail.receivers']
698
+ when String
699
+ receivers = @conf['comment_mail.receivers'].split( /[, ]+/ )
700
+ else
701
+ receivers = []
702
+ end
703
+ receivers = [@conf.author_mail] if receivers.compact.empty?
704
+ return if receivers.empty?
705
+
706
+ require 'socket'
707
+
708
+ name = comment_mail_mime( @conf.to_mail( @comment.name ) )[0]
709
+ body = @comment.body.sub( /[\r\n]+\Z/, '' )
710
+ mail = @comment.mail
711
+ mail = @conf.author_mail unless mail =~ %r<[0-9a-zA-Z_.-]+@[\(\)%!0-9a-zA-Z_$@.&+-,'"*-]+>
712
+ mail = receivers[0] if mail.empty?
713
+
714
+ now = Time::now
715
+ g = now.dup.gmtime
716
+ l = Time::local( g.year, g.month, g.day, g.hour, g.min, g.sec )
717
+ tz = (g.to_i - l.to_i) / 36
718
+ date = now.strftime( "%a, %d %b %Y %X " ) + sprintf( "%+05d", tz )
719
+
720
+ serial = @diaries[@date.strftime( '%Y%m%d' )].count_comments( true )
721
+ message_id = %Q!<tdiary.#{[@conf['comment_mail.header'] || ''].pack('m').gsub(/\n/,'')}.#{now.strftime('%Y%m%d%H%M%S')}.#{serial}@#{Socket::gethostname}>!
722
+
723
+ mail_header = (@conf['comment_mail.header'] || '').dup
724
+ mail_header << ":#{@conf.date_format}" unless /%[a-zA-Z%]/ =~ mail_header
725
+ mail_header = @date.strftime( mail_header )
726
+ mail_header = comment_mail_mime( @conf.to_mail( mail_header ) ).join( "\n " ) #if /[\x80-\xff]/ =~ mail_header
727
+
728
+ rmail = ''
729
+ begin
730
+ rmail = File::open( "#{::TDiary::PATH}/skel/mail.rtxt.#{@conf.lang}" ){|f| f.read }
731
+ rescue
732
+ rmail = File::open( "#{::TDiary::PATH}/skel/mail.rtxt" ){|f| f.read }
733
+ end
734
+ text = @conf.to_mail( ERB::new( rmail.untaint ).result( binding ) )
735
+ receivers.each { |i| i.untaint }
736
+ comment_mail( text, receivers )
737
+ end
738
+
739
+ def comment_mail( text )
740
+ # no action in default.
741
+ # override by each plugins.
742
+ end
743
+
744
+ def comment_mail_basic_setting
745
+ if @mode == 'saveconf' then
746
+ @conf['comment_mail.enable'] = @cgi.params['comment_mail.enable'][0] == 'true' ? true : false
747
+ @conf['comment_mail.receivers'] = @cgi.params['comment_mail.receivers'][0].strip.gsub( /[\n\r]+/, ',' )
748
+ @conf['comment_mail.header'] = @cgi.params['comment_mail.header'][0]
749
+ @conf['comment_mail.sendhidden'] = @cgi.params['comment_mail.sendhidden'][0] == 'true' ? true : false
750
+ end
751
+ end
752
+
753
+ #
754
+ # convert to UTF-8
755
+ #
756
+ def to_utf8( str, charset = nil )
757
+ @conf.to_native( str, charset )
758
+ end
759
+
760
+ #
761
+ # layout
762
+ #
763
+ def brr; '<br clear="right">'; end
764
+ def brl; '<br clear="left">'; end
765
+
766
+ #
767
+ # preferences (saving methods)
768
+ #
769
+ if @mode =~ /conf|saveconf/
770
+ enable_js( '01conf.js' )
771
+ end
772
+
773
+ # basic (default)
774
+ def saveconf_default
775
+ if @mode == 'saveconf' then
776
+ @conf.html_title = @conf.to_native( @cgi.params['html_title'][0] )
777
+ @conf.author_name = @conf.to_native( @cgi.params['author_name'][0] )
778
+ @conf.author_mail = @cgi.params['author_mail'][0]
779
+ @conf.index_page = @cgi.params['index_page'][0]
780
+ @conf.description = @conf.to_native( @cgi.params['description'][0] )
781
+ @conf.icon = @cgi.params['icon'][0]
782
+ @conf.banner = @cgi.params['banner'][0]
783
+ @conf['base_url'] = @cgi.params['base_url'][0]
784
+ @conf.x_frame_options = @cgi.params['x_frame_options'][0]
785
+ @conf.x_frame_options = nil if @conf.x_frame_options.empty?
786
+ end
787
+ end
788
+
789
+ # header/footer (header)
790
+ def saveconf_header
791
+ if @mode == 'saveconf' then
792
+ @conf.header = @conf.to_native( @cgi.params['header'][0] ).lines.map{|s| s.chomp}.join( "\n" ).sub( /\n+\z/, '' )
793
+ @conf.footer = @conf.to_native( @cgi.params['footer'][0] ).lines.map{|s| s.chomp}.join( "\n" ).sub( /\n+\z/, '' )
794
+ end
795
+ end
796
+
797
+ # diaplay
798
+ def saveconf_display
799
+ if @mode == 'saveconf' then
800
+ @conf.section_anchor = @conf.to_native( @cgi.params['section_anchor'][0] )
801
+ @conf.comment_anchor = @conf.to_native( @cgi.params['comment_anchor'][0] )
802
+ @conf.date_format = @conf.to_native( @cgi.params['date_format'][0] )
803
+ @conf.latest_limit = @cgi.params['latest_limit'][0].to_i
804
+ @conf.latest_limit = 10 if @conf.latest_limit < 1
805
+ @conf.show_nyear = @cgi.params['show_nyear'][0] == 'true' ? true : false
806
+ end
807
+ end
808
+
809
+ # timezone
810
+ def saveconf_timezone
811
+ if @mode == 'saveconf' then
812
+ @conf.hour_offset = @cgi.params['hour_offset'][0].to_f
813
+ end
814
+ end
815
+
816
+ # themes
817
+ def conf_theme_list
818
+ r = ''
819
+ t = 0
820
+ @conf_theme_list.each_with_index do |theme, index|
821
+ if theme[0] == @conf.theme then
822
+ select = " selected"
823
+ t = index
824
+ end
825
+ r << %Q|<option value="#{h theme[0]}"#{select}>#{theme[1]}</option>|
826
+ end
827
+ img = t == 0 ? 'nowprinting' : @conf.theme
828
+ r << <<-HTML
829
+ </select>
830
+ <input name="css" size="50" value="#{h @conf.css}">
831
+ </p>
832
+ <p><img id="theme_thumbnail" src="http://www.tdiary.org/theme.image/#{img}.jpg" alt="#{@theme_thumbnail_label}"></p>
833
+ <script language="JavaScript"><!--
834
+ function changeTheme( image, list ) {
835
+ var theme = '';
836
+ if ( list.selectedIndex == 0 ) {
837
+ theme = 'nowprinting';
838
+ } else {
839
+ theme = list.options[list.selectedIndex].value;
840
+ }
841
+ image.src = 'http://www.tdiary.org/theme.image/' + theme + '.jpg'
842
+ }
843
+ --></script>
844
+ #{@theme_location_comment unless @cgi.mobile_agent?}
845
+ HTML
846
+ end
847
+
848
+ def saveconf_theme
849
+ if @mode == 'saveconf' then
850
+ @conf.theme = @cgi.params['theme'][0]
851
+ @conf.css = @cgi.params['css'][0]
852
+ end
853
+
854
+ @conf_theme_list = []
855
+ Dir::glob( "#{::TDiary::PATH}/theme/*" ).sort.each do |dir|
856
+ theme = dir.sub( %r[.*/theme/], '')
857
+ next unless FileTest::file?( "#{dir}/#{theme}.css".untaint )
858
+ name = theme.split( /_/ ).collect{|s| s.capitalize}.join( ' ' )
859
+ @conf_theme_list << [theme,name]
860
+ end
861
+ end
862
+
863
+ # comments
864
+ def saveconf_comment
865
+ if @mode == 'saveconf' then
866
+ @conf.show_comment = @cgi.params['show_comment'][0] == 'true' ? true : false
867
+ @conf.comment_limit = @cgi.params['comment_limit'][0].to_i
868
+ @conf.comment_limit = 3 if @conf.comment_limit < 1
869
+
870
+ @conf.comment_limit_per_day = @cgi.params['comment_limit_per_day'][0].to_i
871
+ @conf.comment_limit_per_day = 0 if @conf.comment_limit_per_day < 0
872
+ end
873
+ end
874
+
875
+ def saveconf_csrf_protection
876
+ if @mode == 'saveconf' then
877
+ err = nil
878
+ check_method = 0
879
+ case @cgi.params['check_enabled']
880
+ when ['true']
881
+ else
882
+ err = :param
883
+ end
884
+ case @cgi.params['check_referer']
885
+ when ['true']
886
+ check_method |= 1
887
+ when ['false']
888
+ check_method |= 0
889
+ else
890
+ err = :param
891
+ end
892
+ case @cgi.params['check_key']
893
+ when ['true']
894
+ check_method |= 2
895
+ when ['false']
896
+ check_method |= 0
897
+ else
898
+ err = :param
899
+ end
900
+ err = :param if check_method == 0
901
+ check_key = ''
902
+ key_seed = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
903
+ 1.upto(30) do
904
+ check_key << key_seed[rand( key_seed.length )]
905
+ end
906
+
907
+ if check_method & 2 != 0 && (!check_key || check_key == '') then
908
+ err ||= :key
909
+ end
910
+
911
+ unless err
912
+ old_key = @conf['csrf_protection_key']
913
+ old_method = @conf['csrf_protection_method']
914
+ @conf['csrf_protection_method'] = check_method
915
+ @conf['csrf_protection_key'] = check_key
916
+ if (check_method & 2 == 2 &&
917
+ (old_method & 2 == 0 || old_key != check_key))
918
+ @conf.save
919
+ raise ForceRedirect, "#{h @conf.update}?conf=csrf_protection#{@cgi.referer ? '&amp;referer_exists=true' : ''}"
920
+ end
921
+ end
922
+ err
923
+ else
924
+ nil
925
+ end
926
+ end
927
+
928
+ def saveconf_logger
929
+ if @mode == 'saveconf' then
930
+ @conf['log_level'] = @cgi.params['log_level'][0]
931
+ end
932
+ end
933
+
934
+ def conf_logger_list
935
+ log_level_list = ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"]
936
+ r = ''
937
+
938
+ @conf['log_level'] ||= "INFO"
939
+
940
+ log_level_list.each do |level|
941
+ if level == @conf['log_level'] then
942
+ select = " selected"
943
+ end
944
+ r << %Q|<option value="#{h level}"#{select}>#{level}</option>|
945
+ end
946
+
947
+ r << %Q|</select></p>|
948
+ end
949
+
950
+ def saveconf_recommendfilter
951
+ if @mode == 'saveconf' && @cgi.params['recommend.filter'][0] == 'true' then
952
+ @conf['sf.selected'] = ""
953
+ @conf['comment_description'] = "ツッコミ・コメントがあればどうぞ! URIは1つまで入力可能です。"
954
+
955
+ if @sp_path.inject(false){|r, dir| r || FileTest.exist?("#{dir}/hide-mail-field.rb") }
956
+ if @conf['sp.selected']
957
+ @conf['sp.selected'].concat("hide-mail-field.rb\n")
958
+ else
959
+ @conf['sp.selected'] = "hide-mail-field.rb\n"
960
+ end
961
+ @conf['spamfilter.bad_mail_patts'] = "@"
962
+ @conf['comment_description'].concat("spam対策でE-mail欄は隠してあります。もしE-mail欄が見えていても、何も入力しないで下さい。")
963
+ end
964
+
965
+ @conf['spamfilter.bad_comment_patts'] = "href=\r\nurl=\r\nURL=\r\n"
966
+ @conf['spamfilter.bad_ip_addrs'] = ""
967
+ @conf['spamfilter.bad_uri_patts'] = ""
968
+ @conf['spamfilter.bad_uri_patts_for_mails'] = false
969
+ @conf['spamfilter.date_limit'] = "7"
970
+ @conf['spamfilter.debug_file'] = ""
971
+ @conf['spamfilter.debug_mode'] = false
972
+ @conf['spamfilter.filter_mode'] = false
973
+ @conf['spamfilter.hide_commentform'] = true
974
+ @conf['spamfilter.linkcheck'] = 1
975
+ @conf['spamfilter.max_rate'] = "0"
976
+ @conf['spamfilter.max_uris'] = "1"
977
+ @conf['spamfilter.resolv_check'] = true
978
+ @conf['spamfilter.resolv_check_mode'] = false
979
+ @conf['spamlookup.domain.list'] = "bsb.spamlookup.net\r\nsc.surbl.org\r\nrbl.bulkfeeds.jp"
980
+ @conf['spamlookup.ip.list'] = "dnsbl.spam-champuru.livedoor.com"
981
+ @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"
982
+ end
983
+ end
984
+
985
+ #
986
+ # old ruby alert
987
+ #
988
+ def old_ruby_alert
989
+ if RUBY_VERSION < '1.9' and !@conf['old_ruby_alert.hide']
990
+ %Q|<div class="alert-warn">
991
+ <a href="#" class="action-button" id="alert-old-ruby">&times;</a>
992
+ #{old_ruby_alert_message}
993
+ </div>|
994
+ else
995
+ ''
996
+ end
997
+ end
998
+
999
+ def old_ruby_alert_message
1000
+ "お使いのRuby #{RUBY_VERSION}は次のリリースからサポート対象外になります。"
1001
+ end
1002
+
1003
+ add_conf_proc( 'old_ruby_alert', nil) do
1004
+ if @mode == 'saveconf'
1005
+ @conf['old_ruby_alert.hide'] = true
1006
+ end
1007
+ %Q|<h3>OLD RUBY ALERT</h3>| # dummy
1008
+ end
1009
+
1010
+ # Local Variables:
1011
+ # mode: ruby
1012
+ # indent-tabs-mode: t
1013
+ # tab-width: 3
1014
+ # ruby-indent-level: 3
1015
+ # End: