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
data/misc/plugin/a.rb ADDED
@@ -0,0 +1,211 @@
1
+ # -*- coding: utf-8 -*-
2
+ # a.rb
3
+ #
4
+ # Create anchor easily.
5
+ #
6
+ # 1. Usage
7
+ # a(url, name)
8
+ #
9
+ # a "http://www.hoge.com/diary/", "Hoge Diary"
10
+ #
11
+ # a(key, option_or_name = "", name = nil)
12
+ # Use dictionary file. You need to create the dictionary
13
+ # file with a CGI.
14
+ # a "home"
15
+ # a "home", "20020329.html", "Here"
16
+ #
17
+ # a("name|key:option")
18
+ # Use dictionary file. You need to create the dictionary
19
+ # file with a CGI.
20
+ #
21
+ # a "key"
22
+ # a "key:20020329.html"
23
+ # a "key:20020329.html|Here"
24
+ # a "Hoge Diary|http://www.hoge.com/diary/"
25
+ # a "Hoge Diary|20020201.html#p01" #=> Same as "my" plugin
26
+ #
27
+ # 2. Dictionary file
28
+ # You can edit the dictionary file from "Preferences".
29
+ #
30
+ # 3. Documents
31
+ # See URLs below for more details.
32
+ # http://ponx.s5.xrea.com/hiki/a.rb.html (English)
33
+ # http://ponx.s5.xrea.com/hiki/ja/a.rb.html (Japanese)
34
+ #
35
+ # Copyright (c) 2002-2004 MUTOH Masao <mutoh@highway.ne.jp>
36
+ # You can redistribute it and/or modify it under GPL2.
37
+ #
38
+
39
+ # Resources
40
+ unless @resource_loaded then
41
+ def a_conf_label; "アンカー自動生成プラグイン辞書ファイル編集"; end
42
+ def a_conf_explain; "<p>1行で1つのアンカーになります。フォーマットは、キー URL 名称です。各項目は空白で区切ります。名称は省略可能です。省略した場合はキーが名称として使われます。</p><p>例: bibo http://ponx.s5.xrea.com/bibo/ Linuxビボ〜ろく</p>"; end
43
+ end
44
+ def a_conf_cols; '70%'; end
45
+ def a_conf_rows; 20; end
46
+
47
+ A_REG_PIPE = /\|/
48
+ A_REG_COLON = /\:/
49
+ A_REG_URL = /:\/\//
50
+ A_REG_CHARSET = /utf8|euc|sjis|jis/
51
+ A_REG_CHARSET2 = /euc|sjis|jis/
52
+ A_REG_MY = /^\d{8}/
53
+
54
+ if @options and @options["a.path"]
55
+ a_path = @options["a.path"]
56
+ else
57
+ a_path = File.join(@cache_path, "a.dat")
58
+ end
59
+
60
+ @a_anchors = Hash.new
61
+ if FileTest::exist?(a_path)
62
+ open(a_path) do |file|
63
+ file.each_line do |line|
64
+ key, baseurl, *data = line.split(/\s+/)
65
+ if data.last =~ A_REG_CHARSET
66
+ charset = data.pop
67
+ else
68
+ charset = ""
69
+ end
70
+ @a_anchors[key] = [baseurl, data.join(" "), charset]
71
+ end
72
+ end
73
+ end
74
+
75
+ def a_separate(word)
76
+ if A_REG_PIPE =~ word
77
+ name, data = $`, $'
78
+ else
79
+ name, data = nil, word
80
+ end
81
+
82
+ option = nil
83
+ if data =~ A_REG_URL
84
+ key = data
85
+ elsif data =~ A_REG_COLON
86
+ key, option = $`, $'
87
+ else
88
+ key = data #Error pattern
89
+ end
90
+ [key, option, name]
91
+ end
92
+
93
+ def a_convert_charset(option, charset)
94
+ return "" unless option
95
+ return option unless charset
96
+ if charset =~ A_REG_CHARSET2
97
+ ret = if String.method_defined?(:encode)
98
+ option.encode(charset == 'jis' ? 'ISO-2022-JP' : charset)
99
+ else
100
+ require 'nkf'
101
+ NKF::nkf("-#{charset[0].chr}", option)
102
+ end
103
+ else
104
+ ret = option
105
+ end
106
+ ret
107
+ end
108
+
109
+ def a_anchor(key)
110
+ data = @a_anchors[key]
111
+ if data
112
+ data.collect{|v| v ? v.dup : nil}
113
+ else
114
+ [nil, nil, nil]
115
+ end
116
+ end
117
+
118
+ def a(key, option_or_name = nil, name = nil, charset = nil)
119
+ url, value, cset = a_anchor(key)
120
+ if url.nil?
121
+ key, option, name = a_separate(key)
122
+ url, value, cset = a_anchor(key)
123
+ option_or_name = option unless option_or_name;
124
+ end
125
+ charset = cset unless charset
126
+
127
+ value = key if value == ""
128
+
129
+ if url.nil?
130
+ url = key
131
+ if name
132
+ value = name
133
+ url += u(a_convert_charset(option_or_name, charset))
134
+ elsif option_or_name
135
+ value = option_or_name
136
+ else
137
+ value = key
138
+ end
139
+ else
140
+ url += u(a_convert_charset(option_or_name, charset))
141
+ value = name if name
142
+ end
143
+
144
+ if key =~ A_REG_MY
145
+ option_or_name = key unless option_or_name
146
+ return my(option_or_name, name)
147
+ end
148
+
149
+ if @options["a.tlink"]
150
+ if defined?(tlink)
151
+ url.untaint
152
+ result = tlink(url, value)
153
+ else
154
+ result = "tlink is not available."
155
+ end
156
+ else
157
+ result = %Q[<a href="#{h url}">#{value}</a>]
158
+ end
159
+ result
160
+ end
161
+
162
+ def navi_a(name = "a.rb conf")
163
+ "<span class=\"adminmenu\"><a href=\"a_conf.rb\">#{name}</a></span>\n"
164
+ end
165
+
166
+ def a_conf_html(data)
167
+ %Q[
168
+ #{a_conf_explain}
169
+ <p><textarea name="anchor_plugin_data" cols="#{a_conf_cols}" rows="#{a_conf_rows}">#{h data}</textarea></p>
170
+ ]
171
+ end
172
+
173
+ add_conf_proc( 'a_conf', a_conf_label ) do
174
+ data = ""
175
+ if FileTest.exist?( a_path )
176
+ open( a_path, "r" ) do |i|
177
+ data = i.readlines.join
178
+ end
179
+ end
180
+
181
+ if @mode == 'saveconf'
182
+ if @cgi['anchor_plugin_data']
183
+ if FileTest.exist?( a_path )
184
+ open( a_path, "r" ) do |i|
185
+ open( a_path + "~", "w" ) do |o|
186
+ o.print i.readlines
187
+ end
188
+ end
189
+ end
190
+
191
+ open( a_path, 'w' ) do |o|
192
+ @cgi["anchor_plugin_data"].lines.each do |v|
193
+ v.split(/\n/).each do |line|
194
+ o.print line, "\n" if line =~ /\w/
195
+ end
196
+ end
197
+ end
198
+ data = @cgi["anchor_plugin_data"]
199
+
200
+ end
201
+ end
202
+
203
+ a_conf_html(data)
204
+ end
205
+
206
+ # Local Variables:
207
+ # mode: ruby
208
+ # indent-tabs-mode: t
209
+ # tab-width: 3
210
+ # ruby-indent-level: 3
211
+ # End:
@@ -0,0 +1,403 @@
1
+ # amazon.rb: Making link with image to Amazon using Amazon ECS.
2
+ #
3
+ # see document: #{@lang}/amazon.rb
4
+ #
5
+ # Copyright (C) 2005-2007 TADA Tadashi <sho@spc.gr.jp>
6
+ # You can redistribute it and/or modify it under GPL2.
7
+ #
8
+
9
+ autoload :Net, 'net/http'
10
+ autoload :URI, 'uri'
11
+ autoload :Timeout, 'timeout'
12
+ autoload :REXML, 'rexml/document'
13
+
14
+ # do not change these variables
15
+ @amazon_subscription_id = '1CVA98NEF1G753PFESR2'
16
+ @amazon_require_version = '2011-08-01'
17
+
18
+ @amazon_url_hash = {
19
+ 'ca' => 'http://www.amazon.ca/exec/obidos/ASIN',
20
+ 'cn' => 'http://www.amazon.cn/exec/obidos/ASIN',
21
+ 'de' => 'http://www.amazon.de/exec/obidos/ASIN',
22
+ 'es' => 'http://www.amazon.es/exec/obidos/ASIN',
23
+ 'fr' => 'http://www.amazon.fr/exec/obidos/ASIN',
24
+ 'it' => 'http://www.amazon.it/exec/obidos/ASIN',
25
+ 'jp' => 'http://www.amazon.co.jp/exec/obidos/ASIN',
26
+ 'uk' => 'http://www.amazon.co.uk/exec/obidos/ASIN',
27
+ 'us' => 'http://www.amazon.com/exec/obidos/ASIN',
28
+ }
29
+
30
+ @amazon_ecs_url_hash = {
31
+ 'ca' => 'http://rpaproxy.tdiary.org/rpaproxy/ca/',
32
+ 'cn' => 'http://rpaproxy.tdiary.org/rpaproxy/cn/',
33
+ 'de' => 'http://rpaproxy.tdiary.org/rpaproxy/de/',
34
+ 'es' => 'http://rpaproxy.tdiary.org/rpaproxy/es/',
35
+ 'fr' => 'http://rpaproxy.tdiary.org/rpaproxy/fr/',
36
+ 'it' => 'http://rpaproxy.tdiary.org/rpaproxy/it/',
37
+ 'jp' => 'http://rpaproxy.tdiary.org/rpaproxy/jp/',
38
+ 'uk' => 'http://rpaproxy.tdiary.org/rpaproxy/uk/',
39
+ 'us' => 'http://rpaproxy.tdiary.org/rpaproxy/us/',
40
+ }
41
+
42
+ if @conf['amazon.bitly'] and @conf['bitly.login'] and @conf['bitly.key'] then
43
+ enable_js( 'amazon.js' )
44
+ add_js_setting( '$tDiary.plugin.bitly' )
45
+ add_js_setting( '$tDiary.plugin.bitly.login', "'#{@conf['bitly.login']}'" )
46
+ add_js_setting( '$tDiary.plugin.bitly.apiKey', "'#{@conf['bitly.key']}'" )
47
+ end
48
+
49
+ def amazon_fetch( url, limit = 10 )
50
+ raise ArgumentError, 'HTTP redirect too deep' if limit == 0
51
+
52
+ px_host, px_port = (@conf['proxy'] || '').split( /:/ )
53
+ px_port = 80 if px_host and !px_port
54
+ res = Net::HTTP::Proxy( px_host, px_port ).get_response( URI::parse( url ) )
55
+ case res
56
+ when Net::HTTPSuccess
57
+ res.body
58
+ when Net::HTTPRedirection
59
+ amazon_fetch( res['location'].untaint, limit - 1 )
60
+ else
61
+ raise ArgumentError, res.error!
62
+ end
63
+ end
64
+
65
+ def amazon_call_ecs( asin, id_type, country )
66
+ @conf["amazon.aid.#{@amazon_default_country}"] = @conf['amazon.aid'] unless @conf['amazon.aid'].to_s.empty?
67
+ aid = @conf["amazon.aid.#{country}"] || ''
68
+
69
+ url = (@conf['amazon.endpoints'] || @amazon_ecs_url_hash)[country].dup
70
+ url << "?Service=AWSECommerceService"
71
+ url << "&SubscriptionId=#{@amazon_subscription_id}"
72
+ url << "&AssociateTag=#{aid}" unless aid.empty?
73
+ url << "&Operation=ItemLookup"
74
+ url << "&ItemId=#{asin}"
75
+ url << "&IdType=#{id_type}"
76
+ url << "&SearchIndex=Books" if id_type == 'ISBN'
77
+ url << "&SearchIndex=All" if id_type == 'EAN'
78
+ url << "&ResponseGroup=Medium"
79
+ url << "&Version=#{@amazon_require_version}"
80
+
81
+ begin
82
+ Timeout.timeout( 10 ) do
83
+ amazon_fetch( url )
84
+ end
85
+ rescue ArgumentError
86
+ end
87
+ end
88
+
89
+ def amazon_author( item )
90
+ begin
91
+ author = []
92
+ %w(Author Creator Artist).each do |elem|
93
+ item.elements.each( "*/#{elem}" ) do |a|
94
+ author << a.text
95
+ end
96
+ end
97
+ @conf.to_native( author.uniq.join( '/' ), 'utf-8' )
98
+ rescue
99
+ '-'
100
+ end
101
+ end
102
+
103
+ def amazon_title( item )
104
+ @conf.to_native( item.elements.to_a( '*/Title' )[0].text, 'utf-8' )
105
+ end
106
+
107
+ def amazon_image( item )
108
+ image = {}
109
+ begin
110
+ size = case @conf['amazon.imgsize']
111
+ when 0; 'Large'
112
+ when 2; 'Small'
113
+ else; 'Medium'
114
+ end
115
+ img = item.elements.to_a("#{size}Image")[0] || item.elements.to_a("ImageSets/ImageSet/#{size}Image")[0]
116
+ image[:src] = img.elements['URL'].text
117
+ image[:height] = img.elements['Height'].text
118
+ image[:width] = img.elements['Width'].text
119
+ rescue
120
+ base = @conf['amazon.default_image_base'] || 'http://www.tdiary.org/images/amazondefaults/'
121
+ case @conf['amazon.imgsize']
122
+ when 0
123
+ image[:src] = "#{base}large.png"
124
+ image[:height] = 500
125
+ image[:width] = 380
126
+ when 2
127
+ image[:src] = "#{base}small.png"
128
+ image[:height] = 75
129
+ image[:width] = 57
130
+ else
131
+ image[:src] = "#{base}medium.png"
132
+ image[:height] = 160
133
+ image[:width] = 122
134
+ end
135
+ end
136
+ image
137
+ end
138
+
139
+ def amazon_url( item )
140
+ item.elements.to_a( 'DetailPageURL' )[0].text
141
+ end
142
+
143
+ def amazon_label( item )
144
+ begin
145
+ @conf.to_native( item.elements.to_a( '*/Label' )[0].text, 'utf-8' )
146
+ rescue
147
+ '-'
148
+ end
149
+ end
150
+
151
+ def amazon_price( item )
152
+ begin
153
+ @conf.to_native( item.elements.to_a( '*/LowestNewPrice/FormattedPrice' )[0].text, 'utf-8' )
154
+ rescue
155
+ begin
156
+ @conf.to_native( item.elements.to_a( '*/ListPrice/FormattedPrice' )[0].text, 'utf-8' )
157
+ rescue
158
+ '(no price)'
159
+ end
160
+ end
161
+ end
162
+
163
+ def amazon_detail_html( item )
164
+ author = amazon_author( item )
165
+ title = amazon_title( item )
166
+
167
+ size_orig = @conf['amazon.imgsize']
168
+ @conf['amazon.imgsize'] = 2
169
+ image = amazon_image( item )
170
+ @conf['amazon.imgsize'] = size_orig
171
+
172
+ url = amazon_url( item )
173
+ html = <<-HTML
174
+ <a class="amazon-detail" href="#{url}"><span class="amazon-detail">
175
+ <img class="amazon-detail left" src="#{h image[:src]}"
176
+ height="#{h image[:height]}" width="#{h image[:width]}"
177
+ alt="">
178
+ <span class="amazon-detail-desc">
179
+ <span class="amazon-title">#{h title}</span><br>
180
+ <span class="amazon-author">#{h author}</span><br>
181
+ <span class="amazon-label">#{h amazon_label( item )}</span><br>
182
+ <span class="amazon-price">#{h amazon_price( item )}</span>
183
+ </span><br style="clear: left">
184
+ </span></a>
185
+ HTML
186
+ end
187
+
188
+ def amazon_to_html( item, with_image = true, label = nil, pos = 'amazon' )
189
+ with_image = false if @mode == 'categoryview'
190
+
191
+ author = amazon_author( item )
192
+ author = "(#{author})" unless author.empty?
193
+
194
+ label ||= %Q|#{amazon_title( item )}#{author}|
195
+ alt = ''
196
+ if with_image and @conf['amazon.hidename'] || pos != 'amazon' then
197
+ label, alt = alt, label
198
+ end
199
+
200
+ if with_image
201
+ image = amazon_image( item )
202
+ unless image[:src] then
203
+ img = ''
204
+ else
205
+ size = @cgi.smartphone? ? '' : %Q|height="#{h image[:height]}" width="#{h image[:width]}"|
206
+ img = <<-HTML
207
+ <img class="#{h pos}" src="#{h image[:src]}"
208
+ #{size} alt="#{h alt}">
209
+ HTML
210
+ img.gsub!( /\t/, '' )
211
+ end
212
+ end
213
+
214
+ url = amazon_url( item )
215
+ %Q|<a href="#{h url}">#{img}#{h label}</a>|
216
+ end
217
+
218
+ def amazon_secure_html( asin, with_image, label, pos, country )
219
+ with_image = false if @mode == 'categoryview'
220
+ label = asin unless label
221
+
222
+ image = ''
223
+ if with_image and @conf['amazon.secure-cgi'] then
224
+ image = <<-HTML
225
+ <img class="#{h pos}"
226
+ src="#{h @conf['amazon.secure-cgi']}?asin=#{u asin};size=#{u @conf['amazon.imgsize']};country=#{u country}"
227
+ alt="">
228
+ HTML
229
+ end
230
+ image.gsub!( /\t/, '' )
231
+
232
+ if with_image and @conf['amazon.hidename'] || pos != 'amazon' then
233
+ label = ''
234
+ end
235
+
236
+ @conf["amazon.aid.#{@amazon_default_country}"] = @conf['amazon.aid'] unless @conf['amazon.aid'].to_s.empty?
237
+ aid = @conf["amazon.aid.#{country}"] || ''
238
+ amazon_url = @amazon_url_hash[country]
239
+ url = "#{amazon_url}/#{u asin}"
240
+ url << "/#{u aid}" unless aid.empty?
241
+ url << "/ref=nosim/"
242
+ %Q|<a href="#{h url}">#{image}#{h label}</a>|
243
+ end
244
+
245
+ def amazon_get( asin, with_image = true, label = nil, pos = 'amazon' )
246
+ asin = asin.to_s.strip # delete white spaces
247
+ asin.sub!(/\A([a-z]+):/, '')
248
+ country = $1 || @conf['amazon.default_country'] || @amazon_default_country
249
+ digit = asin.gsub( /[^\d]/, '' )
250
+ if digit.length == 13 then # ISBN-13
251
+ asin = digit
252
+ id_type = /^97[89]/ =~ digit ? 'ISBN' : 'EAN'
253
+ else
254
+ id_type = 'ASIN'
255
+ end
256
+
257
+ if @conf.secure then
258
+ amazon_secure_html( asin, with_image, label, pos, country )
259
+ else
260
+ begin
261
+ cache = "#{@cache_path}/amazon"
262
+ Dir::mkdir( cache ) unless File::directory?( cache )
263
+ begin
264
+ xml = File::read( "#{cache}/#{country}#{asin}.xml" )
265
+ rescue Errno::ENOENT
266
+ xml = amazon_call_ecs( asin, id_type, country )
267
+ File::open( "#{cache}/#{country}#{asin}.xml", 'wb' ) {|f| f.write( xml )}
268
+ end
269
+ doc = REXML::Document::new( REXML::Source::new( xml ) ).root
270
+ item = doc.elements.to_a( '*/Item' )[0]
271
+ if pos == 'detail' then
272
+ amazon_detail_html( item )
273
+ else
274
+ amazon_to_html( item, with_image, label, pos )
275
+ end
276
+ rescue Timeout::Error
277
+ @logger.error "amazon.rb: Amazon API Timeouted."
278
+ message = asin
279
+ if @mode == 'preview' then
280
+ message << %Q|<span class="message">(Amazon API Timeouted))</span>|
281
+ end
282
+ message
283
+ rescue NoMethodError
284
+ message = label || asin
285
+ if @mode == 'preview' then
286
+ if item == nil then
287
+ m = doc.elements.to_a( 'Items/Request/Errors/Error/Message' )[0].text
288
+ message << %Q|<span class="message">(#{h @conf.to_native( m, 'utf-8' )})</span>|
289
+ else
290
+ message << %Q|<span class="message">(#{h $!}\n#{h $@.join( ' / ' )})</span>|
291
+ end
292
+ end
293
+ message
294
+ end
295
+ end
296
+ end
297
+
298
+ unless @conf.secure and not @conf['amazon.secure-cgi'] then
299
+ add_conf_proc( 'amazon', @amazon_label_conf ) do
300
+ amazon_conf_proc
301
+ end
302
+ end
303
+
304
+ def amazon_conf_proc
305
+ if @mode == 'saveconf' then
306
+ unless @conf.secure and not @conf['amazon.secure-cgi'] then
307
+ @conf['amazon.imgsize'] = @cgi.params['amazon.imgsize'][0].to_i
308
+ @conf['amazon.hidename'] = (@cgi.params['amazon.hidename'][0] == 'true')
309
+ @conf['amazon.bitly'] = (@cgi.params['amazon.bitly'][0] == 'true')
310
+ unless @conf.secure then
311
+ @conf['amazon.nodefault'] = (@cgi.params['amazon.nodefault'][0] == 'true')
312
+ if @cgi.params['amazon.clearcache'][0] == 'true' then
313
+ Dir["#{@cache_path}/amazon/*"].each do |cache|
314
+ File::delete( cache.untaint )
315
+ end
316
+ end
317
+ end
318
+ end
319
+ unless @conf['amazon.hideconf'] then
320
+ @conf['amazon.aid'] = @cgi.params['amazon.aid'][0]
321
+ end
322
+ end
323
+
324
+ result = ''
325
+ unless @conf.secure and not @conf['amazon.secure-cgi'] then
326
+ result << <<-HTML
327
+ <h3>#{@amazon_label_imgsize}</h3>
328
+ <p><select name="amazon.imgsize">
329
+ <option value="0"#{" selected" if @conf['amazon.imgsize'] == 0}>#{@amazon_label_large}</option>
330
+ <option value="1"#{" selected" if @conf['amazon.imgsize'] == 1}>#{@amazon_label_regular}</option>
331
+ <option value="2"#{" selected" if @conf['amazon.imgsize'] == 2}>#{@amazon_label_small}</option>
332
+ </select></p>
333
+ <h3>#{@amazon_label_title}</h3>
334
+ <p><select name="amazon.hidename">
335
+ <option value="true"#{" selected" if @conf['amazon.hidename']}>#{@amazon_label_hide}</option>
336
+ <option value="false"#{" selected" unless @conf['amazon.hidename']}>#{@amazon_label_show}</option>
337
+ </select></p>
338
+ HTML
339
+
340
+ if @options['bitly.login'] and @options['bitly.key'] then
341
+ result << <<-HTML
342
+ <h3>#{@amazon_label_bitly}</h3>
343
+ <p><select name="amazon.bitly">
344
+ <option value="true"#{" selected" if @conf['amazon.bitly']}>#{@amazon_label_bitly_enabled}</option>
345
+ <option value="false"#{" selected" unless @conf['amazon.bitly']}>#{@amazon_label_bitly_disabled}</option>
346
+ </select></p>
347
+ HTML
348
+ end
349
+
350
+ unless @conf.secure then
351
+ result << <<-HTML
352
+ <h3>#{@amazon_label_notfound}</h3>
353
+ <p><select name="amazon.nodefault">
354
+ <option value="true"#{" selected" if @conf['amazon.nodefault']}>#{@amazon_label_usetitle}</option>
355
+ <option value="false"#{" selected" unless @conf['amazon.nodefault']}>#{@amazon_label_usedefault}</option>
356
+ </select></p>
357
+ <h3>#{@amazon_label_clearcache}</h3>
358
+ <p><label for="amazon.clearcache"><input type="checkbox" id="amazon.clearcache" name="amazon.clearcache" value="true">#{@amazon_label_clearcache_desc}</label></p>
359
+ HTML
360
+ end
361
+ end
362
+ unless @conf['amazon.hideconf'] then
363
+ result << <<-HTML
364
+ <h3>#{@amazon_label_aid}</h3>
365
+ <p>#{@amazon_label_aid_desc}</p>
366
+ <p><input name="amazon.aid" value="#{h( @conf['amazon.aid'] ) if @conf['amazon.aid']}"></p>
367
+ HTML
368
+ end
369
+ result
370
+ end
371
+
372
+ def isbn_detail( asin )
373
+ amazon_get( asin, true, nil, 'detail' )
374
+ end
375
+
376
+ def isbn_image( asin, label = nil )
377
+ amazon_get( asin, true, label )
378
+ end
379
+
380
+ def isbn_image_left( asin, label = nil )
381
+ amazon_get( asin, true, label, 'left' )
382
+ end
383
+
384
+ def isbn_image_right( asin, label = nil )
385
+ amazon_get( asin, true, label, 'right' )
386
+ end
387
+
388
+ def isbn( asin, label = nil )
389
+ amazon_get( asin, false, label )
390
+ end
391
+
392
+ # for compatibility
393
+ alias isbnImgLeft isbn_image_left
394
+ alias isbnImgRight isbn_image_right
395
+ alias isbnImg isbn_image
396
+ alias amazon isbn_image
397
+
398
+ # Local Variables:
399
+ # mode: ruby
400
+ # indent-tabs-mode: t
401
+ # tab-width: 3
402
+ # ruby-indent-level: 3
403
+ # End: