tdiary 3.2.2.20130507

Sign up to get free protection for your applications and to get access to all the features.
Files changed (509) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +16 -0
  4. data/.travis.yml +29 -0
  5. data/Capfile +2 -0
  6. data/ChangeLog +3173 -0
  7. data/Gemfile +58 -0
  8. data/Gemfile.lock +201 -0
  9. data/LICENSE +340 -0
  10. data/Procfile +1 -0
  11. data/README.md +33 -0
  12. data/Rakefile +26 -0
  13. data/bin/tdiary +7 -0
  14. data/config.ru +61 -0
  15. data/data/.htaccess +2 -0
  16. data/doc/HOWTO-authenticate-in-rack.md +89 -0
  17. data/doc/HOWTO-make-io.md +305 -0
  18. data/doc/HOWTO-make-plugin.md +279 -0
  19. data/doc/HOWTO-make-theme.md +67 -0
  20. data/doc/HOWTO-testing-tDiary.md +44 -0
  21. data/doc/HOWTO-use-plugin.md +148 -0
  22. data/doc/HOWTO-write-tDiary.en.md +131 -0
  23. data/doc/HOWTO-write-tDiary.md +136 -0
  24. data/doc/INSTALL-paas.md +202 -0
  25. data/doc/INSTALL.md +160 -0
  26. data/doc/README.en.md +174 -0
  27. data/doc/README.md +56 -0
  28. data/doc/UPGRADE.md +164 -0
  29. data/doc/doc.css +115 -0
  30. data/dot.htaccess +27 -0
  31. data/index.fcgi +45 -0
  32. data/index.rb +57 -0
  33. data/js/00default.js +60 -0
  34. data/js/01conf.js +62 -0
  35. data/js/02edit.coffee +5 -0
  36. data/js/02edit.js +15 -0
  37. data/js/amazon.js +43 -0
  38. data/js/calendar3.js +130 -0
  39. data/js/caretposition.js +170 -0
  40. data/js/category.js +29 -0
  41. data/js/category_autocomplete.js +96 -0
  42. data/js/comment_ajax.js +27 -0
  43. data/js/draft.js +149 -0
  44. data/js/highlight.js +36 -0
  45. data/js/image.js +181 -0
  46. data/misc/convert2.rb +123 -0
  47. data/misc/filter/antispamservice.rb +101 -0
  48. data/misc/filter/limitdays.rb +40 -0
  49. data/misc/filter/linkcheck.rb +81 -0
  50. data/misc/filter/plugin/antispamservice.rb +82 -0
  51. data/misc/filter/plugin/en/antispamservice.rb +21 -0
  52. data/misc/filter/plugin/ja/antispamservice.rb +20 -0
  53. data/misc/lib/README +4 -0
  54. data/misc/lib/compatible.rb +1 -0
  55. data/misc/lib/fcgi_patch.rb +90 -0
  56. data/misc/migrate.rb +157 -0
  57. data/misc/paas/cloudfoundry/Gemfile +26 -0
  58. data/misc/paas/cloudfoundry/Gemfile.lock +85 -0
  59. data/misc/paas/heroku/Gemfile +22 -0
  60. data/misc/paas/heroku/Gemfile.lock +85 -0
  61. data/misc/paas/sqale/Gemfile +19 -0
  62. data/misc/paas/sqale/Gemfile.lock +85 -0
  63. data/misc/paas/sqale/Procfile +1 -0
  64. data/misc/paas/sqale/dot.env +1 -0
  65. data/misc/plugin/ChangeLog.DO_NOT_UPDATE +2333 -0
  66. data/misc/plugin/a.rb +211 -0
  67. data/misc/plugin/amazon.rb +403 -0
  68. data/misc/plugin/amazon/README.en +17 -0
  69. data/misc/plugin/amazon/README.ja +29 -0
  70. data/misc/plugin/amazon/amazonimg.rb +113 -0
  71. data/misc/plugin/amazon/large.png +0 -0
  72. data/misc/plugin/amazon/medium.png +0 -0
  73. data/misc/plugin/amazon/small.png +0 -0
  74. data/misc/plugin/append-css.rb +51 -0
  75. data/misc/plugin/bq.rb +48 -0
  76. data/misc/plugin/calendar2.rb +184 -0
  77. data/misc/plugin/calendar3.rb +256 -0
  78. data/misc/plugin/category.rb +779 -0
  79. data/misc/plugin/category_autocomplete.rb +33 -0
  80. data/misc/plugin/comment_ajax.rb +11 -0
  81. data/misc/plugin/comment_mail-qmail.rb +57 -0
  82. data/misc/plugin/comment_mail-sendmail.rb +56 -0
  83. data/misc/plugin/comment_mail-smtp.rb +59 -0
  84. data/misc/plugin/comment_rank.rb +36 -0
  85. data/misc/plugin/counter.rb +631 -0
  86. data/misc/plugin/daily_theme.rb +55 -0
  87. data/misc/plugin/disp_referrer.rb +1486 -0
  88. data/misc/plugin/doctype-html401tr.rb +16 -0
  89. data/misc/plugin/draft.rb +20 -0
  90. data/misc/plugin/dropdown_calendar.rb +32 -0
  91. data/misc/plugin/edit_today.rb +50 -0
  92. data/misc/plugin/en/a.rb +10 -0
  93. data/misc/plugin/en/amazon.rb +71 -0
  94. data/misc/plugin/en/append-css.rb +17 -0
  95. data/misc/plugin/en/bq.rb +12 -0
  96. data/misc/plugin/en/calendar2.rb +12 -0
  97. data/misc/plugin/en/category.rb +204 -0
  98. data/misc/plugin/en/counter.rb +48 -0
  99. data/misc/plugin/en/daily_theme.rb +14 -0
  100. data/misc/plugin/en/disp_referrer.rb +387 -0
  101. data/misc/plugin/en/dropdown_calendar.rb +14 -0
  102. data/misc/plugin/en/edit_today.rb +22 -0
  103. data/misc/plugin/en/hide-mail-field.rb +19 -0
  104. data/misc/plugin/en/highlight.rb +29 -0
  105. data/misc/plugin/en/image.rb +54 -0
  106. data/misc/plugin/en/kw.rb +22 -0
  107. data/misc/plugin/en/makerss.rb +47 -0
  108. data/misc/plugin/en/pb-show.rb +21 -0
  109. data/misc/plugin/en/ping.rb +16 -0
  110. data/misc/plugin/en/recent_comment.rb +44 -0
  111. data/misc/plugin/en/recent_comment3.rb +56 -0
  112. data/misc/plugin/en/recent_rss.rb +33 -0
  113. data/misc/plugin/en/referer_scheme.rb +48 -0
  114. data/misc/plugin/en/search_control.rb +74 -0
  115. data/misc/plugin/en/search_form.rb +22 -0
  116. data/misc/plugin/en/speed_comment.rb +19 -0
  117. data/misc/plugin/en/tb-show.rb +37 -0
  118. data/misc/plugin/en/todo.rb +43 -0
  119. data/misc/plugin/en/weather.rb +185 -0
  120. data/misc/plugin/en/xmlrpc.rb +14 -0
  121. data/misc/plugin/footnote.rb +92 -0
  122. data/misc/plugin/gradation.rb +39 -0
  123. data/misc/plugin/gradient.rb +36 -0
  124. data/misc/plugin/hide-mail-field.rb +50 -0
  125. data/misc/plugin/highlight.rb +22 -0
  126. data/misc/plugin/html_anchor.rb +34 -0
  127. data/misc/plugin/image.rb +290 -0
  128. data/misc/plugin/ja/amazon.rb +89 -0
  129. data/misc/plugin/ja/bq.rb +13 -0
  130. data/misc/plugin/ja/calendar2.rb +12 -0
  131. data/misc/plugin/ja/category.rb +212 -0
  132. data/misc/plugin/ja/daily_theme.rb +15 -0
  133. data/misc/plugin/ja/disp_referrer.rb +644 -0
  134. data/misc/plugin/ja/edit_today.rb +23 -0
  135. data/misc/plugin/ja/hide-mail-field.rb +20 -0
  136. data/misc/plugin/ja/highlight.rb +30 -0
  137. data/misc/plugin/ja/makerss.rb +44 -0
  138. data/misc/plugin/ja/my-sequel.rb +52 -0
  139. data/misc/plugin/ja/pb-show.rb +23 -0
  140. data/misc/plugin/ja/ping.rb +17 -0
  141. data/misc/plugin/ja/recent_comment.rb +45 -0
  142. data/misc/plugin/ja/recent_comment3.rb +57 -0
  143. data/misc/plugin/ja/recent_rss.rb +34 -0
  144. data/misc/plugin/ja/referer_scheme.rb +86 -0
  145. data/misc/plugin/ja/search_control.rb +75 -0
  146. data/misc/plugin/ja/search_form.rb +32 -0
  147. data/misc/plugin/ja/tb-show.rb +38 -0
  148. data/misc/plugin/ja/todo.rb +46 -0
  149. data/misc/plugin/ja/weather.rb +402 -0
  150. data/misc/plugin/ja/xmlrpc.rb +15 -0
  151. data/misc/plugin/kw.rb +150 -0
  152. data/misc/plugin/list.rb +40 -0
  153. data/misc/plugin/makelirs.rb +89 -0
  154. data/misc/plugin/makerss.rb +744 -0
  155. data/misc/plugin/my-ex.rb +68 -0
  156. data/misc/plugin/my-sequel.rb +539 -0
  157. data/misc/plugin/navi_user.rb +19 -0
  158. data/misc/plugin/number_anchor.rb +47 -0
  159. data/misc/plugin/pb-show.rb +165 -0
  160. data/misc/plugin/ping.rb +99 -0
  161. data/misc/plugin/pre_wrap.rb +19 -0
  162. data/misc/plugin/random_google.rb +165 -0
  163. data/misc/plugin/recent_comment.rb +82 -0
  164. data/misc/plugin/recent_comment3.rb +192 -0
  165. data/misc/plugin/recent_list.rb +91 -0
  166. data/misc/plugin/recent_namazu.rb +50 -0
  167. data/misc/plugin/recent_rss.rb +305 -0
  168. data/misc/plugin/referer-antibot.rb +53 -0
  169. data/misc/plugin/referer-utf8.rb +12 -0
  170. data/misc/plugin/referer_scheme.rb +87 -0
  171. data/misc/plugin/search_control.rb +227 -0
  172. data/misc/plugin/search_form.rb +53 -0
  173. data/misc/plugin/sn.rb +107 -0
  174. data/misc/plugin/speed_comment.rb +68 -0
  175. data/misc/plugin/squeeze.rb +272 -0
  176. data/misc/plugin/src.rb +30 -0
  177. data/misc/plugin/tb-show.rb +212 -0
  178. data/misc/plugin/title_list.rb +41 -0
  179. data/misc/plugin/title_tag.rb +80 -0
  180. data/misc/plugin/tlink.rb +163 -0
  181. data/misc/plugin/todo.rb +182 -0
  182. data/misc/plugin/weather.rb +505 -0
  183. data/misc/plugin/whatsnew.rb +100 -0
  184. data/misc/plugin/xmlrpc.rb +80 -0
  185. data/misc/plugin/xmlrpc/README +20 -0
  186. data/misc/plugin/xmlrpc/xmlrpc.rb +575 -0
  187. data/misc/style/emptdiary/README.rd +83 -0
  188. data/misc/style/emptdiary/README.rd.en +78 -0
  189. data/misc/style/emptdiary/emptdiary_style.rb +199 -0
  190. data/misc/style/etdiary/README.rd +83 -0
  191. data/misc/style/etdiary/etdiary_style.rb +446 -0
  192. data/misc/style/gfm/gfm_style.rb +194 -0
  193. data/misc/style/rd/README.rd +71 -0
  194. data/misc/style/rd/rd_style.rb +366 -0
  195. data/misc/style/wiki/README +116 -0
  196. data/misc/style/wiki/README.en +101 -0
  197. data/misc/style/wiki/wiki_parser.rb +273 -0
  198. data/misc/style/wiki/wiki_style.rb +478 -0
  199. data/misc/theme_convert/Readme.rd +21 -0
  200. data/misc/theme_convert/append.rcss +150 -0
  201. data/misc/theme_convert/theme_convert.rb +453 -0
  202. data/plugin/00default.rb +1015 -0
  203. data/plugin/05referer.rb +298 -0
  204. data/plugin/10spamfilter.rb +183 -0
  205. data/plugin/50sp.rb +146 -0
  206. data/plugin/60sf.rb +152 -0
  207. data/plugin/90migrate.rb +109 -0
  208. data/plugin/en/00default.rb +390 -0
  209. data/plugin/en/05referer.rb +49 -0
  210. data/plugin/en/10spamfilter.rb +81 -0
  211. data/plugin/en/50sp.rb +56 -0
  212. data/plugin/en/60sf.rb +60 -0
  213. data/plugin/ja/00default.rb +401 -0
  214. data/plugin/ja/05referer.rb +47 -0
  215. data/plugin/ja/10spamfilter.rb +79 -0
  216. data/plugin/ja/50sp.rb +66 -0
  217. data/plugin/ja/60sf.rb +73 -0
  218. data/public/.gitkeep +0 -0
  219. data/public/images/.gitkeep +0 -0
  220. data/public/javascripts/.gitkeep +0 -0
  221. data/public/stylesheets/.gitkeep +0 -0
  222. data/skel/category.rhtml +9 -0
  223. data/skel/conf.rhtml +23 -0
  224. data/skel/day.rhtml +33 -0
  225. data/skel/diary.rhtml +83 -0
  226. data/skel/footer.rhtml +8 -0
  227. data/skel/header.rhtml +10 -0
  228. data/skel/i.category.rhtml +6 -0
  229. data/skel/i.conf.rhtml +14 -0
  230. data/skel/i.day.rhtml +28 -0
  231. data/skel/i.diary.rhtml +17 -0
  232. data/skel/i.footer.rhtml +2 -0
  233. data/skel/i.header.rhtml +3 -0
  234. data/skel/i.latest.rhtml +24 -0
  235. data/skel/i.month.rhtml +39 -0
  236. data/skel/i.search.rhtml +5 -0
  237. data/skel/i.update.rhtml +40 -0
  238. data/skel/i.update.rhtml.en +40 -0
  239. data/skel/latest.rhtml +27 -0
  240. data/skel/mail.rtxt +18 -0
  241. data/skel/mail.rtxt.en +18 -0
  242. data/skel/month.rhtml +27 -0
  243. data/skel/plugin_error.rhtml +27 -0
  244. data/skel/preview.rhtml +85 -0
  245. data/skel/preview.rhtml.en +72 -0
  246. data/skel/referer.rhtml +24 -0
  247. data/skel/search.rhtml +14 -0
  248. data/skel/tdiary.rconf +76 -0
  249. data/skel/update.rhtml +103 -0
  250. data/skel/update.rhtml.en +83 -0
  251. data/spec/acceptance/append_comment_spec.rb +94 -0
  252. data/spec/acceptance/append_diary_spec.rb +98 -0
  253. data/spec/acceptance/bugfix/encoding_error_spec.rb +27 -0
  254. data/spec/acceptance/save_conf_comment_spec.rb +87 -0
  255. data/spec/acceptance/save_conf_default_spec.rb +169 -0
  256. data/spec/acceptance/save_conf_dnsbl_spec.rb +152 -0
  257. data/spec/acceptance/save_conf_filter_spec.rb +50 -0
  258. data/spec/acceptance/save_conf_plugin_spec.rb +69 -0
  259. data/spec/acceptance/save_conf_referer_spec.rb +60 -0
  260. data/spec/acceptance/save_conf_security_spec.rb +280 -0
  261. data/spec/acceptance/support/helpers.rb +49 -0
  262. data/spec/acceptance/support/paths.rb +7 -0
  263. data/spec/acceptance/update_diary_spec.rb +113 -0
  264. data/spec/acceptance/view_category_spec.rb +38 -0
  265. data/spec/acceptance/view_comment_spec.rb +67 -0
  266. data/spec/acceptance/view_diary_spec.rb +126 -0
  267. data/spec/acceptance/view_referer_spec.rb +31 -0
  268. data/spec/acceptance_helper.rb +101 -0
  269. data/spec/core/compatible_spec.rb +54 -0
  270. data/spec/core/core_ext_spec.rb +59 -0
  271. data/spec/core/plugin_spec.rb +389 -0
  272. data/spec/core/rack/assets/precompile_spec.rb +76 -0
  273. data/spec/core/rack/html_anchor_spec.rb +57 -0
  274. data/spec/core/rack/valid_request_path_spec.rb +67 -0
  275. data/spec/core/style/emptdiary_style_spec.rb +165 -0
  276. data/spec/core/style/etdiary_style_spec.rb +512 -0
  277. data/spec/core/style/gfm_style_spec.rb +334 -0
  278. data/spec/core/style/rd_style_spec.rb +202 -0
  279. data/spec/core/style/tdiary_style_spec.rb +240 -0
  280. data/spec/core/style/wiki_style_spec.rb +441 -0
  281. data/spec/fixtures/ascii8bit-pstore.db +0 -0
  282. data/spec/fixtures/invalid-sequence-volatile.tdr +9 -0
  283. data/spec/fixtures/just_installed.conf +1 -0
  284. data/spec/fixtures/plugin/ja/sample.rb +4 -0
  285. data/spec/fixtures/plugin/sample.rb +6 -0
  286. data/spec/fixtures/sample.rb +12 -0
  287. data/spec/fixtures/tdiary.conf.gem +212 -0
  288. data/spec/fixtures/tdiary.conf.rack +212 -0
  289. data/spec/fixtures/tdiary.conf.rdb +227 -0
  290. data/spec/fixtures/tdiary.conf.secure +204 -0
  291. data/spec/fixtures/tdiary.conf.webrick +212 -0
  292. data/spec/javascripts/00default_spec.js +35 -0
  293. data/spec/javascripts/fixtures/00default.html +1 -0
  294. data/spec/javascripts/support/jasmine.yml +76 -0
  295. data/spec/plugin/bq_spec.rb +24 -0
  296. data/spec/plugin/plugin_helper.rb +203 -0
  297. data/spec/spec_helper.rb +32 -0
  298. data/tdiary.conf.beginner +244 -0
  299. data/tdiary.conf.sample +345 -0
  300. data/tdiary.conf.sample-en +333 -0
  301. data/tdiary.gemspec +26 -0
  302. data/tdiary.rb +151 -0
  303. data/tdiary/admin.rb +236 -0
  304. data/tdiary/application.rb +57 -0
  305. data/tdiary/author_only_base.rb +171 -0
  306. data/tdiary/base.rb +220 -0
  307. data/tdiary/cli.rb +116 -0
  308. data/tdiary/comment.rb +40 -0
  309. data/tdiary/comment_manager.rb +94 -0
  310. data/tdiary/compatible.rb +72 -0
  311. data/tdiary/config.rb +270 -0
  312. data/tdiary/core_ext.rb +122 -0
  313. data/tdiary/deploy.rb +50 -0
  314. data/tdiary/dispatcher.rb +77 -0
  315. data/tdiary/dispatcher/index_main.rb +122 -0
  316. data/tdiary/dispatcher/update_main.rb +101 -0
  317. data/tdiary/environment.rb +15 -0
  318. data/tdiary/filter.rb +48 -0
  319. data/tdiary/filter/default.rb +54 -0
  320. data/tdiary/filter/spam.rb +304 -0
  321. data/tdiary/io/base.rb +70 -0
  322. data/tdiary/io/cache/file.rb +123 -0
  323. data/tdiary/io/cache/memcached.rb +88 -0
  324. data/tdiary/io/cache/redis.rb +100 -0
  325. data/tdiary/io/default.rb +297 -0
  326. data/tdiary/io/pstore.rb +252 -0
  327. data/tdiary/io/rdb.rb +213 -0
  328. data/tdiary/lang/en.rb +79 -0
  329. data/tdiary/lang/ja.rb +72 -0
  330. data/tdiary/plugin.rb +375 -0
  331. data/tdiary/rack/assets/precompile.rb +37 -0
  332. data/tdiary/rack/auth/basic.rb +38 -0
  333. data/tdiary/rack/auth/omniauth.rb +51 -0
  334. data/tdiary/rack/html_anchor.rb +31 -0
  335. data/tdiary/rack/valid_request_path.rb +36 -0
  336. data/tdiary/referer_manager.rb +80 -0
  337. data/tdiary/request.rb +217 -0
  338. data/tdiary/response.rb +29 -0
  339. data/tdiary/server.rb +85 -0
  340. data/tdiary/style.rb +194 -0
  341. data/tdiary/style/tdiary_style.rb +198 -0
  342. data/tdiary/style/wiki_style.rb +213 -0
  343. data/tdiary/tasks.rb +1 -0
  344. data/tdiary/tasks/assets.rake +31 -0
  345. data/tdiary/tasks/auth.rake +28 -0
  346. data/tdiary/tasks/db.rake +110 -0
  347. data/tdiary/tasks/doc.rake +31 -0
  348. data/tdiary/tasks/heroku.rake +37 -0
  349. data/tdiary/tasks/jasmine.rake +16 -0
  350. data/tdiary/tasks/rdoc.rake +24 -0
  351. data/tdiary/tasks/release.rake +122 -0
  352. data/tdiary/tasks/rspec.rake +51 -0
  353. data/tdiary/tasks/server.rake +33 -0
  354. data/tdiary/tasks/test.rake +17 -0
  355. data/tdiary/version.rb +3 -0
  356. data/tdiary/view.rb +468 -0
  357. data/tdiary/view_helper.rb +15 -0
  358. data/test/disp_referrer_test.rb +93 -0
  359. data/test/my-sequel_test.rb +238 -0
  360. data/test/test_helper.rb +7 -0
  361. data/test/test_plugin_helper.rb +64 -0
  362. data/test/test_plugin_helper_test.rb +28 -0
  363. data/test/weather_test.rb +33 -0
  364. data/theme/base.css +268 -0
  365. data/theme/conf.block.png +0 -0
  366. data/theme/conf.css +254 -0
  367. data/theme/default/README +11 -0
  368. data/theme/default/body.png +0 -0
  369. data/theme/default/default.css +743 -0
  370. data/theme/help.png +0 -0
  371. data/theme/loading.gif +0 -0
  372. data/theme/tdiary1/README +7 -0
  373. data/theme/tdiary1/tdiary1.css +394 -0
  374. data/theme/tdiary2/README +19 -0
  375. data/theme/tdiary2/tdiary2.css +624 -0
  376. data/update.fcgi +45 -0
  377. data/update.rb +57 -0
  378. data/vendor/hikidoc-0.0.6/COPYING +28 -0
  379. data/vendor/hikidoc-0.0.6/NEWS +30 -0
  380. data/vendor/hikidoc-0.0.6/NEWS.ja +30 -0
  381. data/vendor/hikidoc-0.0.6/README +86 -0
  382. data/vendor/hikidoc-0.0.6/README.ja +83 -0
  383. data/vendor/hikidoc-0.0.6/Rakefile +68 -0
  384. data/vendor/hikidoc-0.0.6/TextFormattingRules +320 -0
  385. data/vendor/hikidoc-0.0.6/TextFormattingRules.ja +318 -0
  386. data/vendor/hikidoc-0.0.6/bin/hikidoc +66 -0
  387. data/vendor/hikidoc-0.0.6/lib/hikidoc.rb +914 -0
  388. data/vendor/hikidoc-0.0.6/setup.rb +1360 -0
  389. data/vendor/hikidoc-0.0.6/test/run-test.rb +13 -0
  390. data/vendor/hikidoc-0.0.6/test/test_hikidoc.rb +506 -0
  391. data/vendor/imagesize-0.1.1/Manifest.txt +19 -0
  392. data/vendor/imagesize-0.1.1/README.txt +49 -0
  393. data/vendor/imagesize-0.1.1/lib/image_size.rb +305 -0
  394. data/vendor/imagesize-0.1.1/lib/image_size/version.rb +9 -0
  395. data/vendor/imagesize-0.1.1/setup.rb +1585 -0
  396. data/vendor/imagesize-0.1.1/test/2-4-7.png +0 -0
  397. data/vendor/imagesize-0.1.1/test/4_1_2.gif +0 -0
  398. data/vendor/imagesize-0.1.1/test/bmp.bmp +0 -0
  399. data/vendor/imagesize-0.1.1/test/cursor.xbm +6 -0
  400. data/vendor/imagesize-0.1.1/test/detect.swf +0 -0
  401. data/vendor/imagesize-0.1.1/test/pbm.pbm +0 -0
  402. data/vendor/imagesize-0.1.1/test/pcx.pcx +0 -0
  403. data/vendor/imagesize-0.1.1/test/pgm.pgm +5 -0
  404. data/vendor/imagesize-0.1.1/test/test.xpm +38 -0
  405. data/vendor/imagesize-0.1.1/test/test_helper.rb +2 -0
  406. data/vendor/imagesize-0.1.1/test/test_image_size.rb +71 -0
  407. data/vendor/imagesize-0.1.1/test/tiff.tiff +0 -0
  408. data/vendor/imagesize-0.1.1/test/tokyo_tower.jpg +0 -0
  409. data/vendor/imagesize-0.1.1/test/tower_e.gif.psd +0 -0
  410. data/vendor/jasmine-jquery-1.4.2/jasmine-jquery.js +548 -0
  411. data/vendor/jquery-1.8/jquery.js +9227 -0
  412. data/vendor/rdtool-0.6.38/COPYING.txt +339 -0
  413. data/vendor/rdtool-0.6.38/Gemfile +3 -0
  414. data/vendor/rdtool-0.6.38/HISTORY +318 -0
  415. data/vendor/rdtool-0.6.38/LGPL-2.1 +502 -0
  416. data/vendor/rdtool-0.6.38/LICENSE.txt +58 -0
  417. data/vendor/rdtool-0.6.38/README.html +66 -0
  418. data/vendor/rdtool-0.6.38/README.ja.html +73 -0
  419. data/vendor/rdtool-0.6.38/README.rd +76 -0
  420. data/vendor/rdtool-0.6.38/README.rd.ja +85 -0
  421. data/vendor/rdtool-0.6.38/Rakefile +152 -0
  422. data/vendor/rdtool-0.6.38/TODO +22 -0
  423. data/vendor/rdtool-0.6.38/bin/rd2 +283 -0
  424. data/vendor/rdtool-0.6.38/bin/rdswap.rb +207 -0
  425. data/vendor/rdtool-0.6.38/doc/rd-draft.html +456 -0
  426. data/vendor/rdtool-0.6.38/doc/rd-draft.ja.html +466 -0
  427. data/vendor/rdtool-0.6.38/doc/rd-draft.rd +479 -0
  428. data/vendor/rdtool-0.6.38/doc/rd-draft.rd.ja +487 -0
  429. data/vendor/rdtool-0.6.38/lib/rd/block-element.rb +114 -0
  430. data/vendor/rdtool-0.6.38/lib/rd/complex-list-item.rb +65 -0
  431. data/vendor/rdtool-0.6.38/lib/rd/desclist.rb +55 -0
  432. data/vendor/rdtool-0.6.38/lib/rd/document-struct.rb +46 -0
  433. data/vendor/rdtool-0.6.38/lib/rd/dot.rd2rc +18 -0
  434. data/vendor/rdtool-0.6.38/lib/rd/element.rb +160 -0
  435. data/vendor/rdtool-0.6.38/lib/rd/filter.rb +255 -0
  436. data/vendor/rdtool-0.6.38/lib/rd/head-filter.rb +14 -0
  437. data/vendor/rdtool-0.6.38/lib/rd/inline-element.rb +233 -0
  438. data/vendor/rdtool-0.6.38/lib/rd/labeled-element.rb +14 -0
  439. data/vendor/rdtool-0.6.38/lib/rd/list.rb +57 -0
  440. data/vendor/rdtool-0.6.38/lib/rd/loose-struct.rb +11 -0
  441. data/vendor/rdtool-0.6.38/lib/rd/methodlist.rb +57 -0
  442. data/vendor/rdtool-0.6.38/lib/rd/output-format-visitor.rb +30 -0
  443. data/vendor/rdtool-0.6.38/lib/rd/package.rb +4 -0
  444. data/vendor/rdtool-0.6.38/lib/rd/parser-util.rb +14 -0
  445. data/vendor/rdtool-0.6.38/lib/rd/post-install +1 -0
  446. data/vendor/rdtool-0.6.38/lib/rd/pre-setup.rb +18 -0
  447. data/vendor/rdtool-0.6.38/lib/rd/rbl-file.rb +69 -0
  448. data/vendor/rdtool-0.6.38/lib/rd/rbl-suite.rb +37 -0
  449. data/vendor/rdtool-0.6.38/lib/rd/rd-struct.rb +86 -0
  450. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-lib.rb +266 -0
  451. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-opt.rb +34 -0
  452. data/vendor/rdtool-0.6.38/lib/rd/rd2html-lib.rb +490 -0
  453. data/vendor/rdtool-0.6.38/lib/rd/rd2html-opt.rb +67 -0
  454. data/vendor/rdtool-0.6.38/lib/rd/rd2man-lib.rb +251 -0
  455. data/vendor/rdtool-0.6.38/lib/rd/rd2rdo-lib.rb +19 -0
  456. data/vendor/rdtool-0.6.38/lib/rd/rd2rmi-lib.rb +32 -0
  457. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.ry +518 -0
  458. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.tab.rb +1061 -0
  459. data/vendor/rdtool-0.6.38/lib/rd/rdfmt.rb +15 -0
  460. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.ry +503 -0
  461. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.tab.rb +1243 -0
  462. data/vendor/rdtool-0.6.38/lib/rd/rdvisitor.rb +214 -0
  463. data/vendor/rdtool-0.6.38/lib/rd/reference-resolver.rb +114 -0
  464. data/vendor/rdtool-0.6.38/lib/rd/search-file.rb +14 -0
  465. data/vendor/rdtool-0.6.38/lib/rd/tree.rb +103 -0
  466. data/vendor/rdtool-0.6.38/lib/rd/version.rb +41 -0
  467. data/vendor/rdtool-0.6.38/lib/rd/visitor.rb +86 -0
  468. data/vendor/rdtool-0.6.38/rdtool.gemspec +125 -0
  469. data/vendor/rdtool-0.6.38/setup.rb +1596 -0
  470. data/vendor/rdtool-0.6.38/test/data/includee1.html +1 -0
  471. data/vendor/rdtool-0.6.38/test/data/includee2.html +1 -0
  472. data/vendor/rdtool-0.6.38/test/data/includee3.nothtml +1 -0
  473. data/vendor/rdtool-0.6.38/test/data/includee4.xhtml +0 -0
  474. data/vendor/rdtool-0.6.38/test/data/label.rbl +2 -0
  475. data/vendor/rdtool-0.6.38/test/data/label2.rbl +2 -0
  476. data/vendor/rdtool-0.6.38/test/data/sub/includee2.html +1 -0
  477. data/vendor/rdtool-0.6.38/test/data/sub/includee4.html +0 -0
  478. data/vendor/rdtool-0.6.38/test/dummy-observer.rb +6 -0
  479. data/vendor/rdtool-0.6.38/test/dummy.rb +33 -0
  480. data/vendor/rdtool-0.6.38/test/temp-dir.rb +19 -0
  481. data/vendor/rdtool-0.6.38/test/test-block-parser.rb +46 -0
  482. data/vendor/rdtool-0.6.38/test/test-desclist-item.rb +219 -0
  483. data/vendor/rdtool-0.6.38/test/test-document-element.rb +46 -0
  484. data/vendor/rdtool-0.6.38/test/test-document-struct.rb +66 -0
  485. data/vendor/rdtool-0.6.38/test/test-element.rb +46 -0
  486. data/vendor/rdtool-0.6.38/test/test-headline.rb +80 -0
  487. data/vendor/rdtool-0.6.38/test/test-inline-parser.rb +46 -0
  488. data/vendor/rdtool-0.6.38/test/test-list-item.rb +54 -0
  489. data/vendor/rdtool-0.6.38/test/test-list.rb +53 -0
  490. data/vendor/rdtool-0.6.38/test/test-methodlist-item.rb +73 -0
  491. data/vendor/rdtool-0.6.38/test/test-nonterminal-element.rb +170 -0
  492. data/vendor/rdtool-0.6.38/test/test-nonterminal-inline.rb +33 -0
  493. data/vendor/rdtool-0.6.38/test/test-output-format-visitor.rb +48 -0
  494. data/vendor/rdtool-0.6.38/test/test-parser-util.rb +41 -0
  495. data/vendor/rdtool-0.6.38/test/test-rbl-file.rb +156 -0
  496. data/vendor/rdtool-0.6.38/test/test-rbl-suite.rb +43 -0
  497. data/vendor/rdtool-0.6.38/test/test-rd2html-lib.rb +496 -0
  498. data/vendor/rdtool-0.6.38/test/test-rdtree.rb +17 -0
  499. data/vendor/rdtool-0.6.38/test/test-rdvisitor.rb +29 -0
  500. data/vendor/rdtool-0.6.38/test/test-reference-resolver.rb +202 -0
  501. data/vendor/rdtool-0.6.38/test/test-reference.rb +132 -0
  502. data/vendor/rdtool-0.6.38/test/test-search-file.rb +22 -0
  503. data/vendor/rdtool-0.6.38/test/test-terminal-inline.rb +41 -0
  504. data/vendor/rdtool-0.6.38/test/test-textblock.rb +44 -0
  505. data/vendor/rdtool-0.6.38/test/test-tree.rb +82 -0
  506. data/vendor/rdtool-0.6.38/test/test-version.rb +57 -0
  507. data/vendor/rdtool-0.6.38/test/test-visitor.rb +230 -0
  508. data/vendor/rdtool-0.6.38/utils/rd-mode.el +464 -0
  509. metadata +666 -0
@@ -0,0 +1,100 @@
1
+ # -*- coding: utf-8 -*-
2
+ # whatsnew.rb
3
+ #
4
+ # 名称:
5
+ # What's Newプラグイン
6
+ #
7
+ # 概要:
8
+ # 未読のセクションに指定したマークをつけることができます.
9
+ #
10
+ # 使い方:
11
+ # tdiary.conf の @section_anchor の先頭に以下のように <%= whats_new %> を追加します.
12
+ #
13
+ # @section_anchor = '<%= whats_new %><span class="sanchor">_</span>'
14
+ #
15
+ # セクションの未読/既読によって <%= whats_new %> の部分があらかじめ指
16
+ # 定したマークで置き換えられます.デフォルトでは未読セクションでは
17
+ # "!!!NEW!!!",既読セクションでは "" に展開されます.
18
+ #
19
+ # 注:Revision が 1.1 の whats_new.rb の説明では,<span> の中に
20
+ # <%= whats_new %> を含めるように書いていましたが,sanchorで画像を
21
+ # 表示するようなテーマでは,whats_new の出力と sanchor の画像が重
22
+ # なってしまうという問題がありました.
23
+ # この変更に伴い,既読時のデフォルトは '' に変更しました.
24
+ #
25
+ # 置き換えられる文字列を変更したい場合は tdiary.conf 中で
26
+ #
27
+ # @options['whats_new.new_mark'] = '<img src="/Images/new.png" alt="NEW!" border="0">'
28
+ # @options['whats_new.read_mark'] = '既'
29
+ #
30
+ # のように指定します.
31
+ #
32
+ # Copyright (c) 2002 Junichiro KITA <kita@kitaj.no-ip.com>
33
+ # Distributed under the GPL
34
+ #
35
+
36
+ @whats_new = {}.taint
37
+
38
+ def whats_new
39
+ return apply_plugin( @whats_new[:read_mark] ) unless @cgi
40
+ @whats_new[:section] += 1
41
+ t = @whats_new[:current_date] + "%03d" % @whats_new[:section]
42
+ if t > @whats_new[:this_time]
43
+ @whats_new[:this_time] = t
44
+ end
45
+ # 初回もしくは cookie を使わない設定の場合は機能しない
46
+ return apply_plugin( @whats_new[:read_mark] ) if @whats_new[:last_time] == "00000000000"
47
+ if t > @whats_new[:last_time]
48
+ apply_plugin( @whats_new[:new_mark] )
49
+ else
50
+ apply_plugin( @whats_new[:read_mark] )
51
+ end
52
+ end
53
+
54
+ add_body_enter_proc do |date|
55
+ if @cgi
56
+ @whats_new[:current_date] = Time::at(date).strftime('%Y%m%d')
57
+ @whats_new[:section] = 0
58
+ @whats_new[:last_time]
59
+ end
60
+ ""
61
+ end
62
+
63
+ add_header_proc do
64
+ if @cgi
65
+ if @cgi.cookies['tdiary_whats_new'][0]
66
+ @whats_new[:this_time] = @whats_new[:last_time] = @cgi.cookies['tdiary_whats_new'][0]
67
+ else
68
+ # 初めて,もしくは cookie は使わない設定
69
+ @whats_new[:this_time] = @whats_new[:last_time] = "00000000000"
70
+ end
71
+ @whats_new[:new_mark] = @options['whats_new.new_mark'] || '!!!new!!!'
72
+ @whats_new[:read_mark] = @options['whats_new.read_mark'] || ''
73
+ end
74
+ ""
75
+ end
76
+
77
+ add_footer_proc do
78
+ if @cgi.script_name
79
+ if @whats_new[:this_time] > @whats_new[:last_time]
80
+ cookie_path = File::dirname(@cgi.script_name)
81
+ cookie_path += '/' if cookie_path !~ /\/$/
82
+ cookie = CGI::Cookie::new({
83
+ 'name' => 'tdiary_whats_new',
84
+ 'value' => [@whats_new[:this_time]],
85
+ 'path' => cookie_path,
86
+ 'expires' => Time::now.gmtime + 90*24*60*60
87
+ })
88
+ add_cookie(cookie)
89
+ end
90
+ end
91
+ ""
92
+ end
93
+
94
+ # Local Variables:
95
+ # mode: ruby
96
+ # indent-tabs-mode: t
97
+ # tab-width: 3
98
+ # ruby-indent-level: 3
99
+ # End:
100
+ # vim: ts=3
@@ -0,0 +1,80 @@
1
+ # xmlrpc.rb
2
+ #
3
+ # XML-RPC API
4
+ #
5
+ # Copyright (c) 2004 MoonWolf <moonwolf@moonwolf.com>
6
+ # Distributed under the GPL
7
+ #
8
+
9
+ add_header_proc do
10
+ %Q!\t<link rel="EditURI" type="application/rsd+xml" title="RSD" href="#{h base_url}rsd.xml" />\n!
11
+ end
12
+
13
+ add_conf_proc('XMLRPC', 'XML-RPC API') do
14
+ saveconf_xmlrpc
15
+ xmlrpc_init
16
+
17
+ <<-HTML
18
+ <h3 class="subtitle">#{label_xmlrpc_url}</h3>
19
+ <p><input type="text" name="xmlrpc.url" value="#{h @conf['xmlrpc.url']}" size="100"></p>
20
+ <h3 class="subtitle">#{label_xmlrpc_blogid}</h3>
21
+ <p><input type="text" name="xmlrpc.blogid" value="#{h @conf['xmlrpc.blogid']}" size="20"></p>
22
+ <h3 class="subtitle">#{label_xmlrpc_username}</h3>
23
+ <p><input type="text" name="xmlrpc.username" value="#{h @conf['xmlrpc.username']}" size="20"></p>
24
+ <h3 class="subtitle">#{label_xmlrpc_password}</h3>
25
+ <p><input type="password" name="xmlrpc.password" value="#{h @conf['xmlrpc.password']}" size="20"></p>
26
+ <h3 class="subtitle">#{label_xmlrpc_lastname}</h3>
27
+ <p><input type="text" name="xmlrpc.lastname" value="#{h @conf['xmlrpc.lastname']}" size="20"></p>
28
+ <h3 class="subtitle">#{label_xmlrpc_firstname}</h3>
29
+ <p><input type="text" name="xmlrpc.firstname" value="#{h @conf['xmlrpc.firstname']}" size="20"></p>
30
+ <h3 class="subtitle">#{label_xmlrpc_userid}</h3>
31
+ <p><input type="text" name="xmlrpc.userid" value="#{h @conf['xmlrpc.userid']}" size="20"></p>
32
+ HTML
33
+ end
34
+
35
+ #
36
+ # for conf_proc
37
+ #
38
+ def xmlrpc_init
39
+ @conf['xmlrpc.url'] ||= base_url + 'xmlrpc.rb'
40
+ @conf['xmlrpc.blogid'] ||= 'devlog'
41
+ @conf['xmlrpc.username'] ||= 'default'
42
+ @conf['xmlrpc.password'] ||= ''
43
+ @conf['xmlrpc.lastname'] ||= ''
44
+ @conf['xmlrpc.firstname'] ||= 'default'
45
+ @conf['xmlrpc.userid'] ||= 'default'
46
+ end
47
+
48
+ def saveconf_xmlrpc
49
+ if @mode == 'saveconf' then
50
+ @conf['xmlrpc.url'] = @cgi.params['xmlrpc.url'][0] || 'xmlrpc.rb'
51
+ @conf['xmlrpc.blogid'] = @cgi.params['xmlrpc.blogid'][0] || 'default'
52
+ @conf['xmlrpc.username'] = @cgi.params['xmlrpc.username'][0] || 'default'
53
+ @conf['xmlrpc.password'] = @cgi.params['xmlrpc.password'][0] || ''
54
+ @conf['xmlrpc.lastname'] = @cgi.params['xmlrpc.lastname'][0] || ''
55
+ @conf['xmlrpc.firstname'] = @cgi.params['xmlrpc.firstname'][0] || 'default'
56
+ @conf['xmlrpc.userid'] = @cgi.params['xmlrpc.userid'][0] || 'default'
57
+ open('rsd.xml','w') {|f|
58
+ f.write <<-EOS
59
+ <rsd version="1.0">
60
+ <service>
61
+ <engineName>tDiary</engineName>
62
+ <engineLink>http://www.tdiary.org/</engineLink>
63
+ <homePageLink>#{h base_url}</homePageLink>
64
+ <apis>
65
+ <api name="MetaWeblog" preferred="true" apiLink="#{h @conf['xmlrpc.url']}" blogID="#{h @conf['xmlrpc.blogid']}"/>
66
+ <api name="Blogger" preferred="false" apiLink="#{h @conf['xmlrpc.url']}" blogID="#{h @conf['xmlrpc.blogid']}"/>
67
+ </apis>
68
+ </service>
69
+ </rsd>
70
+ EOS
71
+ }
72
+ end
73
+ end
74
+
75
+ # Local Variables:
76
+ # mode: ruby
77
+ # indent-tabs-mode: t
78
+ # tab-width: 3
79
+ # ruby-indent-level: 3
80
+ # End:
@@ -0,0 +1,20 @@
1
+ !機能
2
+
3
+ blogger API/metaWeblog API/MovableType APIでのtDiaryの更新ができます。
4
+
5
+ !インストール方法
6
+ xmlrpc.rb,ja/xmlrpc.rb,en/xmlrpc.rb,zh/xmlrpc.rbをpluginディレクトリにコピーします。
7
+ xmlrpc/xmlrpc.rbをtDiaryのインストールされているディレクトリ(index.rbなどと同じディレクトリ)にコピーします。xmlrpc.rbのパーミッションは、755などに変更する必要があります。
8
+ index.rbを設置したディレクトリにrsd.xmlというファイルを作成し、CGIから書き換えられるように書き込み権限を設定します。
9
+
10
+ !使用方法
11
+
12
+ 設定画面から'XML-RPC API'を選択してXML-RPC APIの設定を行いOKボタンをクリックします。
13
+
14
+ あとはblogger API/metaWeblog API/MovableType APIに対応したツールからアクセスします。
15
+ たとえばubicast BloggerだとXMl-RPCエンドポイントという設定にはxmlrpc.rbのURLを指定します。
16
+
17
+ (MovableTypeの場合) http://<youdomain>/<path>/mt-xmlrpc.cgi
18
+ (xmlrpc.rbの場合) http://<youdomain>/<path>/xmlrpc.rb
19
+
20
+ rsd.xmlに対応したクライアントならサイトのトップページのURLを指定すればOKです。
@@ -0,0 +1,575 @@
1
+ #!/usr/bin/env ruby
2
+ # xmlrpc.rb
3
+ #
4
+ # Copyright (c) 2004 MoonWolf <moonwolf@moonwolf.com>
5
+ # Distributed under the GPL
6
+ #
7
+ # require Ruby1.8 or xml-rpc(http://raa.ruby-lang.org/project/xml-rpc/)
8
+
9
+ BEGIN { $stdout.binmode }
10
+ $KCODE = 'n'
11
+
12
+ if FileTest::symlink?( __FILE__ ) then
13
+ org_path = File::dirname( File::readlink( __FILE__ ) )
14
+ else
15
+ org_path = File::dirname( __FILE__ )
16
+ end
17
+ $:.unshift org_path.untaint
18
+ require 'tdiary'
19
+ require 'uri'
20
+
21
+ require 'xmlrpc/server'
22
+ if defined?(MOD_RUBY)
23
+ server = XMLRPC::ModRubyServer.new
24
+ else
25
+ server = XMLRPC::CGIServer.new
26
+ end
27
+
28
+ include TDiary::ViewHelper
29
+
30
+ @cgi = CGI::new
31
+ @conf = ::TDiary::Config::new(@cgi)
32
+
33
+ server.add_handler('blogger.newPost') do |appkey, blogid, username, password, content, publish|
34
+ ENV['REQUEST_METHOD'] = 'POST'
35
+ ENV['HTTP_REFERER'] = (URI.parse(base_url) + @conf.update).to_s
36
+ if username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
37
+ begin
38
+ postid = Time.now.strftime("%Y%m%d")
39
+ year, month, day = postid.scan(/(\d{4})(\d\d)(\d\d)/)[0]
40
+ @cgi.params['date'] = [postid]
41
+ tdiary = ::TDiary::TDiaryDay::new( @cgi, "day.rhtml", @conf )
42
+ time = Time::local( year, month, day ) + 12*60*60
43
+ diary = tdiary[time] || tdiary.instance_variable_get(:@io).diary_factory(time, '', '', @conf.style)
44
+
45
+ title,body = content.split(/\n/,2)
46
+ index = diary.add_section(title, body)
47
+ src = diary.to_src
48
+
49
+ @cgi.params.delete 'date'
50
+ @cgi.params['old'] = [postid]
51
+ @cgi.params['hide'] = diary.visible? ? [] : ['true']
52
+ @cgi.params['title'] = [diary.title]
53
+ @cgi.params['year'] = [postid[0..3]]
54
+ @cgi.params['month'] = [postid[4..5]]
55
+ @cgi.params['day'] = [postid[6..7]]
56
+ @cgi.params['body'] = [src]
57
+ @cgi.params['csrf_protection_key'] = [@conf.options['csrf_protection_key']]
58
+ tdiary = ::TDiary::TDiaryReplace::new( @cgi, nil, @conf )
59
+ body = tdiary.eval_rhtml
60
+ postid + "%02d" % index
61
+ rescue ::TDiary::ForceRedirect => redirect
62
+ postid + "%02d" % index
63
+ end
64
+ else
65
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
66
+ end
67
+ end
68
+
69
+ server.add_handler('blogger.editPost') do |appkey, postid, username, password, content, publish|
70
+ ENV['REQUEST_METHOD'] = 'POST'
71
+ ENV['HTTP_REFERER'] = (URI.parse(base_url) + @conf.update).to_s
72
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
73
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
74
+ end
75
+ begin
76
+ @cgi.params['date'] = [postid[0,8]]
77
+ tdiary = ::TDiary::TDiaryDay::new( @cgi, "day.rhtml", @conf )
78
+ year, month, day, index = postid.scan(/(\d{4})(\d\d)(\d\d)(\d\d)/)[0]
79
+ index = index.to_i
80
+ time = Time::local( year, month, day ) + 12*60*60
81
+ diary = tdiary[time]
82
+
83
+ src = ''
84
+ i = 0
85
+ diary.each_section {|sec|
86
+ i += 1
87
+ if i==index
88
+ subtitle,body = content.split(/\n/,2)
89
+ sec.subtitle = subtitle
90
+ sec.body = (body || '').sub(/[\n\r]+\Z/, '') + "\n\n"
91
+ end
92
+ src << sec.to_src
93
+ }
94
+
95
+ @cgi.params.delete 'date'
96
+ @cgi.params['old'] = [postid[0,8]]
97
+ @cgi.params['hide'] = diary.visible? ? [] : ['true']
98
+ @cgi.params['title'] = [diary.title]
99
+ @cgi.params['year'] = [postid[0..3]]
100
+ @cgi.params['month'] = [postid[4..5]]
101
+ @cgi.params['day'] = [postid[6..7]]
102
+ @cgi.params['body'] = [src]
103
+ @cgi.params['csrf_protection_key'] = [@conf.options['csrf_protection_key']]
104
+ tdiary = ::TDiary::TDiaryReplace::new( @cgi, nil, @conf )
105
+ body = tdiary.eval_rhtml
106
+ true
107
+ rescue ::TDiary::ForceRedirect => redirect
108
+ true
109
+ rescue Exception
110
+ raise XMLRPC::FaultException.new(1,$!.to_s + "\n" + $!.backtrace.join("\n"))
111
+ end
112
+ end
113
+
114
+ server.add_handler('blogger.deletePost') do |appkey, postid, username, password|
115
+ ENV['REQUEST_METHOD'] = 'POST'
116
+ ENV['HTTP_REFERER'] = (URI.parse(base_url) + @conf.update).to_s
117
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
118
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
119
+ end
120
+ begin
121
+ year, month, day, index = postid.scan(/(\d{4})(\d\d)(\d\d)(\d\d)/)[0]
122
+ index = index.to_i
123
+ @cgi.params['date'] = [postid[0,8]]
124
+ tdiary = ::TDiary::TDiaryDay::new( @cgi, "day.rhtml", @conf )
125
+ time = Time::local( year, month, day ) + 12*60*60
126
+ diary = tdiary[time]
127
+
128
+ diary.delete_section(index)
129
+ src = diary.to_src
130
+
131
+ @cgi.params.delete 'date'
132
+ @cgi.params['old'] = [postid[0,8]]
133
+ @cgi.params['hide'] = diary.visible? ? [] : ['true']
134
+ @cgi.params['title'] = [diary.title]
135
+ @cgi.params['year'] = [postid[0..3]]
136
+ @cgi.params['month'] = [postid[4..5]]
137
+ @cgi.params['day'] = [postid[6..7]]
138
+ @cgi.params['body'] = [src]
139
+ @cgi.params['csrf_protection_key'] = [@conf.options['csrf_protection_key']]
140
+ tdiary = ::TDiary::TDiaryReplace::new( @cgi, nil, @conf )
141
+ body = tdiary.eval_rhtml
142
+ true
143
+ rescue ::TDiary::ForceRedirect => redirect
144
+ true
145
+ rescue Exception
146
+ raise XMLRPC::FaultException.new(1,$!.to_s + "\n" + $!.backtrace.join("\n"))
147
+ end
148
+ end
149
+
150
+ server.add_handler('blogger.getRecentPosts') do |appkey, blogid, username, password, numberOfPosts|
151
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
152
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
153
+ end
154
+ result = []
155
+ @cgi.params['title'] = ['']
156
+ @cgi.params['body'] = ['']
157
+ @cgi.params['hide'] = ['true']
158
+ @conf.latest_limit = numberOfPosts
159
+ tdiary = ::TDiary::TDiaryLatest::new( @cgi, 'latest.rhtml', @conf )
160
+ tdiary.latest(numberOfPosts) {|diary|
161
+ index = 0
162
+ diary.each_section {|sec|
163
+ index += 1
164
+ postid = diary.date.strftime('%Y%m%d') + "%02d" % index
165
+ author = sec.author || @conf['xmlrpc.userid']
166
+ body = sec.subtitle + "\n" + sec.body
167
+ result << {
168
+ 'postid' => postid,
169
+ 'userid' => author,
170
+ 'content' => body,
171
+ 'dateCreated' => diary.last_modified.utc
172
+ }
173
+ }
174
+ }
175
+ result.sort {|a,b| b['postid']<=>a['postid'] }[0,numberOfPosts]
176
+ end
177
+
178
+ server.add_handler('blogger.getUsersBlogs') do |appkey, username, password|
179
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
180
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
181
+ end
182
+ result = [
183
+ {
184
+ 'blogid' => @conf['xmlrpc.blogid'],
185
+ 'blogName' => @conf.html_title,
186
+ 'url' => base_url
187
+ }
188
+ ]
189
+ result
190
+ end
191
+
192
+ server.add_handler('blogger.getUserInfo') do |appkey, username, password|
193
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
194
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
195
+ end
196
+ result = {
197
+ 'nickname' => @conf.author_name,
198
+ 'email' => @conf.author_mail,
199
+ 'url' => base_url,
200
+ 'lastname' => @conf['xmlrpc.lastname'],
201
+ 'firstname' => @conf['xmlrpc.firstname'],
202
+ 'userid' => @conf['xmlrpc.userid']
203
+ }
204
+ result
205
+ end
206
+
207
+ server.add_handler('metaWeblog.newPost') do |blogid, username, password, content, publish|
208
+ ENV['REQUEST_METHOD'] = 'POST'
209
+ ENV['HTTP_REFERER'] = (URI.parse(base_url) + @conf.update).to_s
210
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
211
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
212
+ end
213
+ begin
214
+ postid = Time.now.strftime("%Y%m%d")
215
+ year, month, day = postid.scan(/(\d{4})(\d\d)(\d\d)/)[0]
216
+ @cgi.params['date'] = [postid]
217
+ tdiary = ::TDiary::TDiaryDay::new( @cgi, "day.rhtml", @conf )
218
+ time = Time::local( year, month, day ) + 12*60*60
219
+ diary = tdiary[time] || tdiary.instance_variable_get(:@io).diary_factory(time, '', '', @conf.style)
220
+
221
+ index = diary.add_section(content['title'], content['description'])
222
+ src = diary.to_src
223
+
224
+ @cgi.params.delete 'date'
225
+ @cgi.params['old'] = [postid]
226
+ @cgi.params['hide'] = diary.visible? ? [] : ['true']
227
+ @cgi.params['title'] = [diary.title]
228
+ @cgi.params['year'] = [postid[0..3]]
229
+ @cgi.params['month'] = [postid[4..5]]
230
+ @cgi.params['day'] = [postid[6..7]]
231
+ @cgi.params['body'] = [src]
232
+ @cgi.params['csrf_protection_key'] = [@conf.options['csrf_protection_key']]
233
+ tdiary = ::TDiary::TDiaryReplace::new( @cgi, nil, @conf )
234
+ body = tdiary.eval_rhtml
235
+ postid + "%02d" % index
236
+ rescue ::TDiary::ForceRedirect => redirect
237
+ postid + "%02d" % index
238
+ end
239
+ end
240
+
241
+ server.add_handler('metaWeblog.editPost') do |postid, username, password, content, publish|
242
+ ENV['REQUEST_METHOD'] = 'POST'
243
+ ENV['HTTP_REFERER'] = (URI.parse(base_url) + @conf.update).to_s
244
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
245
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
246
+ end
247
+ begin
248
+ @cgi.params['date'] = [postid[0,8]]
249
+ tdiary = ::TDiary::TDiaryDay::new( @cgi, "day.rhtml", @conf )
250
+ year, month, day, index = postid.scan(/(\d{4})(\d\d)(\d\d)(\d\d)/)[0]
251
+ index = index.to_i
252
+ time = Time::local( year, month, day ) + 12*60*60
253
+ diary = tdiary[time]
254
+
255
+ src = ''
256
+ i = 0
257
+ diary.each_section {|sec|
258
+ i += 1
259
+ if i==index
260
+ sec.subtitle = content['title']
261
+ sec.body = content['description'] || ''.sub(/[\n\r]+\Z/, '') + "\n\n"
262
+ end
263
+ src << sec.to_src
264
+ }
265
+
266
+ @cgi.params.delete 'date'
267
+ @cgi.params['old'] = [postid[0,8]]
268
+ @cgi.params['hide'] = diary.visible? ? [] : ['true']
269
+ @cgi.params['title'] = [diary.title]
270
+ @cgi.params['year'] = [postid[0..3]]
271
+ @cgi.params['month'] = [postid[4..5]]
272
+ @cgi.params['day'] = [postid[6..7]]
273
+ @cgi.params['body'] = [src]
274
+ @cgi.params['csrf_protection_key'] = [@conf.options['csrf_protection_key']]
275
+ tdiary = ::TDiary::TDiaryReplace::new( @cgi, nil, @conf )
276
+ body = tdiary.eval_rhtml
277
+ true
278
+ rescue ::TDiary::ForceRedirect => redirect
279
+ true
280
+ rescue Exception
281
+ raise XMLRPC::FaultException.new(1,$!.to_s + "\n" + $!.backtrace.join("\n"))
282
+ end
283
+ end
284
+
285
+ server.add_handler('metaWeblog.getPost') do |postid, username, password|
286
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
287
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
288
+ end
289
+ @cgi.params['date'] = [postid[0,8]]
290
+ tdiary = TDiary::TDiaryDay::new( @cgi, 'day.rhtml', @conf )
291
+ year, month, day, index = postid.scan(/(\d{4})(\d\d)(\d\d)(\d\d)/)[0]
292
+ index = index.to_i
293
+ date = Time::local( year, month, day ) + 12*60*60
294
+ diary = tdiary[date]
295
+ i = 0
296
+ result = {}
297
+ diary.each_section {|sec|
298
+ i += 1
299
+ if i==index
300
+ link = base_url + @conf.index.sub(%r|^\./|, '') + diary.date.strftime('%Y%m%d') + ".html\#p%02d" % i
301
+ title = sec.stripped_subtitle || ''
302
+ body = sec.body
303
+ result = {
304
+ 'userid' => @conf['xmlrpc.userid'],
305
+ 'dateCreated' => diary.last_modified.utc,
306
+ 'postid' => postid,
307
+ 'description' => body,
308
+ 'title' => title,
309
+ 'link' => link,
310
+ 'permaLink' => link,
311
+ 'mt_excerpt' => '',
312
+ 'mt_text_mode' => '',
313
+ 'mt_allow_comments' => 1,
314
+ 'mt_allow_pings' => 1,
315
+ 'mt_convert_breaks' => '__default__',
316
+ 'mt_keyword' => ''
317
+ }
318
+ break
319
+ end
320
+ }
321
+ result
322
+ end
323
+
324
+ server.add_handler('metaWeblog.getRecentPosts') do |blogid, username, password, numberOfPosts|
325
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
326
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
327
+ end
328
+ result = []
329
+ @cgi.params['title'] = ['']
330
+ @cgi.params['body'] = ['']
331
+ @cgi.params['hide'] = ['true']
332
+ @conf.latest_limit = numberOfPosts
333
+ tdiary = ::TDiary::TDiaryLatest::new( @cgi, 'latest.rhtml', @conf )
334
+ tdiary.latest(numberOfPosts) {|diary|
335
+ index = 0
336
+ diary.each_section {|sec|
337
+ index += 1
338
+ postid = diary.date.strftime('%Y%m%d') + "%02d" % index
339
+ link = base_url + @conf.index.sub(%r|^\./|, '') + diary.date.strftime('%Y%m%d') + ".html\#p%02d" % index
340
+ title = sec.stripped_subtitle || ''
341
+ body = sec.body
342
+ author = sec.author || @conf['xmlrpc.userid']
343
+ result << {
344
+ 'dateCreated' => diary.last_modified.utc,
345
+ 'userid' => author,
346
+ 'postid' => postid,
347
+ 'description' => body,
348
+ 'title' => title,
349
+ 'link' => link,
350
+ 'permaLink' => link,
351
+ 'mt_excerpt' => '',
352
+ 'mt_text_more' => '',
353
+ 'mt_allow_comments' => 1,
354
+ 'mt_allow_pings' => 1,
355
+ 'mt_convert_breaks' => '__default__',
356
+ 'mt_keywords' => '',
357
+ }
358
+ }
359
+ }
360
+ result.sort {|a,b| b['postid']<=>a['postid'] }[0,numberOfPosts]
361
+ end
362
+
363
+ server.add_handler('metaWeblog.newMediaObject') do |blogid, username, password, file|
364
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
365
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
366
+ end
367
+ image_dir = @conf['image.dir'] || './images/'
368
+ image_dir.chop! if /\/$/ =~ image_dir
369
+ image_url = @conf['image.url'] || './images/'
370
+ image_url.chop! if /\/$/ =~ image_url
371
+ name = file['name']
372
+ bits = file['bits']
373
+ path = File.join(image_dir, name)
374
+ open(path,'wb') {|f|
375
+ f.write bits.to_s
376
+ }
377
+ {'url' => (URI.parse(base_url) + (image_url + '/' + name)).to_s }
378
+ end
379
+
380
+ server.add_handler('mt.getRecentPostTitles') do |blogid, username, password, numberOfPosts|
381
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
382
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
383
+ end
384
+ result = []
385
+ @cgi.params['title'] = ['']
386
+ @cgi.params['body'] = ['']
387
+ @cgi.params['hide'] = ['true']
388
+ @conf.latest_limit = numberOfPosts
389
+ tdiary = ::TDiary::TDiaryLatest::new( @cgi, 'latest.rhtml', @conf )
390
+ tdiary.latest(numberOfPosts) {|diary|
391
+ index = 0
392
+ diary.each_section {|sec|
393
+ index += 1
394
+ postid = diary.date.strftime('%Y%m%d') + "%02d" % index
395
+ author = sec.author || @conf['xmlrpc.userid']
396
+ result << {
397
+ 'dateCreated' => diary.last_modified.utc,
398
+ 'userid' => author,
399
+ 'postid' => postid,
400
+ 'title' => sec.subtitle,
401
+ }
402
+ }
403
+ }
404
+ result.sort {|a,b| b['postid']<=>a['postid'] }
405
+ end
406
+
407
+ server.add_handler('mt.getCategoryList') do |blogid, username, password|
408
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
409
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
410
+ end
411
+ @cgi.params['date'] = [Time.now.strftime('%Y%m%d')]
412
+ tdiary = TDiary::TDiaryDay::new( @cgi, 'day.rhtml', @conf )
413
+ list = []
414
+ tdiary.calendar.each do |y, ms|
415
+ ms.each do |m|
416
+ ym = "#{y}#{m}"
417
+ @cgi.params['date'] = [ym]
418
+ m = ::TDiary::TDiaryMonth.new(@cgi, '', @conf)
419
+ sections = {}
420
+ m.diaries.each do |ymd, diary|
421
+ next if !diary.visible?
422
+ diary.each_section do |s|
423
+ list |= s.categories unless s.categories.empty?
424
+ end
425
+ end
426
+ end
427
+ end
428
+ list = list.sort.uniq
429
+ result = []
430
+ list.each {|c|
431
+ result << {
432
+ 'categoryId' => c,
433
+ 'categoryName' => c
434
+ }
435
+ }
436
+ result
437
+ end
438
+
439
+ server.add_handler('mt.getPostCategories') do |postid, username, password|
440
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
441
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
442
+ end
443
+ @cgi.params['date'] = [postid[0,8]]
444
+ tdiary = TDiary::TDiaryDay::new( @cgi, 'day.rhtml', @conf )
445
+ result = []
446
+ year, month, day, index = postid.scan(/(\d{4})(\d\d)(\d\d)(\d\d)/)[0]
447
+ index = index.to_i
448
+ time = Time::local( year, month, day ) + 12*60*60
449
+ diary = tdiary[time]
450
+ i = 0
451
+ diary.each_section {|sec|
452
+ i += 1
453
+ if i==index
454
+ sec.categories.each_with_index {|cat,j|
455
+ result << {
456
+ 'categoryName' => cat,
457
+ 'categoryId' => cat,
458
+ 'isPrimary' => j==0
459
+ }
460
+ }
461
+ break
462
+ end
463
+ }
464
+ result
465
+ end
466
+
467
+ server.add_handler('mt.setPostCategories') do |postid, username, password, categories|
468
+ ENV['REQUEST_METHOD'] = 'POST'
469
+ ENV['HTTP_REFERER'] = (URI.parse(base_url) + @conf.update).to_s
470
+ unless username == @conf['xmlrpc.username'] && password == @conf['xmlrpc.password']
471
+ raise XMLRPC::FaultException.new(1,'userid or password incorrect')
472
+ end
473
+ begin
474
+ @cgi.params['date'] = [postid[0,8]]
475
+ tdiary = ::TDiary::TDiaryDay::new( @cgi, "day.rhtml", @conf )
476
+ year, month, day, index = postid.scan(/(\d{4})(\d\d)(\d\d)(\d\d)/)[0]
477
+ index = index.to_i
478
+ time = Time::local( year, month, day ) + 12*60*60
479
+ diary = tdiary[time]
480
+
481
+ @cgi.params.delete 'date'
482
+
483
+ src = ''
484
+ i = 0
485
+ diary.each_section {|sec|
486
+ i += 1
487
+ if i==index
488
+ cats = []
489
+ categories.sort {|a,b|
490
+ a['isPrimary']==true ? 0 : 1
491
+ }.each {|c|
492
+ cats << c['categoryId']
493
+ }
494
+ sec.categories = cats
495
+ end
496
+ src << sec.to_src
497
+ }
498
+
499
+ @cgi.params['old'] = [postid[0,8]]
500
+ @cgi.params['hide'] = diary.visible? ? [] : ['true']
501
+ @cgi.params['title'] = [diary.title]
502
+ @cgi.params['year'] = [postid[0..3]]
503
+ @cgi.params['month'] = [postid[4..5]]
504
+ @cgi.params['day'] = [postid[6..7]]
505
+ @cgi.params['body'] = [src]
506
+ @cgi.params['csrf_protection_key'] = [@conf.options['csrf_protection_key']]
507
+ tdiary = ::TDiary::TDiaryReplace::new( @cgi, nil, @conf )
508
+ body = tdiary.eval_rhtml
509
+ true
510
+ rescue ::TDiary::ForceRedirect => redirect
511
+ true
512
+ rescue Exception
513
+ raise XMLRPC::FaultException.new(1,$!.to_s + "\n" + $!.backtrace.join("\n"))
514
+ end
515
+ end
516
+
517
+ server.add_handler('mt.supportedMethods') do
518
+ [
519
+ 'blogger.newPost',
520
+ 'blogger.editPost',
521
+ 'blogger.getRecentPosts',
522
+ 'blogger.getUsersBlogs',
523
+ 'blogger.getUserInfo',
524
+ 'blogger.deletePost',
525
+ 'metaWeblog.getPost',
526
+ 'metaWeblog.newPost',
527
+ 'metaWeblog.editPost',
528
+ 'metaWeblog.getRecentPosts',
529
+ 'metaWeblog.newMediaObject',
530
+ 'mt.getCategoryList',
531
+ 'mt.setPostCategories',
532
+ 'mt.getPostCategories',
533
+ 'mt.getTrackbackPings',
534
+ 'mt.supportedTextFilters',
535
+ 'mt.getRecentPostTitles',
536
+ 'mt.publishPost'
537
+ ]
538
+ end
539
+
540
+ server.add_handler('mt.supportedTextFilters') do
541
+ ['__default__']
542
+ end
543
+
544
+ server.add_handler('mt.getTrackbackPings') do |postid|
545
+ @cgi.params['date'] = [postid[0,8]]
546
+ tdiary = TDiary::TDiaryDay::new( @cgi, 'day.rhtml', @conf )
547
+ result = []
548
+ date = Time::local( *postid.scan( /^(\d{4})(\d\d)(\d\d)(\d\d)$/ )[0] ) + 12*60*60
549
+ tdiary[date].each_visible_trackback(100) {|com,i|
550
+ url, name, title, excerpt = com.body.split( /\n/,4 )
551
+ result << {
552
+ 'pingURL' => url,
553
+ 'pingIP' => '127.0.0.1',
554
+ 'pingTitle' => title,
555
+ }
556
+ }
557
+ result
558
+ end
559
+
560
+ server.add_handler('mt.publishPost') do |postid, username, password|
561
+ true
562
+ end
563
+
564
+ server.add_handler('mt.setNextScheduledPost') do |postid, dateCreated, username, password|
565
+ true
566
+ end
567
+
568
+ server.serve
569
+
570
+ # Local Variables:
571
+ # mode: ruby
572
+ # indent-tabs-mode: t
573
+ # tab-width: 3
574
+ # ruby-indent-level: 3
575
+ # End: