( document.childNodes && !document.all && !navigator.taintEnabled );
// For accesskeys; note that FF3+ is included here!
var is_ff2 = /firefox\/[2-9]|minefield\/3/.test( clientPC );
+var ff2_bugs = /firefox\/2/.test( clientPC );
// These aren't used here, but some custom scripts rely on them
var is_ff2_win = is_ff2 && clientPC.indexOf('windows') != -1;
var is_ff2_x11 = is_ff2 && clientPC.indexOf('x11') != -1;
var is_opera_preseven = window.opera && !document.childNodes;
var is_opera_seven = window.opera && document.childNodes;
var is_opera_95 = /opera\/(9.[5-9]|[1-9][0-9])/.test( clientPC );
+ var opera6_bugs = is_opera_preseven;
+ var opera7_bugs = is_opera_seven && !is_opera_95;
+ var opera95_bugs = /opera\/(9\.5)/.test( clientPC );
}
// Global external objects used by this script.
if (!window.onloadFuncts) {
var onloadFuncts = [];
-}
-
-function addOnloadHook(hookFunct) {
+}
+
+//should use mwAddOnloadHook once js2 is enabled
+function addOnloadHook(hookFunct) {
// Allows add-on scripts to add onload functions
if(!doneOnloadHook) {
onloadFuncts[onloadFuncts.length] = hookFunct;
}
function importScript(page) {
+ // TODO: might want to introduce a utility function to match wfUrlencode() in PHP
var uri = wgScript + '?title=' +
- encodeURIComponent(page.replace(/ /g,'_')).replace('%2F','/').replace('%3A',':') +
+ encodeURIComponent(page.replace(/ /g,'_')).replace(/%2F/ig,'/').replace(/%3A/ig,':') +
'&action=raw&ctype=text/javascript';
return importScriptURI(uri);
}
return importStylesheetURI(wgScript + '?action=raw&ctype=text/css&title=' + encodeURIComponent(page.replace(/ /g,'_')));
}
-function importStylesheetURI(url) {
- return document.createStyleSheet ? document.createStyleSheet(url) : appendCSS('@import "' + url + '";');
+function importStylesheetURI(url,media) {
+ var l = document.createElement('link');
+ l.type = 'text/css';
+ l.rel = 'stylesheet';
+ l.href = url;
+ if(media) l.media = media
+ document.getElementsByTagName('head')[0].appendChild(l);
+ return l;
}
function appendCSS(text) {
// special stylesheet links
if (typeof stylepath != 'undefined' && typeof skin != 'undefined') {
- if (is_opera_preseven) {
+ // FIXME: This tries to load the stylesheets even for skins where they
+ // don't exist, i.e., everything but Monobook.
+ if (opera6_bugs) {
importStylesheetURI(stylepath+'/'+skin+'/Opera6Fixes.css');
- } else if (is_opera_seven && !is_opera_95) {
+ } else if (opera7_bugs) {
importStylesheetURI(stylepath+'/'+skin+'/Opera7Fixes.css');
- } else if (is_khtml) {
- importStylesheetURI(stylepath+'/'+skin+'/KHTMLFixes.css');
+ } else if (opera95_bugs) {
+ importStylesheetURI(stylepath+'/'+skin+'/Opera9Fixes.css');
+ } else if (ff2_bugs) {
+ importStylesheetURI(stylepath+'/'+skin+'/FF2Fixes.css');
}
}
+
if (wgBreakFrames) {
// Un-trap us from framesets
if (window.top != window) {
// Uses DOM calls to avoid document.write + XHTML issues
var linkHolder = document.getElementById('toctitle');
- if (!linkHolder) {
+ var existingLink = document.getElementById('togglelink');
+ if (!linkHolder || existingLink) {
+ // Don't add the toggle link twice
return;
}
}
for (var i = start; i <= finish; ++i ) {
checkboxes[i].checked = endState;
+ if( i > start && typeof checkboxes[i].onchange == 'function' )
+ checkboxes[i].onchange(); // fire triggers
}
lastCheckbox = this.index;
return true;
if (!document.getElementById) {
return;
}
- document.getElementById(ida).disabled=true;
- document.getElementById(idb).disabled=false;
+ //hide and show appropriate upload sizes
+ if(idb == 'wpUploadFileURL'){
+ var e = document.getElementById('mw-upload-maxfilesize');
+ if(e) e.style.display = "none";
+
+ var e = document.getElementById('mw-upload-maxfilesize-url');
+ if(e) e.style.display = "block";
+ }
+ if(idb == 'wpUploadFile'){
+ var e = document.getElementById('mw-upload-maxfilesize-url');
+ if(e) e.style.display = "none";
+
+ var e = document.getElementById('mw-upload-maxfilesize');
+ if(e) e.style.display = "block";
+ }
+ document.getElementById(ida).disabled = true;
+ document.getElementById(idb).disabled = false;
}
function toggle_element_check(ida,idb) {
From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
*/
function getElementsByClassName(oElm, strTagName, oClassNames){
- var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
var arrReturnElements = new Array();
+ if ( typeof( oElm.getElementsByClassName ) == "function" ) {
+ /* Use a native implementation where possible FF3, Saf3.2, Opera 9.5 */
+ var arrNativeReturn = oElm.getElementsByClassName( oClassNames );
+ if ( strTagName == "*" )
+ return arrNativeReturn;
+ for ( var h=0; h < arrNativeReturn.length; h++ ) {
+ if( arrNativeReturn[h].tagName.toLowerCase() == strTagName.toLowerCase() )
+ arrReturnElements[arrReturnElements.length] = arrNativeReturn[h];
+ }
+ return arrReturnElements;
+ }
+ var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
var arrRegExpClassNames = new Array();
if(typeof oClassNames == "object"){
for(var i=0; i<oClassNames.length; i++){
for (var i = 0; i < firstRow.cells.length; i++) {
var cell = firstRow.cells[i];
if ((" "+cell.className+" ").indexOf(" unsortable ") == -1) {
- cell.innerHTML += ' <a href="#" class="sortheader" onclick="ts_resortTable(this);return false;"><span class="sortarrow"><img src="'+ ts_image_path + ts_image_none + '" alt="↓"/></span></a>';
+ cell.innerHTML += ' '
+ + '<a href="#" class="sortheader" '
+ + 'onclick="ts_resortTable(this);return false;">'
+ + '<span class="sortarrow">'
+ + '<img src="'
+ + ts_image_path
+ + ts_image_none
+ + '" alt="↓"/></span></a>';
}
}
if (ts_alternate_row_colors) {
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];
- var keyText = ts_getInnerText(row.cells[column]);
- var oldIndex = (reverse ? -j : j);
- var preprocessed = preprocessor( keyText );
+ if((" "+row.className+" ").indexOf(" unsortable ") < 0) {
+ var keyText = ts_getInnerText(row.cells[column]);
+ var oldIndex = (reverse ? -j : j);
+ var preprocessed = preprocessor( keyText );
- newRows[newRows.length] = new Array(row, preprocessed, oldIndex);
+ newRows[newRows.length] = new Array(row, preprocessed, oldIndex);
+ } else staticRows[staticRows.length] = new Array(row, false, j-rowStart);
}
newRows.sort(sortfn);
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++) {
}
num = parseFloat(s.replace(/,/g, ""));
- return (isNaN(num) ? s : num);
+ return (isNaN(num) ? 0 : num);
}
function ts_currencyToSortKey( s ) {