MediaWiki:Gadget-tablesort.js
ナビゲーションに移動
検索に移動
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explore/Edger: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: Ctrl-F5を押してください
/**
* MediaWiki標準のソート機能を補強するスクリプト
*/
var dateRegex = new RegExp(/(\d{4})年(1[0-2]|\d)月(3[01]|[12]\d|[1-9])日/);
$('table.sortable').each(function() {
var $table = $(this);
$rows = $table.find('> tbody > tr'),
sortTypes = [];
$rows.each(function(i) {
var $tr = $(this);
/* ヘッダー行のdata-sort-typeでソートの種類を判定する */
if (i === 0) {
$tr.children('th, td').each(function(j) {
var $col = $(this),
type = $col.hasClass('unsortable') ? null : $col.data('sortType');
sortTypes.push(type);
});
} else {
$tr.children('th, td').each(function(j) {
var $col = $(this);
/* 既にdata-sort-valueが指定されている場合は処理しない */
if ($col.data('sortValue')) return;
switch (sortTypes[j]) {
case 'date':
if (dateRegex.test($col.text())) {
$col.data('sortValue', RegExp.$3 + ' ' + RegExp.$2 + '月 ' + RegExp.$1);
}
return;
default:
var $rt = $col.find('.rt');
if ($rt.length) {
var sortkey = defaultsortString($rt.text());
console.log('data-sort-value:' + sortkey);
$col.data('sortValue', sortkey);
}
}
});
}
});
});
function defaultsortString(str) {
return str.replace(/[ァ-ン]/g, function(c) {
return String.fromCharCode(c.charCodeAt(0) - 96);
})
.replace(/ /g, '')
.replace(/[がぎぐげござじずぜぞだぢづでどばびぶべぼ]/g, function(c) {
return String.fromCharCode(c.charCodeAt(0) - 1);
})
.replace(/[ぱぴぷぺぽ]/g, function(c) {
return String.fromCharCode(c.charCodeAt(0) - 2);
});
}