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.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +16 -0
- data/.travis.yml +29 -0
- data/Capfile +2 -0
- data/ChangeLog +3173 -0
- data/Gemfile +58 -0
- data/Gemfile.lock +201 -0
- data/LICENSE +340 -0
- data/Procfile +1 -0
- data/README.md +33 -0
- data/Rakefile +26 -0
- data/bin/tdiary +7 -0
- data/config.ru +61 -0
- data/data/.htaccess +2 -0
- data/doc/HOWTO-authenticate-in-rack.md +89 -0
- data/doc/HOWTO-make-io.md +305 -0
- data/doc/HOWTO-make-plugin.md +279 -0
- data/doc/HOWTO-make-theme.md +67 -0
- data/doc/HOWTO-testing-tDiary.md +44 -0
- data/doc/HOWTO-use-plugin.md +148 -0
- data/doc/HOWTO-write-tDiary.en.md +131 -0
- data/doc/HOWTO-write-tDiary.md +136 -0
- data/doc/INSTALL-paas.md +202 -0
- data/doc/INSTALL.md +160 -0
- data/doc/README.en.md +174 -0
- data/doc/README.md +56 -0
- data/doc/UPGRADE.md +164 -0
- data/doc/doc.css +115 -0
- data/dot.htaccess +27 -0
- data/index.fcgi +45 -0
- data/index.rb +57 -0
- data/js/00default.js +60 -0
- data/js/01conf.js +62 -0
- data/js/02edit.coffee +5 -0
- data/js/02edit.js +15 -0
- data/js/amazon.js +43 -0
- data/js/calendar3.js +130 -0
- data/js/caretposition.js +170 -0
- data/js/category.js +29 -0
- data/js/category_autocomplete.js +96 -0
- data/js/comment_ajax.js +27 -0
- data/js/draft.js +149 -0
- data/js/highlight.js +36 -0
- data/js/image.js +181 -0
- data/misc/convert2.rb +123 -0
- data/misc/filter/antispamservice.rb +101 -0
- data/misc/filter/limitdays.rb +40 -0
- data/misc/filter/linkcheck.rb +81 -0
- data/misc/filter/plugin/antispamservice.rb +82 -0
- data/misc/filter/plugin/en/antispamservice.rb +21 -0
- data/misc/filter/plugin/ja/antispamservice.rb +20 -0
- data/misc/lib/README +4 -0
- data/misc/lib/compatible.rb +1 -0
- data/misc/lib/fcgi_patch.rb +90 -0
- data/misc/migrate.rb +157 -0
- data/misc/paas/cloudfoundry/Gemfile +26 -0
- data/misc/paas/cloudfoundry/Gemfile.lock +85 -0
- data/misc/paas/heroku/Gemfile +22 -0
- data/misc/paas/heroku/Gemfile.lock +85 -0
- data/misc/paas/sqale/Gemfile +19 -0
- data/misc/paas/sqale/Gemfile.lock +85 -0
- data/misc/paas/sqale/Procfile +1 -0
- data/misc/paas/sqale/dot.env +1 -0
- data/misc/plugin/ChangeLog.DO_NOT_UPDATE +2333 -0
- data/misc/plugin/a.rb +211 -0
- data/misc/plugin/amazon.rb +403 -0
- data/misc/plugin/amazon/README.en +17 -0
- data/misc/plugin/amazon/README.ja +29 -0
- data/misc/plugin/amazon/amazonimg.rb +113 -0
- data/misc/plugin/amazon/large.png +0 -0
- data/misc/plugin/amazon/medium.png +0 -0
- data/misc/plugin/amazon/small.png +0 -0
- data/misc/plugin/append-css.rb +51 -0
- data/misc/plugin/bq.rb +48 -0
- data/misc/plugin/calendar2.rb +184 -0
- data/misc/plugin/calendar3.rb +256 -0
- data/misc/plugin/category.rb +779 -0
- data/misc/plugin/category_autocomplete.rb +33 -0
- data/misc/plugin/comment_ajax.rb +11 -0
- data/misc/plugin/comment_mail-qmail.rb +57 -0
- data/misc/plugin/comment_mail-sendmail.rb +56 -0
- data/misc/plugin/comment_mail-smtp.rb +59 -0
- data/misc/plugin/comment_rank.rb +36 -0
- data/misc/plugin/counter.rb +631 -0
- data/misc/plugin/daily_theme.rb +55 -0
- data/misc/plugin/disp_referrer.rb +1486 -0
- data/misc/plugin/doctype-html401tr.rb +16 -0
- data/misc/plugin/draft.rb +20 -0
- data/misc/plugin/dropdown_calendar.rb +32 -0
- data/misc/plugin/edit_today.rb +50 -0
- data/misc/plugin/en/a.rb +10 -0
- data/misc/plugin/en/amazon.rb +71 -0
- data/misc/plugin/en/append-css.rb +17 -0
- data/misc/plugin/en/bq.rb +12 -0
- data/misc/plugin/en/calendar2.rb +12 -0
- data/misc/plugin/en/category.rb +204 -0
- data/misc/plugin/en/counter.rb +48 -0
- data/misc/plugin/en/daily_theme.rb +14 -0
- data/misc/plugin/en/disp_referrer.rb +387 -0
- data/misc/plugin/en/dropdown_calendar.rb +14 -0
- data/misc/plugin/en/edit_today.rb +22 -0
- data/misc/plugin/en/hide-mail-field.rb +19 -0
- data/misc/plugin/en/highlight.rb +29 -0
- data/misc/plugin/en/image.rb +54 -0
- data/misc/plugin/en/kw.rb +22 -0
- data/misc/plugin/en/makerss.rb +47 -0
- data/misc/plugin/en/pb-show.rb +21 -0
- data/misc/plugin/en/ping.rb +16 -0
- data/misc/plugin/en/recent_comment.rb +44 -0
- data/misc/plugin/en/recent_comment3.rb +56 -0
- data/misc/plugin/en/recent_rss.rb +33 -0
- data/misc/plugin/en/referer_scheme.rb +48 -0
- data/misc/plugin/en/search_control.rb +74 -0
- data/misc/plugin/en/search_form.rb +22 -0
- data/misc/plugin/en/speed_comment.rb +19 -0
- data/misc/plugin/en/tb-show.rb +37 -0
- data/misc/plugin/en/todo.rb +43 -0
- data/misc/plugin/en/weather.rb +185 -0
- data/misc/plugin/en/xmlrpc.rb +14 -0
- data/misc/plugin/footnote.rb +92 -0
- data/misc/plugin/gradation.rb +39 -0
- data/misc/plugin/gradient.rb +36 -0
- data/misc/plugin/hide-mail-field.rb +50 -0
- data/misc/plugin/highlight.rb +22 -0
- data/misc/plugin/html_anchor.rb +34 -0
- data/misc/plugin/image.rb +290 -0
- data/misc/plugin/ja/amazon.rb +89 -0
- data/misc/plugin/ja/bq.rb +13 -0
- data/misc/plugin/ja/calendar2.rb +12 -0
- data/misc/plugin/ja/category.rb +212 -0
- data/misc/plugin/ja/daily_theme.rb +15 -0
- data/misc/plugin/ja/disp_referrer.rb +644 -0
- data/misc/plugin/ja/edit_today.rb +23 -0
- data/misc/plugin/ja/hide-mail-field.rb +20 -0
- data/misc/plugin/ja/highlight.rb +30 -0
- data/misc/plugin/ja/makerss.rb +44 -0
- data/misc/plugin/ja/my-sequel.rb +52 -0
- data/misc/plugin/ja/pb-show.rb +23 -0
- data/misc/plugin/ja/ping.rb +17 -0
- data/misc/plugin/ja/recent_comment.rb +45 -0
- data/misc/plugin/ja/recent_comment3.rb +57 -0
- data/misc/plugin/ja/recent_rss.rb +34 -0
- data/misc/plugin/ja/referer_scheme.rb +86 -0
- data/misc/plugin/ja/search_control.rb +75 -0
- data/misc/plugin/ja/search_form.rb +32 -0
- data/misc/plugin/ja/tb-show.rb +38 -0
- data/misc/plugin/ja/todo.rb +46 -0
- data/misc/plugin/ja/weather.rb +402 -0
- data/misc/plugin/ja/xmlrpc.rb +15 -0
- data/misc/plugin/kw.rb +150 -0
- data/misc/plugin/list.rb +40 -0
- data/misc/plugin/makelirs.rb +89 -0
- data/misc/plugin/makerss.rb +744 -0
- data/misc/plugin/my-ex.rb +68 -0
- data/misc/plugin/my-sequel.rb +539 -0
- data/misc/plugin/navi_user.rb +19 -0
- data/misc/plugin/number_anchor.rb +47 -0
- data/misc/plugin/pb-show.rb +165 -0
- data/misc/plugin/ping.rb +99 -0
- data/misc/plugin/pre_wrap.rb +19 -0
- data/misc/plugin/random_google.rb +165 -0
- data/misc/plugin/recent_comment.rb +82 -0
- data/misc/plugin/recent_comment3.rb +192 -0
- data/misc/plugin/recent_list.rb +91 -0
- data/misc/plugin/recent_namazu.rb +50 -0
- data/misc/plugin/recent_rss.rb +305 -0
- data/misc/plugin/referer-antibot.rb +53 -0
- data/misc/plugin/referer-utf8.rb +12 -0
- data/misc/plugin/referer_scheme.rb +87 -0
- data/misc/plugin/search_control.rb +227 -0
- data/misc/plugin/search_form.rb +53 -0
- data/misc/plugin/sn.rb +107 -0
- data/misc/plugin/speed_comment.rb +68 -0
- data/misc/plugin/squeeze.rb +272 -0
- data/misc/plugin/src.rb +30 -0
- data/misc/plugin/tb-show.rb +212 -0
- data/misc/plugin/title_list.rb +41 -0
- data/misc/plugin/title_tag.rb +80 -0
- data/misc/plugin/tlink.rb +163 -0
- data/misc/plugin/todo.rb +182 -0
- data/misc/plugin/weather.rb +505 -0
- data/misc/plugin/whatsnew.rb +100 -0
- data/misc/plugin/xmlrpc.rb +80 -0
- data/misc/plugin/xmlrpc/README +20 -0
- data/misc/plugin/xmlrpc/xmlrpc.rb +575 -0
- data/misc/style/emptdiary/README.rd +83 -0
- data/misc/style/emptdiary/README.rd.en +78 -0
- data/misc/style/emptdiary/emptdiary_style.rb +199 -0
- data/misc/style/etdiary/README.rd +83 -0
- data/misc/style/etdiary/etdiary_style.rb +446 -0
- data/misc/style/gfm/gfm_style.rb +194 -0
- data/misc/style/rd/README.rd +71 -0
- data/misc/style/rd/rd_style.rb +366 -0
- data/misc/style/wiki/README +116 -0
- data/misc/style/wiki/README.en +101 -0
- data/misc/style/wiki/wiki_parser.rb +273 -0
- data/misc/style/wiki/wiki_style.rb +478 -0
- data/misc/theme_convert/Readme.rd +21 -0
- data/misc/theme_convert/append.rcss +150 -0
- data/misc/theme_convert/theme_convert.rb +453 -0
- data/plugin/00default.rb +1015 -0
- data/plugin/05referer.rb +298 -0
- data/plugin/10spamfilter.rb +183 -0
- data/plugin/50sp.rb +146 -0
- data/plugin/60sf.rb +152 -0
- data/plugin/90migrate.rb +109 -0
- data/plugin/en/00default.rb +390 -0
- data/plugin/en/05referer.rb +49 -0
- data/plugin/en/10spamfilter.rb +81 -0
- data/plugin/en/50sp.rb +56 -0
- data/plugin/en/60sf.rb +60 -0
- data/plugin/ja/00default.rb +401 -0
- data/plugin/ja/05referer.rb +47 -0
- data/plugin/ja/10spamfilter.rb +79 -0
- data/plugin/ja/50sp.rb +66 -0
- data/plugin/ja/60sf.rb +73 -0
- data/public/.gitkeep +0 -0
- data/public/images/.gitkeep +0 -0
- data/public/javascripts/.gitkeep +0 -0
- data/public/stylesheets/.gitkeep +0 -0
- data/skel/category.rhtml +9 -0
- data/skel/conf.rhtml +23 -0
- data/skel/day.rhtml +33 -0
- data/skel/diary.rhtml +83 -0
- data/skel/footer.rhtml +8 -0
- data/skel/header.rhtml +10 -0
- data/skel/i.category.rhtml +6 -0
- data/skel/i.conf.rhtml +14 -0
- data/skel/i.day.rhtml +28 -0
- data/skel/i.diary.rhtml +17 -0
- data/skel/i.footer.rhtml +2 -0
- data/skel/i.header.rhtml +3 -0
- data/skel/i.latest.rhtml +24 -0
- data/skel/i.month.rhtml +39 -0
- data/skel/i.search.rhtml +5 -0
- data/skel/i.update.rhtml +40 -0
- data/skel/i.update.rhtml.en +40 -0
- data/skel/latest.rhtml +27 -0
- data/skel/mail.rtxt +18 -0
- data/skel/mail.rtxt.en +18 -0
- data/skel/month.rhtml +27 -0
- data/skel/plugin_error.rhtml +27 -0
- data/skel/preview.rhtml +85 -0
- data/skel/preview.rhtml.en +72 -0
- data/skel/referer.rhtml +24 -0
- data/skel/search.rhtml +14 -0
- data/skel/tdiary.rconf +76 -0
- data/skel/update.rhtml +103 -0
- data/skel/update.rhtml.en +83 -0
- data/spec/acceptance/append_comment_spec.rb +94 -0
- data/spec/acceptance/append_diary_spec.rb +98 -0
- data/spec/acceptance/bugfix/encoding_error_spec.rb +27 -0
- data/spec/acceptance/save_conf_comment_spec.rb +87 -0
- data/spec/acceptance/save_conf_default_spec.rb +169 -0
- data/spec/acceptance/save_conf_dnsbl_spec.rb +152 -0
- data/spec/acceptance/save_conf_filter_spec.rb +50 -0
- data/spec/acceptance/save_conf_plugin_spec.rb +69 -0
- data/spec/acceptance/save_conf_referer_spec.rb +60 -0
- data/spec/acceptance/save_conf_security_spec.rb +280 -0
- data/spec/acceptance/support/helpers.rb +49 -0
- data/spec/acceptance/support/paths.rb +7 -0
- data/spec/acceptance/update_diary_spec.rb +113 -0
- data/spec/acceptance/view_category_spec.rb +38 -0
- data/spec/acceptance/view_comment_spec.rb +67 -0
- data/spec/acceptance/view_diary_spec.rb +126 -0
- data/spec/acceptance/view_referer_spec.rb +31 -0
- data/spec/acceptance_helper.rb +101 -0
- data/spec/core/compatible_spec.rb +54 -0
- data/spec/core/core_ext_spec.rb +59 -0
- data/spec/core/plugin_spec.rb +389 -0
- data/spec/core/rack/assets/precompile_spec.rb +76 -0
- data/spec/core/rack/html_anchor_spec.rb +57 -0
- data/spec/core/rack/valid_request_path_spec.rb +67 -0
- data/spec/core/style/emptdiary_style_spec.rb +165 -0
- data/spec/core/style/etdiary_style_spec.rb +512 -0
- data/spec/core/style/gfm_style_spec.rb +334 -0
- data/spec/core/style/rd_style_spec.rb +202 -0
- data/spec/core/style/tdiary_style_spec.rb +240 -0
- data/spec/core/style/wiki_style_spec.rb +441 -0
- data/spec/fixtures/ascii8bit-pstore.db +0 -0
- data/spec/fixtures/invalid-sequence-volatile.tdr +9 -0
- data/spec/fixtures/just_installed.conf +1 -0
- data/spec/fixtures/plugin/ja/sample.rb +4 -0
- data/spec/fixtures/plugin/sample.rb +6 -0
- data/spec/fixtures/sample.rb +12 -0
- data/spec/fixtures/tdiary.conf.gem +212 -0
- data/spec/fixtures/tdiary.conf.rack +212 -0
- data/spec/fixtures/tdiary.conf.rdb +227 -0
- data/spec/fixtures/tdiary.conf.secure +204 -0
- data/spec/fixtures/tdiary.conf.webrick +212 -0
- data/spec/javascripts/00default_spec.js +35 -0
- data/spec/javascripts/fixtures/00default.html +1 -0
- data/spec/javascripts/support/jasmine.yml +76 -0
- data/spec/plugin/bq_spec.rb +24 -0
- data/spec/plugin/plugin_helper.rb +203 -0
- data/spec/spec_helper.rb +32 -0
- data/tdiary.conf.beginner +244 -0
- data/tdiary.conf.sample +345 -0
- data/tdiary.conf.sample-en +333 -0
- data/tdiary.gemspec +26 -0
- data/tdiary.rb +151 -0
- data/tdiary/admin.rb +236 -0
- data/tdiary/application.rb +57 -0
- data/tdiary/author_only_base.rb +171 -0
- data/tdiary/base.rb +220 -0
- data/tdiary/cli.rb +116 -0
- data/tdiary/comment.rb +40 -0
- data/tdiary/comment_manager.rb +94 -0
- data/tdiary/compatible.rb +72 -0
- data/tdiary/config.rb +270 -0
- data/tdiary/core_ext.rb +122 -0
- data/tdiary/deploy.rb +50 -0
- data/tdiary/dispatcher.rb +77 -0
- data/tdiary/dispatcher/index_main.rb +122 -0
- data/tdiary/dispatcher/update_main.rb +101 -0
- data/tdiary/environment.rb +15 -0
- data/tdiary/filter.rb +48 -0
- data/tdiary/filter/default.rb +54 -0
- data/tdiary/filter/spam.rb +304 -0
- data/tdiary/io/base.rb +70 -0
- data/tdiary/io/cache/file.rb +123 -0
- data/tdiary/io/cache/memcached.rb +88 -0
- data/tdiary/io/cache/redis.rb +100 -0
- data/tdiary/io/default.rb +297 -0
- data/tdiary/io/pstore.rb +252 -0
- data/tdiary/io/rdb.rb +213 -0
- data/tdiary/lang/en.rb +79 -0
- data/tdiary/lang/ja.rb +72 -0
- data/tdiary/plugin.rb +375 -0
- data/tdiary/rack/assets/precompile.rb +37 -0
- data/tdiary/rack/auth/basic.rb +38 -0
- data/tdiary/rack/auth/omniauth.rb +51 -0
- data/tdiary/rack/html_anchor.rb +31 -0
- data/tdiary/rack/valid_request_path.rb +36 -0
- data/tdiary/referer_manager.rb +80 -0
- data/tdiary/request.rb +217 -0
- data/tdiary/response.rb +29 -0
- data/tdiary/server.rb +85 -0
- data/tdiary/style.rb +194 -0
- data/tdiary/style/tdiary_style.rb +198 -0
- data/tdiary/style/wiki_style.rb +213 -0
- data/tdiary/tasks.rb +1 -0
- data/tdiary/tasks/assets.rake +31 -0
- data/tdiary/tasks/auth.rake +28 -0
- data/tdiary/tasks/db.rake +110 -0
- data/tdiary/tasks/doc.rake +31 -0
- data/tdiary/tasks/heroku.rake +37 -0
- data/tdiary/tasks/jasmine.rake +16 -0
- data/tdiary/tasks/rdoc.rake +24 -0
- data/tdiary/tasks/release.rake +122 -0
- data/tdiary/tasks/rspec.rake +51 -0
- data/tdiary/tasks/server.rake +33 -0
- data/tdiary/tasks/test.rake +17 -0
- data/tdiary/version.rb +3 -0
- data/tdiary/view.rb +468 -0
- data/tdiary/view_helper.rb +15 -0
- data/test/disp_referrer_test.rb +93 -0
- data/test/my-sequel_test.rb +238 -0
- data/test/test_helper.rb +7 -0
- data/test/test_plugin_helper.rb +64 -0
- data/test/test_plugin_helper_test.rb +28 -0
- data/test/weather_test.rb +33 -0
- data/theme/base.css +268 -0
- data/theme/conf.block.png +0 -0
- data/theme/conf.css +254 -0
- data/theme/default/README +11 -0
- data/theme/default/body.png +0 -0
- data/theme/default/default.css +743 -0
- data/theme/help.png +0 -0
- data/theme/loading.gif +0 -0
- data/theme/tdiary1/README +7 -0
- data/theme/tdiary1/tdiary1.css +394 -0
- data/theme/tdiary2/README +19 -0
- data/theme/tdiary2/tdiary2.css +624 -0
- data/update.fcgi +45 -0
- data/update.rb +57 -0
- data/vendor/hikidoc-0.0.6/COPYING +28 -0
- data/vendor/hikidoc-0.0.6/NEWS +30 -0
- data/vendor/hikidoc-0.0.6/NEWS.ja +30 -0
- data/vendor/hikidoc-0.0.6/README +86 -0
- data/vendor/hikidoc-0.0.6/README.ja +83 -0
- data/vendor/hikidoc-0.0.6/Rakefile +68 -0
- data/vendor/hikidoc-0.0.6/TextFormattingRules +320 -0
- data/vendor/hikidoc-0.0.6/TextFormattingRules.ja +318 -0
- data/vendor/hikidoc-0.0.6/bin/hikidoc +66 -0
- data/vendor/hikidoc-0.0.6/lib/hikidoc.rb +914 -0
- data/vendor/hikidoc-0.0.6/setup.rb +1360 -0
- data/vendor/hikidoc-0.0.6/test/run-test.rb +13 -0
- data/vendor/hikidoc-0.0.6/test/test_hikidoc.rb +506 -0
- data/vendor/imagesize-0.1.1/Manifest.txt +19 -0
- data/vendor/imagesize-0.1.1/README.txt +49 -0
- data/vendor/imagesize-0.1.1/lib/image_size.rb +305 -0
- data/vendor/imagesize-0.1.1/lib/image_size/version.rb +9 -0
- data/vendor/imagesize-0.1.1/setup.rb +1585 -0
- data/vendor/imagesize-0.1.1/test/2-4-7.png +0 -0
- data/vendor/imagesize-0.1.1/test/4_1_2.gif +0 -0
- data/vendor/imagesize-0.1.1/test/bmp.bmp +0 -0
- data/vendor/imagesize-0.1.1/test/cursor.xbm +6 -0
- data/vendor/imagesize-0.1.1/test/detect.swf +0 -0
- data/vendor/imagesize-0.1.1/test/pbm.pbm +0 -0
- data/vendor/imagesize-0.1.1/test/pcx.pcx +0 -0
- data/vendor/imagesize-0.1.1/test/pgm.pgm +5 -0
- data/vendor/imagesize-0.1.1/test/test.xpm +38 -0
- data/vendor/imagesize-0.1.1/test/test_helper.rb +2 -0
- data/vendor/imagesize-0.1.1/test/test_image_size.rb +71 -0
- data/vendor/imagesize-0.1.1/test/tiff.tiff +0 -0
- data/vendor/imagesize-0.1.1/test/tokyo_tower.jpg +0 -0
- data/vendor/imagesize-0.1.1/test/tower_e.gif.psd +0 -0
- data/vendor/jasmine-jquery-1.4.2/jasmine-jquery.js +548 -0
- data/vendor/jquery-1.8/jquery.js +9227 -0
- data/vendor/rdtool-0.6.38/COPYING.txt +339 -0
- data/vendor/rdtool-0.6.38/Gemfile +3 -0
- data/vendor/rdtool-0.6.38/HISTORY +318 -0
- data/vendor/rdtool-0.6.38/LGPL-2.1 +502 -0
- data/vendor/rdtool-0.6.38/LICENSE.txt +58 -0
- data/vendor/rdtool-0.6.38/README.html +66 -0
- data/vendor/rdtool-0.6.38/README.ja.html +73 -0
- data/vendor/rdtool-0.6.38/README.rd +76 -0
- data/vendor/rdtool-0.6.38/README.rd.ja +85 -0
- data/vendor/rdtool-0.6.38/Rakefile +152 -0
- data/vendor/rdtool-0.6.38/TODO +22 -0
- data/vendor/rdtool-0.6.38/bin/rd2 +283 -0
- data/vendor/rdtool-0.6.38/bin/rdswap.rb +207 -0
- data/vendor/rdtool-0.6.38/doc/rd-draft.html +456 -0
- data/vendor/rdtool-0.6.38/doc/rd-draft.ja.html +466 -0
- data/vendor/rdtool-0.6.38/doc/rd-draft.rd +479 -0
- data/vendor/rdtool-0.6.38/doc/rd-draft.rd.ja +487 -0
- data/vendor/rdtool-0.6.38/lib/rd/block-element.rb +114 -0
- data/vendor/rdtool-0.6.38/lib/rd/complex-list-item.rb +65 -0
- data/vendor/rdtool-0.6.38/lib/rd/desclist.rb +55 -0
- data/vendor/rdtool-0.6.38/lib/rd/document-struct.rb +46 -0
- data/vendor/rdtool-0.6.38/lib/rd/dot.rd2rc +18 -0
- data/vendor/rdtool-0.6.38/lib/rd/element.rb +160 -0
- data/vendor/rdtool-0.6.38/lib/rd/filter.rb +255 -0
- data/vendor/rdtool-0.6.38/lib/rd/head-filter.rb +14 -0
- data/vendor/rdtool-0.6.38/lib/rd/inline-element.rb +233 -0
- data/vendor/rdtool-0.6.38/lib/rd/labeled-element.rb +14 -0
- data/vendor/rdtool-0.6.38/lib/rd/list.rb +57 -0
- data/vendor/rdtool-0.6.38/lib/rd/loose-struct.rb +11 -0
- data/vendor/rdtool-0.6.38/lib/rd/methodlist.rb +57 -0
- data/vendor/rdtool-0.6.38/lib/rd/output-format-visitor.rb +30 -0
- data/vendor/rdtool-0.6.38/lib/rd/package.rb +4 -0
- data/vendor/rdtool-0.6.38/lib/rd/parser-util.rb +14 -0
- data/vendor/rdtool-0.6.38/lib/rd/post-install +1 -0
- data/vendor/rdtool-0.6.38/lib/rd/pre-setup.rb +18 -0
- data/vendor/rdtool-0.6.38/lib/rd/rbl-file.rb +69 -0
- data/vendor/rdtool-0.6.38/lib/rd/rbl-suite.rb +37 -0
- data/vendor/rdtool-0.6.38/lib/rd/rd-struct.rb +86 -0
- data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-lib.rb +266 -0
- data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-opt.rb +34 -0
- data/vendor/rdtool-0.6.38/lib/rd/rd2html-lib.rb +490 -0
- data/vendor/rdtool-0.6.38/lib/rd/rd2html-opt.rb +67 -0
- data/vendor/rdtool-0.6.38/lib/rd/rd2man-lib.rb +251 -0
- data/vendor/rdtool-0.6.38/lib/rd/rd2rdo-lib.rb +19 -0
- data/vendor/rdtool-0.6.38/lib/rd/rd2rmi-lib.rb +32 -0
- data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.ry +518 -0
- data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.tab.rb +1061 -0
- data/vendor/rdtool-0.6.38/lib/rd/rdfmt.rb +15 -0
- data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.ry +503 -0
- data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.tab.rb +1243 -0
- data/vendor/rdtool-0.6.38/lib/rd/rdvisitor.rb +214 -0
- data/vendor/rdtool-0.6.38/lib/rd/reference-resolver.rb +114 -0
- data/vendor/rdtool-0.6.38/lib/rd/search-file.rb +14 -0
- data/vendor/rdtool-0.6.38/lib/rd/tree.rb +103 -0
- data/vendor/rdtool-0.6.38/lib/rd/version.rb +41 -0
- data/vendor/rdtool-0.6.38/lib/rd/visitor.rb +86 -0
- data/vendor/rdtool-0.6.38/rdtool.gemspec +125 -0
- data/vendor/rdtool-0.6.38/setup.rb +1596 -0
- data/vendor/rdtool-0.6.38/test/data/includee1.html +1 -0
- data/vendor/rdtool-0.6.38/test/data/includee2.html +1 -0
- data/vendor/rdtool-0.6.38/test/data/includee3.nothtml +1 -0
- data/vendor/rdtool-0.6.38/test/data/includee4.xhtml +0 -0
- data/vendor/rdtool-0.6.38/test/data/label.rbl +2 -0
- data/vendor/rdtool-0.6.38/test/data/label2.rbl +2 -0
- data/vendor/rdtool-0.6.38/test/data/sub/includee2.html +1 -0
- data/vendor/rdtool-0.6.38/test/data/sub/includee4.html +0 -0
- data/vendor/rdtool-0.6.38/test/dummy-observer.rb +6 -0
- data/vendor/rdtool-0.6.38/test/dummy.rb +33 -0
- data/vendor/rdtool-0.6.38/test/temp-dir.rb +19 -0
- data/vendor/rdtool-0.6.38/test/test-block-parser.rb +46 -0
- data/vendor/rdtool-0.6.38/test/test-desclist-item.rb +219 -0
- data/vendor/rdtool-0.6.38/test/test-document-element.rb +46 -0
- data/vendor/rdtool-0.6.38/test/test-document-struct.rb +66 -0
- data/vendor/rdtool-0.6.38/test/test-element.rb +46 -0
- data/vendor/rdtool-0.6.38/test/test-headline.rb +80 -0
- data/vendor/rdtool-0.6.38/test/test-inline-parser.rb +46 -0
- data/vendor/rdtool-0.6.38/test/test-list-item.rb +54 -0
- data/vendor/rdtool-0.6.38/test/test-list.rb +53 -0
- data/vendor/rdtool-0.6.38/test/test-methodlist-item.rb +73 -0
- data/vendor/rdtool-0.6.38/test/test-nonterminal-element.rb +170 -0
- data/vendor/rdtool-0.6.38/test/test-nonterminal-inline.rb +33 -0
- data/vendor/rdtool-0.6.38/test/test-output-format-visitor.rb +48 -0
- data/vendor/rdtool-0.6.38/test/test-parser-util.rb +41 -0
- data/vendor/rdtool-0.6.38/test/test-rbl-file.rb +156 -0
- data/vendor/rdtool-0.6.38/test/test-rbl-suite.rb +43 -0
- data/vendor/rdtool-0.6.38/test/test-rd2html-lib.rb +496 -0
- data/vendor/rdtool-0.6.38/test/test-rdtree.rb +17 -0
- data/vendor/rdtool-0.6.38/test/test-rdvisitor.rb +29 -0
- data/vendor/rdtool-0.6.38/test/test-reference-resolver.rb +202 -0
- data/vendor/rdtool-0.6.38/test/test-reference.rb +132 -0
- data/vendor/rdtool-0.6.38/test/test-search-file.rb +22 -0
- data/vendor/rdtool-0.6.38/test/test-terminal-inline.rb +41 -0
- data/vendor/rdtool-0.6.38/test/test-textblock.rb +44 -0
- data/vendor/rdtool-0.6.38/test/test-tree.rb +82 -0
- data/vendor/rdtool-0.6.38/test/test-version.rb +57 -0
- data/vendor/rdtool-0.6.38/test/test-visitor.rb +230 -0
- data/vendor/rdtool-0.6.38/utils/rd-mode.el +464 -0
- metadata +666 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# my-ex.rb
|
3
|
+
#
|
4
|
+
# my(拡張版): myプラグインを拡張し、title属性に参照先の内容を挿入します。
|
5
|
+
# 参照先がセクションの場合は(あれば)サブタイトルを、
|
6
|
+
# ツッコミの場合はツッコんだ人の名前と内容の一部を使います。
|
7
|
+
# パラメタ:
|
8
|
+
# a: 自分の日記内のリンク先情報('YYYYMMDD#pNN' または 'YYYYMMDD#cNN')
|
9
|
+
# URLをそのまま書くこともできます。
|
10
|
+
# str: リンクにする文字列
|
11
|
+
#
|
12
|
+
# Copyright (c) 2002 TADA Tadashi <sho@spc.gr.jp>
|
13
|
+
# Distributed under the GPL
|
14
|
+
|
15
|
+
unless @cgi.mobile_agent?
|
16
|
+
|
17
|
+
def my( a, str, title = nil )
|
18
|
+
date, frag = a.scan( /(\d{4}|\d{6}|\d{8}|\d{8}-\d+)[^\d]*(?:#?([pct]\d+))?$/ )[0]
|
19
|
+
anc = frag ? "#{date}#{frag}" : date
|
20
|
+
place, frag = frag.scan( /([cpt])(\d\d)/ )[0] if frag
|
21
|
+
if date and frag and @diaries[date] then
|
22
|
+
case place
|
23
|
+
when 'p'
|
24
|
+
section = nil
|
25
|
+
idx = 1
|
26
|
+
@diaries[date].each_section do |s|
|
27
|
+
section = s
|
28
|
+
break if idx == frag.to_i
|
29
|
+
idx += 1
|
30
|
+
end
|
31
|
+
if section and section.subtitle then
|
32
|
+
title = h( "#{apply_plugin(section.subtitle_to_html, true)}" )
|
33
|
+
title.sub!( /^(\[([^\]]+)\])+ */, '' )
|
34
|
+
end
|
35
|
+
when 'c'
|
36
|
+
com = nil
|
37
|
+
@diaries[date].each_comment( frag.to_i ) {|c| com = c}
|
38
|
+
if com then
|
39
|
+
title = h( "[#{com.name}] #{com.shorten( @conf.comment_length )}" )
|
40
|
+
end
|
41
|
+
when 't'
|
42
|
+
unless @plugin_files.grep(/tb-show.rb\z/).empty?
|
43
|
+
tb = nil
|
44
|
+
@diaries[date].each_visible_trackback( frag.to_i ) {|t, idx| tb = t}
|
45
|
+
if tb then
|
46
|
+
url, name, tbtitle, excerpt = tb.body.split( /\n/,4 )
|
47
|
+
title = h( "[#{name}] #{@conf.shorten( excerpt, @conf.comment_length )}" )
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
index = /^https?:/ =~ @index ? '' : base_url
|
53
|
+
index += @index.sub(%r|^\./|, '')
|
54
|
+
if title then
|
55
|
+
%Q[<a href="#{h index}#{anchor anc}" title="#{title}">#{str}</a>]
|
56
|
+
else
|
57
|
+
%Q[<a href="#{h index}#{anchor anc}">#{str}</a>]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
# Local Variables:
|
64
|
+
# mode: ruby
|
65
|
+
# indent-tabs-mode: t
|
66
|
+
# tab-width: 3
|
67
|
+
# ruby-indent-level: 3
|
68
|
+
# End:
|
@@ -0,0 +1,539 @@
|
|
1
|
+
#
|
2
|
+
# my-sequel.rb
|
3
|
+
#
|
4
|
+
# show links to follow-up entries
|
5
|
+
#
|
6
|
+
# Copyright 2006 zunda <zunda at freeshell.org> and
|
7
|
+
# NISHIMURA Takashi <nt at be.to>
|
8
|
+
#
|
9
|
+
# Permission is granted for use, copying, modification, distribution,
|
10
|
+
# and distribution of modified versions of this work under the terms
|
11
|
+
# of GPL version 2.
|
12
|
+
#
|
13
|
+
# Language resources can be found in the middle of thie file.
|
14
|
+
# Please search a line with `language resource'
|
15
|
+
#
|
16
|
+
require 'pstore'
|
17
|
+
unless defined?(ERB)
|
18
|
+
require 'erb'
|
19
|
+
end
|
20
|
+
|
21
|
+
class MySequel
|
22
|
+
include ERB::Util
|
23
|
+
extend ERB::Util
|
24
|
+
|
25
|
+
class Conf
|
26
|
+
include ERB::Util
|
27
|
+
Prefix = 'my_sequel.'
|
28
|
+
|
29
|
+
unless @conf then
|
30
|
+
def self::to_native(str)
|
31
|
+
return str
|
32
|
+
end
|
33
|
+
else
|
34
|
+
def self::to_native(str)
|
35
|
+
@conf.to_native(str)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self::handler_escape(string)
|
40
|
+
string.gsub(/\r/n, '').gsub(/&/n, '&').gsub(/"/n, '"').gsub(/>/n, '>').gsub(/</n, '<').gsub(/\n/n, '\n')
|
41
|
+
end
|
42
|
+
|
43
|
+
def self::handler_scriptlet
|
44
|
+
return <<'_END'
|
45
|
+
function unescape(string) {
|
46
|
+
return string.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/&/g, '&');
|
47
|
+
}
|
48
|
+
function uncheck(element) {
|
49
|
+
document.getElementById(element.id+".reset").checked = false;
|
50
|
+
}
|
51
|
+
function restore(element) {
|
52
|
+
var text_id = element.id.replace(/\.reset$/, "")
|
53
|
+
if (element.checked) {
|
54
|
+
document.getElementById(text_id).value = unescape(default_values[text_id]);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
_END
|
58
|
+
end
|
59
|
+
|
60
|
+
def initialize(conf_hash)
|
61
|
+
@default_hash = conf_hash
|
62
|
+
@conf_hash = Hash.new
|
63
|
+
end
|
64
|
+
|
65
|
+
# takes configuration from @options trusting the input
|
66
|
+
def merge_hash(hash)
|
67
|
+
@default_hash.each_key do |key|
|
68
|
+
prefixed = Prefix + key.to_s
|
69
|
+
@conf_hash[key] = hash[prefixed] if hash.has_key?(prefixed)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# takes configuration from @cgi.params
|
74
|
+
def merge_params(params)
|
75
|
+
@default_hash.each_key do |key|
|
76
|
+
keystr = key.to_s
|
77
|
+
if params[keystr+'.reset'] and params[keystr+'.reset'][0] then
|
78
|
+
@conf_hash.delete(key)
|
79
|
+
elsif params[keystr] then
|
80
|
+
@conf_hash[key] = params[keystr][0]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# returns current configuration
|
86
|
+
def [](key)
|
87
|
+
if @conf_hash.has_key?(key) then
|
88
|
+
return @conf_hash[key]
|
89
|
+
else
|
90
|
+
return @default_hash[key][:default]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# returns hash of configured values
|
95
|
+
def to_conf_hash(target_hash)
|
96
|
+
@default_hash.each_key do |key|
|
97
|
+
target_hash.delete(Prefix + key.to_s)
|
98
|
+
end
|
99
|
+
@conf_hash.each_pair do |key, value|
|
100
|
+
target_hash[Prefix + key.to_s] = value
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# returns an HTML sniplet for configuration interface
|
105
|
+
def html(restore_default_label, mobile = false)
|
106
|
+
return @default_hash.keys.sort_by{|k| @default_hash[k][:index]}.map{|k|
|
107
|
+
idattr = mobile ? '' : %Q| id="#{h k.to_s}"|
|
108
|
+
idattr_reset = mobile ? '' : %Q| id="#{h k.to_s}.reset"|
|
109
|
+
uncheck = mobile ? '' : ' onfocus="uncheck(this)"'
|
110
|
+
restore = mobile ? '' : ' onchange="restore(this)" onclick="restore(this)"'
|
111
|
+
r = %Q|\t<h3 class="subtitle">#{h @default_hash[k][:title]}</h3>\n|
|
112
|
+
description = @default_hash[k][:description]
|
113
|
+
r += %Q|\t<p>#{h description}</p>\n| if description and not mobile
|
114
|
+
unless @default_hash[k][:textarea]
|
115
|
+
r += %Q|\t<p><input name="#{h k.to_s}"#{idattr} type="text" value="#{h(Conf.to_native(self[k]))}"#{uncheck}>|
|
116
|
+
else
|
117
|
+
cols = 70
|
118
|
+
rows = 10
|
119
|
+
if @default_hash[k][:textarea].respond_to?(:[]) then
|
120
|
+
cols = @default_hash[k][:textarea][:cols] || cols
|
121
|
+
rows = @default_hash[k][:textarea][:rows] || rows
|
122
|
+
end
|
123
|
+
r += %Q|\t<p><textarea name="#{h k.to_s}"#{idattr} cols="#{h cols}" rows="#{h rows}"#{uncheck}>#{h(Conf.to_native(self[k]))}</textarea>|
|
124
|
+
end
|
125
|
+
name = "#{h k.to_s}.reset"
|
126
|
+
r += %Q| - <label for="#{name}"><input id="#{name}" name="#{name}"#{idattr_reset} type="checkbox" value="t"#{restore}>#{restore_default_label}</label></p>\n|
|
127
|
+
r
|
128
|
+
}.join
|
129
|
+
end
|
130
|
+
|
131
|
+
# Javascript hash literal for default values
|
132
|
+
def default_js_hash
|
133
|
+
r = "default_values = {\n"
|
134
|
+
r += @default_hash.keys.sort_by{|k| @default_hash[k][:index]}.map{|k|
|
135
|
+
%Q|\t"#{h k}": "#{Conf::handler_escape(@default_hash[k][:default])}"|
|
136
|
+
}.join(",\n")
|
137
|
+
r += "\n};\n"
|
138
|
+
return r
|
139
|
+
end
|
140
|
+
|
141
|
+
def handler_block
|
142
|
+
return <<"_END"
|
143
|
+
<script type="text/javascript"><!--
|
144
|
+
#{default_js_hash}#{Conf::handler_scriptlet}// --></script>
|
145
|
+
_END
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# CSS sniplet for sequels
|
150
|
+
def self::css(inner_css)
|
151
|
+
unless inner_css.strip.empty?
|
152
|
+
return <<"_END"
|
153
|
+
\t<style type="text/css" media="all"><!--
|
154
|
+
\tdiv.sequel {
|
155
|
+
#{h(inner_css.gsub(/^\s*/, "\t\t").gsub(/\r?\n/, "\n"))}\t}
|
156
|
+
\t--></style>
|
157
|
+
_END
|
158
|
+
else
|
159
|
+
return ''
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# cache directory for this plguin
|
164
|
+
def self::cache_dir(cache_path)
|
165
|
+
return File.join(cache_path, 'my_sequel')
|
166
|
+
end
|
167
|
+
|
168
|
+
# cache file for a month: #{yyyy}/#{yyyymm}.#{src or dst}.dat
|
169
|
+
def self::cache_file(cache_path, anchor, direction)
|
170
|
+
return File.join(MySequel.cache_dir(cache_path), MySequel.year(anchor), "#{MySequel.month(anchor)}.#{direction}.dat")
|
171
|
+
end
|
172
|
+
|
173
|
+
# unique for each month
|
174
|
+
def self::cache_key(anchor)
|
175
|
+
return MySequel.month(anchor)
|
176
|
+
end
|
177
|
+
|
178
|
+
# for each cache key for dates
|
179
|
+
def self::each_cache_key(dates)
|
180
|
+
dates = dates.is_a?(String) ? [dates] : dates
|
181
|
+
dates.map{|ymd| MySequel.cache_key(ymd)}.uniq.each do |cache_file|
|
182
|
+
yield(cache_file)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# yyyy
|
187
|
+
def self::year(anchor)
|
188
|
+
return anchor.scan(/\d{4,4}/)[0]
|
189
|
+
end
|
190
|
+
|
191
|
+
# yyyymm
|
192
|
+
def self::month(anchor)
|
193
|
+
return anchor.scan(/\d{6,6}/)[0]
|
194
|
+
end
|
195
|
+
|
196
|
+
# yyyymmdd
|
197
|
+
def self::date(anchor)
|
198
|
+
if anchor.respond_to?(:localtime)
|
199
|
+
return anchor.localtime.strftime("%Y%m%d")
|
200
|
+
else
|
201
|
+
return anchor.scan(/\d{8,8}/)[0]
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
# add an entry to Array value of hash, making new Array if needed
|
206
|
+
def self::push_to_hash(hash, key, element)
|
207
|
+
unless hash.has_key?(key)
|
208
|
+
hash[key] = Array.new
|
209
|
+
begin
|
210
|
+
hash[key].taint
|
211
|
+
rescue SecurityError
|
212
|
+
end
|
213
|
+
end
|
214
|
+
hash[key] << element
|
215
|
+
hash
|
216
|
+
end
|
217
|
+
|
218
|
+
def initialize(cache_path)
|
219
|
+
@link_srcs = Hash.new.taint # key:dst anchor value:Array of src anchors
|
220
|
+
@current_dsts = Hash.new.taint # key:src anchor value:Array of dst anchors
|
221
|
+
@cached_dsts = Hash.new.taint # for restore_dsts and clean_srcs
|
222
|
+
@vanished_dsts = Hash.new.taint # key:src date value:Array of dst anchors
|
223
|
+
@cache_path = cache_path
|
224
|
+
end
|
225
|
+
|
226
|
+
def restore(dates)
|
227
|
+
restore_srcs(dates)
|
228
|
+
restore_dsts(dates)
|
229
|
+
end
|
230
|
+
|
231
|
+
# HTML sniplet for sequels
|
232
|
+
def html(dst_anchor, date_format, label)
|
233
|
+
anchors = srcs(dst_anchor)
|
234
|
+
if anchors and not anchors.empty? then
|
235
|
+
r = %Q|<div class="sequel">#{h label}|
|
236
|
+
r += anchors.map{|src_anchor|
|
237
|
+
yield(src_anchor, Time.local(*(src_anchor.scan(/(\d{4,4})(\d\d)(\d\d)/)[0])).strftime(date_format))
|
238
|
+
}.join(', ')
|
239
|
+
r += "</div>\n"
|
240
|
+
return r
|
241
|
+
else
|
242
|
+
return ''
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
# Array of source anchors for a destination anchor, nil if none
|
247
|
+
def srcs(dst_anchor)
|
248
|
+
a = @link_srcs[dst_anchor]
|
249
|
+
return nil if not a or a.empty?
|
250
|
+
return a.uniq.sort
|
251
|
+
end
|
252
|
+
|
253
|
+
# starts a day - get ready to scan the diary for the section
|
254
|
+
def clean_dsts(date)
|
255
|
+
datestr = MySequel.date(date)
|
256
|
+
@current_dsts.keys.each do |src_anchor|
|
257
|
+
next unless MySequel.date(src_anchor) == datestr
|
258
|
+
@current_dsts[src_anchor] = Array.new
|
259
|
+
begin
|
260
|
+
@current_dsts[src_anchor].taint
|
261
|
+
rescue SecurityError
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
# adds a link
|
267
|
+
def add(src_anchor, dst_anchor)
|
268
|
+
MySequel.push_to_hash(@link_srcs, dst_anchor, src_anchor)
|
269
|
+
MySequel.push_to_hash(@current_dsts, src_anchor, dst_anchor)
|
270
|
+
end
|
271
|
+
|
272
|
+
# detect vanished links
|
273
|
+
def clean_srcs
|
274
|
+
(@cached_dsts.keys + @current_dsts.keys).uniq.each do |src_anchor|
|
275
|
+
if @cached_dsts[src_anchor] then
|
276
|
+
if @current_dsts[src_anchor] then
|
277
|
+
@vanished_dsts[src_anchor] = @cached_dsts[src_anchor] - @current_dsts[src_anchor]
|
278
|
+
else
|
279
|
+
@vanished_dsts[src_anchor] = @cached_dsts[src_anchor]
|
280
|
+
end
|
281
|
+
end
|
282
|
+
@cached_dsts[src_anchor] = @current_dsts[src_anchor].dup
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
# restores cached data for a month
|
287
|
+
# calls the block for each root giving key and value
|
288
|
+
def each_cached(anchor, direction)
|
289
|
+
path = MySequel.cache_file(@cache_path, anchor, direction)
|
290
|
+
begin
|
291
|
+
PStore.new(path).transaction(true) do |db|
|
292
|
+
db.roots.each do |cached_anchor|
|
293
|
+
yield(cached_anchor, db[cached_anchor])
|
294
|
+
end
|
295
|
+
end
|
296
|
+
rescue TypeError # corrupted PStore data
|
297
|
+
File.unlink(path)
|
298
|
+
rescue PStore::Error # corrupted PStore data
|
299
|
+
begin
|
300
|
+
File.unlink(path)
|
301
|
+
rescue Errno::ENOENT
|
302
|
+
end
|
303
|
+
rescue Errno::ENOENT # no cache yet
|
304
|
+
end
|
305
|
+
end
|
306
|
+
private :each_cached
|
307
|
+
|
308
|
+
# restores cached sources for a month
|
309
|
+
def restore_srcs(dates)
|
310
|
+
@srcs_loaded ||= Hash.new
|
311
|
+
MySequel.each_cache_key(dates) do |cache_key|
|
312
|
+
unless @srcs_loaded[cache_key] then
|
313
|
+
each_cached(cache_key, 'src') do |anchor, array|
|
314
|
+
unless @link_srcs.has_key?(anchor)
|
315
|
+
@link_srcs[anchor] = array.taint
|
316
|
+
else
|
317
|
+
@link_srcs[anchor] += array.taint
|
318
|
+
end
|
319
|
+
end
|
320
|
+
@srcs_loaded[cache_key] = true
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
# restores cached destinations
|
326
|
+
def restore_dsts(dates)
|
327
|
+
@dsts_loaded ||= Hash.new
|
328
|
+
MySequel.each_cache_key(dates) do |cache_key|
|
329
|
+
unless @dsts_loaded[cache_key] then
|
330
|
+
each_cached(cache_key, 'dst') do |anchor, array|
|
331
|
+
array.taint
|
332
|
+
@cached_dsts[anchor] = array
|
333
|
+
@current_dsts[anchor] = array.dup
|
334
|
+
end
|
335
|
+
@dsts_loaded[cache_key] = true
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
# hash for storing cache
|
341
|
+
# key: path to cache
|
342
|
+
# value: Hash
|
343
|
+
# key: anchor
|
344
|
+
# value: compacted and uniqed Array of anchor on the other side of link
|
345
|
+
def hash_for_cache(link_hash, direction)
|
346
|
+
r = Hash.new
|
347
|
+
link_hash.each_pair do |pivot_anchor, anchor_array|
|
348
|
+
c = anchor_array.compact.uniq
|
349
|
+
path = MySequel.cache_file(@cache_path, pivot_anchor, direction)
|
350
|
+
r[path] ||= Hash.new
|
351
|
+
r[path][pivot_anchor] = c
|
352
|
+
end
|
353
|
+
return r
|
354
|
+
end
|
355
|
+
private :hash_for_cache
|
356
|
+
|
357
|
+
# stores the data
|
358
|
+
def store(cache_hash)
|
359
|
+
cache_hash.each_pair do |path, h|
|
360
|
+
d = File.dirname(path)
|
361
|
+
Dir.mkdir(d) unless File.exist?(d)
|
362
|
+
PStore.new(path).transaction do |db|
|
363
|
+
h.each_pair do |k, v|
|
364
|
+
unless v.empty? then
|
365
|
+
db[k] = v
|
366
|
+
else
|
367
|
+
db.delete(k)
|
368
|
+
end
|
369
|
+
end
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
private :store
|
374
|
+
|
375
|
+
# commits on-memory results to files
|
376
|
+
def commit
|
377
|
+
d = MySequel.cache_dir(@cache_path)
|
378
|
+
Dir.mkdir(d) unless File.exist?(d)
|
379
|
+
|
380
|
+
restore_srcs(@link_srcs.keys)
|
381
|
+
|
382
|
+
restore_srcs(@vanished_dsts.values.flatten)
|
383
|
+
@vanished_dsts.each_pair do |src_anchor, dst_anchors|
|
384
|
+
dst_anchors.uniq.each do |dst_anchor|
|
385
|
+
@link_srcs[dst_anchor].reject!{|anchor| anchor == src_anchor}
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
store(hash_for_cache(@link_srcs, 'src'))
|
390
|
+
store(hash_for_cache(@current_dsts, 'dst'))
|
391
|
+
@vanished_dsts = Hash.new.taint
|
392
|
+
end
|
393
|
+
|
394
|
+
end
|
395
|
+
|
396
|
+
# register this plguin to tDiary
|
397
|
+
unless defined?(Test::Unit)
|
398
|
+
# language resource and configuration
|
399
|
+
@my_sequel_plugin_name ||= 'Link to follow ups'
|
400
|
+
@my_sequel_description ||= <<_END
|
401
|
+
<p>Shows links to follow-up entries,
|
402
|
+
which have `my' link to the entry in the past.</p>
|
403
|
+
<p>Do not forget to push the OK button to store the changes.</p>
|
404
|
+
_END
|
405
|
+
@my_sequel_label_conf ||= 'Link label'
|
406
|
+
@my_sequel_label ||= 'Follow up: '
|
407
|
+
@my_sequel_restore_default_label ||= 'Restore default'
|
408
|
+
@my_sequel_default_hash ||= {
|
409
|
+
:label => {
|
410
|
+
:title => 'Link label',
|
411
|
+
:default => 'Follow up: ',
|
412
|
+
:description => 'Prefix for links to the follow-ups',
|
413
|
+
:index => 1,
|
414
|
+
},
|
415
|
+
:date_format => {
|
416
|
+
:title => 'Link format',
|
417
|
+
:default => @date_format,
|
418
|
+
:description => 'Time format of links to the follow-ups. Sequences of % and a charactor are converted as follows: "%Y" to year, "%m" to month in number, "%b" to short name of month, "%B" to full name of month, "%d" to day of month, "%a" to short name of day of week, and "%A" to full name of day of week, for the follow-up.',
|
419
|
+
:index => 2,
|
420
|
+
},
|
421
|
+
:inner_css => {
|
422
|
+
:title => 'CSS',
|
423
|
+
:default => <<'_END',
|
424
|
+
font-size: 75%;
|
425
|
+
text-align: right;
|
426
|
+
margin: 0px;
|
427
|
+
_END
|
428
|
+
:description => 'CSS for the links. The followoing is applied to <code>div.sequel</code>.',
|
429
|
+
:index => 3,
|
430
|
+
:textarea => {:rows => 5},
|
431
|
+
},
|
432
|
+
}
|
433
|
+
|
434
|
+
@my_sequel_conf = MySequel::Conf.new(@my_sequel_default_hash)
|
435
|
+
@my_sequel_conf.merge_hash(@options)
|
436
|
+
|
437
|
+
# configuration interface
|
438
|
+
add_conf_proc( 'my-sequel', @my_sequel_plugin_name ) do
|
439
|
+
if @mode == 'saveconf' then
|
440
|
+
@my_sequel_conf.merge_params(@cgi.params)
|
441
|
+
@my_sequel_conf.to_conf_hash(@conf)
|
442
|
+
end
|
443
|
+
<<"_HTML"
|
444
|
+
#{@my_sequel_conf.handler_block}
|
445
|
+
<h3>#{@my_sequel_plugin_name}</h3>
|
446
|
+
#{@my_sequel_description}
|
447
|
+
#{@my_sequel_conf.html(@my_sequel_restore_default_label, @cgi.mobile_agent?).chomp}
|
448
|
+
_HTML
|
449
|
+
end
|
450
|
+
|
451
|
+
@my_sequel = MySequel.new(@cache_path)
|
452
|
+
@my_sequel_active = false
|
453
|
+
|
454
|
+
# activate this plugin if header procs are called
|
455
|
+
# - This avoids being called from makerss.rb
|
456
|
+
add_header_proc do
|
457
|
+
if not bot? and not @cgi.mobile_agent? then
|
458
|
+
@my_sequel_active = true
|
459
|
+
@my_sequel.restore(@diaries.keys)
|
460
|
+
MySequel.css(@my_sequel_conf[:inner_css])
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
464
|
+
# preparation for a day
|
465
|
+
add_body_enter_proc do |date|
|
466
|
+
if @my_sequel_active then
|
467
|
+
if date then
|
468
|
+
@my_sequel_date = MySequel.date(date)
|
469
|
+
@my_sequel.clean_dsts(@my_sequel_date)
|
470
|
+
else
|
471
|
+
@my_sequel_date = nil
|
472
|
+
end
|
473
|
+
end
|
474
|
+
''
|
475
|
+
end
|
476
|
+
|
477
|
+
# preparation for a section
|
478
|
+
add_section_enter_proc do |date, index|
|
479
|
+
if @my_sequel_active and @my_sequel_date then
|
480
|
+
@my_sequel_anchor = "#{@my_sequel_date}#p#{'%02d' % index}"
|
481
|
+
end
|
482
|
+
''
|
483
|
+
end
|
484
|
+
|
485
|
+
# plugin function to be called from within sections
|
486
|
+
alias :my_sequel_orig_my :my unless defined?(my_sequel_orig_my)
|
487
|
+
def my(*args)
|
488
|
+
if @my_sequel_active and @my_sequel_date and @my_sequel_anchor and @mode != 'preview' then
|
489
|
+
dst_date, frag = args[0].scan(/(\d{8,8})(?:[^\d]*)(?:#?p(\d+))?$/)[0]
|
490
|
+
if dst_date and dst_date < @my_sequel_date then
|
491
|
+
dst_anchor = "#{dst_date}#{frag ? "#p%02d" % frag.to_i : ''}"
|
492
|
+
@my_sequel.add(@my_sequel_anchor, dst_anchor)
|
493
|
+
end
|
494
|
+
end
|
495
|
+
my_sequel_orig_my(*args)
|
496
|
+
end
|
497
|
+
|
498
|
+
# show sequels when leaving a section
|
499
|
+
add_section_leave_proc do
|
500
|
+
r = ''
|
501
|
+
if @my_sequel_active and @my_sequel_date and @my_sequel_anchor and not bot? and not @cgi.mobile_agent? then
|
502
|
+
r = @my_sequel.html(@my_sequel_anchor, @my_sequel_conf[:date_format], @my_sequel_conf[:label]){|src_anchor, anchor_str|
|
503
|
+
my_sequel_orig_my(src_anchor, anchor_str)
|
504
|
+
}
|
505
|
+
end
|
506
|
+
@my_sequel_anchor = nil
|
507
|
+
r
|
508
|
+
end
|
509
|
+
|
510
|
+
# show sequels when leaving a day
|
511
|
+
add_body_leave_proc do
|
512
|
+
r = ''
|
513
|
+
if @my_sequel_active and @my_sequel_date then
|
514
|
+
if not bot? and not @cgi.mobile_agent? then
|
515
|
+
r = @my_sequel.html(@my_sequel_anchor, @my_sequel_conf[:date_format], @my_sequel_conf[:label]){|src_anchor, anchor_str|
|
516
|
+
my_sequel_orig_my(src_anchor, anchor_str)
|
517
|
+
}
|
518
|
+
end
|
519
|
+
end
|
520
|
+
@my_sequel_date = nil
|
521
|
+
r
|
522
|
+
end
|
523
|
+
|
524
|
+
# commit changes
|
525
|
+
add_footer_proc do
|
526
|
+
if @my_sequel_active then
|
527
|
+
@my_sequel.clean_srcs
|
528
|
+
@my_sequel.commit
|
529
|
+
end
|
530
|
+
''
|
531
|
+
end
|
532
|
+
end
|
533
|
+
|
534
|
+
# Local Variables:
|
535
|
+
# mode: ruby
|
536
|
+
# indent-tabs-mode: t
|
537
|
+
# tab-width: 3
|
538
|
+
# ruby-indent-level: 3
|
539
|
+
# End:
|