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,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ # recent_comment.rb
3
+ #
4
+ # recent_comment: 最近のツッコミをリストアップする
5
+ #
6
+ # Copyright (c) 2002 TADA Tadashi <sho@spc.gr.jp>
7
+ # You can distribute this file under the GPL2.
8
+ #
9
+ def recent_comment_format(format, *args)
10
+ format.gsub(/\$(\d)/) {|s| args[$1.to_i - 1]}
11
+ end
12
+
13
+ def recent_comment_init
14
+ @conf['recent_comment.max'] ||= 3
15
+ @conf['recent_comment.date_format'] ||= "(%m-%d)"
16
+ @conf['recent_comment.except_list'] ||= ''
17
+ @conf['recent_comment.format'] ||= '<a href="$2" title="$3">$4 $5</a>'
18
+ @conf['recent_comment.notfound_msg'] ||= ''
19
+ end
20
+
21
+ def recent_comment( ob_max = 'OBSOLUTE', sep = 'OBSOLUTE', ob_form = 'OBSOLUTE', ob_except = 'OBSOLUTE' )
22
+ recent_comment_init
23
+
24
+ max = @conf['recent_comment.max']
25
+ form = @conf['recent_comment.date_format']
26
+ except = @conf['recent_comment.except_list']
27
+ format = @conf['recent_comment.format']
28
+ notfound_msg = @conf['recent_comment.notfound_msg']
29
+
30
+ comments = []
31
+ date = {}
32
+ index = {}
33
+
34
+ @diaries.each_value do |diary|
35
+ next unless diary.visible?
36
+ diary.each_comment_tail( max ) do |comment, idx|
37
+ if (except != '') && (/#{except}/ =~ comment.name)
38
+ next
39
+ end
40
+ comments << comment
41
+ date[comment.date] = diary.date
42
+ index[comment.date] = idx
43
+ end
44
+ end
45
+
46
+ result = []
47
+
48
+ comments.sort{|a,b| (a.date)<=>(b.date)}.reverse.each_with_index do |com,idx|
49
+ break if idx >= max
50
+ a = h(@index) + anchor("#{date[com.date].strftime( '%Y%m%d' )}#c#{'%02d' % index[com.date]}")
51
+ # we can not escape anchor() to accomodate number_anchor.rb
52
+ popup = h( com.shorten( @conf.comment_length ) )
53
+ str = h( com.name )
54
+ date_str = h( com.date.dup.strftime( form ) )
55
+ result << "<li>"
56
+ result << recent_comment_format(format, idx, a, popup, str, date_str)
57
+ result << "</li>\n"
58
+ end
59
+
60
+ if result.size == 0
61
+ notfound_msg
62
+ else
63
+ %Q|<ol class="recent-comment">\n| + result.join( '' ) + "</ol>\n"
64
+ end
65
+ end
66
+
67
+ if @mode == 'saveconf'
68
+ def saveconf_recent_comment
69
+ @conf['recent_comment.max'] = @cgi.params['recent_comment.max'][0].to_i
70
+ @conf['recent_comment.date_format'] = @cgi.params['recent_comment.date_format'][0]
71
+ @conf['recent_comment.except_list'] = @cgi.params['recent_comment.except_list'][0]
72
+ @conf['recent_comment.format'] = @cgi.params['recent_comment.format'][0]
73
+ @conf['recent_comment.notfound_msg'] = @cgi.params['recent_comment.notfound_msg'][0]
74
+ end
75
+ end
76
+
77
+ # Local Variables:
78
+ # mode: ruby
79
+ # indent-tabs-mode: t
80
+ # tab-width: 3
81
+ # ruby-indent-level: 3
82
+ # End:
@@ -0,0 +1,192 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # recent_comment3: 最近のツッコミをリストアップする
4
+ #
5
+ # @secure = true な環境では動作しません.
6
+ #
7
+ # Copyright (c) 2002 Junichiro KITA <kita@kitaj.no-ip.com>
8
+ # Distributed under the GPL
9
+ #
10
+ require 'pstore'
11
+ require 'fileutils'
12
+ require 'time'
13
+ require 'pathname'
14
+
15
+ def recent_comment3_format(format, *args)
16
+ format.gsub(/\$(\d)/) {|s| args[$1.to_i - 1]}
17
+ end
18
+
19
+ def migrate_old_data
20
+ # backward compatibility
21
+ if File.exists?("#{@cache_path}/recent_comments") && !File.exists?("{#{@conf.data_path}/recent_comments")
22
+ FileUtils.mv( "#{@cache_path}/recent_comments", "#{@conf.data_path}/recent_comments" )
23
+ end
24
+ # workaround for "/foo//bar" doesn't equal "/foo/bar"
25
+ if @conf['recent_comment3.cache'] &&
26
+ Pathname(@conf['recent_comment3.cache']).cleanpath == Pathname("#{@cache_path}/recent_comments").cleanpath
27
+ @conf['recent_comment3.cache'] = "#{@conf.data_path}/recent_comments"
28
+ end
29
+ end
30
+
31
+ def recent_comment3_init
32
+ @conf['recent_comment3.cache'] ||= "#{@conf.data_path}/recent_comments"
33
+ @conf['recent_comment3.cache_size'] ||= 50
34
+ @conf['recent_comment3.max'] ||= 3
35
+ @conf['recent_comment3.date_format'] ||= "(%m-%d)"
36
+ @conf['recent_comment3.except_list'] ||= ''
37
+ @conf['recent_comment3.format'] ||= '<a href="$2" title="$3">$4 $5</a>'
38
+ @conf['recent_comment3.tree'] ||= ""
39
+ @conf['recent_comment3.titlelen'] ||= 20
40
+ @conf['recent_comment.notfound_msg'] ||= ''
41
+ end
42
+
43
+ def recent_comment3(ob_max = 'OBSOLUTE' ,sep = 'OBSOLUTE',ob_date_format = 'OBSOLUTE',*ob_except )
44
+ return 'DO NOT USE IN SECURE MODE' if @conf.secure
45
+
46
+ migrate_old_data
47
+ recent_comment3_init
48
+
49
+ cache = @conf['recent_comment3.cache'].untaint
50
+ date_format = @conf['recent_comment3.date_format']
51
+ excepts = @conf['recent_comment3.except_list'].split(/,/)
52
+ format = @conf['recent_comment3.format']
53
+ titlelen = @conf['recent_comment3.titlelen']
54
+ notfound_msg = @conf['recent_comment.notfound_msg']
55
+
56
+ entries = {}
57
+ tree_order =[]
58
+ order = []
59
+ idx = 0
60
+
61
+ PStore.new(cache).transaction do |db|
62
+ break unless db.root?('comments')
63
+ db['comments'].each do |c|
64
+ break if c.nil? || idx >= @conf['recent_comment3.max']
65
+
66
+ comment, date, serial = c
67
+ next if excepts.include?(comment.name) || !comment.visible?
68
+
69
+ a = h( @index ) + anchor("#{date.strftime('%Y%m%d')}#c#{'%02d' % serial}")
70
+ # XXX handling Encoding::CompatibilityError
71
+ popup = h(comment.shorten(@conf.comment_length)) rescue nil
72
+ str = h(comment.name)
73
+ date_str = h( comment.date.strftime(date_format) )
74
+
75
+ idx += 1
76
+
77
+ entry_date = "#{date.strftime('%Y%m%d')}"
78
+ comment_str = entries[entry_date]
79
+
80
+ if comment_str.nil?
81
+ comment_str = []
82
+ tree_order << entry_date
83
+ end
84
+
85
+ comment_str << recent_comment3_format(format, idx, a, popup, str, date_str)
86
+ entries[entry_date] = comment_str
87
+ order << entry_date
88
+ end
89
+ db.abort
90
+ end
91
+
92
+ result = []
93
+
94
+ if @conf['recent_comment3.tree'] == "t"
95
+ if entries.size == 0
96
+ notfound_msg
97
+ else
98
+ cgi = CGI::new
99
+ def cgi.referer; nil; end
100
+
101
+ tree_order.each do |entry_date|
102
+ a_entry = @index + anchor(entry_date)
103
+ cgi.params['date'] = [entry_date]
104
+ diary = TDiaryDay::new(cgi, '', @conf)
105
+ title = diary.diaries[entry_date].title.gsub( /<[^>]*>/, '' ) if diary
106
+
107
+ if title.nil? || title.length == 0 || title.strip.delete(' ').delete(' ').length == 0 then
108
+ date = Time.parse(entry_date)
109
+ title = "#{date.strftime @date_format}"
110
+ end
111
+
112
+ result << "<li>"
113
+ result << %Q|<a href="#{h( a_entry )}">#{h( @conf.shorten( title, titlelen ) )}</a><br>|
114
+ entries[entry_date].sort.each do |comment_str|
115
+ result << comment_str + "<br>"
116
+ end
117
+ result << "</li>\n"
118
+ end
119
+
120
+ %Q|<ul class="recent-comment">\n| + result.join( '' ) + "</ul>\n"
121
+ end
122
+ else
123
+ if entries.size == 0
124
+ ''
125
+ else
126
+ order.each do | entry_date |
127
+ result << "<li>#{entries[entry_date][0]}</li>\n"
128
+ entries[entry_date].shift
129
+ end
130
+ %Q|<ol class="recent-comment">\n| + result.join( '' ) + "</ol>\n"
131
+ end
132
+ end
133
+ end
134
+
135
+ add_update_proc do
136
+ migrate_old_data
137
+ recent_comment3_init
138
+
139
+ date = @date.strftime( '%Y%m%d' )
140
+ cache = @conf['recent_comment3.cache'].untaint
141
+ size = @conf['recent_comment3.cache_size']
142
+
143
+ if @mode == 'comment' && @comment && @comment.visible?
144
+ PStore.new(cache).transaction do |db|
145
+ comment = @comment
146
+ serial = 0
147
+ @diaries[date].each_comment { serial += 1 }
148
+ db['comments'] = Array.new( size ) unless db.root?('comments')
149
+ if db['comments'][0].nil? or comment != db['comments'][0][0]
150
+ db['comments'].unshift([comment, @date, serial]).pop
151
+ end
152
+ end
153
+ elsif @mode == 'showcomment'
154
+ PStore.new( cache ).transaction do |db|
155
+ break unless db.root?('comments')
156
+
157
+ @diaries[date].each_comment do |dcomment|
158
+ db['comments'].each do |c|
159
+ break if c.nil?
160
+
161
+ comment, cdate, serial = c
162
+ next if cdate.strftime('%Y%m%d') != date
163
+
164
+ if comment == dcomment && comment.date.to_s == dcomment.date.to_s
165
+ comment.show = dcomment.visible?
166
+ next
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
173
+
174
+ if @mode == 'saveconf'
175
+ def saveconf_recent_comment3
176
+ @conf['recent_comment3.max'] = @cgi.params['recent_comment3.max'][0].to_i
177
+ @conf['recent_comment3.date_format'] = @cgi.params['recent_comment3.date_format'][0]
178
+ @conf['recent_comment3.except_list'] = @cgi.params['recent_comment3.except_list'][0]
179
+ @conf['recent_comment3.format'] = @cgi.params['recent_comment3.format'][0]
180
+ @conf['recent_comment3.tree'] = @cgi.params['recent_comment3.tree'][0]
181
+ @conf['recent_comment3.titlelen'] = @cgi.params['recent_comment3.titlelen'][0].to_i
182
+ @conf['recent_comment.notfound_msg'] = @cgi.params['recent_comment.notfound_msg'][0]
183
+ end
184
+ end
185
+
186
+ # Local Variables:
187
+ # mode: ruby
188
+ # indent-tabs-mode: t
189
+ # tab-width: 3
190
+ # ruby-indent-level: 3
191
+ # End:
192
+ # vim: ts=3
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # recent_list: 最近書いた日記のタイトル,サブタイトルを表示する
4
+ # パラメタ(カッコ内は未指定時の値):
5
+ # days: 何日分の日記を表示するか(20)
6
+ # date_format: 日付表示フォーマット(日記の日付フォーマット)
7
+ # title_with_body: trueで各パラグラフへのリンクのtitle属性にそのパラグラフの一部を指定(false)
8
+ # show_size: trueで日記長を表示(false)
9
+ # show_title: trueで各日のタイトルを表示(false)
10
+ #
11
+ # 注意: セキュアモードでは使えません。
12
+ # 備考: タイトルリストを日記に埋め込むは、レイアウトを工夫しなければ
13
+ # なりません。ヘッダやフッタでtableタグを使ったり、CSSを書き換
14
+ # える必要があるでしょう。
15
+ #
16
+ # Copyright (c) 2001,2002 Junichiro KITA <kita@kitaj.no-ip.com>
17
+ # Distributed under the GPL
18
+ #
19
+ module ::TDiary
20
+ class TDiaryMonthWithoutFilter < TDiaryMonth
21
+ def referer_filter(referer); end
22
+ end
23
+ end
24
+
25
+ def recent_list( days = 30, date_format = nil, title_with_body = nil, show_size = nil, show_title = nil )
26
+ days = days.to_i
27
+ date_format ||= @conf.date_format
28
+
29
+ result = %Q|<ul class="recent-list">\n|
30
+
31
+ cgi = CGI::new
32
+ def cgi.referer; nil; end
33
+
34
+ catch(:exit) {
35
+ @years.keys.sort.reverse_each do |year|
36
+ @years[year].sort.reverse_each do |month|
37
+ cgi.params['date'] = ["#{year}#{month}"]
38
+ m = TDiaryMonthWithoutFilter::new(cgi, '', @conf)
39
+ m.diaries.keys.sort.reverse_each do |date|
40
+ next unless m.diaries[date].visible?
41
+ result << %Q|<li><a href="#{@index}#{anchor date}">#{m.diaries[date].date.strftime(date_format)}</a>\n|
42
+ if show_title and m.diaries[date].title
43
+ result << %Q| #{m.diaries[date].title}|
44
+ end
45
+ if show_size == true
46
+ s = 0
47
+ m.diaries[date].each_section do |section|
48
+ s = s + section.to_s.size.to_i
49
+ end
50
+ result << ":#{s}"
51
+ end
52
+ result << %Q|\t<ul class="recent-list-item">\n|
53
+ i = 1
54
+ if !@plugin_files.grep(/\/category.rb$/).empty? and m.diaries[date].categorizable?
55
+ m.diaries[date].each_section do |section|
56
+ if section.stripped_subtitle
57
+ result << %Q|\t<li><a href="#{h( @index )}#{anchor( "%s#p%02d" % [date, i] )}"|
58
+ result << %Q| title="#{h( @conf.shorten( apply_plugin( section.body_to_html, true) ) )}"| if title_with_body == true
59
+ result << %Q|>#{i}</a>. | \
60
+ << %Q|#{section.stripped_subtitle_to_html}</li>\n|
61
+ end
62
+ i += 1
63
+ end
64
+ else
65
+ m.diaries[date].each_section do |section|
66
+ if section.subtitle
67
+ result << %Q|\t<li><a href="#{h( @index )}#{anchor( "%s#p%02d" % [date, i] )}"|
68
+ result << %Q| title="#{h( @conf.shorten( apply_plugin(section.body_to_html, true) ) )}"| if title_with_body == true
69
+ result << %Q|>#{i}</a>. | \
70
+ << %Q|#{section.subtitle_to_html}</li>\n|
71
+ end
72
+ i += 1
73
+ end
74
+ end
75
+ result << "\t</ul>\n</li>\n"
76
+ days -= 1
77
+ throw :exit if days == 0
78
+ end
79
+ end
80
+ end
81
+ }
82
+ apply_plugin( result << "</ul>\n" )
83
+ end
84
+
85
+ # Local Variables:
86
+ # mode: ruby
87
+ # indent-tabs-mode: t
88
+ # tab-width: 3
89
+ # ruby-indent-level: 3
90
+ # End:
91
+ # vim: ts=3
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*-
2
+ # recent_namazu.rb
3
+ #
4
+ # recent_namazu: Namazu検索語新しい順
5
+ # namazi.cgiが作成する検索キーワードログ(NMZ.slog)から
6
+ # 最新xx件分の検索語を表示します。
7
+ # パラメタ:
8
+ # file: 検索キーワードログファイル名(絶対パス表記)
9
+ # namazu: なまずcgi名
10
+ # limit: 表示件数(未指定時:5)
11
+ # sep: セパレータ(未指定時:空白)
12
+ # make_link: <a>を生成するか?(未指定時:生成する)
13
+ #
14
+ #
15
+ # Copyright (c) 2002 Hiroyuki Ikezoe <zoe@kasumi.sakura.ne.jp>
16
+ # Distributed under the GPL
17
+
18
+ def recent_namazu(file, namazu, limit = 5, sep='&nbsp;', make_link = true)
19
+ begin
20
+ lines = []
21
+ log = open(file)
22
+ if log.stat.size > 300 * limit then
23
+ log.seek(-300 * limit,IO::SEEK_END)
24
+ end
25
+ log.each_line do |line|
26
+ lines << line
27
+ end
28
+
29
+ result = []
30
+ lines.reverse.each_with_index do |line,idx|
31
+ break if idx >= limit
32
+ word = line.split(/\t/)[0]
33
+ if make_link
34
+ result << %Q[<a href="#{h( namazu )}?query=#{u( word )}">#{h( word )}</a>]
35
+ else
36
+ result << h( word )
37
+ end
38
+ end
39
+ result.join( sep )
40
+ rescue
41
+ %Q[<p class="message">#$! (#{$!.class})<br>cannot read #{file}.</p>]
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:
@@ -0,0 +1,305 @@
1
+ # -*- indent-tabs-mode: t -*-
2
+ # recent_rss.rb: RSS recent plugin
3
+ #
4
+ # options:
5
+ # @options['recent_rss.use-image-link'] : use image as link
6
+ # instead of text if available.
7
+ #
8
+ # recent_rss: show recnet list from RSS
9
+ # parameters (default):
10
+ # url: URL of RSS
11
+ # max: max of list itmes(5)
12
+ # cache_time: cache time(second) of RSS(60*60)
13
+ # show_modified: show modified time of the entry (true)
14
+ #
15
+ # Copyright (c) 2003-2005 Kouhei Sutou <kou@cozmixng.org>
16
+ # Distributed under the GPL
17
+ #
18
+
19
+ require "rss/rss"
20
+ require "fileutils"
21
+
22
+ RECENT_RSS_FIELD_SEPARATOR = "\0"
23
+ RECENT_RSS_ENTRY_SEPARATOR = "\1"
24
+ RECENT_RSS_VERSION = "0.0.6"
25
+ RECENT_RSS_HTTP_HEADER = {
26
+ "User-Agent" => "tDiary RSS recent plugin version #{RECENT_RSS_VERSION}. " <<
27
+ "Using RSS parser version is #{::RSS::VERSION}.",
28
+ }
29
+
30
+ def recent_rss( url, max = 5, cache_time = 3600, show_modified = true )
31
+ return 'DO NOT USE IN SECURE MODE' if @conf.secure
32
+
33
+ url.untaint
34
+
35
+ cache_file = "#{@cache_path}/recent_rss.#{CGI.escape(url)}"
36
+
37
+ recent_rss_cache_rss(url, cache_file, cache_time.to_i)
38
+
39
+ return '' unless test(?r, cache_file)
40
+
41
+ rv = %Q|<div class="recent-rss">\n|
42
+
43
+ site_info, *infos = recent_rss_read_from_cache(cache_file)
44
+
45
+ if site_info
46
+ title, url, time, image = site_info
47
+ content = recent_rss_entry_to_html( title, url, time, image, show_modified )
48
+ rv << %Q|<div class="recent-rss-title">\n|
49
+ rv << %Q|<span class="#{recent_rss_modified_class(time)}">#{content}</span>\n|
50
+ rv << "</div>\n"
51
+ end
52
+
53
+ have_entry = infos.size > 0 && max > 0
54
+
55
+ rv << %Q|<ol class="recent-rss">\n| if have_entry
56
+ i = 0
57
+ infos.each do |title, url, time, image|
58
+ break if i >= max
59
+ next if title.nil?
60
+ rv << '<li>'
61
+ rv << %Q[<span class="#{recent_rss_modified_class(time)}">]
62
+ rv << recent_rss_entry_to_html( title, url, time, image, show_modified )
63
+ rv << %Q[</span>]
64
+ rv << "</li>\n"
65
+ i += 1
66
+ end
67
+
68
+ rv << "</ol>\n" if have_entry
69
+
70
+ rv << "</div>\n"
71
+
72
+ rv
73
+ end
74
+
75
+ class InvalidResourceError < StandardError; end
76
+ class RSSNotModified < StandardError; end
77
+
78
+ require 'time'
79
+ require 'net/http'
80
+ require 'uri/generic'
81
+ require 'rss/parser'
82
+ require 'rss/1.0'
83
+ require 'rss/2.0'
84
+ require 'rss/dublincore'
85
+ begin
86
+ require 'rss/image'
87
+ rescue LoadError
88
+ end
89
+
90
+ def recent_rss_cache_rss(url, cache_file, cache_time)
91
+
92
+ cached_time = nil
93
+ cached_time = File.mtime(cache_file) if File.exist?(cache_file)
94
+
95
+ if cached_time.nil? or Time.now > cached_time + cache_time
96
+
97
+ begin
98
+ uri = URI.parse(url)
99
+
100
+ raise URI::InvalidURIError unless uri.is_a?(URI::HTTP)
101
+
102
+ rss_source = recent_rss_fetch_rss(uri, cached_time)
103
+
104
+ raise InvalidResourceError if rss_source.nil?
105
+
106
+ # parse RSS
107
+ rss = ::RSS::Parser.parse(rss_source.untaint, false)
108
+ raise ::RSS::Error if rss.nil?
109
+
110
+ # pre processing
111
+ begin
112
+ rss.output_encoding = @conf.charset || charset
113
+ rescue ::RSS::UnknownConversionMethodError
114
+ end
115
+
116
+ rss_infos = []
117
+ rss.items.each do |item|
118
+ recent_rss_pubDate_to_dc_date(item)
119
+ if item.respond_to?(:image_item) and item.image_item
120
+ image = item.image_item.about
121
+ else
122
+ image = nil
123
+ end
124
+ rss_infos << [item.title, item.link, item.dc_date, image]
125
+ end
126
+ recent_rss_pubDate_to_dc_date(rss.channel)
127
+ rss_infos.unshift([
128
+ rss.channel.title,
129
+ rss.channel.link,
130
+ rss.channel.dc_date ||
131
+ rss.items.collect{|item| item.dc_date}.compact.first,
132
+ rss.image && rss.image.url,
133
+ ])
134
+ recent_rss_write_to_cache(cache_file, rss_infos)
135
+
136
+ rescue RSSNotModified
137
+ FileUtils.touch(cache_file)
138
+ rescue URI::InvalidURIError
139
+ recent_rss_write_to_cache(cache_file, [['Invalid URI', url]])
140
+ rescue InvalidResourceError, ::RSS::Error
141
+ recent_rss_write_to_cache(cache_file, [['Invalid Resource', url]])
142
+ end
143
+ end
144
+
145
+ end
146
+
147
+ def recent_rss_fetch_rss(uri, cache_time)
148
+ rss = nil
149
+
150
+ px_host, px_port = (@conf['proxy'] || '').split( /:/ )
151
+ px_port = 80 if px_host and !px_port
152
+ begin
153
+ timeout( 10 ) do
154
+ res = Net::HTTP::Proxy( px_host, px_port ).get_response( uri )
155
+ case res
156
+ when Net::HTTPSuccess
157
+ rss = res.body
158
+ when Net::HTTPRedirection
159
+ raise InvalidResourceError
160
+ when Net::HTTPNotModified
161
+ # not modified
162
+ raise RSSNotModified
163
+ else
164
+ raise InvalidResourceError
165
+ end
166
+ end
167
+ rescue TimeoutError, SocketError, StandardError
168
+ raise InvalidResourceError
169
+ end
170
+ rss
171
+ end
172
+
173
+ def recent_rss_http_header(cache_time)
174
+ header = RECENT_RSS_HTTP_HEADER.dup
175
+ if cache_time.respond_to?(:rfc2822)
176
+ header["If-Modified-Since"] = cache_time.rfc2822
177
+ end
178
+ header
179
+ end
180
+
181
+ def recent_rss_write_to_cache(cache_file, rss_infos)
182
+ File.open(cache_file, 'w') do |f|
183
+ f.flock(File::LOCK_EX)
184
+ rss_infos.each do |info|
185
+ f << info.join(RECENT_RSS_FIELD_SEPARATOR)
186
+ f << RECENT_RSS_ENTRY_SEPARATOR
187
+ end
188
+ f.flock(File::LOCK_UN)
189
+ end
190
+ end
191
+
192
+ def recent_rss_read_from_cache(cache_file)
193
+ infos = []
194
+ File.open(cache_file) do |f|
195
+ while info = f.gets(RECENT_RSS_ENTRY_SEPARATOR)
196
+ info = info.chomp(RECENT_RSS_ENTRY_SEPARATOR)
197
+ infos << info.split(RECENT_RSS_FIELD_SEPARATOR)
198
+ end
199
+ end
200
+ infos.collect do |title, url, time, image|
201
+ [
202
+ recent_rss_convert(title),
203
+ recent_rss_convert(url),
204
+ recent_rss_convert(time) {|t| Time.parse(t)},
205
+ recent_rss_convert(image),
206
+ ]
207
+ end
208
+ end
209
+
210
+ def recent_rss_convert(str)
211
+ if str.nil? or str.empty?
212
+ nil
213
+ else
214
+ if block_given?
215
+ yield str
216
+ else
217
+ str
218
+ end
219
+ end
220
+ end
221
+
222
+ def recent_rss_entry_to_html(title, url, time, image = nil, show_modified = true )
223
+ rv = ""
224
+ unless url.nil?
225
+ rv << %Q[<a href="#{h( url )}" title="#{h( title )}]
226
+ rv << %Q[ (#{h( time.localtime )})] unless time.nil?
227
+ rv << %Q[">]
228
+ end
229
+ if image and @options['recent_rss.use-image-link']
230
+ rv << %Q[<img src="#{h( image )}"]
231
+ rv << %Q[ title="#{h( title )}"]
232
+ rv << %Q[ alt="site image"]
233
+ rv << %Q[>\n]
234
+ else
235
+ rv << h( title )
236
+ end
237
+ rv << '</a>' unless url.nil?
238
+ rv << "(#{recent_rss_modified(time)})" if show_modified
239
+ rv
240
+ end
241
+
242
+ # from RWiki
243
+ def recent_rss_modified(t)
244
+ return '-' unless t
245
+ dif = (Time.now - t).to_i
246
+ dif = dif / 60
247
+ return "#{dif}m" if dif <= 60
248
+ dif = dif / 60
249
+ return "#{dif}h" if dif <= 24
250
+ dif = dif / 24
251
+ return "#{dif}d"
252
+ end
253
+
254
+ # from RWiki
255
+ def recent_rss_modified_class(t)
256
+ return 'dangling' unless t
257
+ dif = (Time.now - t).to_i
258
+ dif = dif / 60
259
+ return "modified-hour" if dif <= 60
260
+ dif = dif / 60
261
+ return "modified-today" if dif <= 24
262
+ dif = dif / 24
263
+ return "modified-month" if dif <= 30
264
+ return "modified-year" if dif <= 365
265
+ return "modified-old"
266
+ end
267
+
268
+ def recent_rss_pubDate_to_dc_date(target)
269
+ if target.respond_to?(:pubDate)
270
+ class << target
271
+ alias_method(:dc_date, :pubDate)
272
+ end
273
+ end
274
+ end
275
+
276
+ add_conf_proc('recent_rss', label_recent_rss_title) do
277
+ item = 'recent_rss.use-image-link'
278
+ if @mode == 'saveconf'
279
+ @conf[item] = (@cgi.params[item][0] == 't')
280
+ end
281
+
282
+ <<-HTML
283
+ <div class"body">
284
+ <h3 class="subtitle">#{label_recent_rss_use_image_link_title}</h3>
285
+ <p>#{label_recent_rss_use_image_link_description}</p>
286
+ <p>
287
+ <select name=#{item}>
288
+ <option value="f"#{@conf[item] ? '' : ' selected'}>
289
+ #{label_recent_rss_not_use_image_link}
290
+ </option>
291
+ <option value="t"#{@conf[item] ? ' selected' : ''}>
292
+ #{label_recent_rss_use_image_link}
293
+ </option>
294
+ </select>
295
+ </p>
296
+ </div>
297
+ HTML
298
+ end
299
+
300
+ # Local Variables:
301
+ # mode: ruby
302
+ # indent-tabs-mode: t
303
+ # tab-width: 3
304
+ # ruby-indent-level: 3
305
+ # End: