MediaWiki:Common.js
De La Base Comunitaria de Conocimientos de la Economía Basada en Recursos
Revisión a fecha de 05:34 12 dic 2012; Platonides (Discusión)
Nota: después de guardar, quizás necesites refrescar la caché de tu navegador para ver los cambios.
- Firefox / Safari: Mantén presionada Mayús mientras pulsas el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
- Google Chrome: presiona Ctrl+Shift+R (⌘+Mayús+R en Mac)
- Internet Explorer: mantén presionada Ctrl mientras pulsas Actualizar, o presiona Ctrl+F5
- Opera: vacía la caché en Herramientas → Preferencias
//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 { 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 XP font rendering */ if (navigator.appVersion.search(/windows nt 5/i) != -1) { mw.util.addCSS('.IPA {font-family: "Lucida Sans Unicode", "Arial Unicode MS";} ' + '.Unicode {font-family: "Arial Unicode MS", "Lucida Sans Unicode";}'); } /* Helper script for .hlist class in common.css * Maintainer: [[User:Edokter]] */ // 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'); /** 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> */ 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}" } }; 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("&"), idx; for (idx = 0; idx < l.length; idx++) { var p2 = l[idx].split("="); var pValue = p2[1]; if (pValue == "{language}") { // } else if (pValue == "{searchTerms}") { var input; input = document.getElementById("searchText"); input.name = p2[0]; } else { var input2 = document.getElementById("searchengineextraparam"); input2.name = p2[0]; input2.value = pValue; } } } 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 = "", id; for (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", a; for (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); } $(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), Table = document.getElementById("collapsibleTable" + tableIndex), i; if (!Table || !Button) { return false; } var Rows = Table.rows; if (Button.firstChild.data == collapseCaption) { for (i = 1; i < Rows.length; i++) { Rows[i].style.display = "none"; } Button.firstChild.data = expandCaption; } else { for (i = 1; i < Rows.length; i++) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } }; function createCollapseButtons() { var tableIndex = 0, NavigationBoxes = {}, Tables = document.getElementsByTagName("table"), i; for (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 (i = 0; i < tableIndex; i++) { if ( $(NavigationBoxes[i]).hasClass( 'collapsed' ) || (tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass( 'autocollapse' ) ) ) { window.collapseTable(i); } else if ( $(NavigationBoxes[i]).hasClass( 'innercollapse' ) ) { var element = NavigationBoxes[i]; while (element = element.parentNode) { if ( $(element).hasClass( 'outercollapse' ) ) { window.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), NavFrame = document.getElementById("NavFrame" + indexNavigationBar), NavChild; if (!NavFrame || !NavToggle) { return false; } // if shown now if (NavToggle.firstChild.data == NavigationBarHide) { for (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 (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 divs = document.getElementsByTagName("div"), NavFrame, NavChild, i; for (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 (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 (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), j; NavToggle.appendChild(NavToggleText); // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for (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, i; for (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); /** * Enlace «sección nueva» junto a «editar» en la última sección de las páginas de discusión. * Fuente: //de.wikipedia.org/w/index.php?title=MediaWiki:Common.js&oldid=107948391 */ $( function() { var newSectionLink = $( '#ca-addsection a' ); if( newSectionLink.length ) { var link = newSectionLink.clone(); //create a copy //avoid duplicate accesskey link.removeAttr( 'accesskey' ).attr( 'title', function ( index, oldTitle ) { return oldTitle.replace( /\s*\[.*\]\s*$/, '' ); } ); // con la skin vector se muestra como "Sección nueva", pasamos a minúsculas para integrarlo mejor link.css( { "text-transform" : "lowercase" } ); //add it wihin the brackets var lastEditsectionLink = $( 'span.editsection:last a' ); lastEditsectionLink.after( link ); lastEditsectionLink.after( ' · ' ); //see [[MediaWiki:Pipe-separator]] } } ); /* // == Interproyectos en un recuadro a la izquierda == Funcionan con la plantilla {{ep|commons}} y en otras [[:Categoría:Wikipedia:Plantillas_de_enlace_entre_proyectos|plantillas de enlace entre proyectos]] */ function iProject() { var elementos = [], i; if (document.getElementsByClassName) { elementos = document.getElementsByClassName("interProject"); } else { var els = document.getElementsByTagName("span"), elsLen = els.length, j; 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('h3'); 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, i, j; ts.formatDigit = function( s ) { var i = parseFloat( s.replace( /[. ]/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]{1,3}[\\.])+?[0-9]{1,3}" + "|" + "[0-9]{1,4}" + ")([\\,][0-9]+)?[\\s\\xa0]*%?$", "i" ); ts.numberRegexCustomSI = new RegExp( "^[-+\u2212]?" + "(?:" + "([0-9]{1,3}[\u00a0\u202f ])+?[0-9]{1,3}" + "|" + "[0-9]{1,4}" + ")([\\.\\,][0-9]+)?[\\s\\xa0]*%?$", "i" ); var regex = []; ts.monthNames = [ [], [] ]; for ( 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 ( 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 );