Diferencia entre revisiones de «MediaWiki:Common.js»
Apariencia
Contenido eliminado Contenido añadido
revierto |
Ordenación, segundo intento |
||
Línea 373: | Línea 373: | ||
} |
} |
||
}); |
}); |
||
} |
|||
// == Redefinición de ordenación de tablas "sortable" == |
|||
// Traido de la Inclopedia. Ordena nombres de meses en español y cambia puntos por comas. |
|||
function ts_dateToSortKey(date) { |
|||
if (date.length > 14) { |
|||
date = date.toLowerCase(); |
|||
if (date.charAt(1) == " " || date.charAt(1) == "-") { |
|||
var dia = '0' + date.charAt(0); |
|||
} else { |
|||
var dia = date.substr(0, 2); |
|||
} |
|||
var iniciomes = date.indexOf(" de ") + 4; |
|||
var finmes = date.lastIndexOf(" de "); |
|||
var longmes = finmes - iniciomes; |
|||
switch (date.substr(iniciomes, longmes)) { |
|||
case "enero": |
|||
var mes = "01"; |
|||
break; |
|||
case "febrero": |
|||
var mes = "02"; |
|||
break; |
|||
case "marzo": |
|||
var mes = "03"; |
|||
break; |
|||
case "abril": |
|||
var mes = "04"; |
|||
break; |
|||
case "mayo": |
|||
var mes = "05"; |
|||
break; |
|||
case "junio": |
|||
var mes = "06"; |
|||
break; |
|||
case "julio": |
|||
var mes = "07"; |
|||
break; |
|||
case "agosto": |
|||
var mes = "08"; |
|||
break; |
|||
case "septiembre": |
|||
var mes = "09"; |
|||
break; |
|||
case "octubre": |
|||
var mes = "10"; |
|||
break; |
|||
case "noviembre": |
|||
var mes = "11"; |
|||
break; |
|||
case "diciembre": |
|||
var mes = "12"; |
|||
break; |
|||
} |
|||
for (var anno = date.substr(finmes + 4); anno.length < 4; anno = '0' + anno); |
|||
return anno + mes + dia; |
|||
} else if (date.length == 10) { |
|||
if (ts_europeandate == false) { |
|||
return date.substr(6, 4) + date.substr(0, 2) + date.substr(3, 2); |
|||
} else { |
|||
return date.substr(6, 4) + date.substr(3, 2) + date.substr(0, 2); |
|||
} |
|||
} else if (date.length == 8) { |
|||
yr = date.substr(6, 2); |
|||
if (parseInt(yr) < 50) { |
|||
yr = '20' + yr; |
|||
} else { |
|||
yr = '19' + yr; |
|||
} |
|||
if (ts_europeandate == true) { |
|||
return yr + date.substr(3, 2) + date.substr(0, 2); |
|||
} else { |
|||
return yr + date.substr(0, 2) + date.substr(3, 2); |
|||
} |
|||
} |
|||
return "00000000"; |
|||
} |
|||
function ts_parseFloat(num) { |
|||
if (!num) return 0; |
|||
num = num.replace(/\./g, ""); |
|||
num = num.replace(/ /g, ""); |
|||
num = num.replace(/,/, "."); |
|||
num = parseFloat(num); |
|||
return (isNaN(num) ? 0 : num); |
|||
} |
|||
function ts_sort_generic(a, b) { |
|||
if ((typeof a[1] == "string") && (typeof b[1] == "string")) { |
|||
/* Don't do this if it's eg. 'number'. We don't want that and number doesn't have .toLowerCase() */ |
|||
var aa = a[1].toLowerCase(); |
|||
var bb = b[1].toLowerCase(); |
|||
return (aa.localeCompare(bb)); |
|||
} else { |
|||
return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]; //Original ts_sort_generic |
|||
} |
|||
} |
|||
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? de [a-zA-Z]+ de \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; |
|||
// pound dollar euro yen currency cents |
|||
} else if (/(^[\u00a3$\u20ac\u00a4\u00a5]|\u00a2$)/.test(itm)) { |
|||
preprocessor = ts_currencyToSortKey; |
|||
} else if (/^\d+ \d+/.test(itm)) { // Detección adicional de números con |
|||
preprocessor = ts_parseFloat; |
|||
} 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]); |
|||
var oldIndex = (reverse ? -j : j); |
|||
var preprocessed = preprocessor(keyText); |
|||
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) 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; |
|||
if (ts_alternate_row_colors) { |
|||
ts_alternate(table); |
|||
} |
|||
} |
} |
||
Línea 839: | Línea 637: | ||
/* End of mw.loader.using callback */ |
/* End of mw.loader.using callback */ |
||
}); |
}); |
||
/** |
|||
* Ordenación de tablas para seguir la convención de la RAE, SI y el Manual de Estilo |
|||
* aún así se permite que el antigua sistema mantenga su comportamiento para no dañar |
|||
* las miles de tablas sortable existentes de Wikipedia. |
|||
* El script detecta si se usa la ordenación antigua (punto como separador de millares, y coma como separador de decimales) |
|||
* o la nueva ordenación (espacio como separador de millares, y punto o coma como separador de decimales) |
|||
* Aun así esto debería estar en mediaWiki y no aquí |
|||
* Algo relacionado pero que no afecta las sortable directamente bug 34977 |
|||
* |
|||
* Personaliza la ordenación de fechas |
|||
* Se ordenan según "dd de mm de yy" o "dd de mm de yyyy" |
|||
* También reconoce dd-mm-yy, dd-mm-yyyy (y otras variaciones usando / , .) |
|||
*/ |
|||
mw.loader.using( 'jquery.tablesorter', function () { |
|||
var ts = $.tablesorter; |
|||
ts.formatDigit = function( s ) { |
|||
var i = parseFloat( s.replace( /[\u00a0\u202f. ]/g, '' ).replace( /,/g, '.' ).replace( "\u2212", '-' ) ); |
|||
return ( isNaN(i)) ? 0 : i; |
|||
}; |
|||
ts.formatDigitSI = function( s ) { |
|||
var i = parseFloat( s.replace( /[\u00a0\u202f ]/g, '' ).replace( /,/g, '.' ).replace( "\u2212", '-' ) ); |
|||
return ( isNaN(i)) ? 0 : i; |
|||
}; |
|||
ts.numberRegexCustom = new RegExp( "^[-+\u2212]?([0-9]{3}[.\.])*?([0-9]{1,3},[0-9]+)?[\\s\\xa0]*%?$", "i" ); |
|||
ts.numberRegexCustomSI = new RegExp( "^[-+\u2212]?([0-9]{1,3}[\u00a0\u202f ])*?([0-9]{1,3}([.,\.,][0-9]+)?)?[\\s\\xa0]*%?$", "i" ); |
|||
var regex = []; |
|||
ts.monthNames = [ |
|||
[], |
|||
[] |
|||
]; |
|||
for ( var i = 1; i < 13; i++ ) { |
|||
ts.monthNames[0][i] = mw.config.get( 'wgMonthNames' )[i].toLowerCase(); |
|||
ts.monthNames[1][i] = mw.config.get( 'wgMonthNamesShort' )[i].toLowerCase().replace( '.', '' ); |
|||
regex.push( $.escapeRE( ts.monthNames[0][i] ) ); |
|||
regex.push( $.escapeRE( ts.monthNames[1][i] ) ); |
|||
} |
|||
regex = regex.join( '|' ); |
|||
ts.fechaRegexCustom = []; |
|||
ts.fechaRegexCustom[0] = new RegExp( "^\\d\\d?\\sde\\s(" + regex + ")\\sde\\s\\d{2,4}$" ); |
|||
ts.fechaRegexCustom[1] = new RegExp( "^(\\d\\d[\/.-]\\d\\d[\/.-]\\d\\d\\d\\d|\\d\\d[\/.-]\\d\\d[\/.-]\\d\\d)$" ); |
|||
$.tablesorter.addParser( { |
|||
id: 'numberSI', |
|||
is: function ( s, table ) { |
|||
return $.tablesorter.numberRegexCustomSI.test( $.trim( s ) ); |
|||
}, |
|||
format: function ( s ) { |
|||
return $.tablesorter.formatDigitSI( s ); |
|||
}, |
|||
type: 'numeric' |
|||
}); |
|||
$.tablesorter.addParser( { |
|||
id: 'numberCustom', |
|||
is: function ( s, table ) { |
|||
return $.tablesorter.numberRegexCustom.test( $.trim( s ) ); |
|||
}, |
|||
format: function ( s ) { |
|||
return $.tablesorter.formatDigit( s ); |
|||
}, |
|||
type: 'numeric' |
|||
}); |
|||
ts.addParser( { |
|||
id: 'fecha', |
|||
is: function( s ) { |
|||
return ( ts.fechaRegexCustom[0].test(s) || ts.fechaRegexCustom[1].test(s) ); |
|||
}, |
|||
format: function( s, table ) { |
|||
s = $.trim( s.toLowerCase() ); |
|||
for ( var i = 1, j = 0; i < 13 && j < 2; i++ ) { |
|||
s = s.replace( ts.monthNames[j][i], i ); |
|||
if ( i == 12 ) { |
|||
j++; |
|||
i = 0; |
|||
} |
|||
} |
|||
s = s.replace( /( de |[\-\.\,' ])/g, '/' ); |
|||
// Replace double slashes |
|||
s = s.replace( /\/\//g, '/' ); |
|||
s = s.replace( /\/\//g, '/' ); |
|||
s = s.split( '/' ); |
|||
// Pad Month and Day |
|||
if ( s[0] && s[0].length == 1 ) { |
|||
s[0] = '0' + s[0]; |
|||
} |
|||
if ( s[1] && s[1].length == 1 ) { |
|||
s[1] = '0' + s[1]; |
|||
} |
|||
var y; |
|||
if ( !s[2] ) { |
|||
// Fix yearless dates |
|||
s[2] = 2000; |
|||
} else if ( ( y = parseInt( s[2], 10) ) < 100 ) { |
|||
// Guestimate years without centuries |
|||
if ( y < 30 ) { |
|||
s[2] = 2000 + y; |
|||
} else { |
|||
s[2] = 1900 + y; |
|||
} |
|||
} |
|||
// Resort array depending on preferences |
|||
var d = s.shift(); |
|||
s.push( s.shift() ); |
|||
s.push(d); |
|||
return parseInt( s.join( '' ), 10 ); |
|||
}, |
|||
type: 'numeric' |
|||
} ); |
|||
/* End of mw.loader.using callback */ |
|||
}); |
|||
/* Fin de alias */ |
/* Fin de alias */ |
||
})( jQuery, mediaWiki ); |
})( jQuery, mediaWiki ); |
Revisión del 17:47 1 abr 2012
//Alias
(function ( $, mw ) {
/**
* Keep code in MediaWiki:Common.js to a minimum as it is unconditionally
* loaded for all users on every wiki page. If possible create a gadget that is
* enabled by default instead of adding it here (since gadgets are fully
* optimized ResourceLoader modules with possibility to add dependencies etc.)
*
* Since common.js isn't a gadget, there is no place to declare its
* dependencies, so we have to lazy load them with mw.loader.using on demand and
* then execute the rest in the callback. In most cases these dependencies will
* be loaded (or loading) already and the callback will not be delayed. In case a
* dependency hasn't arrived yet it'll make sure those are loaded before this.
*/
mw.loader.using( 'mediawiki.util', function() {
/* Begin of mw.loader.using callback */
//Compatibilidad
/* Scripts specific to Internet Explorer */
if ($.client.profile().name == 'msie') {
/**
* Description: Fixes IE horizontal scrollbar bug
* Maintainers: [[User:Tom-]]?
*/
var oldWidth;
var docEl = document.documentElement;
var doFixIEScroll = function () {
docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
};
var fixIEScroll = function () {
if (!oldWidth || docEl.clientWidth > oldWidth) {
doFixIEScroll();
} else {
setTimeout(doFixIEScroll, 1);
}
oldWidth = docEl.clientWidth;
};
document.attachEvent("onreadystatechange", fixIEScroll);
document.attachEvent("onresize", fixIEScroll);
// In print IE (7?) does not like line-height
mw.util.addCSS('@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
// IE overflow bug
mw.util.addCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
// IE zoomfix
// Use to fix right floating div/table inside tables
mw.util.addCSS('.iezoomfix div, .iezoomfix table { zoom: 1;}');
/* Helper script for .hlist class in common.css
* Maintainer: [[User:Edokter]]
*/
/* Add pseudo-selector class to last child list items in IE 8 */
if ( $.client.profile().versionBase == '8' ) {
$( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
.addClass( 'hlist-last-child' );
}
/* Generate interpuncts and parens for IE < 8 */
if ( $.client.profile().versionBase < '8' ) {
$( '.hlist' ).find( 'dt + dd, dt + dt' ).prev()
.append( '<b>:</b> ' );
$( '.hlist' ).find( 'dd + dd, dd + dt, li + li' ).prev()
.append( '<b>·</b> ' );
$( '.hlist' ).find( 'dl dl, ol ol, ul ul' )
.prepend( '( ' ).append( ') ' );
}
}
/* Fixes for Windows font rendering */
if ($.client.profile().platform == 'win') {
mw.util.addCSS('.IPA, .Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; }');
}
// Funcionalidad
/**
* Redirect User:Name/skin.js and skin.css to the current skin's pages
* (unless the 'skin' page really exists)
* @source: //www.mediawiki.org/wiki/Snippets/Redirect_skin.js
* @rev: 3
*/
if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
// Make sure there was a part before and after the slash
// And that the latter is 'skin.js' or 'skin.css'
if ( titleParts.length == 2 ) {
var userSkinPage = titleParts[0] + '/' + mw.config.get( 'skin' );
if ( titleParts[1] === 'skin.js' ) {
window.location.href = mw.util.wikiGetlink( userSkinPage + '.js' );
} else if ( titleParts[1] === 'skin.css' ) {
window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' );
}
}
}
/** &withCSS= and &withJS= URL parameters *******
* Allow to try custom scripts from MediaWiki space
* without editing personal .css or .js files
*/
var extraCSS = mw.util.getParamValue("withCSS");
if (extraCSS && extraCSS.match(/^MediaWiki:[^&<>=%]*\.css$/)) {
importStylesheet(extraCSS);
}
var extraJS = mw.util.getParamValue("withJS");
if (extraJS && extraJS.match(/^MediaWiki:[^&<>=%]*\.js$/)) {
importScript(extraJS);
}
//Edición
if ( $.inArray(mw.config.get('wgAction'), ['edit', 'submit'] ) > -1) {
/** Fix edit summary prompt for undo ******************************************
* Fixes the fact that the undo function combined with the "no edit summary prompter"
* causes problems if leaving the edit summary unchanged.
* Added by [[User:Deskana]], code by [[User:Tra]].
* See also [[bugzilla:8912]].
*/
$(document).ready( function () {
if (document.location.search.indexOf("undo=") != -1 && document.getElementsByName('wpAutoSummary')[0]) {
document.getElementsByName('wpAutoSummary')[0].value = '1';
}
});
/**
* Caracteres especiales (edittools)
* Crea (y coloca) el ''combobox'' que permite seleccionar un conjunto determinado de
* caracteres especiales bajo la caja de edición.
* Funciona en conjunto con [[MediaWiki:Edittools]] y [[MediaWiki:Edittools.js]].
* Basado en [[commons:MediaWiki:Edittools.js]].
*/
importScript('MediaWiki:Edittools.javascript');
//Seguimiento
} else if (mw.config.get('wgPageName') == 'Especial:Seguimiento') {
mw.loader.load( mw.config.get('wgServer') + mw.config.get('wgScript') +
'?title=MediaWiki:Common.js/seguimiento.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
}
//Wikibugs
importScript('MediaWiki:Wikibugs.js');
/** For sysops
*
* Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]]
*/
if ($.inArray('sysop', mw.config.get('wgUserGroups')) > -1) {
if (!window.disableSysopJS) {
$(document).ready( function () {
importScript('MediaWiki:Sysop.js');
});
}
}
/** WikiMiniAtlas *******************************************************
*
* Description: WikiMiniAtlas is a popup click and drag world map.
* This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
* The script itself is located on meta because it is used by many projects.
* See [[Meta:WikiMiniAtlas]] for more information.
* Maintainers: [[User:Dschwen]]
*/
window.wma_settings = {
buttonImage: "//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Erioll_world.svg/15px-Erioll_world.svg.png"
};
mw.loader.load('//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
/* OpenStreetMap */
window.osm_proj_map = 'mapa'; //"map" in project language
window.osm_proj_lang = 'es'; //project language
mw.loader.load('//meta.wikimedia.org/w/index.php?title=MediaWiki:OSM.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
/** Mejoras de diseño de la Portada
*
* Descripción: Varias mejoras de diseño para la portada, incluyendo un
* enlace adicional a la lista completa de idiomas disponibles.
* Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
* Adaptado de [[en:MediaWiki:Common.js]]
*/
if ($.inArray(mw.config.get('wgPageName'), ['Wikipedia:Portada', 'Wikipedia Discusión:Portada']) > -1) {
$(document).ready(function () {
mw.util.addPortletLink('p-lang', '//es.wikipedia.org/wiki/Anexo:Wikipedias',
'Lista completa', 'interwiki-completelist', 'Lista completa de Wikipedias');
});
}
// Oculta los resumenes de edición para ciertas páginas
var paginasSinRE = [
"Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Plantillas/Fusión_de_historiales/precarga",
"Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Plantillas/Permisos/precarga",
"Wikipedia:Bot/Solicitudes/Precarga"
];
if ( $.inArray(mw.util.getParamValue('preload'), paginasSinRE ) > -1) {
$(document).ready(function () {
$('#wpSummary').hide();
$('#wpSummaryLabel').hide();
});
}
/*
== Búsqueda especial extendida (specialsearch) ==
Añade a la página [[Special:Search]] enlaces a buscadores externos como Yahoo, Google, MSN Live y Exalead.
Basado en [[w:fr:MediaWiki:Monobook.js]].
*/
if (mw.config.get('wgCanonicalSpecialPageName') == "Search") {
/**
* Modifie Special:Search pour pouvoir utiliser différents moteurs de recherche,
* disponibles dans une boîte déroulante.
* Auteurs : Jakob Voss, Guillaume, importé depuis la Wiki allemande
* <pre><nowiki>
*/
function externalSearchEngines() {
if (typeof SpecialSearchEnhanced2Disabled != 'undefined') return;
var mainNode = document.getElementById("powersearch");
if (!mainNode) mainNode = document.getElementById("search");
if (!mainNode) return;
var beforeNode = document.getElementById("mw-search-top-table");
if (!beforeNode) return;
beforeNode = beforeNode.nextSibling;
if (!beforeNode) return;
var firstEngine = "mediawiki";
var choices = document.createElement("div");
choices.setAttribute("id", "searchengineChoices");
choices.style.textAlign = "center";
var lsearchbox = document.getElementById("searchText");
if (!lsearchbox) return;
var initValue = lsearchbox.value;
var space = "";
for (var id in searchEngines) {
var engine = searchEngines[id];
if (engine.ShortName) {
if (space) choices.appendChild(space);
space = document.createTextNode(" ");
var attr = {
type: "radio",
name: "searchengineselect",
value: id,
onFocus: "changeSearchEngine(this.value)",
id: "searchengineRadio-" + id
};
var html = "<input";
for (var a in attr) html += " " + a + "='" + attr[a] + "'";
html += " />";
var span = document.createElement("span");
span.innerHTML = html;
choices.appendChild(span);
var label = document.createElement("label");
label.htmlFor = "searchengineRadio-" + id;
if (engine.Template.indexOf('http') == 0) {
var lienMoteur = document.createElement("a");
lienMoteur.href = engine.Template.replace("{searchTerms}", initValue).replace("{language}", "es");
lienMoteur.appendChild(document.createTextNode(engine.ShortName));
label.appendChild(lienMoteur);
} else {
label.appendChild(document.createTextNode(engine.ShortName));
}
choices.appendChild(label);
}
}
mainNode.insertBefore(choices, beforeNode);
var input = document.createElement("input");
input.id = "searchengineextraparam";
input.type = "hidden";
mainNode.insertBefore(input, beforeNode);
changeSearchEngine(firstEngine, initValue);
}
function changeSearchEngine(selectedId, searchTerms) {
var currentId = document.getElementById("searchengineChoices").currentChoice;
if (selectedId == currentId) return;
document.getElementById("searchengineChoices").currentChoice = selectedId;
var radio = document.getElementById('searchengineRadio-' + selectedId);
radio.checked = "checked";
var engine = searchEngines[selectedId];
var p = engine.Template.indexOf('?');
var params = engine.Template.substr(p + 1);
var form;
if (document.forms["search"]) {
form = document.forms["search"];
} else {
form = document.getElementById("powersearch");
}
form.setAttribute("action", engine.Template.substr(0, p));
var l = ("" + params).split("&");
for (var idx = 0; idx < l.length; idx++) {
var p = l[idx].split("=");
var pValue = p[1];
if (pValue == "{language}") {} else if (pValue == "{searchTerms}") {
var input;
input = document.getElementById("searchText");
input.name = p[0];
} else {
var input = document.getElementById("searchengineextraparam");
input.name = p[0];
input.value = pValue;
}
}
}
var searchEngines = {
mediawiki: {
ShortName: "Búsqueda interna",
Template: mw.config.get('wgScript') + "?search={searchTerms}"
},
exalead: {
ShortName: "Exalead",
Template: "http://www.exalead.com/search/wikipedia/results/?q={searchTerms}&language=es"
},
google: {
ShortName: "Google",
Template: "http://www.google.es/search?as_sitesearch=es.wikipedia.org&hl={language}&q={searchTerms}"
},
wikiwix: {
ShortName: "Wikiwix",
Template: "http://es.wikiwix.com/index.php?action={searchTerms}&lang={language}"
},
wlive: {
ShortName: "Bing",
Template: "http://www.bing.com/search?q={searchTerms}&q1=site:http://es.wikipedia.org"
},
yahoo: {
ShortName: "Yahoo!",
Template: "http://es.search.yahoo.com/search?p={searchTerms}&vs=es.wikipedia.org"
},
globalwpsearch: {
ShortName: "Global WP",
Template: "http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?timeout=120&search={searchTerms}"
}
};
$(document).ready(externalSearchEngines);
}
/*
* Cerrar mensajes
* Ver ejemplo en [[Usuario:Chabacano/Fírmalo]], por [[Usuario:Platonides]].
*/
if (document.getElementById("cierraPadre")) {
$(document).ready(function () {
document.getElementById("cierraPadre").childNodes[0].onclick = function () {
document.getElementById("cierraPadre").style.cursor = 'pointer';
document.getElementById("cierraPadre").parentNode.style.display = 'none';
return false; /*no seguir el href*/
}
});
}
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* [[Wikipedia:NavFrame]].
* Maintainers: [[User:R. Koot]]
*/
var autoCollapse = 2;
var collapseCaption = "ocultar";
var expandCaption = "mostrar";
window.collapseTable = function (tableIndex) {
var Button = document.getElementById("collapseButton" + tableIndex);
var Table = document.getElementById("collapsibleTable" + tableIndex);
if (!Table || !Button) {
return false;
}
var Rows = Table.rows;
if (Button.firstChild.data == collapseCaption) {
for (var i = 1; i < Rows.length; i++) {
Rows[i].style.display = "none";
}
Button.firstChild.data = expandCaption;
} else {
for (var i = 1; i < Rows.length; i++) {
Rows[i].style.display = Rows[0].style.display;
}
Button.firstChild.data = collapseCaption;
}
}
function createCollapseButtons() {
var tableIndex = 0;
var NavigationBoxes = new Object();
var Tables = document.getElementsByTagName("table");
for (var i = 0; i < Tables.length; i++) {
if ( $(Tables[i]).hasClass( 'collapsible' ) ) {
/* only add button and increment count if there is a header row to work with */
var HeaderRow = Tables[i].getElementsByTagName("tr")[0];
if (!HeaderRow) continue;
var Header = HeaderRow.getElementsByTagName("th")[0];
if (!Header) continue;
NavigationBoxes[tableIndex] = Tables[i];
Tables[i].setAttribute("id", "collapsibleTable" + tableIndex);
var Button = document.createElement("span");
var ButtonLink = document.createElement("a");
var ButtonText = document.createTextNode(collapseCaption);
Button.className = "collapseButton"; //Styles are declared in Common.css
ButtonLink.style.color = Header.style.color;
ButtonLink.setAttribute("id", "collapseButton" + tableIndex);
ButtonLink.setAttribute("href", "#");
addHandler(ButtonLink, "click", new Function("evt", "collapseTable(" + tableIndex + " ); return killEvt( evt );"));
ButtonLink.appendChild(ButtonText);
Button.appendChild(document.createTextNode("["));
Button.appendChild(ButtonLink);
Button.appendChild(document.createTextNode("]"));
Header.insertBefore(Button, Header.firstChild);
tableIndex++;
}
}
for (var i = 0; i < tableIndex; i++) {
if ( $(NavigationBoxes[i]).hasClass( 'collapsed' ) || (tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass( 'autocollapse' ) ) ) {
collapseTable(i);
} else if ( $(NavigationBoxes[i]).hasClass( 'innercollapse' ) ) {
var element = NavigationBoxes[i];
while (element = element.parentNode) {
if ( $(element).hasClass( 'outercollapse' ) ) {
collapseTable(i);
break;
}
}
}
}
}
$(document).ready(createCollapseButtons);
// == Código del plegado/desplegado de plantillas ==
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
var NavigationBarShowDefault = 0;
// shows and hides content and picture (if available) of navigation bars
// Parameters:
// indexNavigationBar: the index of navigation bar to be toggled
window.toggleNavigationBar = function (indexNavigationBar) {
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
if (!NavFrame || !NavToggle) {
return false;
}
// if shown now
if (NavToggle.firstChild.data == NavigationBarHide) {
for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
if ( $(NavChild).hasClass( 'NavContent' ) || $(NavChild).hasClass( 'NavPic' ) ) {
NavChild.style.display = 'none';
}
}
NavToggle.firstChild.data = NavigationBarShow;
// if hidden now
} else if (NavToggle.firstChild.data == NavigationBarShow) {
for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
if ( $(NavChild).hasClass( 'NavContent' ) || $(NavChild).hasClass( 'NavPic' ) ) {
NavChild.style.display = 'block';
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
}
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton() {
var indexNavigationBar = 0;
// iterate over all < div >-elements
var divs = document.getElementsByTagName("div");
var NavFrame;
for (var i = 0; NavFrame = divs[i]; i++) {
// if found a navigation bar
if ( $(NavFrame).hasClass( 'NavFrame' ) ) {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
var isCollapsed = $(NavFrame).hasClass( 'collapsed' );
/*
* Check if any children are already hidden. This loop is here for backwards compatibility:
* the old way of making NavFrames start out collapsed was to manually add style="display:none"
* to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make
* the content visible without JavaScript support), the new recommended way is to add the class
* "collapsed" to the NavFrame itself, just like with collapsible tables.
*/
for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
if ( $(NavChild).hasClass( 'NavPic' ) || $(NavChild).hasClass( 'NavContent' ) ) {
if (NavChild.style.display == 'none') {
isCollapsed = true;
}
}
}
if (isCollapsed) {
for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
if ( $(NavChild).hasClass( 'NavPic' ) || $(NavChild).hasClass( 'NavContent' ) ) {
NavChild.style.display = 'none';
}
}
}
var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
NavToggle.appendChild(NavToggleText);
// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
for (var j = 0; j < NavFrame.childNodes.length; j++) {
if ( $(NavFrame.childNodes[j]).hasClass( 'NavHead' ) ) {
NavToggle.style.color = NavFrame.childNodes[j].style.color;
NavFrame.childNodes[j].appendChild(NavToggle);
}
}
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
}
$(document).ready(createNavigationBarToggleButton);
/** Interwiki links to featured articles ***************************************
*
* Description: Highlights interwiki links to featured articles (or
* equivalents) by changing the bullet before the interwiki link
* into a star.
* Maintainers: [[User:R. Koot]]
*/
function LinkFA() {
if (document.getElementById("p-lang")) {
var InterwikiLinks = document.getElementById("p-lang").getElementsByTagName("li"),
InterwikiLinksLargo = InterwikiLinks.length;
for (var i = 0; i < InterwikiLinksLargo; i++) {
if (document.getElementById(InterwikiLinks[i].className + "-fa")) {
InterwikiLinks[i].className += " destacado";
InterwikiLinks[i].title = "Este es un artículo destacado en esta Wikipedia.";
} else if (document.getElementById(InterwikiLinks[i].className + "-ga")) {
InterwikiLinks[i].className += " bueno";
InterwikiLinks[i].title = "Este es un artículo bueno en esta Wikipedia.";
}
}
}
}
$(document).ready(LinkFA);
/*
// == Interproyectos en un recuadro a la izquierda ==
Funcionan con la plantilla {{tl|commons}} y en otras
[[:Categoría:Wikipedia:Plantillas_de_enlace_entre_proyectos|plantillas de enlace entre proyectos]]
*/
function iProject() {
var elementos = new Array();
if (document.getElementsByClassName) {
elementos = document.getElementsByClassName("interProject");
} else {
var els = document.getElementsByTagName("span");
var elsLen = els.length;
for (i = 0, j = 0; i < elsLen; i++) {
if ("interProject" == els[i].className) {
elementos[j] = els[i];
j++;
}
}
}
if (elementos.length > 0) {
mw.util.addCSS('#interProject {display: none; speak: none;} #p-tb .pBody {padding-right: 0;}');
var portal = document.createElement('div');
portal.setAttribute("class", "portlet portal"); /* portlet en monobook, portal en vector */
var tit = document.createElement('h5');
tit.setAttribute("lang", "es");
tit.appendChild(document.createTextNode('Otros proyectos'));
portal.appendChild(tit);
var IPY = document.createElement('div');
IPY.setAttribute('class', "pBody body");
var ul = document.createElement('ul');
IPY.appendChild(ul);
for (i = 0; i < elementos.length; i++) {
var li = document.createElement('li');
li.innerHTML = elementos[i].innerHTML;
ul.appendChild(li);
}
portal.appendChild(IPY);
if (document.getElementById("p-tb").nextSibling) {
document.getElementById("p-tb").parentNode.insertBefore(portal, document.getElementById("p-tb").nextSibling);
}
else {
document.getElementById("p-tb").parentNode.appendChild(portal);
}
}
}
$(document).ready(iProject);
/* End of mw.loader.using callback */
});
/**
* Ordenación de tablas para seguir la convención de la RAE, SI y el Manual de Estilo
* aún así se permite que el antigua sistema mantenga su comportamiento para no dañar
* las miles de tablas sortable existentes de Wikipedia.
* El script detecta si se usa la ordenación antigua (punto como separador de millares, y coma como separador de decimales)
* o la nueva ordenación (espacio como separador de millares, y punto o coma como separador de decimales)
* Aun así esto debería estar en mediaWiki y no aquí
* Algo relacionado pero que no afecta las sortable directamente bug 34977
*
* Personaliza la ordenación de fechas
* Se ordenan según "dd de mm de yy" o "dd de mm de yyyy"
* También reconoce dd-mm-yy, dd-mm-yyyy (y otras variaciones usando / , .)
*/
mw.loader.using( 'jquery.tablesorter', function () {
var ts = $.tablesorter;
ts.formatDigit = function( s ) {
var i = parseFloat( s.replace( /[\u00a0\u202f. ]/g, '' ).replace( /,/g, '.' ).replace( "\u2212", '-' ) );
return ( isNaN(i)) ? 0 : i;
};
ts.formatDigitSI = function( s ) {
var i = parseFloat( s.replace( /[\u00a0\u202f ]/g, '' ).replace( /,/g, '.' ).replace( "\u2212", '-' ) );
return ( isNaN(i)) ? 0 : i;
};
ts.numberRegexCustom = new RegExp( "^[-+\u2212]?([0-9]{3}[.\.])*?([0-9]{1,3},[0-9]+)?[\\s\\xa0]*%?$", "i" );
ts.numberRegexCustomSI = new RegExp( "^[-+\u2212]?([0-9]{1,3}[\u00a0\u202f ])*?([0-9]{1,3}([.,\.,][0-9]+)?)?[\\s\\xa0]*%?$", "i" );
var regex = [];
ts.monthNames = [
[],
[]
];
for ( var i = 1; i < 13; i++ ) {
ts.monthNames[0][i] = mw.config.get( 'wgMonthNames' )[i].toLowerCase();
ts.monthNames[1][i] = mw.config.get( 'wgMonthNamesShort' )[i].toLowerCase().replace( '.', '' );
regex.push( $.escapeRE( ts.monthNames[0][i] ) );
regex.push( $.escapeRE( ts.monthNames[1][i] ) );
}
regex = regex.join( '|' );
ts.fechaRegexCustom = [];
ts.fechaRegexCustom[0] = new RegExp( "^\\d\\d?\\sde\\s(" + regex + ")\\sde\\s\\d{2,4}$" );
ts.fechaRegexCustom[1] = new RegExp( "^(\\d\\d[\/.-]\\d\\d[\/.-]\\d\\d\\d\\d|\\d\\d[\/.-]\\d\\d[\/.-]\\d\\d)$" );
$.tablesorter.addParser( {
id: 'numberSI',
is: function ( s, table ) {
return $.tablesorter.numberRegexCustomSI.test( $.trim( s ) );
},
format: function ( s ) {
return $.tablesorter.formatDigitSI( s );
},
type: 'numeric'
});
$.tablesorter.addParser( {
id: 'numberCustom',
is: function ( s, table ) {
return $.tablesorter.numberRegexCustom.test( $.trim( s ) );
},
format: function ( s ) {
return $.tablesorter.formatDigit( s );
},
type: 'numeric'
});
ts.addParser( {
id: 'fecha',
is: function( s ) {
return ( ts.fechaRegexCustom[0].test(s) || ts.fechaRegexCustom[1].test(s) );
},
format: function( s, table ) {
s = $.trim( s.toLowerCase() );
for ( var i = 1, j = 0; i < 13 && j < 2; i++ ) {
s = s.replace( ts.monthNames[j][i], i );
if ( i == 12 ) {
j++;
i = 0;
}
}
s = s.replace( /( de |[\-\.\,' ])/g, '/' );
// Replace double slashes
s = s.replace( /\/\//g, '/' );
s = s.replace( /\/\//g, '/' );
s = s.split( '/' );
// Pad Month and Day
if ( s[0] && s[0].length == 1 ) {
s[0] = '0' + s[0];
}
if ( s[1] && s[1].length == 1 ) {
s[1] = '0' + s[1];
}
var y;
if ( !s[2] ) {
// Fix yearless dates
s[2] = 2000;
} else if ( ( y = parseInt( s[2], 10) ) < 100 ) {
// Guestimate years without centuries
if ( y < 30 ) {
s[2] = 2000 + y;
} else {
s[2] = 1900 + y;
}
}
// Resort array depending on preferences
var d = s.shift();
s.push( s.shift() );
s.push(d);
return parseInt( s.join( '' ), 10 );
},
type: 'numeric'
} );
/* End of mw.loader.using callback */
});
/* Fin de alias */
})( jQuery, mediaWiki );