atwikiでjQuery pluginのtablesorterを使ってテーブルをソート対応してみた
対応させる為に必要なファイル
必要なファイルをダウンロードする
概要
atwiki記法でテーブルを書くと、
|項目1|項目2| |1|2| |5|3|
table タグでテーブルが作られる
項目1 | 項目2 |
1 | 2 |
5 | 3 |
ソースはこのようになっている
<table> <tr><td>項目1</td><td>項目2</td></tr> <tr><td>1</td><td>2</td></tr> <tr><td>5</td><td>3</td></tr> </table>
atwiki記法で作られたテーブルは簡易的なものなので、tablesorterに対応させる為、table タグにclass="tablesorter"を追加、thead タグ、 tbody タグを追加、column部分の tr タグ内の td を th へ修正する必要がある。
<table class="tablesorter"> <thead> <tr><th>項目1</th><th>項目2</th></tr> </thead> <tbody> <tr><td>1</td><td>2</td></tr> <tr><td>5</td><td>3</td></tr> </tbody> </table>
対応方法
JavaScriptを使い上記の修正を施す、
デモページのソース全文はこちら*1
jQuery plugin tablesorterのデモ <!-- これが元になるテーブル、atwiki記法で書かれています --> #divid(tablesorter-src){ |名前|戦闘力|Lv| |クリ○ン|600|20| |ゴク○|800|25| |ピッ○ロさん|780|23| |ヤム○ャ|380|33| } #divid(makeTableButton){ } <!-- ここにソート対応したテーブルが作られます --> #divid(tablesorter-dest){ } // -------------------- ここからしたは弄る必要なし ----------------- #include_js(http://www18.atwiki.jp/worditest/pub/jquery.min.js) #include_js(http://www18.atwiki.jp/worditest/pub/jquery.tablesorter.js) #javascript(){ // ボタン作成 $("#makeTableButton").append("<input type='button' value='ソート対応のテーブルを作成' onclick='makeTable()' />"); function makeTable() { // 移動元と移動先のテーブル var src = $("#tablesorter-src").children("table"); $("#tablesorter-dest").append("<table>"); var dest = $("#tablesorter-dest").children("table"); // 移動先テーブルの準備 dest.addClass("tablesorter"); dest.append("<thead id='tableHead'>"); dest.append("</thead>"); dest.append("<tbody id='tableBody'>"); dest.append("</tbody>"); // 移動元から移動先へ srcHead = src.find(".atwiki_tr_1"); srcHead.html(srcHead.html().replace(/td/ig, "th")); srcHead.appendTo("#tableHead"); src.find("tr").appendTo("#tableBody"); // 準備が出来たのでソート対応へ dest.tablesorter({sortList:[[0,0]], widgets: ['zebra']}); // 移動後に必要ないものの後始末 $("#tablesorter-src").empty(); $("#makeTableButton").html("<input type='button' value='作成完了!' disabled />"); } }
不満点
セキュリティ上仕方ないかもしれないが、atwikiの編集モードを管理者のみにしていないとJavaScriptが有効にならない、誰でもページを編集出来て、且つセキュリティ維持する良い方法無いだろうか。
*1:JavaScriptを有効にする為には編集権限を管理者のみにする必要があるけど、そうするとソースが読めない為ここに書いておく