-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDynamicSidebar.js
156 lines (125 loc) · 5.04 KB
/
DynamicSidebar.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// <source lang="javascript">
/************************************************************************/
// ja> = 動的生成サイドバー =
// > 各利用者それぞれのサイドバーを、動的に生成するスクリプトです。
// > ;作者: 青子守歌
// > ;URL: http://ja.wikipedia.org/wiki/User:aokomoriuta
// >
// > == 使い方 ==
// > [[特別:利用者ページ/Sidebar]]に、[[MediaWiki:Sidebar]]の形式で
// > 生成したいサイドバーを入力してください。
// >
// > == ライセンス ==
// > このスクリプトは、複数ライセンスで利用可能です。
// > 選択可能なライセンスは次の通り:
// > * クリエイティブ・コモンズ 表示-継承 3.0 非移植
// > * クリエイティブ・コモンズ 表示-非営利 3.0 非移植
// > * GNU一般公衆利用許諾書 バージョン3.0以降
/************************************************************************/
// en> = Dynamic Generated Sidebar =
// > This script allows users can add their own custom sidebars.
// > ;author: 青子守歌
// > ;URL: http://ja.wikipedia.org/wiki/User:aokomoriuta
// >
// > == Usage ==
// > Create sidebar configuration page on [[Special:Mypage/Sidebar]],
// > with the same format as [[MediaWiki:Sidebar]].
// >
// > == License ==
// > This script is multi-licensed.
// > You can select the license of your choice from as following:
// > * Creative Commons Attribution-ShareAlike 3.0 Unported
// > * Creative Commons Attribution-Noncommercial 3.0 Unported
// > * GNU General Public License v3.0 or later
/************************************************************************/
addOnloadHook(function(){jQuery(document).ready(function($)
{
// サイドバーからコメントや改行を除去
$("#mw-panel").contents().not("[nodeType=1]").remove();
// サイドバーの最初と最後にコメントを追加
$("#mw-panel").prepend(document.createComment("DynamicSidebar.js"));
$("#mw-panel").append(document.createComment("/DynamicSidebar.js"));
// 規定のサイドバーを読み込み
var defaultSidebar = $.get(wgServer + wgScript + '?title=MediaWiki:Sidebar&action=render', null, function()
{
// すべてのグループについて
$(defaultSidebar.responseText).children().each(function()
{
// そのグループを削除
$("#p-" + $(this).contents()[0].textContent).remove();
});
});
// グループ数を初期化
var groupCount = 0;
// 新しいグループを追加するメソッドの設定
var AppendNewGroup = function($groupInfo)
{
// グループ名の取得
var groupName = $groupInfo.contents()[0].textContent.replace("\n", "");
// ツールボックスを基にグループを生成
$group = $("#p-tb").clone();
// IDの作成
var id = "p-" + encodeURI(groupName);
// idの設定
$group.attr("id", id);
// グループのクラスを初期化
$group.attr("class", "portal")
// 開閉状態のクッキーの読み込み
var state = $.cookie('vector-nav-'+id);
// クッキーに応じて、開閉状態クラスを指定
$group.addClass((groupCount++ == 0) ? "first persistent" :
((state=="true" || state==null) ? 'expanded' : 'collapsed'));
// 開閉状態のクッキーを保存
$.cookie("vector-nav-" + $(this).parent().attr("id"),
$(this).parent().is(".collapsed"),
{expires: 30, path: "/"});
// ヘッダの設定
$("h5", $group).text(groupName);
// ヘッダのタブインデックスを解除
$("h5", $group).removeAttr("tabIndex");
// マウスクリック時に開閉
$("h5", $group).mousedown(function()
{
// 開閉状態のクッキーを保存
$.cookie("vector-nav-" + $(this).parent().attr("id"),
$(this).parent().is(".collapsed"),
{expires: 30, path: "/"});
// 開閉を切り替え
$(this).parent().toggleClass("expanded").toggleClass("collapsed")
.find("div.body").slideToggle("fast");
// blur実行
$(this).blur();
});
// グループの中身を空にする
$("ul", $group).empty();
// すべてのアイテムについて
$("li", $groupInfo).each(function()
{
// |区切りで取得
var split = $(this).text().split('|');
// 項目を作成
var $item = $(document.createElement("li"));
var $a = $(document.createElement("a"));
// リンクの設定
$a.attr("href", $(this).children().is("a.external") ? split[0] : wgArticlePath.replace("$1", encodeURI(split[0])));
// ラベルの設定
$a.text(split[(split.length >= 2) ? 1 : 0]);
// 項目を追加
$("ul", $group).append($item);
$item.append($a);
});
// ツールボックスの前にグループの追加
$("#p-tb").before($group);
}
// 利用者サイドバー設定を読み込み
var userSidebar = $.get(wgServer + wgScript + '?action=render&title=User:' + encodeURI(wgUserName) + "/Sidebar", null, function()
{
// すべてのグループについて
$(userSidebar.responseText).children().each(function()
{
// そのグループを追加
AppendNewGroup($(this));
});
});
});});
// </source>