tdiary 3.2.2.20130507

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: