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,16 @@
1
+ begin
2
+ require 'jasmine'
3
+ load 'jasmine/tasks/jasmine.rake'
4
+ rescue LoadError
5
+ task :jasmine do
6
+ abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
7
+ end
8
+ end
9
+
10
+ # Local Variables:
11
+ # mode: ruby
12
+ # indent-tabs-mode: t
13
+ # tab-width: 3
14
+ # ruby-indent-level: 3
15
+ # End:
16
+ # vim: ts=3
@@ -0,0 +1,24 @@
1
+ desc "generate rdoc files"
2
+ task :rdoc do
3
+ root_dir = File.dirname(__FILE__)
4
+
5
+ dirlist = Dir.glob(root_dir + "/rdoc/**/").sort {
6
+ |a,b| b.split('/').size <=> a.split('/').size
7
+ }
8
+ dirlist.each {|d|
9
+ Dir.foreach(d) {|f|
10
+ File::delete(d + f) if !(/\.+$/ =~ f)
11
+ }
12
+ Dir.rmdir(d)
13
+ }
14
+
15
+ `cd #{root_dir} && rdoc --all --charset=UTF8 --op=rdoc --inline-source README ChangeLog index.rb update.rb tdiary.rb tdiary/* misc/* plugin/*`
16
+ end
17
+
18
+ # Local Variables:
19
+ # mode: ruby
20
+ # indent-tabs-mode: t
21
+ # tab-width: 3
22
+ # ruby-indent-level: 3
23
+ # End:
24
+ # vim: ts=3
@@ -0,0 +1,122 @@
1
+ #
2
+ # Ralefile for releasing tDiary.
3
+ #
4
+
5
+ STABLE = `git tag | sort -r | head -1`.chomp
6
+ REPOS = %w(tdiary-core tdiary-theme tdiary-blogkit tdiary-contrib)
7
+
8
+ DEST_DIR = "/var/www/tdiary.org/htdocs/download"
9
+ TARBALLS = []
10
+
11
+ #
12
+ # utilities
13
+ #
14
+ def fetch_files( repo )
15
+ Dir.chdir("tmp") do
16
+ rm_rf repo rescue true
17
+ sh "git clone git://github.com/tdiary/#{repo}.git #{repo}"
18
+ end
19
+ end
20
+
21
+ REPOS.each_with_index do |repo, i|
22
+ file REPOS[i] do |t|
23
+ fetch_files(t.name)
24
+ end
25
+ end
26
+
27
+ def make_tarball( repo, version = nil )
28
+ suffix = version ? "-#{version}" : ''
29
+ dest = "#{repo == 'tdiary-core' ? 'tdiary' : repo}#{suffix}"
30
+
31
+ if version then
32
+ Dir.chdir repo do
33
+ sh "git checkout #{version}"
34
+ end
35
+ end
36
+ rm_rf "#{repo}/.git"
37
+
38
+ sh "find #{repo} -type f | xargs chmod 644"
39
+ sh "find #{repo} -type d | xargs chmod 755"
40
+
41
+ if repo == 'tdiary-core' then
42
+ Dir.chdir 'tdiary-core' do
43
+ sh "chmod +x index.rb index.fcgi update.rb update.fcgi"
44
+ sh 'rake doc'
45
+ end
46
+ end
47
+
48
+ mv repo, dest
49
+ sh "tar zcf #{dest}.tar.gz #{dest}"
50
+ mv dest, repo
51
+ TARBALLS << "#{dest}.tar.gz"
52
+ end
53
+
54
+ #
55
+ # tasks
56
+ #
57
+ task :default => :snapshot
58
+
59
+ desc 'fetching all files from GitHub.'
60
+ task :fetch => REPOS
61
+
62
+ desc 'releasing all files'
63
+ task :release do
64
+ Dir.chdir("tmp") do
65
+ TARBALLS = Dir["*.tar.gz"] if TARBALLS.empty?
66
+ TARBALLS.each do |tgz|
67
+ sh "scp -P 443 #{tgz} www.tdiary.org:#{DEST_DIR}"
68
+ end
69
+ end
70
+ end
71
+
72
+ desc 'making packages of snapshot.'
73
+ task :snapshot => REPOS do
74
+ Dir.chdir("tmp") do
75
+ TARBALLS.clear
76
+ REPOS.each do |repo|
77
+ make_tarball( repo )
78
+ end
79
+ Dir["tdiary-theme/*"].each do |d|
80
+ mv d, "tdiary-core/theme/"
81
+ end
82
+ mv "tdiary-core", "tdiary"
83
+ sh "tar zcf tdiary-full.tar.gz tdiary"
84
+ TARBALLS << "tdiary-full.tar.gz"
85
+ rm_rf "tdiary"
86
+ REPOS.each {|repo| rm_rf repo rescue true }
87
+ end
88
+ end
89
+
90
+ desc 'making packages of stable.'
91
+ task :stable => REPOS do
92
+ Dir.chdir("tmp") do
93
+ TARBALLS.clear
94
+ REPOS.each do |repo|
95
+ make_tarball( repo, STABLE )
96
+ end
97
+ Dir["tdiary-theme/*"].each do |d|
98
+ mv d, "tdiary-core/theme/" rescue true
99
+ end
100
+ mv "tdiary-core", "tdiary-#{STABLE}"
101
+ sh "tar zcf tdiary-full-#{STABLE}.tar.gz tdiary-#{STABLE}"
102
+ TARBALLS << "tdiary-full-#{STABLE}.tar.gz"
103
+ rm_rf "tdiary-#{STABLE}"
104
+ REPOS.each {|repo| rm_rf repo rescue true }
105
+ end
106
+ end
107
+
108
+ desc 'cleanup all files.'
109
+ task :clean do
110
+ Dir.chdir("tmp") do
111
+ REPOS.each {|repo| rm_rf repo rescue true }
112
+ sh "rm *.tar.gz" rescue true
113
+ end
114
+ end
115
+
116
+ # Local Variables:
117
+ # mode: ruby
118
+ # indent-tabs-mode: t
119
+ # tab-width: 3
120
+ # ruby-indent-level: 3
121
+ # End:
122
+ # vim: ts=3
@@ -0,0 +1,51 @@
1
+ if defined? RSpec
2
+ require 'rspec/core/rake_task'
3
+
4
+ desc 'Run the code in spec'
5
+ RSpec::Core::RakeTask.new(:spec) do |t|
6
+ t.pattern = "spec/**/*_spec.rb"
7
+ end
8
+
9
+ namespace :spec do
10
+ %w(core plugin acceptance).each do |dir|
11
+ desc "Run the code examples in spec/#{dir}"
12
+ RSpec::Core::RakeTask.new(dir.to_sym) do |t|
13
+ t.pattern = "spec/#{dir}/**/*_spec.rb"
14
+ end
15
+ end
16
+
17
+ namespace :acceptance do
18
+ desc 'Run the code examples in spec/acceptance with cgi mode'
19
+ task :cgi do
20
+ ENV['TEST_MODE'] = 'webrick'
21
+ Rake::Task["spec:acceptance"].invoke
22
+ end
23
+
24
+ desc 'Run the code examples in spec/acceptance with secure mode'
25
+ task :secure do
26
+ ENV['TEST_MODE'] = 'secure'
27
+ Rake::Task["spec:acceptance"].invoke
28
+ end
29
+
30
+ desc 'Run the code examples in spec/acceptance with RdbIO mode'
31
+ task :rdb do
32
+ ENV['TEST_MODE'] = 'rdb'
33
+ Rake::Task["spec:acceptance"].invoke
34
+ end
35
+ end
36
+
37
+ desc 'Displayed code coverage with SimpleCov'
38
+ task :coverage do
39
+ ENV['COVERAGE'] = 'simplecov'
40
+ Rake::Task["spec"].invoke
41
+ end
42
+ end
43
+ end
44
+
45
+ # Local Variables:
46
+ # mode: ruby
47
+ # indent-tabs-mode: t
48
+ # tab-width: 3
49
+ # ruby-indent-level: 3
50
+ # End:
51
+ # vim: ts=3
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8; -*-
2
+ #
3
+ # server: script for running standalone tdiary cgi server.
4
+ #
5
+ # Copyright (C) 2008-2010, Kakutani Shintaro <shintaro@kakutani.com>
6
+ # You can redistribute it and/or modify it under GPL2.
7
+
8
+ task :server do
9
+ $:.unshift File.expand_path('../../../', __FILE__).untaint
10
+ require 'tdiary'
11
+
12
+ unless File.exist?(TDiary.root + '/tdiary.conf')
13
+ FileUtils.cp_r(TDiary.root + '/spec/fixtures/tdiary.conf.webrick',
14
+ TDiary.root + '/tdiary.conf', :verbose => false)
15
+ end
16
+ unless File.directory?(TDiary.root + '/tmp/data')
17
+ FileUtils.mkdir_p(TDiary.root + '/tmp/data/log')
18
+ File.open(TDiary.root + '/tmp/data/tdiary.conf', 'w') do |f|
19
+ f.write "tdiary_version = \"#{TDIARY_VERSION}\""
20
+ end
21
+ File.chmod(0644, TDiary.root + '/tmp/data/tdiary.conf')
22
+ end
23
+
24
+ opts = {
25
+ :daemon => ENV['DAEMON'],
26
+ :bind => ENV['BIND'] || '0.0.0.0',
27
+ :port => ENV['PORT'] || 19292,
28
+ :logger => $stderr,
29
+ :access_log => $stderr,
30
+ }
31
+
32
+ TDiary::Server.run( opts )
33
+ end
@@ -0,0 +1,17 @@
1
+ if defined? Test::Unit
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/**/*_test.rb']
7
+ t.verbose = true
8
+ end
9
+ end
10
+
11
+ # Local Variables:
12
+ # mode: ruby
13
+ # indent-tabs-mode: t
14
+ # tab-width: 3
15
+ # ruby-indent-level: 3
16
+ # End:
17
+ # vim: ts=3
data/tdiary/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module TDiary
2
+ VERSION = '3.2.2.20130507'
3
+ end
data/tdiary/view.rb ADDED
@@ -0,0 +1,468 @@
1
+ module TDiary
2
+ #
3
+ # class TDiaryView
4
+ # base of view mode classes
5
+ #
6
+ class TDiaryView < TDiaryBase
7
+ def initialize( cgi, rhtml, conf )
8
+ super
9
+
10
+ unless referer_filter( @cgi.referer )
11
+ def @cgi.referer; nil; end
12
+ end
13
+
14
+ # save referer to latest
15
+ if (!@conf.referer_day_only or (@cgi.params['date'][0] and @cgi.params['date'][0].length == 8)) and @cgi.referer then
16
+ ym = latest_month
17
+ @date = ym ? Time::local( ym[0], ym[1] ) : Time::now
18
+ @io.transaction( @date ) do |diaries|
19
+ @diaries = diaries
20
+ dirty = DIRTY_NONE
21
+ @diaries.keys.sort.reverse_each do |key|
22
+ @diary = @diaries[key]
23
+ break if @diary.visible?
24
+ end
25
+ if @diary then
26
+ @diary.add_referer( @cgi.referer )
27
+ dirty = DIRTY_REFERER
28
+ end
29
+ dirty
30
+ end
31
+ @date = @diary.date if @diary
32
+ end
33
+ end
34
+
35
+ def last_modified
36
+ lm = Time::at( 0 )
37
+ @diaries.each_value do |diary|
38
+ lmd = diary.last_modified
39
+ lm = lmd if lm < lmd and diary.visible?
40
+ end
41
+ lm
42
+ end
43
+
44
+ protected
45
+
46
+ def each_day
47
+ @diaries.keys.sort.each do |date|
48
+ diary = @diaries[date]
49
+ next unless diary.visible?
50
+ yield diary
51
+ end
52
+ end
53
+
54
+ def latest_month
55
+ result = nil
56
+ calendar
57
+ @years.keys.sort.reverse_each do |year|
58
+ @years[year.to_s].sort.reverse_each do |month|
59
+ result = [year, month]
60
+ break
61
+ end
62
+ break
63
+ end
64
+ result
65
+ end
66
+
67
+ def oldest_month
68
+ result = nil
69
+ calendar
70
+ @years.keys.sort.each do |year|
71
+ @years[year.to_s].sort.each do |month|
72
+ result = [year, month]
73
+ break
74
+ end
75
+ break
76
+ end
77
+ result
78
+ end
79
+
80
+ private
81
+
82
+ def load_filters
83
+ return if @filters
84
+
85
+ @filters = []
86
+ filter_path = @conf.filter_path || "#{PATH}/tdiary/filter"
87
+ Dir::glob( "#{filter_path}/*.rb" ).sort.each do |file|
88
+ require file.untaint
89
+ @filters << TDiary::Filter::const_get( "#{File::basename( file, '.rb' ).capitalize}Filter" )::new( @cgi, @conf )
90
+ end
91
+ end
92
+
93
+ def all_filters
94
+ load_filters
95
+ @filters + (load_plugins.sf_filters || [])
96
+ end
97
+
98
+ def comment_filter( diary, comment )
99
+ all_filters.each do |filter|
100
+ return false unless filter.comment_filter( diary, comment )
101
+ break unless comment.visible?
102
+ end
103
+ true
104
+ end
105
+
106
+ def referer_filter( referer )
107
+ all_filters.each do |filter|
108
+ return false unless filter.referer_filter( referer )
109
+ end
110
+ true
111
+ end
112
+ end
113
+
114
+ #
115
+ # class TDiaryDay
116
+ # show day mode view
117
+ #
118
+ class TDiaryDay < TDiaryView
119
+ def initialize( cgi, rhtml, conf )
120
+ super
121
+
122
+ begin
123
+ # time is noon for easy to calc leap second.
124
+ @date = Time::local( *@cgi.params['date'][0].scan( /^(\d{4})(\d\d)(\d\d)$/ )[0] ) + 12*60*60
125
+ load( @date )
126
+ rescue ArgumentError, NameError
127
+ raise TDiaryError, 'bad date'
128
+ end
129
+ @diary = nil if @diary and not @diary.visible?
130
+ end
131
+
132
+ def last_modified
133
+ @diary ? @diary.last_modified : Time::at( 0 )
134
+ end
135
+
136
+ def eval_rhtml( prefix = '' )
137
+ if not @diary and bot?
138
+ raise NotFound
139
+ else
140
+ super(prefix)
141
+ end
142
+ end
143
+
144
+ protected
145
+
146
+ def load( date )
147
+ if not @diary or (@diary.date.dup + 12*60*60).gmtime.strftime( '%Y%m%d' ) != date.dup.gmtime.strftime( '%Y%m%d' ) then
148
+ @io.transaction( date ) do |diaries|
149
+ @diaries = diaries
150
+ dirty = DIRTY_NONE
151
+ @diary = self[date]
152
+ if @diary and @cgi.referer then
153
+ @diary.add_referer( @cgi.referer )
154
+ dirty = DIRTY_REFERER
155
+ end
156
+ dirty
157
+ end
158
+ else
159
+ @diary = self[date]
160
+ end
161
+ end
162
+
163
+ def cookie_name
164
+ @cgi.cookies['tdiary'][0] or ''
165
+ end
166
+
167
+ def cookie_mail
168
+ @cgi.cookies['tdiary'][1] or ''
169
+ end
170
+ end
171
+
172
+ #
173
+ # class TDiaryComment
174
+ # save a comment
175
+ #
176
+ class TDiaryComment < TDiaryDay
177
+ def initialize( cgi, rhtml, conf )
178
+ super
179
+ end
180
+
181
+ protected
182
+
183
+ def load( date )
184
+ @date = date
185
+ @name = @cgi.params['name'][0]
186
+ @mail = @cgi.params['mail'][0]
187
+ @body = @cgi.params['body'][0]
188
+ if @cgi.mobile_agent? && String.method_defined?(:encode)
189
+ @name.force_encoding(conf.mobile_encoding)
190
+ @body.force_encoding(conf.mobile_encoding)
191
+ end
192
+ @name = @conf.to_native( @name )
193
+ @body = @conf.to_native( @body )
194
+ @comment = Comment::new( @name, @mail, @body )
195
+
196
+ dirty = DIRTY_NONE
197
+ @io.transaction( @date ) do |diaries|
198
+ @diaries = diaries
199
+ @diary = self[@date]
200
+ if @diary and comment_filter( @diary, @comment ) then
201
+ @diary.add_comment( @comment )
202
+ dirty = DIRTY_COMMENT
203
+ cookie_path = File::dirname( @cgi.script_name )
204
+ cookie_path += '/' if cookie_path !~ /\/$/
205
+ @cookies << CGI::Cookie::new( {
206
+ 'name' => 'tdiary',
207
+ 'value' => [@name,@mail],
208
+ 'path' => cookie_path,
209
+ 'expires' => Time::now.gmtime + 90*24*60*60 # 90days
210
+ } )
211
+ @io.clear_cache( /(latest|#{@date.strftime( '%Y%m' )})/ )
212
+ else
213
+ @comment = nil
214
+ end
215
+ dirty
216
+ end
217
+ end
218
+
219
+ def do_eval_rhtml( prefix )
220
+ load_plugins
221
+ @plugin.instance_eval { update_proc } if @comment
222
+ if @conf.request.xhr?
223
+ super
224
+ else
225
+ anchor_str = @plugin.instance_eval( %Q[anchor "#{@diary.date.strftime('%Y%m%d')}"].untaint )
226
+ raise ForceRedirect::new( "#{@conf.index}#{anchor_str}#c#{'%02d' % @diary.count_comments( true )}" )
227
+ end
228
+ end
229
+ end
230
+
231
+ #
232
+ # class TDiaryMonthBase
233
+ # base of TDiaryMonth and TDiaryNYear
234
+ #
235
+ class TDiaryMonthBase < TDiaryView
236
+ def eval_rhtml( prefix = '' )
237
+ if @diaries.empty? and bot?
238
+ raise NotFound
239
+ else
240
+ super(prefix)
241
+ end
242
+ end
243
+ end
244
+
245
+ #
246
+ # class TDiaryMonth
247
+ # show month mode view
248
+ #
249
+ class TDiaryMonth < TDiaryMonthBase
250
+ def initialize( cgi, rhtml, conf )
251
+ super
252
+
253
+ begin
254
+ date = Time::local( *@cgi.params['date'][0].scan( /^(\d{4})(\d\d)$/ )[0] )
255
+ d1 = @date.dup.gmtime if @date
256
+ d2 = date.dup.gmtime
257
+ if not @date or d1.year != d2.year or d1.month != d2.month then
258
+ @date = date
259
+ @io.transaction( @date ) do |diaries|
260
+ @diaries = diaries
261
+ @diary = @diaries[@diaries.keys.sort.reverse[0]]
262
+ DIRTY_NONE
263
+ end
264
+ end
265
+ rescue ArgumentError, NameError
266
+ raise TDiaryError, 'bad date'
267
+ end
268
+ end
269
+ end
270
+
271
+ #
272
+ # class TDiaryNYear
273
+ # show nyear mode view
274
+ #
275
+ class TDiaryNYear < TDiaryMonthBase
276
+ def initialize(cgi, rhtml, conf)
277
+ super
278
+
279
+ @diaries = {}
280
+ month, day = @cgi.params['date'][0].scan(/^(\d\d)(\d\d)$/)[0]
281
+ nyear(month).each do |y, m|
282
+ @date = Time::local(y, m)
283
+ @io.transaction(@date) do |diaries|
284
+ ymd = y + m + day
285
+ @diaries[ymd] = diaries[ymd] if diaries[ymd]
286
+ DIRTY_NONE
287
+ end
288
+ end
289
+ end
290
+
291
+ protected
292
+
293
+ def nyear(month)
294
+ r = []
295
+ calendar
296
+ @years.keys.reverse_each do |year|
297
+ r << [year, month] if @years[year].include? month
298
+ end
299
+ r
300
+ end
301
+ end
302
+
303
+ #
304
+ # class TDiaryMonthWithoutFilter
305
+ #
306
+ class TDiaryMonthWithoutFilter < TDiaryMonth
307
+ def referer_filter(referer); end
308
+ end
309
+
310
+ #
311
+ # class TDiaryLatest
312
+ # show latest mode view
313
+ #
314
+ class TDiaryLatest < TDiaryView
315
+ def initialize( cgi, rhtml, conf )
316
+ super
317
+
318
+ if @cgi.params['date'][0] then
319
+ ym = [@cgi.params['date'][0][0,4].to_i, @cgi.params['date'][0][4,2].to_i]
320
+ @date = nil
321
+ else
322
+ ym = latest_month
323
+ end
324
+
325
+ unless @date then
326
+ @date = ym ? Time::local( ym[0], ym[1] ) : Time::now
327
+ @io.transaction( @date ) do |diaries|
328
+ @diaries = diaries
329
+ if @cgi.params['date'][0] then
330
+ @diary = @diaries[@cgi.params['date'][0][0,8]]
331
+ @date = @diary.date if @diary
332
+ end
333
+ unless @diary then
334
+ @diaries.keys.sort.reverse_each do |d|
335
+ diary = @diaries[d]
336
+ if diary.visible?
337
+ @diary = diary
338
+ break
339
+ end
340
+ end
341
+ @diary = @diaries[@diaries.keys.sort.reverse[0]] unless @diary
342
+ @date = @diary.date if @diary
343
+ end
344
+ DIRTY_NONE
345
+ end
346
+ end
347
+
348
+ if ym then
349
+ # read +2 days for calc ndays.prev in count_diaries method
350
+ limit = limit_size( @conf.latest_limit ) + 2
351
+
352
+ # read next month data until limit
353
+ y = ym[0].to_i
354
+ m = ym[1].to_i
355
+ latest = latest_month
356
+ diaries_tmp = {}.update( @diaries )
357
+ diaries_size = count_diaries_after( diaries_tmp )
358
+ while ( latest and diaries_size < limit )
359
+ date = if m == 12 then
360
+ Time::local( y += 1, m = 1 )
361
+ else
362
+ Time::local( y, m += 1 )
363
+ end
364
+ break if date > Time::local( *latest )
365
+ @io.transaction( date ) do |diaries|
366
+ diaries_tmp.update( diaries )
367
+ diaries_size = count_diaries_after( diaries_tmp )
368
+ DIRTY_NONE
369
+ end
370
+ end
371
+
372
+ # read prev month data until limit
373
+ y = ym[0].to_i
374
+ m = ym[1].to_i
375
+ oldest = oldest_month
376
+ diaries_size = count_diaries_before( @diaries )
377
+ while ( oldest and diaries_size < limit )
378
+ date = if m == 1 then
379
+ Time::local( y -= 1, m = 12 )
380
+ else
381
+ Time::local( y, m -= 1 )
382
+ end
383
+ break if date < Time::local( *oldest )
384
+ @io.transaction( date ) do |diaries|
385
+ @diaries.update( diaries )
386
+ diaries_size = count_diaries_before( @diaries )
387
+ DIRTY_NONE
388
+ end
389
+ end
390
+ end
391
+ end
392
+
393
+ def latest( limit = 5 )
394
+ start = start_date
395
+ limit = limit_size( limit )
396
+ idx = 0
397
+ @diaries.keys.sort.reverse_each do |date|
398
+ next if date > start
399
+ diary = @diaries[date]
400
+ next unless diary.visible?
401
+ yield diary
402
+ idx += 1
403
+ break if idx >= limit
404
+ end
405
+ end
406
+
407
+ protected
408
+
409
+ def count_diaries_after( diaries )
410
+ start = start_date
411
+ limit = limit_size( @conf.latest_limit )
412
+ diaries_size = 0
413
+ continue_exist = true
414
+ diaries.keys.sort.each do |date|
415
+ if diaries[date].visible? and date > start then
416
+ continue_exist = true if diaries_size < limit
417
+ @conf['ndays.next'] = date if diaries_size < limit
418
+ diaries_size += 1
419
+ end
420
+ end
421
+ @conf['ndays.next'] = nil unless continue_exist
422
+ diaries_size
423
+ end
424
+
425
+ def count_diaries_before( diaries )
426
+ start = start_date
427
+ limit = limit_size( @conf.latest_limit )
428
+ diaries_size = 0
429
+ continue_exist = false
430
+ diaries.keys.sort.reverse_each do |date|
431
+ if diaries[date].visible? and date <= start then
432
+ continue_exist = true if diaries_size >= limit
433
+ @conf['ndays.prev'] = date if diaries_size <= limit
434
+ diaries_size += 1
435
+ end
436
+ end
437
+ @conf['ndays.prev'] = nil unless continue_exist
438
+ diaries_size
439
+ end
440
+
441
+ def start_date
442
+ if @cgi.params['date'][0] then
443
+ @cgi.params['date'][0][0,8]
444
+ else
445
+ '99999999' # max of date string
446
+ end
447
+ end
448
+
449
+ def limit_size( default_limit )
450
+ if @cgi.params['date'][0] then
451
+ date = @cgi.params['date'][0]
452
+ limit = date[9,date.length-9].to_i
453
+ limit = 30 if limit > 30
454
+ limit
455
+ else
456
+ default_limit
457
+ end
458
+ end
459
+ end
460
+ end
461
+
462
+ # Local Variables:
463
+ # mode: ruby
464
+ # indent-tabs-mode: t
465
+ # tab-width: 3
466
+ # ruby-indent-level: 3
467
+ # End:
468
+ # vim: ts=3