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
data/plugin/50sp.rb
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
# -*- coding: utf-8; -*-
|
2
|
+
# 50sp.rb - select-plugins plugin
|
3
|
+
|
4
|
+
SP_PREFIX = 'sp'
|
5
|
+
@sp_path = [( @conf["#{SP_PREFIX}.path"] || "#{TDiary::PATH}/misc/plugin" )].flatten
|
6
|
+
@sp_path = @sp_path.collect do |path|
|
7
|
+
/\/$/ =~ path ? path.chop : path
|
8
|
+
end
|
9
|
+
@sp_path << "#{TDiary::PATH}/misc/plugin" if @sp_path.include?('misc/plugin')
|
10
|
+
|
11
|
+
# get plugin option
|
12
|
+
def sp_option( key )
|
13
|
+
@conf["#{SP_PREFIX}.#{key}"]
|
14
|
+
end
|
15
|
+
|
16
|
+
# hash of paths from array of dirs
|
17
|
+
def sp_hash_from_dirs( dirs )
|
18
|
+
r = Hash.new
|
19
|
+
dirs.each do |dir|
|
20
|
+
Dir::glob( "#{dir}/*.rb" ).each do |path|
|
21
|
+
filename = File.basename( path )
|
22
|
+
unless r[ filename ] then
|
23
|
+
r[ filename ] = path
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
r
|
28
|
+
end
|
29
|
+
|
30
|
+
# url of the document
|
31
|
+
def sp_doc_url( file )
|
32
|
+
"http://docs.tdiary.org/#{@conf.lang}/?#{CGI::escape( file )}"
|
33
|
+
end
|
34
|
+
|
35
|
+
# <li> list of plugins
|
36
|
+
def sp_li_plugins( paths, is_checked )
|
37
|
+
r = ''
|
38
|
+
paths.collect { |path| File.basename( path ) }.sort.each do |file|
|
39
|
+
r += <<-_HTML
|
40
|
+
<li><input name="#{SP_PREFIX}.#{h file}" type="checkbox" value="t"#{'checked' if is_checked}><a href="#{h sp_doc_url( file )}">#{h file}</a>
|
41
|
+
_HTML
|
42
|
+
end
|
43
|
+
r
|
44
|
+
end
|
45
|
+
|
46
|
+
# lists of plugins
|
47
|
+
def sp_list_plugins( sp_opt )
|
48
|
+
r = ''
|
49
|
+
if ( sp_opt && !sp_opt.empty? ) then
|
50
|
+
# categorize the available plugins
|
51
|
+
used = Array.new
|
52
|
+
notused = Array.new
|
53
|
+
unknown = Array.new
|
54
|
+
# File.basenmame needed to read option from 01sp.rb <= 1.10
|
55
|
+
selected_array = sp_option( 'selected' ) ? sp_option( 'selected').split( /\n/ ).collect{ |p| File.basename( p ) } : []
|
56
|
+
notselected_array = sp_option( 'notselected' ) ? sp_option( 'notselected').split( /\n/ ).collect{ |p| File.basename( p ) } : []
|
57
|
+
sp_opt.keys.each do |path|
|
58
|
+
if selected_array.include?( path ) then
|
59
|
+
used << path
|
60
|
+
elsif notselected_array.include?( path ) then
|
61
|
+
notused << path
|
62
|
+
else
|
63
|
+
unknown << path
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# list up
|
68
|
+
r += @sp_label_please_select
|
69
|
+
unless unknown.empty? then
|
70
|
+
r += @sp_label_new
|
71
|
+
r += "<ul>\n"
|
72
|
+
r += sp_li_plugins( unknown, sp_option( 'usenew' ) )
|
73
|
+
r += "</ul>\n"
|
74
|
+
end
|
75
|
+
# selected plugins
|
76
|
+
unless used.empty? then
|
77
|
+
r += @sp_label_used
|
78
|
+
r += "<ul>\n"
|
79
|
+
r += sp_li_plugins( used, true )
|
80
|
+
r += "</ul>\n"
|
81
|
+
end
|
82
|
+
# not selected plugins
|
83
|
+
unless notused.empty? then
|
84
|
+
r += @sp_label_notused
|
85
|
+
r += "<ul>\n"
|
86
|
+
r += sp_li_plugins( notused, false )
|
87
|
+
r += "</ul>\n"
|
88
|
+
end
|
89
|
+
else
|
90
|
+
r += @sp_label_noplugin
|
91
|
+
end
|
92
|
+
r
|
93
|
+
end
|
94
|
+
|
95
|
+
# things needed to configure this plugin
|
96
|
+
if SP_PREFIX == (@cgi.params['conf'] && @cgi.params['conf'][0]) then
|
97
|
+
# list of plugins
|
98
|
+
@sp_opt = sp_hash_from_dirs( @sp_path )
|
99
|
+
|
100
|
+
# update options
|
101
|
+
# we have to do this when we are eval'ed to update the config menu
|
102
|
+
if /saveconf/ =~ @mode then
|
103
|
+
@conf["#{SP_PREFIX}.selected"] = ''
|
104
|
+
@conf["#{SP_PREFIX}.notselected"] = ''
|
105
|
+
@sp_opt.each_key do |file|
|
106
|
+
if 't' == @cgi.params["#{SP_PREFIX}.#{file}"][0] then
|
107
|
+
@conf["#{SP_PREFIX}.selected"] << "#{file}\n"
|
108
|
+
else
|
109
|
+
@conf["#{SP_PREFIX}.notselected"] << "#{file}\n"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# configuration menu
|
116
|
+
# options are updated when we are eval'ed
|
117
|
+
add_conf_proc( SP_PREFIX, @sp_label, 'basic' ) do
|
118
|
+
r = @sp_label_description + sp_list_plugins( @sp_opt )
|
119
|
+
end
|
120
|
+
|
121
|
+
# Finally, we can eval the selected plugins as tdiary.rb does
|
122
|
+
if sp_option( 'selected' ) then
|
123
|
+
sp_option( 'selected' ).untaint.split( /\n/ ).collect{ |p| File.basename( p ) }.sort.each do |filename|
|
124
|
+
@sp_path.each do |dir|
|
125
|
+
path = "#{dir}/#{filename}"
|
126
|
+
if File.readable?( path ) then
|
127
|
+
begin
|
128
|
+
load_plugin( path )
|
129
|
+
@plugin_files << path
|
130
|
+
rescue ArgumentError
|
131
|
+
next
|
132
|
+
rescue Exception
|
133
|
+
raise PluginError::new( "Plugin error in '#{path}'.\n#{$!}" )
|
134
|
+
end
|
135
|
+
break
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# Local Variables:
|
142
|
+
# mode: ruby
|
143
|
+
# indent-tabs-mode: t
|
144
|
+
# tab-width: 3
|
145
|
+
# ruby-indent-level: 3
|
146
|
+
# End:
|
data/plugin/60sf.rb
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
# -*- coding: utf-8; -*-
|
2
|
+
# 60sf.rb - select-filters plugin
|
3
|
+
# This file is based on 50sp.rb Revision: 1.5
|
4
|
+
# Modified by KURODA Hiraku.
|
5
|
+
|
6
|
+
SF_PREFIX = 'sf'
|
7
|
+
@sf_path = [( @conf["#{SF_PREFIX}.path"] || "#{TDiary::PATH}/misc/filter" )].flatten
|
8
|
+
@sf_path = @sf_path.collect do |path|
|
9
|
+
/\/$/ =~ path ? path.chop : path
|
10
|
+
end
|
11
|
+
|
12
|
+
# get plugin option
|
13
|
+
def sf_option( key )
|
14
|
+
@conf["#{SF_PREFIX}.#{key}"]
|
15
|
+
end
|
16
|
+
|
17
|
+
# hash of paths from array of dirs
|
18
|
+
def sf_hash_from_dirs( dirs )
|
19
|
+
r = Hash.new
|
20
|
+
dirs.each do |dir|
|
21
|
+
Dir::glob( "#{dir}/*.rb" ).each do |path|
|
22
|
+
filename = File.basename( path )
|
23
|
+
unless r[ filename ] then
|
24
|
+
r[ filename ] = path
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
r
|
29
|
+
end
|
30
|
+
|
31
|
+
# url of the document
|
32
|
+
def sf_doc_url( file )
|
33
|
+
"http://docs.tdiary.org/#{@conf.lang}/?#{CGI::escape( file )}"
|
34
|
+
end
|
35
|
+
|
36
|
+
# <li> list of plugins
|
37
|
+
def sf_li_plugins( paths, is_checked )
|
38
|
+
r = ''
|
39
|
+
paths.collect { |path| File.basename( path ) }.sort.each do |file|
|
40
|
+
r += <<-_HTML
|
41
|
+
<li><input name="#{SF_PREFIX}.#{h file}" type="checkbox" value="t"#{'checked' if is_checked}><a href="#{h sf_doc_url( file )}">#{h file}</a>
|
42
|
+
_HTML
|
43
|
+
end
|
44
|
+
r
|
45
|
+
end
|
46
|
+
|
47
|
+
# lists of plugins
|
48
|
+
def sf_list_plugins( sf_opt )
|
49
|
+
r = ''
|
50
|
+
if ( sf_opt && !sf_opt.empty? ) then
|
51
|
+
# categorize the available plugins
|
52
|
+
used = Array.new
|
53
|
+
notused = Array.new
|
54
|
+
unknown = Array.new
|
55
|
+
# File.basenmame needed to read option from 01sp.rb <= 1.10
|
56
|
+
selected_array = sf_option( 'selected' ) ? sf_option( 'selected').split( /\n/ ).collect{ |p| File.basename( p ) } : []
|
57
|
+
notselected_array = sf_option( 'notselected' ) ? sf_option( 'notselected').split( /\n/ ).collect{ |p| File.basename( p ) } : []
|
58
|
+
sf_opt.keys.each do |path|
|
59
|
+
if selected_array.include?( path ) then
|
60
|
+
used << path
|
61
|
+
elsif notselected_array.include?( path ) then
|
62
|
+
notused << path
|
63
|
+
else
|
64
|
+
unknown << path
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# list up
|
69
|
+
r += @sf_label_please_select
|
70
|
+
unless unknown.empty? then
|
71
|
+
r += @sf_label_new
|
72
|
+
r += "<ul>\n"
|
73
|
+
r += sf_li_plugins( unknown, sf_option( 'usenew' ) )
|
74
|
+
r += "</ul>\n"
|
75
|
+
end
|
76
|
+
# selected plugins
|
77
|
+
unless used.empty? then
|
78
|
+
r += @sf_label_used
|
79
|
+
r += "<ul>\n"
|
80
|
+
r += sf_li_plugins( used, true )
|
81
|
+
r += "</ul>\n"
|
82
|
+
end
|
83
|
+
# not selected plugins
|
84
|
+
unless notused.empty? then
|
85
|
+
r += @sf_label_notused
|
86
|
+
r += "<ul>\n"
|
87
|
+
r += sf_li_plugins( notused, false )
|
88
|
+
r += "</ul>\n"
|
89
|
+
end
|
90
|
+
else
|
91
|
+
r += @sf_label_noplugin
|
92
|
+
end
|
93
|
+
r
|
94
|
+
end
|
95
|
+
|
96
|
+
# things needed to configure this plugin
|
97
|
+
if SF_PREFIX == (@cgi.params['conf'] && @cgi.params['conf'][0]) then
|
98
|
+
# list of plugins
|
99
|
+
@sf_opt = sf_hash_from_dirs( @sf_path )
|
100
|
+
|
101
|
+
# update options
|
102
|
+
# we have to do this when we are eval'ed to update the config menu
|
103
|
+
if /saveconf/ =~ @mode then
|
104
|
+
@conf["#{SF_PREFIX}.selected"] = ''
|
105
|
+
@conf["#{SF_PREFIX}.notselected"] = ''
|
106
|
+
@sf_opt.each_key do |file|
|
107
|
+
if 't' == @cgi.params["#{SF_PREFIX}.#{file}"][0] then
|
108
|
+
@conf["#{SF_PREFIX}.selected"] << "#{file}\n"
|
109
|
+
else
|
110
|
+
@conf["#{SF_PREFIX}.notselected"] << "#{file}\n"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# configuration menu
|
117
|
+
# options are updated when we are eval'ed
|
118
|
+
add_conf_proc( SF_PREFIX, @sf_label, 'security' ) do
|
119
|
+
r = @sf_label_description + sf_list_plugins( @sf_opt )
|
120
|
+
end
|
121
|
+
|
122
|
+
# Finally, we can eval the selected plugins as tdiary.rb does
|
123
|
+
if sf_option( 'selected' ) && !@sf_filters then
|
124
|
+
@sf_filters = []
|
125
|
+
sf_option( 'selected' ).untaint.split( /\n/ ).collect{ |p| File.basename( p ) }.sort.each do |filename|
|
126
|
+
@sf_path.each do |dir|
|
127
|
+
path = "#{dir}/#{filename}"
|
128
|
+
if File.readable?( path ) then
|
129
|
+
begin
|
130
|
+
require path
|
131
|
+
@sf_filters << TDiary::Filter::const_get("#{File::basename(filename, ".rb").capitalize}Filter")::new(@cgi, @conf)
|
132
|
+
plugin_path = "#{dir}/plugin/#{filename}"
|
133
|
+
load_plugin(plugin_path) if File.readable?(plugin_path)
|
134
|
+
rescue Exception
|
135
|
+
raise PluginError::new( "Plugin error in '#{path}'.\n#{$!}" )
|
136
|
+
end
|
137
|
+
break
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def sf_filters
|
144
|
+
@sf_filters||[]
|
145
|
+
end
|
146
|
+
|
147
|
+
# Local Variables:
|
148
|
+
# mode: ruby
|
149
|
+
# indent-tabs-mode: t
|
150
|
+
# tab-width: 3
|
151
|
+
# ruby-indent-level: 3
|
152
|
+
# End:
|
data/plugin/90migrate.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
# -*- coding: utf-8; -*-
|
2
|
+
#
|
3
|
+
# 90migrate.rb: tDiary plugin for migration 2.2 to 2.3.
|
4
|
+
#
|
5
|
+
|
6
|
+
if !@conf.tdiary_version && @conf.io_class.to_s == 'TDiary::DefaultIO'
|
7
|
+
def convert_pstore( file )
|
8
|
+
require "pstore"
|
9
|
+
|
10
|
+
db = PStore.new( file )
|
11
|
+
begin
|
12
|
+
roots = db.transaction{ db.roots }
|
13
|
+
rescue ArgumentError
|
14
|
+
if /\Aundefined class\/module (.+?)(::)?\z/ =~ $!.message
|
15
|
+
klass = $1
|
16
|
+
if /EmptdiaryString\z/ =~ klass
|
17
|
+
eval( "class #{klass} < String; end" )
|
18
|
+
else
|
19
|
+
eval( "class #{klass}; end" )
|
20
|
+
end
|
21
|
+
retry
|
22
|
+
end
|
23
|
+
end
|
24
|
+
db.transaction do
|
25
|
+
roots.each do |root|
|
26
|
+
convert_element( db[root] )
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def convert_element( data )
|
32
|
+
case data
|
33
|
+
when Hash, Array
|
34
|
+
data.each_with_index do |e, i|
|
35
|
+
if String === e
|
36
|
+
data[i] = @conf.migrate_to_utf8( e )
|
37
|
+
else
|
38
|
+
convert_element( e )
|
39
|
+
end
|
40
|
+
end
|
41
|
+
else
|
42
|
+
data.instance_variables.each do |e|
|
43
|
+
var = data.instance_variable_get( e )
|
44
|
+
if String === var
|
45
|
+
data.instance_variable_set( e, @conf.migrate_to_utf8( var ) )
|
46
|
+
else
|
47
|
+
convert_element( var )
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
require "fileutils"
|
54
|
+
|
55
|
+
# convert tdiary.conf in @conf.data_path
|
56
|
+
begin
|
57
|
+
conf_path = "#{@conf.data_path}tdiary.conf"
|
58
|
+
conf = File::open( conf_path ){|f| @conf.migrate_to_utf8( f.read ) }
|
59
|
+
conf.gsub!(/(\\[0-9]{3})+/) do |str|
|
60
|
+
@conf.migrate_to_utf8( eval( %Q["#{$&}"] ) ).dump[1...-1]
|
61
|
+
end
|
62
|
+
rescue
|
63
|
+
end
|
64
|
+
File::open( conf_path, 'w' ) do |o|
|
65
|
+
o.puts %Q!tdiary_version = "#{TDIARY_VERSION}"!
|
66
|
+
o.print( conf ) if conf
|
67
|
+
end
|
68
|
+
@conf.tdiary_version = TDIARY_VERSION
|
69
|
+
|
70
|
+
# convert pstore cache files of plugins
|
71
|
+
dir = @cache_path || "#{@conf.data_path}cache"
|
72
|
+
%w(makerss.cache recent_comments recent_trackbacks tlink/tlink.dat whatsnew-list blog_category).each do |e|
|
73
|
+
convert_pstore( "#{dir}/#{e}" ) if File.exist?( "#{dir}/#{e}" )
|
74
|
+
end
|
75
|
+
Dir["#{dir}/disp_referrer2.d/*"].each do |file|
|
76
|
+
convert_pstore( file )
|
77
|
+
end
|
78
|
+
Dir["#{@conf.data_path}category/*"].each do |file|
|
79
|
+
convert_pstore( file )
|
80
|
+
end
|
81
|
+
|
82
|
+
# rename category cache files
|
83
|
+
Dir["#{@conf.data_path}category/*"].each do |file|
|
84
|
+
dirname, basename = File.split( file )
|
85
|
+
new_basename = u( @conf.migrate_to_utf8( CGI::unescape( basename ) ) )
|
86
|
+
FileUtils.mv( file, File.join( dirname, new_basename ) ) unless basename == new_basename
|
87
|
+
end
|
88
|
+
|
89
|
+
# other files
|
90
|
+
a_dat = @conf['a.path'] || "#{dir}/a.dat"
|
91
|
+
if File.exist?( a_dat ) then
|
92
|
+
t = File::open( a_dat ){|f| f.read}
|
93
|
+
File::open( a_dat, 'wb' ){|f| f.write( @conf.migrate_to_utf8( t ) )}
|
94
|
+
end
|
95
|
+
|
96
|
+
# remove ruby/erb cache files
|
97
|
+
Dir["#{dir}/*.rb"].each{|f| FileUtils.rm_f( f )}
|
98
|
+
Dir["#{dir}/*.parser"].each{|f| FileUtils.rm_f( f )}
|
99
|
+
|
100
|
+
# redirect to top page
|
101
|
+
raise ::TDiary::ForceRedirect, base_url
|
102
|
+
end
|
103
|
+
|
104
|
+
# Local Variables:
|
105
|
+
# mode: ruby
|
106
|
+
# indent-tabs-mode: t
|
107
|
+
# tab-width: 3
|
108
|
+
# ruby-indent-level: 3
|
109
|
+
# End:
|
@@ -0,0 +1,390 @@
|
|
1
|
+
# -*- coding: utf-8; -*-
|
2
|
+
#
|
3
|
+
# en/00default.rb: English resources of 00default.rb.
|
4
|
+
#
|
5
|
+
# Copyright (C) 2001-2005, TADA Tadashi <t@tdtds.jp>
|
6
|
+
# You can redistribute it and/or modify it under GPL2.
|
7
|
+
#
|
8
|
+
|
9
|
+
#
|
10
|
+
# header
|
11
|
+
#
|
12
|
+
def title_tag
|
13
|
+
r = "<title>#{h @conf.html_title}"
|
14
|
+
case @mode
|
15
|
+
when 'day', 'comment'
|
16
|
+
r << "(#{@date.strftime( '%Y-%m-%d' )})" if @date
|
17
|
+
when 'month'
|
18
|
+
r << "(#{@date.strftime( '%Y-%m' )})" if @date
|
19
|
+
when 'form'
|
20
|
+
r << '(Append)'
|
21
|
+
when 'edit'
|
22
|
+
r << '(Edit)'
|
23
|
+
when 'preview'
|
24
|
+
r << '(Preview)'
|
25
|
+
when 'showcomment'
|
26
|
+
r << '(TSUKKOMI Status Change Completed)'
|
27
|
+
when 'conf'
|
28
|
+
r << '(Preferences)'
|
29
|
+
when 'saveconf'
|
30
|
+
r << '(Preferences Changed)'
|
31
|
+
when 'nyear'
|
32
|
+
years = @diaries.keys.map {|ymd| ymd.sub(/^\d{4}/, "")}
|
33
|
+
r << "(#{years[0].sub( /^(\d\d)/, '\1-')}[#{nyear_diary_label @date, years}])" if @date
|
34
|
+
end
|
35
|
+
r << '</title>'
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
#
|
40
|
+
# link to HOWTO write diary
|
41
|
+
#
|
42
|
+
def style_howto
|
43
|
+
%Q|/<a href="http://docs.tdiary.org/en/?#{h @conf.style}Style">How to write</a>|
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# labels
|
48
|
+
#
|
49
|
+
def no_diary; "No diary on #{@date.strftime( @conf.date_format )}"; end
|
50
|
+
def comment_today; "Today's TSUKKOMI"; end
|
51
|
+
def comment_total( total ); "(Total: #{total})"; end
|
52
|
+
def comment_new; 'Add a TSUKKOMI'; end
|
53
|
+
def comment_description_default; 'Add a TSUKKOMI or Comment please. E-mail address will be shown to only me.'; end
|
54
|
+
def comment_limit_label; 'You cannot make more TSUKKOMI because it has over limit.'; end
|
55
|
+
def comment_description_short; 'TSUKKOMI!!'; end
|
56
|
+
def comment_name_label; 'Name'; end
|
57
|
+
def comment_name_label_short; 'Name'; end
|
58
|
+
def comment_mail_label; 'E-mail'; end
|
59
|
+
def comment_mail_label_short; 'Mail'; end
|
60
|
+
def comment_body_label; 'Comment'; end
|
61
|
+
def comment_body_label_short; 'Comment'; end
|
62
|
+
def comment_submit_label; 'Submit'; end
|
63
|
+
def comment_submit_label_short; 'Submit'; end
|
64
|
+
def comment_date( time ); time.strftime( "(#{@conf.date_format} %H:%M)" ); end
|
65
|
+
def trackback_today; "Today's TrackBacks"; end
|
66
|
+
def trackback_total( total ); "(Total: #{total})"; end
|
67
|
+
|
68
|
+
def navi_index; 'Top'; end
|
69
|
+
def navi_latest; 'Latest'; end
|
70
|
+
def navi_oldest; 'Oldest'; end
|
71
|
+
def navi_update; "Append"; end
|
72
|
+
def navi_edit; "Edit"; end
|
73
|
+
def navi_preference; "Preference"; end
|
74
|
+
def navi_prev_diary(date); "Prev(#{date.strftime(@conf.date_format)})"; end
|
75
|
+
def navi_next_diary(date); "Next(#{date.strftime(@conf.date_format)})"; end
|
76
|
+
def navi_prev_month; "Prev month"; end
|
77
|
+
def navi_next_month; "Next month"; end
|
78
|
+
def navi_prev_nyear(date); "Prev(#{date.strftime('%m-%d')})"; end
|
79
|
+
def navi_next_nyear(date); "Next(#{date.strftime('%m-%d')})"; end
|
80
|
+
def navi_prev_ndays; "#{@conf.latest_limit} days before"; end
|
81
|
+
def navi_next_ndays; "#{@conf.latest_limit} days after"; end
|
82
|
+
|
83
|
+
def submit_label
|
84
|
+
if @mode == 'form' or @cgi.valid?( 'appendpreview' ) then
|
85
|
+
'Append'
|
86
|
+
else
|
87
|
+
'Replace'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
def preview_label; 'Preview'; end
|
91
|
+
|
92
|
+
def nyear_diary_label(date, years); "my old days"; end
|
93
|
+
def nyear_diary_title(date, years); "same days in past"; end
|
94
|
+
|
95
|
+
|
96
|
+
#
|
97
|
+
# labels (for mobile)
|
98
|
+
#
|
99
|
+
def mobile_navi_latest; 'Latest'; end
|
100
|
+
def mobile_navi_update; 'Update'; end
|
101
|
+
def mobile_navi_edit; "Edit"; end
|
102
|
+
def mobile_navi_preference; 'Prefs'; end
|
103
|
+
def mobile_navi_prev_diary; 'Prev'; end
|
104
|
+
def mobile_navi_next_diary; 'Next'; end
|
105
|
+
def mobile_label_hidden_diary; 'This day is HIDDEN.'; end
|
106
|
+
|
107
|
+
#
|
108
|
+
# category
|
109
|
+
#
|
110
|
+
def category_anchor(c); "[#{c}]"; end
|
111
|
+
|
112
|
+
#
|
113
|
+
# preferences
|
114
|
+
#
|
115
|
+
@conf_saving = 'Saving...'
|
116
|
+
|
117
|
+
# genre labels
|
118
|
+
@conf_genre_label['basic'] = 'Basic'
|
119
|
+
@conf_genre_label['theme'] = 'Themes'
|
120
|
+
@conf_genre_label['tsukkomi'] = 'TSUKKOMI'
|
121
|
+
@conf_genre_label['referer'] = 'Referrer'
|
122
|
+
@conf_genre_label['security'] = 'Security'
|
123
|
+
@conf_genre_label['etc'] = 'etc'
|
124
|
+
|
125
|
+
# basic (default)
|
126
|
+
add_conf_proc( 'default', 'Site information', 'basic' ) do
|
127
|
+
saveconf_default
|
128
|
+
@conf.description ||= ''
|
129
|
+
@conf.icon ||= ''
|
130
|
+
@conf.banner ||= ''
|
131
|
+
<<-HTML
|
132
|
+
<h3 class="subtitle">Title</h3>
|
133
|
+
#{"<p>The title of your diary. This value is used in HTML <title> element and in mobile mode. Do not use HTML tags.</p>" unless @cgi.mobile_agent?}
|
134
|
+
<p><input name="html_title" value="#{h @conf.html_title}" size="50"></p>
|
135
|
+
|
136
|
+
<h3 class="subtitle">Author</h3>
|
137
|
+
#{"<p>Specify your name. This value is into HTML header.</p>" unless @cgi.mobile_agent?}
|
138
|
+
<p><input name="author_name" value="#{h @conf.author_name}" size="40"></p>
|
139
|
+
|
140
|
+
<h3 class="subtitle">E-mail address</h3>
|
141
|
+
#{"<p>Specify your E-mail address. This value is into HTML header.</p>" unless @cgi.mobile_agent?}
|
142
|
+
<p><input name="author_mail" value="#{h @conf.author_mail}" size="40"></p>
|
143
|
+
|
144
|
+
<h3 class="subtitle">URL of index page</h3>
|
145
|
+
#{"<p>The URL of index of your website if you have.</p>" unless @cgi.mobile_agent?}
|
146
|
+
<p><input name="index_page" value="#{h @conf.index_page}" size="50"></p>
|
147
|
+
|
148
|
+
<h3 class="subtitle">URL of Your Diary</h3>
|
149
|
+
#{"<p>Specify your diary's URL. This URL is used by some plugins for indicate your diary</p>" unless @cgi.mobile_agent?}
|
150
|
+
#{"<p><strong>NOTICE!! The URL specified below is different from current URL of accessed now.</strong></p>" unless base_url == @cgi.base_url}
|
151
|
+
<p><input name="base_url" value="#{h base_url}" size="70"></p>
|
152
|
+
|
153
|
+
<h3 class="subtitle">Description</h3>
|
154
|
+
#{"<p>A brief description of your diary. Can be left blank.</p>" unless @cgi.mobile_agent?}
|
155
|
+
<p><input name="description" value="#{h @conf.description}" size="60"></p>
|
156
|
+
|
157
|
+
<h3 class="subtitle">Site icon (favicon)</h3>
|
158
|
+
#{"<p>URL for the small icon (aka 'favicon') of your site. Can be left blank.</p>" unless @cgi.mobile_agent?}
|
159
|
+
<p><input name="icon" value="#{h @conf.icon}" size="60"></p>
|
160
|
+
|
161
|
+
<h3 class="subtitle">Site banner</h3>
|
162
|
+
#{"<p>URL for the banner image of your site. makerss plugin will use this value to make RSS. Can be left blank.</p>" unless @cgi.mobile_agent?}
|
163
|
+
<p><input name="banner" value="#{h @conf.banner}" size="60"></p>
|
164
|
+
|
165
|
+
<h3 class="subtitle">Permit display in Frames</h3>
|
166
|
+
#{"<p>Permit display your diary included by frames.</p>" unless @cgi.mobile_agent?}
|
167
|
+
<p><select name="x_frame_options">
|
168
|
+
<option value=""#{" selected" unless @conf.x_frame_options}>Permit</option>
|
169
|
+
<option value="SAMEORIGIN"#{" selected" if @conf.x_frame_options == 'SAMEORIGIN'}>Permit in same domain</option>
|
170
|
+
<option value="DENY"#{" selected" if @conf.x_frame_options == 'DENY'}>Deny</option>
|
171
|
+
</select></p>
|
172
|
+
HTML
|
173
|
+
end
|
174
|
+
|
175
|
+
# header/footer (header)
|
176
|
+
add_conf_proc( 'header', 'Header/Footer', 'basic' ) do
|
177
|
+
saveconf_header
|
178
|
+
|
179
|
+
<<-HTML
|
180
|
+
<h3 class="subtitle">Header</h3>
|
181
|
+
#{"<p>This text is inserted into top of each pages. You can use HTML tags. Do not remove \"<%=navi%>\", because it mean Navigation bar inclued \"Update\" button. And \"<%=calendar%>\" mean calendar. So you can specify other plugins also.</p>" unless @cgi.mobile_agent?}
|
182
|
+
<p><textarea name="header" cols="60" rows="10">#{h @conf.header}</textarea></p>
|
183
|
+
<h3 class="subtitle">Footer</h3>
|
184
|
+
#{"<p>This text is inserted into bottom of each pages. You can specify as same as Header.</p>" unless @cgi.mobile_agent?}
|
185
|
+
<p><textarea name="footer" cols="60" rows="10">#{h @conf.footer}</textarea></p>
|
186
|
+
HTML
|
187
|
+
end
|
188
|
+
|
189
|
+
# diaplay
|
190
|
+
add_conf_proc( 'display', 'Display', 'basic' ) do
|
191
|
+
saveconf_display
|
192
|
+
|
193
|
+
<<-HTML
|
194
|
+
<h3 class="subtitle">Section anchor</h3>
|
195
|
+
#{"<p>\"Anchor\" guide to link from other website. Section anchors are insertd into begining of each section. So if you specify \"<span class=\"sanchor\">_</span>\", image anchor will be shown Image anchor by themes.</p>" unless @cgi.mobile_agent?}
|
196
|
+
<p><input name="section_anchor" value="#{h @conf.section_anchor}" size="40"></p>
|
197
|
+
<h3 class="subtitle">TSUKKOMI anchor</h3>
|
198
|
+
#{"<p>TSUKKOMI anchor is inserted into begining of each TSUKKOMIs. So You can specify \"<span class=\"canchor\">_</span>\" for Image anchor.</p>" unless @cgi.mobile_agent?}
|
199
|
+
<p><input name="comment_anchor" value="#{h @conf.comment_anchor}" size="40"></p>
|
200
|
+
<h3 class="subtitle">Date format</h3>
|
201
|
+
#{"<p>Format of date. If you specify a charactor after %, it mean special about date formatting: \"%Y\"(Year), \"%m\"(Month), \"%b\"(Short name of month), \"%B\"(Long name of month), \"%d\"(Day), \"%a\"(Short name of day of week), \"%A\"(Long name of day of week).</p>" unless @cgi.mobile_agent?}
|
202
|
+
<p><input name="date_format" value="#{h @conf.date_format}" size="30"></p>
|
203
|
+
<h3 class="subtitle">Max dates of Latest diaplay</h3>
|
204
|
+
#{"<p>In the Latest mode, you can specify the number of days in the page.</p>" unless @cgi.mobile_agent?}
|
205
|
+
<p><input name="latest_limit" value="#{h @conf.latest_limit}" size="2"> days in a page.</p>
|
206
|
+
<h3 class="subtitle">My old days</h3>
|
207
|
+
#{"<p>Show the link of \"My old days\"</p>" unless @cgi.mobile_agent?}
|
208
|
+
<p><select name="show_nyear">
|
209
|
+
<option value="true"#{" selected" if @conf.show_nyear}>Show</option>
|
210
|
+
<option value="false"#{" selected" unless @conf.show_nyear}>Hide</option>
|
211
|
+
</select></p>
|
212
|
+
HTML
|
213
|
+
end
|
214
|
+
|
215
|
+
# timezone
|
216
|
+
add_conf_proc( 'timezone', 'Time difference adjustment', 'update' ) do
|
217
|
+
saveconf_timezone
|
218
|
+
<<-HTML
|
219
|
+
<h3 class="subtitle">Time difference adjustment</h3>
|
220
|
+
#{"<p>When updating diary, you can adjust date which is automatically inserted into the form. The unit is hour. For example, if you want to handle the time until 2 a.m. as the previous day, you set this to -2. tDiary inserts the date which is older by 2 hours than the actual time. </p>" unless @cgi.mobile_agent?}
|
221
|
+
<p><input name="hour_offset" value="#{h @conf.hour_offset}" size="5"></p>
|
222
|
+
HTML
|
223
|
+
end
|
224
|
+
|
225
|
+
# themes
|
226
|
+
@theme_location_comment = "<p>You can get many themes from <a href=\"http://www.tdiary.org/20021001.html\">Theme Gallery</a>(Japanese).</p>"
|
227
|
+
@theme_thumbnail_label = "Thumbnail"
|
228
|
+
|
229
|
+
add_conf_proc( 'theme', 'Themes', 'theme' ) do
|
230
|
+
saveconf_theme
|
231
|
+
|
232
|
+
r = <<-HTML
|
233
|
+
<h3 class="subtitle">Theme</h3>
|
234
|
+
#{"<p>Specify the design of your diary using Theme or CSS. When you select \"CSS specify\", input URL of CSS into the field right side.</p>" unless @cgi.mobile_agent?}
|
235
|
+
<p>
|
236
|
+
<select name="theme" onChange="changeTheme( theme_thumbnail, this )">
|
237
|
+
<option value="">CSS Specify-></option>
|
238
|
+
HTML
|
239
|
+
r << conf_theme_list
|
240
|
+
end
|
241
|
+
|
242
|
+
# comments
|
243
|
+
add_conf_proc( 'comment', 'TSUKKOMI', 'tsukkomi' ) do
|
244
|
+
saveconf_comment
|
245
|
+
|
246
|
+
<<-HTML
|
247
|
+
<h3 class="subtitle">Show TSUKKOMI</h3>
|
248
|
+
#{"<p>Select show or hide TSUKKOMI from readers</p>" unless @cgi.mobile_agent?}
|
249
|
+
<p><select name="show_comment">
|
250
|
+
<option value="true"#{" selected" if @conf.show_comment}>Show</option>
|
251
|
+
<option value="false"#{" selected" unless @conf.show_comment}>Hide</option>
|
252
|
+
</select></p>
|
253
|
+
<h3 class="subtitle">Number of TSUKKOMI</h3>
|
254
|
+
#{"<p>In Latest or Month mode, you can specify number of visible TSUKKOMIs. So in Dayly mode, all of TSUKKOMIs are shown.</p>" unless @cgi.mobile_agent?}
|
255
|
+
<p><input name="comment_limit" value="#{h @conf.comment_limit}" size="3"> TSUKKOMIs</p>
|
256
|
+
<h3 class="subtitle">Limit of TSUKKOMI per a day</h3>
|
257
|
+
#{"<p>When numbers of TSUKKOMI over this value in a day, nobody can make new TSUKKOMI. If you use TrackBack plugin, this value means sum of TSUKKOMIs and TrackBacks.</p>" unless @cgi.mobile_agent?}
|
258
|
+
<p><input name="comment_limit_per_day" value="#{h @conf.comment_limit_per_day}" size="3"> TSUKKOMIs</p>
|
259
|
+
HTML
|
260
|
+
end
|
261
|
+
|
262
|
+
# comment mail
|
263
|
+
def comment_mail_mime( str )
|
264
|
+
[str.dup]
|
265
|
+
end
|
266
|
+
|
267
|
+
def comment_mail_conf_label; 'TSUKKOMI Mail'; end
|
268
|
+
|
269
|
+
def comment_mail_basic_html
|
270
|
+
@conf['comment_mail.header'] = '' unless @conf['comment_mail.header']
|
271
|
+
@conf['comment_mail.receivers'] = '' unless @conf['comment_mail.receivers']
|
272
|
+
@conf['comment_mail.sendhidden'] = false unless @conf['comment_mail.sendhidden']
|
273
|
+
|
274
|
+
<<-HTML
|
275
|
+
<h3 class="subtitle">Notify TSUKKOMI by E-mail</h3>
|
276
|
+
#{"<p>Select notify or not when your diary gets a new TSUKKOMI. So TSUKKOMI mail need SMTP server settings in tdiary.conf.</p>" unless @cgi.mobile_agent?}
|
277
|
+
<p><select name="comment_mail.enable">
|
278
|
+
<option value="true"#{" selected" if @conf['comment_mail.enable']}>Send Mail</option>
|
279
|
+
<option value="false"#{" selected" unless @conf['comment_mail.enable']}>Don't Send</option>
|
280
|
+
</select></p>
|
281
|
+
<h3 class="subtitle">Receivers</h3>
|
282
|
+
#{"<p>Sepecify receivers of TSUKKOMI mail, 1 address per 1 line. If you dose not specify, TSUKKOMI mails will be sent to your address.</p>" unless @cgi.mobile_agent?}
|
283
|
+
<p><textarea name="comment_mail.receivers" cols="40" rows="3">#{h( @conf['comment_mail.receivers'].gsub( /[, ]+/, "\n") )}</textarea></p>
|
284
|
+
<h3 class="subtitle">Mail header</h3>
|
285
|
+
#{"<p>Specify a string insert to beginning of mail subject. The subject have a style of \"your_specified_string:DATE-SERIAL NAME\". \"date\" is formatted as same as diary's date you specified. But when you specify another date style in this string, subject style is changed to \"your_specified_string-SERIAL NAME\" (ex: \"hoge:%Y-%m-%d\")</p>" unless @cgi.mobile_agent?}
|
286
|
+
<p><input name="comment_mail.header" value="#{h @conf['comment_mail.header']}"></p>
|
287
|
+
<h3 class="subtitle">About hidden TSUKKOMI</h3>
|
288
|
+
#{"<p>Some TSUKKOMI are hidden by filters. You can decide which sending E-mail by hidden TSUKKOMI.</p>" unless @cgi.mobile_agent?}
|
289
|
+
<p><label for="comment_mail.sendhidden"><input type="checkbox" id="comment_mail.sendhidden" name="comment_mail.sendhidden" value="#{" checked" if @conf['comment_mail.sendhidden']}">Send mail by hidden TSUKKOMI</label></p>
|
290
|
+
HTML
|
291
|
+
end
|
292
|
+
|
293
|
+
add_conf_proc( 'csrf_protection', 'CSRF Protection', 'security' ) do
|
294
|
+
err = saveconf_csrf_protection
|
295
|
+
errstr = ''
|
296
|
+
case err
|
297
|
+
when :param
|
298
|
+
errstr = '<p class="message">Invalid options specified. Configuration not saved.</p>'
|
299
|
+
when :key
|
300
|
+
errstr = '<p class="message">No key specified. Configuration not saved.</p>'
|
301
|
+
end
|
302
|
+
csrf_protection_method = @conf.options['csrf_protection_method'] || 1
|
303
|
+
csrf_protection_key = @conf.options['csrf_protection_key'] || ''
|
304
|
+
<<-HTML
|
305
|
+
#{errstr}
|
306
|
+
<p>This page configures a protection scheme to prevent "cross-site request forgery" (CSRF) attacks.</p>
|
307
|
+
<p>To make CSRF attack, a malicious person prepares a trap link in some web page and lets you visit that page.
|
308
|
+
When the trap link is invoked (either by Javascript or your mouse click), <i>your</i> web browser sends a forged request to tDiary.
|
309
|
+
Thus, neither encryption nor usual password protection can serve as a protection mechanism.
|
310
|
+
TDiary provies two methods -- "checking referer" and "checking CSRF key" -- to prevent such attacks.</p>
|
311
|
+
<div class="section">
|
312
|
+
<h3 class="subtitle">Checking Referer</h3>
|
313
|
+
<h4 class="subtitle">Checks for Referer values</h4>
|
314
|
+
<p>#{if [0,1,2,3].include?(csrf_protection_method) then
|
315
|
+
'<input type="checkbox" name="check_enabled2" value="true" checked disabled>
|
316
|
+
<input type="hidden" name="check_enabled" value="true">'
|
317
|
+
else
|
318
|
+
'<input type="checkbox" name="check_enabled" value="true">'
|
319
|
+
end}Enabled (default)
|
320
|
+
</p>
|
321
|
+
#{"<p>Configures Referer-based CSRF protection.
|
322
|
+
TDiary checks the Referer value sent from your web browser. If the post request comes from some outer page,
|
323
|
+
the request will be rejected. This setting can't be disabled through web-based configuration, for safety reasons.</p>
|
324
|
+
" unless @cgi.mobile_agent?}
|
325
|
+
<h3 class="subtitle">Handling of Referer-disabled browsers</h3>
|
326
|
+
<p><input type="radio" name="check_referer" value="true" #{if [1,3].include?(csrf_protection_method) then " checked" end}>Reject (default)
|
327
|
+
<input type="radio" name="check_referer" value="false" #{if [0,2].include?(csrf_protection_method) then " checked" end}>Accept
|
328
|
+
</p>
|
329
|
+
#{"<p>Configures handling for requests without any Referer: value.
|
330
|
+
By default tDiary rejects such request for safety reasons.
|
331
|
+
If your browser is configured not to send Referer values, alter that setting to allow sending Referer, at least for
|
332
|
+
originating sites. If it is impossible, configure the key-based CSRF protection below, and
|
333
|
+
change this setting to \"Accept\".</p>
|
334
|
+
" unless @cgi.mobile_agent?}
|
335
|
+
</div>
|
336
|
+
<div class="section">
|
337
|
+
<h3 class="subtitle">Checking CSRF key</h3>
|
338
|
+
<h4>Checks for CSRF protection key</h4>
|
339
|
+
<p><input type="radio" name="check_key" value="true" #{if [2,3].include?(csrf_protection_method) then " checked" end}>Enabled
|
340
|
+
<input type="radio" name="check_key" value="false" #{if [0,1].include?(csrf_protection_method) then " checked" end}>Disabled (default)
|
341
|
+
</p>
|
342
|
+
#{"<p>tDiary can add a secret key for every post form to prevent CSRF. As long as attackers do not know the secret key,
|
343
|
+
forged requests will not be granted. To enable this feature, tDiary will generate a key automatically.
|
344
|
+
To allow Referer-disabled browsers, you must enable this setting.</p>" unless @cgi.mobile_agent?}
|
345
|
+
#{"<p class=\"message\">Caution:
|
346
|
+
Your browser seems not to be sending any Referers, although Referer-based protection is enabled.
|
347
|
+
<a href=\"#{h @conf.update}?conf=csrf_protection\">Please open this page again via this link</a>.
|
348
|
+
If you see this message again, you must either change your browser setting (temporarily to change these settings, at least),
|
349
|
+
or edit \"tdiary.conf\" directly.</p>" if [1,3].include?(csrf_protection_method) && ! @cgi.referer && !@cgi.valid?('referer_exists')}
|
350
|
+
</div>
|
351
|
+
HTML
|
352
|
+
end
|
353
|
+
|
354
|
+
add_conf_proc( 'logger', 'Log Level', 'basic' ) do
|
355
|
+
saveconf_logger
|
356
|
+
|
357
|
+
r = <<-HTML
|
358
|
+
<h3 class="subtitle">Log Level</h3>
|
359
|
+
<p>Select log level of tDiary's output. If you selected spam filter's log level is enabled then select INFO or DEBUG.</p>
|
360
|
+
<p><select name="log_level">
|
361
|
+
HTML
|
362
|
+
r << conf_logger_list
|
363
|
+
end
|
364
|
+
|
365
|
+
add_conf_proc( 'recommendfilter', 'Recommend filter', 'basic' ) do
|
366
|
+
saveconf_recommendfilter
|
367
|
+
|
368
|
+
<<-HTML
|
369
|
+
<h3>Recommend filter</h3>
|
370
|
+
<p>Spam filtering for tDiary recommended to change the settings. Now, caution that all change what is settings.</p>
|
371
|
+
<p>
|
372
|
+
<input type="checkbox" id="recommend.filter" name="recommend.filter" value="true">
|
373
|
+
<label for="recommend.filter">Enabled recommend filter</label>
|
374
|
+
</p>
|
375
|
+
HTML
|
376
|
+
end
|
377
|
+
|
378
|
+
#
|
379
|
+
# old ruby alert
|
380
|
+
#
|
381
|
+
def old_ruby_alert_message
|
382
|
+
"The ruby #{RUBY_VERSION} will be unsupported by tDiary next release."
|
383
|
+
end
|
384
|
+
|
385
|
+
# Local Variables:
|
386
|
+
# mode: ruby
|
387
|
+
# indent-tabs-mode: t
|
388
|
+
# tab-width: 3
|
389
|
+
# ruby-indent-level: 3
|
390
|
+
# End:
|