MediaWiki:Common.js: Difference between revisions
Content deleted Content added
mNo edit summary |
copy function ts_resortTable(lnk) from http://meta.wikimedia.org/skins-1.5/common/wikibits.js , in preparation of making improvements |
||
Line 9: | Line 9: | ||
return (isNaN(num) ? 0 : num); |
return (isNaN(num) ? 0 : num); |
||
} |
} |
||
function ts_resortTable(lnk) { |
|||
// get the span |
|||
var span = lnk.getElementsByTagName('span')[0]; |
|||
var td = lnk.parentNode; |
|||
var tr = td.parentNode; |
|||
var column = td.cellIndex; |
|||
var table = tr.parentNode; |
|||
while (table && !(table.tagName && table.tagName.toLowerCase() == 'table')) |
|||
table = table.parentNode; |
|||
if (!table) return; |
|||
// Work out a type for the column |
|||
if (table.rows.length <= 1) return; |
|||
// Skip the first row if that's where the headings are |
|||
var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1); |
|||
var itm = ""; |
|||
for (var i = rowStart; i < table.rows.length; i++) { |
|||
if (table.rows[i].cells.length > column) { |
|||
itm = ts_getInnerText(table.rows[i].cells[column]); |
|||
itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, ""); |
|||
if (itm != "") break; |
|||
} |
|||
} |
|||
sortfn = ts_sort_caseinsensitive; |
|||
if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/)) |
|||
sortfn = ts_sort_date; |
|||
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/)) |
|||
sortfn = ts_sort_date; |
|||
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/)) |
|||
sortfn = ts_sort_date; |
|||
if (itm.match(/^[\u00a3$\u20ac]/)) // pound dollar euro |
|||
sortfn = ts_sort_currency; |
|||
if (itm.match(/^[\d.,]+\%?$/)) |
|||
sortfn = ts_sort_numeric; |
|||
var reverse = (span.getAttribute("sortdir") == 'down'); |
|||
var newRows = new Array(); |
|||
for (var j = rowStart; j < table.rows.length; j++) { |
|||
var row = table.rows[j]; |
|||
var keyText = ts_getInnerText(row.cells[column]); |
|||
var oldIndex = (reverse ? -j : j); |
|||
newRows[newRows.length] = new Array(row, keyText, oldIndex); |
|||
} |
|||
newRows.sort(sortfn); |
|||
var arrowHTML; |
|||
if (reverse) { |
|||
arrowHTML = '<img src="'+ ts_image_path + ts_image_down + '" alt="↓"/>'; |
|||
newRows.reverse(); |
|||
span.setAttribute('sortdir','up'); |
|||
} else { |
|||
arrowHTML = '<img src="'+ ts_image_path + ts_image_up + '" alt="↑"/>'; |
|||
span.setAttribute('sortdir','down'); |
|||
} |
|||
// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones |
|||
// don't do sortbottom rows |
|||
for (var i = 0; i < newRows.length; i++) { |
|||
if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1) |
|||
table.tBodies[0].appendChild(newRows[i][0]); |
|||
} |
|||
// do sortbottom rows only |
|||
for (var i = 0; i < newRows.length; i++) { |
|||
if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1) |
|||
table.tBodies[0].appendChild(newRows[i][0]); |
|||
} |
|||
// Delete any other arrows there may be showing |
|||
var spans = getElementsByClassName(tr, "span", "sortarrow"); |
|||
for (var i = 0; i < spans.length; i++) { |
|||
spans[i].innerHTML = '<img src="'+ ts_image_path + ts_image_none + '" alt="↓"/>'; |
|||
} |
|||
span.innerHTML = arrowHTML; |
|||
ts_alternate(table); |
|||
} |
|||
/*</pre>*/ |
/*</pre>*/ |
Revision as of 15:13, 12 April 2007
/* Any JavaScript here will be loaded for all users on every page load. */
/*<pre>*/
//fix bug in http://meta.wikimedia.org/skins-1.5/common/wikibits.js :
//for the sorting order, take the whole number, not the number before the second comma
function ts_parseFloat(num) {
if (!num) return 0;
num = parseFloat(num.replace(/,/g, ""));
return (isNaN(num) ? 0 : num);
}
function ts_resortTable(lnk) {
// get the span
var span = lnk.getElementsByTagName('span')[0];
var td = lnk.parentNode;
var tr = td.parentNode;
var column = td.cellIndex;
var table = tr.parentNode;
while (table && !(table.tagName && table.tagName.toLowerCase() == 'table'))
table = table.parentNode;
if (!table) return;
// Work out a type for the column
if (table.rows.length <= 1) return;
// Skip the first row if that's where the headings are
var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);
var itm = "";
for (var i = rowStart; i < table.rows.length; i++) {
if (table.rows[i].cells.length > column) {
itm = ts_getInnerText(table.rows[i].cells[column]);
itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");
if (itm != "") break;
}
}
sortfn = ts_sort_caseinsensitive;
if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/))
sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/))
sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/))
sortfn = ts_sort_date;
if (itm.match(/^[\u00a3$\u20ac]/)) // pound dollar euro
sortfn = ts_sort_currency;
if (itm.match(/^[\d.,]+\%?$/))
sortfn = ts_sort_numeric;
var reverse = (span.getAttribute("sortdir") == 'down');
var newRows = new Array();
for (var j = rowStart; j < table.rows.length; j++) {
var row = table.rows[j];
var keyText = ts_getInnerText(row.cells[column]);
var oldIndex = (reverse ? -j : j);
newRows[newRows.length] = new Array(row, keyText, oldIndex);
}
newRows.sort(sortfn);
var arrowHTML;
if (reverse) {
arrowHTML = '<img src="'+ ts_image_path + ts_image_down + '" alt="↓"/>';
newRows.reverse();
span.setAttribute('sortdir','up');
} else {
arrowHTML = '<img src="'+ ts_image_path + ts_image_up + '" alt="↑"/>';
span.setAttribute('sortdir','down');
}
// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
// don't do sortbottom rows
for (var i = 0; i < newRows.length; i++) {
if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1)
table.tBodies[0].appendChild(newRows[i][0]);
}
// do sortbottom rows only
for (var i = 0; i < newRows.length; i++) {
if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1)
table.tBodies[0].appendChild(newRows[i][0]);
}
// Delete any other arrows there may be showing
var spans = getElementsByClassName(tr, "span", "sortarrow");
for (var i = 0; i < spans.length; i++) {
spans[i].innerHTML = '<img src="'+ ts_image_path + ts_image_none + '" alt="↓"/>';
}
span.innerHTML = arrowHTML;
ts_alternate(table);
}
/*</pre>*/