tdiary 3.2.2.20130507
Sign up to get free protection for your applications and to get access to all the features.
- 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,256 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# calendar3.rb
|
3
|
+
#
|
4
|
+
# calendar3: 現在表示している月のカレンダーを表示します.
|
5
|
+
# パラメタ: なし
|
6
|
+
#
|
7
|
+
# tdiary.confで指定するオプション:
|
8
|
+
# @options['calendar3.show_todo']
|
9
|
+
# パラグラフのサブサイトルとここで指定した文字列が一致し
|
10
|
+
# かつその日の日記が非表示の場合,そのパラグラフの内容を
|
11
|
+
# 予定としてpopupする.
|
12
|
+
#
|
13
|
+
# @options['calendar3.show_popup']
|
14
|
+
# JavaScriptによるpopupを表示するかどうか.
|
15
|
+
# 省略時の値はtrueなので,表示したくない場合のみfalseを設定する.
|
16
|
+
#
|
17
|
+
# Copyright (c) 2001,2002 Junichiro KITA <kita@kitaj.no-ip.com>
|
18
|
+
# Distributed under the GPL
|
19
|
+
#
|
20
|
+
#
|
21
|
+
# sample CSS for calendar3
|
22
|
+
#
|
23
|
+
# .calendar-popup {
|
24
|
+
# display: none;
|
25
|
+
# text-align: left;
|
26
|
+
# position: absolute;
|
27
|
+
# border-style: solid;
|
28
|
+
# border-width: 1px;
|
29
|
+
# padding: 0 1ex 0 1ex;
|
30
|
+
# }
|
31
|
+
#
|
32
|
+
# .calendar-sunday {
|
33
|
+
# color: red;
|
34
|
+
# }
|
35
|
+
#
|
36
|
+
# .calendar-saturday {
|
37
|
+
# color: blue;
|
38
|
+
# }
|
39
|
+
#
|
40
|
+
# .calendar-weekday {
|
41
|
+
# color: black;
|
42
|
+
# }
|
43
|
+
#
|
44
|
+
# .calendar-normal {
|
45
|
+
# }
|
46
|
+
#
|
47
|
+
# .calendar-day {
|
48
|
+
# font-weight: bold;
|
49
|
+
# }
|
50
|
+
#
|
51
|
+
# .calendar-todo {
|
52
|
+
# border-style: solid;
|
53
|
+
# border-color: red;
|
54
|
+
# border-width: 1px;
|
55
|
+
# }
|
56
|
+
#
|
57
|
+
=begin ChengeLog
|
58
|
+
2003-09-25 TADA Tadashi <sho@spc.gr.jp>
|
59
|
+
* use @conf.shorten.
|
60
|
+
|
61
|
+
2003-03-25 Junichiro Kita <kita@kitaj.no-ip.com>
|
62
|
+
* add css to navigation links to next, current, prev month.
|
63
|
+
|
64
|
+
2003-02-27 Junichiro Kita <kita@kitaj.no-ip.com>
|
65
|
+
* @options['calendar.show_popup']
|
66
|
+
|
67
|
+
2003-01-07 Junichiro Kita <kita@kitaj.no-ip.com>
|
68
|
+
* append sample css
|
69
|
+
|
70
|
+
2003-01-07 MURAI Kensou <murai@dosule.com>
|
71
|
+
* modify javascript for popdown-delay
|
72
|
+
|
73
|
+
2002-12-20 TADA Tadashi <sho@spc.gr.jp>
|
74
|
+
* use Plugin#apply_plugin.
|
75
|
+
=end
|
76
|
+
|
77
|
+
module Calendar3
|
78
|
+
WEEKDAY = 0
|
79
|
+
SATURDAY = 1
|
80
|
+
SUNDAY = 2
|
81
|
+
|
82
|
+
STYLE = {
|
83
|
+
WEEKDAY => "calendar-weekday",
|
84
|
+
SATURDAY => "calendar-saturday",
|
85
|
+
SUNDAY => "calendar-sunday",
|
86
|
+
}
|
87
|
+
|
88
|
+
def make_cal(year, month)
|
89
|
+
result = []
|
90
|
+
1.upto(31) do |i|
|
91
|
+
t = Time.local(year, month, i)
|
92
|
+
break if t.month != month
|
93
|
+
case t.wday
|
94
|
+
when 0
|
95
|
+
result << [i, SUNDAY]
|
96
|
+
when 1..5
|
97
|
+
result << [i, WEEKDAY]
|
98
|
+
when 6
|
99
|
+
result << [i, SATURDAY]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
result
|
103
|
+
end
|
104
|
+
|
105
|
+
def prev_month(year, month)
|
106
|
+
if month == 1
|
107
|
+
year -= 1
|
108
|
+
month = 12
|
109
|
+
else
|
110
|
+
month -= 1
|
111
|
+
end
|
112
|
+
[year, month]
|
113
|
+
end
|
114
|
+
|
115
|
+
def next_month(year, month)
|
116
|
+
if month == 12
|
117
|
+
year += 1
|
118
|
+
month = 1
|
119
|
+
else
|
120
|
+
month += 1
|
121
|
+
end
|
122
|
+
[year, month]
|
123
|
+
end
|
124
|
+
|
125
|
+
module_function :make_cal, :next_month, :prev_month
|
126
|
+
end
|
127
|
+
|
128
|
+
def calendar3
|
129
|
+
return '' if bot?
|
130
|
+
show_todo = @options['calendar3.show_todo']
|
131
|
+
show_todo = Regexp.new(show_todo) if show_todo
|
132
|
+
result = ''
|
133
|
+
if @options.has_key? 'calendar3.erb'
|
134
|
+
result << %Q|<p class="message">@options['calendar3.erb'] is obsolete!<p>|
|
135
|
+
end
|
136
|
+
|
137
|
+
if /^(latest|search)$/ =~ @mode
|
138
|
+
date = Time.now
|
139
|
+
else
|
140
|
+
date = @date
|
141
|
+
end
|
142
|
+
year = date.year
|
143
|
+
month = date.month
|
144
|
+
day = date.day
|
145
|
+
|
146
|
+
result << %Q|<span class="calendar-prev-month"><a href="#{h @index}#{anchor "%04d%02d" % Calendar3.prev_month(year, month)}"><<</a></span>\n|
|
147
|
+
result << %Q|<span class="calendar-current-month"><a href="#{h @index}#{anchor "%04d%02d" % [year, month]}">#{"%04d/%02d" % [year, month]}</a>/</span>\n|
|
148
|
+
#Calendar3.make_cal(year, month)[(day - num >= 0 ? day - num : 0)..(day - 1)].each do |day, kind|
|
149
|
+
Calendar3.make_cal(year, month).each do |day, kind|
|
150
|
+
date = "%04d%02d%02d" % [year, month, day]
|
151
|
+
if @diaries[date].nil?
|
152
|
+
result << %Q|<span class="calendar-normal"><a class="#{Calendar3::STYLE[kind]}">#{day}</a></span>\n|
|
153
|
+
elsif !@diaries[date].visible?
|
154
|
+
todos = []
|
155
|
+
if show_todo
|
156
|
+
@diaries[date].each_section do |section|
|
157
|
+
if show_todo === section.subtitle
|
158
|
+
todos << h( section.body_to_html ).gsub( /\n/, " " )
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
if todos.size != 0
|
163
|
+
result << %Q|<span class="calendar-todo"><a class="#{Calendar3::STYLE[kind]}" title="#{day}日の予定: #{todos.join " "}">#{day}</a></span>\n|
|
164
|
+
else
|
165
|
+
result << %Q|<span class="calendar-normal"><a class="#{Calendar3::STYLE[kind]}">#{day}</a></span>\n|
|
166
|
+
end
|
167
|
+
else
|
168
|
+
if @calendar3_show_popup
|
169
|
+
result << %Q|<span class="calendar-day" id="target-#{day}" onmouseover="popup(document.getElementById('target-#{day}'),document.getElementById('popup-#{day}'), document.getElementById('title-#{day}'));" onmouseout="popdown(document.getElementById('popup-#{day}'));">\n|
|
170
|
+
else
|
171
|
+
result << %Q|<span class="calendar-day" id="target-#{day}">\n|
|
172
|
+
end
|
173
|
+
result << %Q| <a class="#{Calendar3::STYLE[kind]}" id="title-#{day}" title="|
|
174
|
+
i = 1
|
175
|
+
r = []
|
176
|
+
if !@plugin_files.grep(/\/category.rb$/).empty? and @diaries[date].categorizable?
|
177
|
+
@diaries[date].each_section do |section|
|
178
|
+
if section.stripped_subtitle
|
179
|
+
text = apply_plugin( section.stripped_subtitle_to_html, true )
|
180
|
+
r << %Q|#{i}. #{h text}|
|
181
|
+
end
|
182
|
+
i += 1
|
183
|
+
end
|
184
|
+
else
|
185
|
+
@diaries[date].each_section do |section|
|
186
|
+
if section.subtitle
|
187
|
+
text = apply_plugin( section.subtitle_to_html, true )
|
188
|
+
r << %Q|#{i}. #{h text}|
|
189
|
+
end
|
190
|
+
i += 1
|
191
|
+
end
|
192
|
+
end
|
193
|
+
result << r.join(" ")
|
194
|
+
result << %Q|" href="#{h @index}#{anchor date}">#{day}</a>\n|
|
195
|
+
if @calendar3_show_popup
|
196
|
+
result << %Q| <span class="calendar-popup" id="popup-#{day}">\n|
|
197
|
+
i = 1
|
198
|
+
if !@plugin_files.grep(/\/category.rb$/).empty? and @diaries[date].categorizable?
|
199
|
+
@diaries[date].each_section do |section|
|
200
|
+
if section.stripped_subtitle
|
201
|
+
text = apply_plugin( section.body_to_html, true )
|
202
|
+
subtitle = apply_plugin( section.stripped_subtitle_to_html )
|
203
|
+
result << %Q| <a href="#{h @index}#{anchor "%s#p%02d" % [date, i]}" title="#{h @conf.shorten( text )}">#{i}</a>. #{subtitle}<br>\n|
|
204
|
+
end
|
205
|
+
i += 1
|
206
|
+
end
|
207
|
+
else
|
208
|
+
@diaries[date].each_section do |section|
|
209
|
+
if section.subtitle
|
210
|
+
text = apply_plugin( section.body_to_html, true )
|
211
|
+
subtitle = apply_plugin( section.subtitle_to_html )
|
212
|
+
result << %Q| <a href="#{h @index}#{anchor "%s#p%02d" % [date, i]}" title="#{h @conf.shorten( text )}">#{i}</a>. #{subtitle}<br>\n|
|
213
|
+
end
|
214
|
+
i += 1
|
215
|
+
end
|
216
|
+
end
|
217
|
+
result << %Q| </span>\n|
|
218
|
+
end
|
219
|
+
result << %Q|</span>\n|
|
220
|
+
end
|
221
|
+
end
|
222
|
+
result << %Q|<span class="calendar-next-month"><a href="#{h @index}#{anchor "%04d%02d" % Calendar3.next_month(year, month)}">>></a></span>\n|
|
223
|
+
result
|
224
|
+
end
|
225
|
+
|
226
|
+
@calendar3_show_popup = true
|
227
|
+
if @options.has_key?('calendar3.show_popup')
|
228
|
+
@calendar3_show_popup = @options['calendar3.show_popup']
|
229
|
+
end
|
230
|
+
if /w3m|MSIE.*Mac/ === @cgi.user_agent
|
231
|
+
@calendar3_show_popup = false
|
232
|
+
add_header_proc do
|
233
|
+
<<JAVASCRIPT
|
234
|
+
<script type="text/javascript">
|
235
|
+
<!--
|
236
|
+
function popup(target,element,notitle) {
|
237
|
+
}
|
238
|
+
|
239
|
+
function popdown(element) {
|
240
|
+
}
|
241
|
+
// -->
|
242
|
+
</script>
|
243
|
+
JAVASCRIPT
|
244
|
+
end
|
245
|
+
end
|
246
|
+
if @calendar3_show_popup
|
247
|
+
enable_js('calendar3.js')
|
248
|
+
end
|
249
|
+
|
250
|
+
# Local Variables:
|
251
|
+
# mode: ruby
|
252
|
+
# indent-tabs-mode: t
|
253
|
+
# tab-width: 3
|
254
|
+
# ruby-indent-level: 3
|
255
|
+
# End:
|
256
|
+
# vim: set ts=3:
|
@@ -0,0 +1,779 @@
|
|
1
|
+
# category.rb
|
2
|
+
#
|
3
|
+
# Copyright (c) 2003 Junichiro KITA <kita@kitaj.no-ip.com>
|
4
|
+
# Distributed under the GPL
|
5
|
+
#
|
6
|
+
require 'pstore'
|
7
|
+
|
8
|
+
#
|
9
|
+
# initialize
|
10
|
+
#
|
11
|
+
def category_init
|
12
|
+
@conf['category.header1'] ||= %Q[<div class="adminmenu">\n<p>\n<%= category_navi %>\n</p>\n</div>\n]
|
13
|
+
@conf['category.header2'] ||= %Q[<p>Categories |\n<%= category_list %>\n</p>\n]
|
14
|
+
@conf['category.edit_support'] = @conf['category.edit_support'].to_i rescue 1
|
15
|
+
end
|
16
|
+
category_init
|
17
|
+
|
18
|
+
def category_icon_location_init
|
19
|
+
@category_icon_dir = (@conf['category.icon_dir'] || './icons/').sub(%r|/*$|, '/')
|
20
|
+
@category_icon_url = (@conf['category.icon_url'] || './icons/').sub(%r|/*$|, '/')
|
21
|
+
end
|
22
|
+
|
23
|
+
def category_icon_init
|
24
|
+
category_icon_location_init
|
25
|
+
@conf['category.icon'] ||= ''
|
26
|
+
|
27
|
+
@category_icon = {}
|
28
|
+
@conf['category.icon'].split(/\n/).each do |l|
|
29
|
+
c, i = l.split
|
30
|
+
next if c.nil? or i.nil?
|
31
|
+
@category_icon[c] = i if File.exists?("#{@category_icon_dir}#{i}".untaint)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
category_icon_init
|
35
|
+
|
36
|
+
#
|
37
|
+
# plugin methods
|
38
|
+
#
|
39
|
+
def category_form
|
40
|
+
# don't you need this method any more?
|
41
|
+
end
|
42
|
+
|
43
|
+
def category_anchor(category)
|
44
|
+
period = @conf['category.period'] || 'quarter'
|
45
|
+
period_string =
|
46
|
+
case period
|
47
|
+
when "month"
|
48
|
+
"year=#{@date.year};month=#{'%02d' % @date.month};"
|
49
|
+
when "quarter"
|
50
|
+
"year=#{@date.year};month=#{(@date.month - 1) / 3 + 1}Q;"
|
51
|
+
when "half"
|
52
|
+
"year=#{@date.year};month=#{(@date.month - 1) / 6 + 1}H;"
|
53
|
+
when "year"
|
54
|
+
"year=#{@date.year};"
|
55
|
+
else
|
56
|
+
""
|
57
|
+
end
|
58
|
+
if @category_icon[category] and !@cgi.mobile_agent?
|
59
|
+
%Q|<a href="#{h @index}?#{period_string}category=#{u category}" title="#{h category}"><img class="category" src="#{h @category_icon_url}#{h @category_icon[category]}" alt="#{h category}"></a>|
|
60
|
+
else
|
61
|
+
%Q|[<a href="#{h @index}?#{period_string}category=#{u category}" title="#{h category}">#{h category}</a>]|
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def category_navi_anchor(info, label, mobile = false)
|
66
|
+
if mobile then
|
67
|
+
"|#{info.make_anchor(label)}"
|
68
|
+
else
|
69
|
+
((!label.nil?) && label.empty?) ? '' : %Q[<span class="adminmenu">#{info.make_anchor(label)}</span>\n]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def category_navi
|
74
|
+
mobile = @cgi.mobile_agent?
|
75
|
+
info = Category::Info.new(@cgi, @years, @conf)
|
76
|
+
mode = info.mode
|
77
|
+
|
78
|
+
result = ''
|
79
|
+
case mode
|
80
|
+
when :year, :half, :quarter, :month
|
81
|
+
all_diary = Category::Info.new(@cgi, @years, @conf, :year => -1, :month => -1)
|
82
|
+
all = Category::Info.new(@cgi, @years, @conf, :category => ['ALL'], :year => -1, :month => -1)
|
83
|
+
result << category_navi_anchor(info.prev, @conf['category.prev_' + mode.to_s], mobile)
|
84
|
+
result << category_navi_anchor(info.next, @conf['category.next_' + mode.to_s], mobile)
|
85
|
+
unless mobile then
|
86
|
+
result << category_navi_anchor(all_diary, @conf['category.all_diary'])
|
87
|
+
result << category_navi_anchor(all, @conf['category.all'])
|
88
|
+
end
|
89
|
+
when :all
|
90
|
+
year = Category::Info.new(@cgi, @years, @conf, :year => Time.now.year.to_s)
|
91
|
+
half = Category::Info.new(@cgi, @years, @conf, :year => Time.now.year.to_s, :month => "#{((Time.now.month - 1) / 6 + 1)}H")
|
92
|
+
quarter = Category::Info.new(@cgi, @years, @conf, :year => Time.now.year.to_s, :month => "#{((Time.now.month - 1) / 3 + 1)}Q")
|
93
|
+
month = Category::Info.new(@cgi, @years, @conf, :year => Time.now.year.to_s, :month => '%02d' % Time.now.month)
|
94
|
+
result << category_navi_anchor(year, @conf['category.this_year'], mobile)
|
95
|
+
result << category_navi_anchor(half, @conf['category.this_half'], mobile)
|
96
|
+
result << category_navi_anchor(quarter, @conf['category.this_quarter'], mobile)
|
97
|
+
result << category_navi_anchor(month, @conf['category.this_month'], mobile)
|
98
|
+
end
|
99
|
+
if !info.category.include?('ALL') and !mobile then
|
100
|
+
all_category = Category::Info.new(@cgi, @years, @conf, :category => ['ALL'])
|
101
|
+
result << category_navi_anchor(all_category, @conf['category.all_category'])
|
102
|
+
end
|
103
|
+
result
|
104
|
+
end
|
105
|
+
|
106
|
+
def category_list_sections
|
107
|
+
info = Category::Info.new(@cgi, @years, @conf)
|
108
|
+
category = info.category
|
109
|
+
years = info.years
|
110
|
+
r = ''
|
111
|
+
|
112
|
+
raise ::TDiary::NotFound if @categorized.empty? and bot?
|
113
|
+
|
114
|
+
@categorized.to_a.sort_by{|e| e[0].downcase}.each do |c, v|
|
115
|
+
info.category = [c]
|
116
|
+
if @category_icon[c]
|
117
|
+
img = %Q|<img class="category" src="#{h @category_icon_url}#{h @category_icon[c]}" alt="#{h c}">|
|
118
|
+
else
|
119
|
+
img = ''
|
120
|
+
end
|
121
|
+
r << <<HTML
|
122
|
+
<div class="category day">
|
123
|
+
<h2><span class="title">#{img}#{info.make_anchor}</span></h2>
|
124
|
+
<div class="body">
|
125
|
+
<ul class="category">
|
126
|
+
HTML
|
127
|
+
v.to_a.sort_by{|e| e[0]}.each do |ymd, ary|
|
128
|
+
text = Time.local(ymd[0,4], ymd[4,2], ymd[6,2]).strftime(@conf.date_format)
|
129
|
+
ary.sort.each do |idx, title, excerpt|
|
130
|
+
r << %Q|\t\t\t<li><a href="#{h @index}#{anchor "#{ymd}#p#{'%02d' % idx}"}" title="#{h excerpt}">#{text}#p#{'%02d' % idx}</a> #{apply_plugin(title)}</li>\n|
|
131
|
+
end
|
132
|
+
end
|
133
|
+
r << <<HTML
|
134
|
+
</ul>
|
135
|
+
</div>
|
136
|
+
</div>
|
137
|
+
HTML
|
138
|
+
end
|
139
|
+
r
|
140
|
+
end
|
141
|
+
|
142
|
+
def category_list_sections_mobile
|
143
|
+
info = Category::Info.new(@cgi, @years, @conf)
|
144
|
+
category = info.category
|
145
|
+
years = info.years
|
146
|
+
r = ''
|
147
|
+
|
148
|
+
raise ::TDiary::NotFound if @categorized.empty? and bot?
|
149
|
+
|
150
|
+
@categorized.to_a.sort_by{|e| e[0].downcase}.each do |c, v|
|
151
|
+
info.category = [c]
|
152
|
+
r << "<H2>#{info.make_anchor}</H2>"
|
153
|
+
r << "<UL>"
|
154
|
+
v.to_a.sort_by{|e| e[0]}.each do |ymd, ary|
|
155
|
+
text = Time.local(ymd[0,4], ymd[4,2], ymd[6,2]).strftime(@conf.date_format)
|
156
|
+
ary.sort.each do |idx, title, excerpt|
|
157
|
+
r << %Q|<LI><A HREF="#{h @index}#{anchor "#{ymd}#p#{'%02d' % idx}"}">#{text}#p#{'%02d' % idx}</A> #{apply_plugin(title)}</LI>\n|
|
158
|
+
end
|
159
|
+
end
|
160
|
+
r << "</UL>"
|
161
|
+
end
|
162
|
+
r
|
163
|
+
end
|
164
|
+
|
165
|
+
def category_list
|
166
|
+
info = Category::Info.new(@cgi, @years, @conf)
|
167
|
+
@categories.map do |c|
|
168
|
+
info.category = [c]
|
169
|
+
info.make_anchor
|
170
|
+
end.join(" | \n")
|
171
|
+
end
|
172
|
+
|
173
|
+
def category_dropdown_list(label = nil, multiple = nil)
|
174
|
+
label ||= 'Categorize!'
|
175
|
+
multiple ||= false
|
176
|
+
|
177
|
+
info = Category::Info.new(@cgi, @years, @conf)
|
178
|
+
category = info.category
|
179
|
+
if category.empty?
|
180
|
+
return '' if @cgi.mobile_agent?
|
181
|
+
category = ['ALL']
|
182
|
+
end
|
183
|
+
|
184
|
+
options = ''
|
185
|
+
(['ALL'] + @categories.sort_by{|e| e.downcase}).each do |c|
|
186
|
+
options << %Q|\t\t<option value="#{h c}"#{" selected" if category.include?(c)}>#{h c}</option>\n|
|
187
|
+
end
|
188
|
+
|
189
|
+
params = ''
|
190
|
+
params << %Q[<input type="hidden" name="year" value="#{h info.year}">] if info.year
|
191
|
+
params << %Q[<input type="hidden" name="month" value="#{h info.month}">] if info.month
|
192
|
+
|
193
|
+
<<HTML
|
194
|
+
<form method="get" action="#{h @index}"><div>
|
195
|
+
<select name="category"#{" multiple" if multiple}>
|
196
|
+
#{options}
|
197
|
+
</select>
|
198
|
+
#{params}
|
199
|
+
<input type="submit" value="#{label}">
|
200
|
+
</div></form>
|
201
|
+
HTML
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
#
|
206
|
+
# misc
|
207
|
+
#
|
208
|
+
|
209
|
+
def category_icon_save
|
210
|
+
@conf['category.icon'] = @category_icon.map {|c, i| "#{c} #{i}"}.join("\n")
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
module Category
|
215
|
+
|
216
|
+
#
|
217
|
+
# CGI (mock-up CGI class for Cache::recreate)
|
218
|
+
#
|
219
|
+
class CGI
|
220
|
+
attr_reader :params
|
221
|
+
def initialize
|
222
|
+
@params = Hash.new([])
|
223
|
+
end
|
224
|
+
def referer; nil; end
|
225
|
+
def user_agent; nil; end
|
226
|
+
def request_method; 'GET'; end
|
227
|
+
end
|
228
|
+
|
229
|
+
#
|
230
|
+
# Info
|
231
|
+
#
|
232
|
+
class Info
|
233
|
+
include ERB::Util
|
234
|
+
|
235
|
+
def initialize(cgi, years, conf, args = {})
|
236
|
+
@cgi = cgi
|
237
|
+
@years = years
|
238
|
+
@conf = conf
|
239
|
+
@category = args[:category] || @cgi.params['category'].map do |c|
|
240
|
+
@conf.to_native(c, @conf.encoding_old)
|
241
|
+
end
|
242
|
+
@year = args[:year] || @cgi.params['year'][0]
|
243
|
+
@month = args[:month] || @cgi.params['month'][0]
|
244
|
+
@mode = :all
|
245
|
+
set_mode
|
246
|
+
end
|
247
|
+
|
248
|
+
protected
|
249
|
+
attr_writer :year
|
250
|
+
attr_writer :month
|
251
|
+
public
|
252
|
+
attr :category, true
|
253
|
+
attr_reader :year
|
254
|
+
attr_reader :month
|
255
|
+
attr_reader :mode
|
256
|
+
|
257
|
+
def prev
|
258
|
+
pp = self.dup
|
259
|
+
|
260
|
+
case mode
|
261
|
+
when :half
|
262
|
+
h = @month.to_i
|
263
|
+
if h == 1
|
264
|
+
pp.month = "2H"
|
265
|
+
pp.year = (@year.to_i - 1).to_s if @year
|
266
|
+
else
|
267
|
+
pp.month = "1H"
|
268
|
+
end
|
269
|
+
when :quarter
|
270
|
+
q = @month.to_i
|
271
|
+
if q == 1
|
272
|
+
pp.month = "4Q"
|
273
|
+
pp.year = (@year.to_i - 1).to_s if @year
|
274
|
+
else
|
275
|
+
pp.month = "#{q - 1}Q"
|
276
|
+
end
|
277
|
+
when :month
|
278
|
+
m = @month.to_i
|
279
|
+
if m == 1
|
280
|
+
pp.month = "12"
|
281
|
+
pp.year = (@year.to_i - 1).to_s if @year
|
282
|
+
else
|
283
|
+
pp.month = '%02d' % (m - 1)
|
284
|
+
end
|
285
|
+
when :year
|
286
|
+
pp.year = (@year.to_i - 1).to_s
|
287
|
+
end
|
288
|
+
pp
|
289
|
+
end
|
290
|
+
|
291
|
+
def next
|
292
|
+
pp = self.dup
|
293
|
+
|
294
|
+
case mode
|
295
|
+
when :half
|
296
|
+
h = @month.to_i
|
297
|
+
if h == 2
|
298
|
+
pp.month = "1H"
|
299
|
+
pp.year = (@year.to_i + 1).to_s if @year
|
300
|
+
else
|
301
|
+
pp.month = "2H"
|
302
|
+
end
|
303
|
+
when :quarter
|
304
|
+
q = @month.to_i
|
305
|
+
if q == 4
|
306
|
+
pp.month = "1Q"
|
307
|
+
pp.year = (@year.to_i + 1).to_s if @year
|
308
|
+
else
|
309
|
+
pp.month = "#{q + 1}Q"
|
310
|
+
end
|
311
|
+
when :month
|
312
|
+
m = @month.to_i
|
313
|
+
if m == 12
|
314
|
+
pp.month = "01"
|
315
|
+
pp.year = (@year.to_i + 1).to_s if @year
|
316
|
+
else
|
317
|
+
pp.month = '%02d' % (m + 1)
|
318
|
+
end
|
319
|
+
when :year
|
320
|
+
pp.year = (@year.to_i + 1).to_s
|
321
|
+
end
|
322
|
+
pp
|
323
|
+
end
|
324
|
+
|
325
|
+
def make_anchor(label = nil)
|
326
|
+
a = @category.map {|c| "category=#{u c}"}.join(';')
|
327
|
+
a << ";year=#{@year}" if @year
|
328
|
+
a << ";month=#{@month}" if @month
|
329
|
+
if label
|
330
|
+
case mode
|
331
|
+
when :year
|
332
|
+
label = label.gsub(/\$1/, @year)
|
333
|
+
when :month, :quarter, :half
|
334
|
+
label = label.gsub(/\$2/, @month)
|
335
|
+
label = label.gsub(/\$1/, @year || '*')
|
336
|
+
end
|
337
|
+
else
|
338
|
+
label = @category.to_a.join(':')
|
339
|
+
end
|
340
|
+
%Q|<a href="#{h @conf.index}?#{h a}">#{h label}</a>|
|
341
|
+
end
|
342
|
+
|
343
|
+
#
|
344
|
+
# return ym_spec
|
345
|
+
#
|
346
|
+
# {"yyyy" => ["mm", ...], ...}
|
347
|
+
#
|
348
|
+
# date spec:
|
349
|
+
# (1) none -> all diary
|
350
|
+
# (2) month=xH -> all diary in xH of all year
|
351
|
+
# (3) year=YYYY;month=xH -> all diary in YYYY/xH
|
352
|
+
# (4) month=xQ -> all diary in xQ of all year
|
353
|
+
# (5) year=YYYY;month=xQ -> all diary in YYYY/xQ
|
354
|
+
# (6) month=MM -> all diary in MM of all year
|
355
|
+
# (7) year=YYYY;month=MM -> all diary in YYYY/MM
|
356
|
+
# (8) year=YYYY -> all diary in YYYY
|
357
|
+
#
|
358
|
+
def years
|
359
|
+
if @mode == :all
|
360
|
+
return @years
|
361
|
+
end
|
362
|
+
|
363
|
+
months = case @mode
|
364
|
+
when :half
|
365
|
+
[('01'..'06'), ('07'..'12')][@month.to_i - 1].to_a
|
366
|
+
when :quarter
|
367
|
+
[['01', '02', '03'], ['04', '05', '06'], ['07', '08', '09'], ['10', '11', '12']][@month.to_i - 1]
|
368
|
+
when :month
|
369
|
+
[@month]
|
370
|
+
else
|
371
|
+
('01'..'12').to_a
|
372
|
+
end
|
373
|
+
|
374
|
+
r = {}
|
375
|
+
(@year ? [@year] : @years.keys).each do |y|
|
376
|
+
r[y] = months
|
377
|
+
end
|
378
|
+
r
|
379
|
+
end
|
380
|
+
|
381
|
+
#
|
382
|
+
# date spec:
|
383
|
+
# (1) none -> all
|
384
|
+
# (2) month=xH -> half
|
385
|
+
# (3) year=YYYY;month=xH -> half
|
386
|
+
# (4) month=xQ -> quarter
|
387
|
+
# (5) year=YYYY;month=xQ -> quarter
|
388
|
+
# (6) month=MM -> month
|
389
|
+
# (7) year=YYYY;month=MM -> month
|
390
|
+
# (8) year=YYYY -> year
|
391
|
+
#
|
392
|
+
def set_mode
|
393
|
+
if @year.nil? and @month.nil?
|
394
|
+
@mode = :all
|
395
|
+
end
|
396
|
+
|
397
|
+
if /\d{4}/ === @year.to_s
|
398
|
+
@mode = :year
|
399
|
+
else
|
400
|
+
@year = nil
|
401
|
+
end
|
402
|
+
|
403
|
+
if /[12]H/ === @month.to_s
|
404
|
+
@mode = :half
|
405
|
+
elsif /[1-4]Q/ === @month.to_s
|
406
|
+
@mode = :quarter
|
407
|
+
elsif (1..12).include?(@month.to_i)
|
408
|
+
@mode = :month
|
409
|
+
else
|
410
|
+
@month = nil
|
411
|
+
end
|
412
|
+
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
#
|
417
|
+
# Cache
|
418
|
+
#
|
419
|
+
class Cache
|
420
|
+
include ERB::Util
|
421
|
+
|
422
|
+
def initialize(conf, bind)
|
423
|
+
@conf = conf
|
424
|
+
@binding = bind # ...... very ugly
|
425
|
+
@dir = "#{conf.data_path}/category"
|
426
|
+
Dir.mkdir(@dir) unless File.exist?(@dir)
|
427
|
+
end
|
428
|
+
|
429
|
+
def add_categories(list)
|
430
|
+
return if list.nil? or list.empty?
|
431
|
+
replace_categories(restore_categories + list)
|
432
|
+
end
|
433
|
+
|
434
|
+
def replace_categories(list)
|
435
|
+
PStore.new(cache_file).transaction do |db|
|
436
|
+
db['category'] = list.sort.uniq
|
437
|
+
end
|
438
|
+
end
|
439
|
+
|
440
|
+
#
|
441
|
+
# restore category names
|
442
|
+
# ["category1", "category2", ...]
|
443
|
+
#
|
444
|
+
def restore_categories
|
445
|
+
list = nil
|
446
|
+
PStore.new(cache_file).transaction do |db|
|
447
|
+
list = db['category'] if db.root?('category')
|
448
|
+
db.abort
|
449
|
+
end
|
450
|
+
list || []
|
451
|
+
end
|
452
|
+
|
453
|
+
#
|
454
|
+
# cache each section of diary
|
455
|
+
# used in update_proc
|
456
|
+
#
|
457
|
+
def replace_sections(diary)
|
458
|
+
return if diary.nil? or !diary.categorizable?
|
459
|
+
|
460
|
+
categorized = categorize_diary(diary)
|
461
|
+
categories = restore_categories
|
462
|
+
deleted = []
|
463
|
+
ymd = diary.date.strftime('%Y%m%d')
|
464
|
+
|
465
|
+
categories.each do |c|
|
466
|
+
PStore.new(cache_file(c)).transaction do |db|
|
467
|
+
db['category'] = {} unless db.root?('category')
|
468
|
+
if diary.visible? and categorized[c]
|
469
|
+
db['category'].update(categorized[c])
|
470
|
+
else
|
471
|
+
# diary is invisible or sections of this category is deleted
|
472
|
+
db['category'].delete(ymd)
|
473
|
+
deleted << c if db['category'].empty?
|
474
|
+
end
|
475
|
+
end
|
476
|
+
end
|
477
|
+
|
478
|
+
if !deleted.empty?
|
479
|
+
deleted.each do |c|
|
480
|
+
File.unlink(cache_file(c))
|
481
|
+
end
|
482
|
+
replace_categories(categories - deleted)
|
483
|
+
end
|
484
|
+
end
|
485
|
+
|
486
|
+
#
|
487
|
+
# (re)create category cache
|
488
|
+
#
|
489
|
+
def recreate(years)
|
490
|
+
cgi = Category::CGI::new
|
491
|
+
|
492
|
+
list = []
|
493
|
+
years.each do |y, ms|
|
494
|
+
ms.each do |m|
|
495
|
+
ym = "#{y}#{m}"
|
496
|
+
cgi.params['date'] = [ym]
|
497
|
+
m = TDiaryMonth.new(cgi, '', @conf)
|
498
|
+
sections = {}
|
499
|
+
m.diaries.each do |ymd, diary|
|
500
|
+
next if !diary.visible?
|
501
|
+
initial_replace_sections(diary)
|
502
|
+
diary.each_section do |s|
|
503
|
+
list |= s.categories unless s.categories.empty?
|
504
|
+
end
|
505
|
+
end
|
506
|
+
end
|
507
|
+
end
|
508
|
+
|
509
|
+
replace_categories(list)
|
510
|
+
end
|
511
|
+
|
512
|
+
#
|
513
|
+
# categorize sections of category of years
|
514
|
+
#
|
515
|
+
# {"category" => {"yyyymmdd" => [[idx, title, excerpt], ...], ...}, ...}
|
516
|
+
#
|
517
|
+
def categorize(category, years)
|
518
|
+
categories = category - ['ALL']
|
519
|
+
if categories.empty?
|
520
|
+
categories = restore_categories
|
521
|
+
else
|
522
|
+
categories &= restore_categories
|
523
|
+
end
|
524
|
+
|
525
|
+
categorized = {}
|
526
|
+
begin
|
527
|
+
categorized.clear
|
528
|
+
categories.each do |c|
|
529
|
+
PStore.new(cache_file(c)).transaction do |db|
|
530
|
+
categorized[c] = db['category']
|
531
|
+
db.abort
|
532
|
+
end
|
533
|
+
categorized[c].keys.each do |ymd|
|
534
|
+
y, m = ymd[0,4], ymd[4,2]
|
535
|
+
if years[y].nil? or !years[y].include?(m)
|
536
|
+
categorized[c].delete(ymd)
|
537
|
+
end
|
538
|
+
end
|
539
|
+
categorized.delete(c) if categorized[c].empty?
|
540
|
+
end
|
541
|
+
rescue NoMethodError # when categorized[c] is nil
|
542
|
+
recreate(years)
|
543
|
+
retry
|
544
|
+
end
|
545
|
+
|
546
|
+
categorized
|
547
|
+
end
|
548
|
+
|
549
|
+
private
|
550
|
+
def cache_file(category = nil)
|
551
|
+
if category
|
552
|
+
"#{@dir}/#{u( category ).gsub(/%20/,'+')}".untaint
|
553
|
+
else
|
554
|
+
"#{@dir}/category_list"
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
558
|
+
#
|
559
|
+
# categorize sections of diary
|
560
|
+
#
|
561
|
+
# {"category" => {"yyyymmdd" => [[idx, title, excerpt], ...]}}
|
562
|
+
#
|
563
|
+
def categorize_diary(diary)
|
564
|
+
categorized = {}
|
565
|
+
ymd = diary.date.strftime('%Y%m%d')
|
566
|
+
|
567
|
+
idx = 1
|
568
|
+
diary.each_section do |s|
|
569
|
+
s.categories.each do |c|
|
570
|
+
categorized[c] = {} if categorized[c].nil?
|
571
|
+
categorized[c][ymd] = [] if categorized[c][ymd].nil?
|
572
|
+
body = <<EVAL
|
573
|
+
text = apply_plugin(<<'BODY', true)
|
574
|
+
#{s.body_to_html}
|
575
|
+
BODY
|
576
|
+
EVAL
|
577
|
+
shorten = begin
|
578
|
+
@conf.shorten(eval(body.untaint, @binding))
|
579
|
+
rescue NameError
|
580
|
+
""
|
581
|
+
end
|
582
|
+
categorized[c][ymd] << [idx, s.stripped_subtitle_to_html, shorten]
|
583
|
+
end
|
584
|
+
idx +=1
|
585
|
+
end
|
586
|
+
|
587
|
+
categorized
|
588
|
+
end
|
589
|
+
|
590
|
+
#
|
591
|
+
# cache each section of diary
|
592
|
+
# used in recreate
|
593
|
+
#
|
594
|
+
def initial_replace_sections(diary)
|
595
|
+
return if diary.nil? or !diary.visible? or !diary.categorizable?
|
596
|
+
|
597
|
+
categorized = categorize_diary(diary)
|
598
|
+
categorized.keys.each do |c|
|
599
|
+
PStore.new(cache_file(c)).transaction do |db|
|
600
|
+
db['category'] = {} unless db.root?('category')
|
601
|
+
db['category'].update(categorized[c])
|
602
|
+
end
|
603
|
+
end
|
604
|
+
end
|
605
|
+
end
|
606
|
+
|
607
|
+
end # module Category
|
608
|
+
|
609
|
+
# read cache here so that you can use category with secure mode.
|
610
|
+
@category_cache = Category::Cache.new(@conf, binding)
|
611
|
+
|
612
|
+
#
|
613
|
+
# display categories on update form
|
614
|
+
#
|
615
|
+
def category_edit_support_flatlist
|
616
|
+
ret = ''
|
617
|
+
ret << '<div class="field title">'
|
618
|
+
ret << "#{@category_conf_label}:\n"
|
619
|
+
@categories.sort_by{|e| e.downcase}.each do |c|
|
620
|
+
ret << %Q!| <span class="category-item">#{h c}</span>\n!
|
621
|
+
end
|
622
|
+
ret << "|\n</div>\n<br>\n"
|
623
|
+
ret
|
624
|
+
end
|
625
|
+
|
626
|
+
def category_edit_support_dropdown
|
627
|
+
ret = ''
|
628
|
+
ret << '<div class="field title">'
|
629
|
+
ret << %Q|#{@category_conf_label}: <select id="category-candidate" name="category-candidate">\n|
|
630
|
+
@categories.sort_by{|e| e.downcase}.each do |c|
|
631
|
+
ret << %Q!<option>#{h c}</option>\n!
|
632
|
+
end
|
633
|
+
ret << "|\n</select>\n</div>\n<br>\n"
|
634
|
+
ret
|
635
|
+
end
|
636
|
+
|
637
|
+
if @conf['category.edit_support'] != 0 then
|
638
|
+
enable_js( 'category.js' )
|
639
|
+
add_edit_proc do |date|
|
640
|
+
ret = ''
|
641
|
+
unless @categories.size == 0 then
|
642
|
+
ret << if @conf['category.edit_support'] == 2 then
|
643
|
+
category_edit_support_dropdown
|
644
|
+
else
|
645
|
+
category_edit_support_flatlist
|
646
|
+
end
|
647
|
+
end
|
648
|
+
end
|
649
|
+
end
|
650
|
+
|
651
|
+
|
652
|
+
#
|
653
|
+
# when update diary, update cache
|
654
|
+
#
|
655
|
+
add_update_proc do
|
656
|
+
if /^(append|replace)$/ =~ @mode
|
657
|
+
cache = @category_cache
|
658
|
+
list = []
|
659
|
+
diary = @diaries[@date.strftime('%Y%m%d')]
|
660
|
+
diary.each_section do |s|
|
661
|
+
list |= s.categories
|
662
|
+
end
|
663
|
+
cache.add_categories(list)
|
664
|
+
cache.replace_sections(diary)
|
665
|
+
end
|
666
|
+
end
|
667
|
+
|
668
|
+
|
669
|
+
#
|
670
|
+
# configuration
|
671
|
+
#
|
672
|
+
def category_icon_find_icons
|
673
|
+
return if @category_all_icon
|
674
|
+
@category_all_icon = []
|
675
|
+
%w(png jpg gif bmp).each do |e|
|
676
|
+
@category_all_icon += Dir.glob("#{@category_icon_dir}*.#{e}".untaint).map {|i| File.basename(i)}
|
677
|
+
end
|
678
|
+
@category_all_icon.sort!
|
679
|
+
end
|
680
|
+
|
681
|
+
def category_icon_select(category)
|
682
|
+
options = %Q|<\t<option value="none">#{@category_icon_none_label}</option>\n|
|
683
|
+
@category_all_icon.each do |i|
|
684
|
+
options << %Q|\t<option value="#{h i}"#{" selected" if @category_icon[category] == i}>#{h i}</option>\n|
|
685
|
+
end
|
686
|
+
<<HTML
|
687
|
+
<select name="category.icon.#{h category}">
|
688
|
+
#{options}
|
689
|
+
</select>
|
690
|
+
HTML
|
691
|
+
end
|
692
|
+
|
693
|
+
def category_icon_sample
|
694
|
+
@category_all_icon.map do |i|
|
695
|
+
%Q|<img src="#{h @category_icon_url}#{h i}" alt="#{h i}" title="#{h i}">\n|
|
696
|
+
end.join("/\n")
|
697
|
+
end
|
698
|
+
|
699
|
+
if @mode == 'conf' || @mode == 'saveconf'
|
700
|
+
add_conf_proc( 'category', @category_conf_label, 'basic' ) do
|
701
|
+
cache = @category_cache
|
702
|
+
if @mode == 'saveconf'
|
703
|
+
if @cgi.valid?( 'category_initialize' )
|
704
|
+
@category_cache.recreate(@years)
|
705
|
+
end
|
706
|
+
|
707
|
+
[
|
708
|
+
'category.header1',
|
709
|
+
'category.header2',
|
710
|
+
].each do |name|
|
711
|
+
@conf[name] = @conf.to_native( @cgi.params[name][0] )
|
712
|
+
end
|
713
|
+
[
|
714
|
+
'category.prev_year',
|
715
|
+
'category.next_year',
|
716
|
+
'category.prev_half',
|
717
|
+
'category.next_half',
|
718
|
+
'category.prev_quarter',
|
719
|
+
'category.next_quarter',
|
720
|
+
'category.prev_month',
|
721
|
+
'category.next_month',
|
722
|
+
'category.this_year',
|
723
|
+
'category.this_half',
|
724
|
+
'category.this_quarter',
|
725
|
+
'category.this_month',
|
726
|
+
'category.all_diary',
|
727
|
+
'category.all_category',
|
728
|
+
'category.all',
|
729
|
+
].each do |name|
|
730
|
+
@conf[name] = @conf.to_native( @cgi.params[name][0] )
|
731
|
+
end
|
732
|
+
if ["month", "quarter", "half", "year", "all"].index(@cgi.params["category.period"][0])
|
733
|
+
@conf["category.period"] = @cgi.params["category.period"][0]
|
734
|
+
end
|
735
|
+
@conf['category.edit_support'] = (@cgi.params['category.edit_support'][0] || '1').to_i
|
736
|
+
end
|
737
|
+
category_conf_html
|
738
|
+
end
|
739
|
+
|
740
|
+
category_icon_find_icons if @cgi.params['conf'][0] == 'category_icon'
|
741
|
+
add_conf_proc( 'category_icon', @category_icon_conf_label, 'basic' ) do
|
742
|
+
if @mode == 'saveconf'
|
743
|
+
unless @conf.secure
|
744
|
+
[
|
745
|
+
'category.icon_dir',
|
746
|
+
'category.icon_url',
|
747
|
+
].each do |name|
|
748
|
+
@conf[name] = @cgi.params[name][0].sub(%r|/*$|, '/')
|
749
|
+
end
|
750
|
+
category_icon_location_init
|
751
|
+
end
|
752
|
+
@cgi.params.keys.each do |key|
|
753
|
+
next unless /\Acategory\.icon\..*\z/ === key
|
754
|
+
category = key.sub(/\Acategory\.icon\./, '')
|
755
|
+
if @cgi.params[key][0] == 'none'
|
756
|
+
@category_icon.delete(category)
|
757
|
+
else
|
758
|
+
@category_icon[category] = @cgi.params[key][0]
|
759
|
+
end
|
760
|
+
end
|
761
|
+
category_icon_save
|
762
|
+
end
|
763
|
+
category_icon_conf_html
|
764
|
+
end
|
765
|
+
end
|
766
|
+
|
767
|
+
@categories = @category_cache.restore_categories
|
768
|
+
if @mode == 'categoryview'
|
769
|
+
info = Category::Info.new(@cgi, @years, @conf)
|
770
|
+
@categorized = @category_cache.categorize(info.category, info.years)
|
771
|
+
end
|
772
|
+
|
773
|
+
# Local Variables:
|
774
|
+
# mode: ruby
|
775
|
+
# indent-tabs-mode: t
|
776
|
+
# tab-width: 3
|
777
|
+
# ruby-indent-level: 3
|
778
|
+
# End:
|
779
|
+
# vim: ts=3
|