Weitere Optionen
CF (Diskussion | Beiträge) Verschoben nach MediaWiki:Onlyifuploading.js |
CF (Diskussion | Beiträge) Überschreiben der Tabellensortierung, damit leere Einträge immer unten stehen |
||
| Zeile 245: | Zeile 245: | ||
if(execute_hotcat==true) importScript('MediaWiki:HotCat.js'); | if(execute_hotcat==true) importScript('MediaWiki:HotCat.js'); | ||
} | } | ||
//================================================================================ | |||
// Überschreiben der Tabellensortierung, damit leere Einträge immer unten stehen | |||
//================================================================================ | |||
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; | |||
} | |||
if ( table.rows.length <= 1 ) { | |||
return; | |||
} | |||
// Generate the number transform table if it's not done already | |||
if ( ts_number_transform_table === null ) { | |||
ts_initTransformTable(); | |||
} | |||
// Work out a type for the column | |||
// 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; | |||
} | |||
} | |||
} | |||
// TODO: bug 8226, localised date formats | |||
var sortfn = ts_sort_generic; | |||
var preprocessor = ts_toLowerCase; | |||
if ( /^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/.test( itm ) ) { | |||
preprocessor = ts_dateToSortKey; | |||
} else if ( /^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/.test( itm ) ) { | |||
preprocessor = ts_dateToSortKey; | |||
} else if ( /^\d\d[\/.-]\d\d[\/.-]\d\d$/.test( itm ) ) { | |||
preprocessor = ts_dateToSortKey; | |||
// (minus sign)([pound dollar euro yen currency]|cents) | |||
} else if ( /(^([-\u2212] *)?[\u00a3$\u20ac\u00a4\u00a5]|\u00a2$)/.test( itm ) ) { | |||
preprocessor = ts_currencyToSortKey; | |||
} else if ( ts_number_regex.test( itm ) ) { | |||
preprocessor = ts_parseFloat; | |||
} | |||
var reverse = ( span.getAttribute( 'sortdir' ) == 'down' ); | |||
var newRows = new Array(); | |||
var staticRows = new Array(); | |||
for ( var j = rowStart; j < table.rows.length; j++ ) { | |||
var row = table.rows[j]; | |||
if( (' ' + row.className + ' ').indexOf(' unsortable ') < 0 ) { | |||
var keyText = ts_getInnerText( row.cells[column] ); | |||
if( keyText === undefined ) { | |||
keyText = ''; | |||
} | |||
var oldIndex = ( reverse ? -j : j ); | |||
var preprocessed = preprocessor( keyText.replace(/^[\s\xa0]+/, '').replace(/[\s\xa0]+$/, '') ); | |||
newRows[newRows.length] = new Array( row, preprocessed, oldIndex ); | |||
} else { | |||
staticRows[staticRows.length] = new Array( row, false, j-rowStart ); | |||
} | |||
} | |||
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' ); | |||
} | |||
for ( var i = 0; i < staticRows.length; i++ ) { | |||
var row = staticRows[i]; | |||
newRows.splice( row[2], 0, row ); | |||
} | |||
// 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 && ( ' ' + newRows[i][0].cells[column].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 || ( ' ' + newRows[i][0].cells[column].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; | |||
if ( ts_alternate_row_colors ) { | |||
ts_alternate( table ); | |||
} | |||
} | |||
//================================================================================ | |||