FSWikiでカテゴリが多くなると、見ため大変なんで、カテゴリを畳めるプラグイン。
ずっと前に作った奴ですが...。ちょっと、微妙なんで本家にはあげない。
見ためはこんな感じで、"Test" がカテゴリで、"+ Test"の部分をクリックすると、
==============================================
+ Test
下記のようになる、イメージ。
==============================================
+ Test
で、この開いた、閉じた状態をクッキーに記録するもの。
はてな、普通のファイルのアップロードできないようなので、コードさらしときます。
plugin/category/Install.pm のパッチ
RCS file: /cvsroot/fswiki/fswiki/plugin/category/Install.pm,v retrieving revision 1.2 diff -u -r1.2 Install.pm --- Install.pm 4 Aug 2003 15:07:43 -0000 1.2 +++ Install.pm 28 Jul 2006 18:24:37 -0000 @@ -11,7 +11,8 @@ $wiki->add_paragraph_plugin("category_list","plugin::category::CategoryList","HTML"); $wiki->add_inline_plugin("category","plugin::category::Category","HTML"); $wiki->add_handler("CATEGORY","plugin::category::CategoryHandler"); - + $wiki->add_paragraph_plugin("category_list_fold","plugin::category::CategoryListFold","HTML"); + # ページの保存時、削除時にキャッシュを更新 $wiki->add_hook("save_after","plugin::category::CategoryCache"); $wiki->add_hook("delete" ,"plugin::category::CategoryCache");
plugin/category/CategoryListFold.pm
############################################################################### # # <p>カテゴリの一覧を表示します。カテゴリで折り畳んだ表示にでき、 # 折り畳んだ状態をCookieで保存しています。カテゴリが多いWiki向けです。 # </p> # <pre> # {{category_list_fold}} # </pre> # ############################################################################### package plugin::category::CategoryListFold; use strict; #============================================================================== # コンストラクタ #============================================================================== sub new { my $class = shift; my $self = {}; return bless $self,$class; } #============================================================================== # パラグラフメソッド #============================================================================== sub paragraph { my $self = shift; my $wiki = shift; my $cachefile = $wiki->config('log_dir')."/category.cache"; if(!(-e $cachefile)){ &plugin::category::CategoryCache::create_cache($wiki); } my $result = &Util::load_config_hash(undef,$cachefile); my %param; my @category; my @category_name; my $cnt; foreach my $category (sort keys %$result){ $cnt++; my @pages = map { {PAGE_NAME => $_ } } (sort(split(/\t/, $result->{$category}))); push @category, { # id => $cnt, category_name => $category, page => \@pages, }; push @category_name, $category; } $param{category} = \@category; my $t = new HTML::Template(filename => $wiki->config('tmpl_dir') . "/" . "category_list_fold.tmpl"); $t->param(theme_dir => $wiki->config('theme_uri')); $t->param(%param); # $t->param(category_list => join ", ", map "'$_'", 1 .. $cnt); $t->param(category_list => join ", ", map "'$_'", map CGI::escape($_->{category_name}), @category); return $t->output; } 1;
tmpl/category_list_fold.tmpl
<script type="text/javascript" src="<TMPL_VAR NAME="THEME_DIR">/cookies.js"></script> <script> function exMenu(tName) { tMenu = document.getElementById(tName).style; if (tMenu.display == 'none') tMenu.display = "block"; else tMenu.display = "none"; } function exMenu2(tName) { tMenu = document.getElementById(tName).style; tMenu.display = "block"; } function exMenu3(tName) { tMenu = document.getElementById(tName).style; var expire = getExpDate(30, 0, 0); if (tMenu.display == 'none'){ tMenu.display = "block"; setCookie('category_' + tName, 1, expire); } else { tMenu.display = "none"; deleteCookie('category_' + tName); } } function extract_category(){ var category_name = new Array(<TMPL_VAR category_list>); var i; for (i = 0; category_name[i]; i++){ tName = category_name[i]; if (getCookie('category_' + tName) == 1) { document.getElementById(tName).style.display = "block"; } else { document.getElementById(tName).style.display = "none"; } } } </script> <TMPL_LOOP CATEGORY> <div> <!-- a href="javascript:exMenu3('<TMPL_VAR NAME="CATEGORY_NAME">');" onMouseClick="javascript:exMenu3('<TMPL_VAR NAME="CATEGORY_NAME">');">+</a --> <span onClick="javascript:exMenu3('<TMPL_VAR NAME="CATEGORY_NAME" ESCAPE="URL">');">+ <TMPL_VAR CATEGORY_NAME></span> </div> <ul id="<TMPL_VAR NAME="CATEGORY_NAME" ESCAPE="URL">" style="display:none"> <TMPL_LOOP PAGE> <li><a href="?page=<TMPL_VAR NAME="PAGE_NAME" ESCAPE="URL">"><TMPL_VAR PAGE_NAME></a> </TMPL_LOOP> </ul> </TMPL_LOOP> <script> extract_category(); </script>
theme/cookies.js
なし
これは、JavaScript & DHTML クックブックのものです。
http://www.oreilly.com/catalog/jvdhtmlckbk/ からダウンロードできます。ただ、ライセンスとか詳しくは知りません。
自分で調べて使ってください。