カテゴリたためるプラグイン
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/ からダウンロードできます。ただ、ライセンスとか詳しくは知りません。
自分で調べて使ってください。