Diferencia entre revisiones de «MediaWiki:Common.js»
Ir a la navegación.
(Página creada con «→Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página: importScript_ = importScript importScript = function (page, p...») |
Sin resumen de edición |
||
Línea 1: | Línea 1: | ||
/* | //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') { | |||
if ( +$.client.profile().versionBase < 11 ) { | |||
/** | |||
* 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); | |||
} | |||
// 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' ); | |||
} | |||
} | |||
/* 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' ) { | |||
location.href = mw.util.getUrl( userSkinPage + '.js' ); | |||
} else if ( titleParts[1] === 'skin.css' ) { | |||
location.href = mw.util.getUrl( 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'), | |||
extraJS = mw.util.getParamValue('withJS'); | |||
if (extraCSS) { | |||
if (extraCSS.match(/^MediaWiki:[^&<>=%#]*\.css$/)) { | |||
mw.loader.load('/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css'); | |||
} else { | |||
mw.notify('Solo se pueden cargar páginas del espacio de nombres MediaWiki.', {title: 'Valor withCSS no permitido'}); | |||
} | |||
} | } | ||
if (extraJS) { | |||
if (extraJS.match(/^MediaWiki:[^&<>=%#]*\.js$/)) { | |||
mw.loader.load('/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript'); | |||
} else { | |||
mw.notify('Solo se pueden cargar páginas del espacio de nombres MediaWiki.', {title: 'Valor withJS no permitido'}); | |||
} | |||
} | |||
// Results from Wikidata | |||
// [[File:Wdsearch_script_screenshot.png]] | |||
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search' || ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgCanonicalSpecialPageName' ) === false ) ) { | |||
mw.loader.load("//en.wikipedia.org/w/index.php?title=MediaWiki:Wdsearch.js&action=raw&ctype=text/javascript"); | |||
} | } | ||
//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 (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]]. | |||
*/ | |||
mw.loader.load('/w/index.php?title=MediaWiki:Edittools.javascript&action=raw&ctype=text/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'); | |||
} | |||
// | //Wikibugs | ||
mw.loader.load('/w/index.php?title=MediaWiki:Wikibugs.js&action=raw&ctype=text/javascript'); | |||
/** 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'); | |||
/* OpenStreetMap */ | |||
mw.config.set( 'osm_proj_map', 'mapa' ); //"map" in project language | |||
mw.config.set( 'osm_proj_lang', 'es' ); //project language | |||
mw.loader.load('//meta.wikimedia.org/w/index.php?title=MediaWiki:OSM.js&action=raw&ctype=text/javascript'); | |||
/** 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']) > -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(); | |||
}); | |||
} | } | ||
/* | |||
if ( | * 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*/ | |||
}; | |||
}); | |||
} | } | ||
// | /** | ||
var | * Collapsible tables | ||
if ( | * | ||
* @version 2.0.1 (2013-03-26) | |||
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js | |||
* @author [[User:R. Koot]] | |||
* @author [[User:Krinkle]] | |||
* @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which | |||
* is supported in MediaWiki core. | |||
*/ | |||
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; | |||
} | |||
}; | |||
window.createClickHandler = function( tableIndex ) { | |||
return function ( e ) { | |||
e.preventDefault(); | |||
collapseTable( tableIndex ); | |||
}; | |||
}; | |||
function createCollapseButtons() { | |||
var tableIndex = 0; | |||
var NavigationBoxes = {}; | |||
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.style.styleFloat = 'right'; | |||
Button.style.cssFloat = 'right'; | |||
Button.style.fontWeight = 'normal'; | |||
Button.style.textAlign = 'right'; | |||
Button.style.width = '6em'; | |||
ButtonLink.style.color = Header.style.color; | |||
ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); | |||
$( ButtonLink ).on( 'click', createClickHandler( tableIndex ) ); | |||
ButtonLink.appendChild( ButtonText ); | |||
Button.appendChild( document.createTextNode( '[' ) ); | |||
Button.appendChild( ButtonLink ); | |||
Button.appendChild( document.createTextNode( ']' ) ); | |||
Header.insertBefore( Button, Header.childNodes[0] ); | |||
tableIndex++; | |||
} | |||
} | |||
for ( var i = 0; i < tableIndex; i++ ) { | |||
if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || | |||
( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) | |||
) { | |||
collapseTable( i ); | |||
} | |||
} | |||
} | } | ||
mw.hook( 'wikipage.content' ).add( createCollapseButtons ); | |||
// == Código del plegado/desplegado de plantillas == | |||
var NavigationBarHide = '[' + collapseCaption + ']'; | |||
var NavigationBarShow = '[' + expandCaption + ']'; | |||
var NavigationBarShowDefault = 0; | |||
if ( | // 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); | |||
if ( | /** | ||
* 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' ); | |||
for ( var i = 0; i < InterwikiLinks.length; i++ ) { | |||
var className = InterwikiLinks[i].className.match(/interwiki-[-\w]+/); | |||
if ( document.getElementById( className + '-fa' ) && InterwikiLinks[i].className.indexOf( 'badge-featuredarticle' ) === -1 ) { | |||
InterwikiLinks[i].className += ' destacado'; | |||
InterwikiLinks[i].title = 'Éste es un artículo destacado en esta Wikipedia.'; | |||
} else if ( document.getElementById( className + '-ga' ) && InterwikiLinks[i].className.indexOf( 'badge-goodarticle' ) === -1 ) { | |||
InterwikiLinks[i].className += ' bueno'; | |||
InterwikiLinks[i].title = 'Éste es un artículo bueno en esta Wikipedia.'; | |||
} | |||
} | |||
} | |||
} | } | ||
mw.hook( 'wikipage.content' ).add( 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?oldid=133547849 | |||
*/ | |||
$( 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 within the brackets | |||
var lastEditsectionLink = $( 'span.mw-editsection:last a:last' ); | |||
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 | 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 | else { | ||
document.getElementById("p-tb").parentNode.appendChild(portal); | |||
} | } | ||
} | } | ||
} | } | ||
$(document).ready(iProject); | |||
/* End of mw.loader.using callback */ | |||
}); | |||
/* Ordenación de tablas: | |||
* Desde MediaWiki 1.22wmf13 las ordenaciones numéricas funcionan correctamente con nuestros separadores de millares y decimales, sin necesidad de código adicional | |||
* Personalización de 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, | |||
var | j; | ||
ts.formatDateCustom = function ( s ) { | |||
var match; | |||
s = $.trim( s.toLowerCase() ); | |||
s = s.replace( /( de |[\-\.\,' ])/g, '/' ); | |||
if ( ( match = s.match( ts.dateRegex[0] ) ) !== null ) { | |||
if ( mw.config.get( 'wgDefaultDateFormat' ) === 'mdy' || mw.config.get( 'wgContentLanguage' ) === 'en' ) { | |||
s = [ match[3], match[1], match[2] ]; | |||
} else if ( mw.config.get( 'wgDefaultDateFormat' ) === 'dmy' ) { | |||
s = [ match[3], match[2], match[1] ]; | |||
} else { | |||
// If we get here, we don't know which order the dd-dd-dddd | |||
// date is in. So return something not entirely invalid. | |||
return '99999999'; | |||
} | |||
} else if ( ( match = s.match( ts.dateRegex[1] ) ) !== null ) { | |||
s = [ match[3], '' + ts.monthNames[match[2]], match[1] ]; | |||
} else if ( ( match = s.match( ts.dateRegex[2] ) ) !== null ) { | |||
s = [ match[3], '' + ts.monthNames[match[1]], match[2] ]; | |||
} else { | |||
// Should never get here | |||
return '99999999'; | |||
} | |||
// Pad Month and Day | |||
if ( s[1].length === 1 ) { | |||
s[1] = '0' + s[1]; | |||
} | |||
if ( s[2].length === 1 ) { | |||
s[2] = '0' + s[2]; | |||
} | |||
var y; | |||
if ( ( y = parseInt( s[0], 10) ) < 100 ) { | |||
// Guestimate years without centuries | |||
if ( y < 30 ) { | |||
s[0] = 2000 + y; | |||
} else { | |||
s[0] = 1900 + y; | |||
} | |||
} | |||
while ( s[0].length < 4 ) { | |||
s[0] = '0' + s[0]; | |||
} | |||
return parseInt( s.join( '' ), 10 ); | |||
}; | |||
var regex = []; | |||
ts.monthNames = {}; | |||
for ( i = 1; i < 13; i++ ) { | |||
var name = mw.config.get( 'wgMonthNames' )[i].toLowerCase(); | |||
ts.monthNames[name] = i; | |||
regex.push( mw.RegExp.escape( name ) ); | |||
name = mw.config.get( 'wgMonthNamesShort' )[i].toLowerCase().replace( '.', '' ); | |||
ts.monthNames[name] = i; | |||
regex.push( mw.RegExp.escape( name ) ); | |||
} | } | ||
regex = regex.join( '|' ); | |||
ts.dateRegexCustom = new RegExp( "^\\d\\d?\\sde\\s(" + regex + ")\\sde\\s\\d{2,4}$" ); | |||
ts.addParser( { | |||
id: 'dateCustom', | |||
is: function( s ) { | |||
return ( $.tablesorter.dateRegexCustom.test(s) ); | |||
}, | |||
format: function( s ) { | |||
return $.tablesorter.formatDateCustom( s ); | |||
}, | |||
type: 'numeric' | |||
}); | |||
/* End of mw.loader.using callback */ | |||
}); | |||
/** Ajusta el ordenamiento alfabético en las tablas "sortable" */ | |||
(function() { | |||
var letras = [["áàâäãāăåą", "a"], ["æ", "ae"], ["ćĉčç", "c"], ["ďḑđð", "d"], ["éèêëẽěēĕę", "e"], | |||
["ĝḡğģǥ", "g"], ["ĥḧḩħ", "h"], ["íìÎîïĩīĭįı", "i"], ["ĵ", "j"], ["ķ", "k"], | |||
["ĺľļł", "l"], ["ńňņ", "n"], ["ñ", "n~"], ["óòôöõōŏǫőø", "o"], ["œ", "oe"], | |||
["ŕřŗ", "r"], ["śŝšş", "s"], ["ß", "ss"], ["ťţŧ", "t"], ["úùûüũūŭůųű", "u"], ["ṽ", "v"], | |||
["ŵẅ", "w"], ["ẍ", "x"], ["ýŷÿỹ", "y"], ["źẑžƶ", "z"]]; | |||
var hash = {}; | |||
for (var i = 0; i < letras.length; i++) { | |||
var arr = letras[i][0].split(""); | |||
var dest = letras[i][1]; | |||
for (var j = 0; j < arr.length; j++) { | |||
hash[arr[j]] = dest; | |||
} | } | ||
} | |||
mw.config.set('tableSorterCollation', hash); | |||
})(); | |||
} | |||
/** | |||
* Los WikiWidgets son pequeños programas que sirven para ilustrar y explicar de manera interactiva conceptos tratados en los artículos. | |||
* El código de inicialización de los WikiWidgets se carga desde Commons cuando se encuentra una plantilla de WikiWidgets en la página. | |||
*/ | |||
if ( $( '.WikiWidget' ).length ) { | |||
mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:WikiWidgets.js&action=raw&ctype=text/javascript' ); | |||
} | } | ||
/* Fin de alias */ | |||
})( jQuery, mediaWiki ); |
Revisión del 20:39 9 nov 2017
//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') { if ( +$.client.profile().versionBase < 11 ) { /** * 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); } // 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' ); } } /* 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' ) { location.href = mw.util.getUrl( userSkinPage + '.js' ); } else if ( titleParts[1] === 'skin.css' ) { location.href = mw.util.getUrl( 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'), extraJS = mw.util.getParamValue('withJS'); if (extraCSS) { if (extraCSS.match(/^MediaWiki:[^&<>=%#]*\.css$/)) { mw.loader.load('/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css'); } else { mw.notify('Solo se pueden cargar páginas del espacio de nombres MediaWiki.', {title: 'Valor withCSS no permitido'}); } } if (extraJS) { if (extraJS.match(/^MediaWiki:[^&<>=%#]*\.js$/)) { mw.loader.load('/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript'); } else { mw.notify('Solo se pueden cargar páginas del espacio de nombres MediaWiki.', {title: 'Valor withJS no permitido'}); } } // Results from Wikidata // [[File:Wdsearch_script_screenshot.png]] if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search' || ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgCanonicalSpecialPageName' ) === false ) ) { mw.loader.load("//en.wikipedia.org/w/index.php?title=MediaWiki:Wdsearch.js&action=raw&ctype=text/javascript"); } //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 (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]]. */ mw.loader.load('/w/index.php?title=MediaWiki:Edittools.javascript&action=raw&ctype=text/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'); } //Wikibugs mw.loader.load('/w/index.php?title=MediaWiki:Wikibugs.js&action=raw&ctype=text/javascript'); /** 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'); /* OpenStreetMap */ mw.config.set( 'osm_proj_map', 'mapa' ); //"map" in project language mw.config.set( 'osm_proj_lang', 'es' ); //project language mw.loader.load('//meta.wikimedia.org/w/index.php?title=MediaWiki:OSM.js&action=raw&ctype=text/javascript'); /** 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']) > -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(); }); } /* * 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 * * @version 2.0.1 (2013-03-26) * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js * @author [[User:R. Koot]] * @author [[User:Krinkle]] * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which * is supported in MediaWiki core. */ 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; } }; window.createClickHandler = function( tableIndex ) { return function ( e ) { e.preventDefault(); collapseTable( tableIndex ); }; }; function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = {}; 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.style.styleFloat = 'right'; Button.style.cssFloat = 'right'; Button.style.fontWeight = 'normal'; Button.style.textAlign = 'right'; Button.style.width = '6em'; ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( '[' ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( ']' ) ); Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; } } for ( var i = 0; i < tableIndex; i++ ) { if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) { collapseTable( i ); } } } mw.hook( 'wikipage.content' ).add( 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' ); for ( var i = 0; i < InterwikiLinks.length; i++ ) { var className = InterwikiLinks[i].className.match(/interwiki-[-\w]+/); if ( document.getElementById( className + '-fa' ) && InterwikiLinks[i].className.indexOf( 'badge-featuredarticle' ) === -1 ) { InterwikiLinks[i].className += ' destacado'; InterwikiLinks[i].title = 'Éste es un artículo destacado en esta Wikipedia.'; } else if ( document.getElementById( className + '-ga' ) && InterwikiLinks[i].className.indexOf( 'badge-goodarticle' ) === -1 ) { InterwikiLinks[i].className += ' bueno'; InterwikiLinks[i].title = 'Éste es un artículo bueno en esta Wikipedia.'; } } } } mw.hook( 'wikipage.content' ).add( 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?oldid=133547849 */ $( 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 within the brackets var lastEditsectionLink = $( 'span.mw-editsection:last a:last' ); 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: * Desde MediaWiki 1.22wmf13 las ordenaciones numéricas funcionan correctamente con nuestros separadores de millares y decimales, sin necesidad de código adicional * Personalización de 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.formatDateCustom = function ( s ) { var match; s = $.trim( s.toLowerCase() ); s = s.replace( /( de |[\-\.\,' ])/g, '/' ); if ( ( match = s.match( ts.dateRegex[0] ) ) !== null ) { if ( mw.config.get( 'wgDefaultDateFormat' ) === 'mdy' || mw.config.get( 'wgContentLanguage' ) === 'en' ) { s = [ match[3], match[1], match[2] ]; } else if ( mw.config.get( 'wgDefaultDateFormat' ) === 'dmy' ) { s = [ match[3], match[2], match[1] ]; } else { // If we get here, we don't know which order the dd-dd-dddd // date is in. So return something not entirely invalid. return '99999999'; } } else if ( ( match = s.match( ts.dateRegex[1] ) ) !== null ) { s = [ match[3], '' + ts.monthNames[match[2]], match[1] ]; } else if ( ( match = s.match( ts.dateRegex[2] ) ) !== null ) { s = [ match[3], '' + ts.monthNames[match[1]], match[2] ]; } else { // Should never get here return '99999999'; } // Pad Month and Day if ( s[1].length === 1 ) { s[1] = '0' + s[1]; } if ( s[2].length === 1 ) { s[2] = '0' + s[2]; } var y; if ( ( y = parseInt( s[0], 10) ) < 100 ) { // Guestimate years without centuries if ( y < 30 ) { s[0] = 2000 + y; } else { s[0] = 1900 + y; } } while ( s[0].length < 4 ) { s[0] = '0' + s[0]; } return parseInt( s.join( '' ), 10 ); }; var regex = []; ts.monthNames = {}; for ( i = 1; i < 13; i++ ) { var name = mw.config.get( 'wgMonthNames' )[i].toLowerCase(); ts.monthNames[name] = i; regex.push( mw.RegExp.escape( name ) ); name = mw.config.get( 'wgMonthNamesShort' )[i].toLowerCase().replace( '.', '' ); ts.monthNames[name] = i; regex.push( mw.RegExp.escape( name ) ); } regex = regex.join( '|' ); ts.dateRegexCustom = new RegExp( "^\\d\\d?\\sde\\s(" + regex + ")\\sde\\s\\d{2,4}$" ); ts.addParser( { id: 'dateCustom', is: function( s ) { return ( $.tablesorter.dateRegexCustom.test(s) ); }, format: function( s ) { return $.tablesorter.formatDateCustom( s ); }, type: 'numeric' }); /* End of mw.loader.using callback */ }); /** Ajusta el ordenamiento alfabético en las tablas "sortable" */ (function() { var letras = [["áàâäãāăåą", "a"], ["æ", "ae"], ["ćĉčç", "c"], ["ďḑđð", "d"], ["éèêëẽěēĕę", "e"], ["ĝḡğģǥ", "g"], ["ĥḧḩħ", "h"], ["íìÎîïĩīĭįı", "i"], ["ĵ", "j"], ["ķ", "k"], ["ĺľļł", "l"], ["ńňņ", "n"], ["ñ", "n~"], ["óòôöõōŏǫőø", "o"], ["œ", "oe"], ["ŕřŗ", "r"], ["śŝšş", "s"], ["ß", "ss"], ["ťţŧ", "t"], ["úùûüũūŭůųű", "u"], ["ṽ", "v"], ["ŵẅ", "w"], ["ẍ", "x"], ["ýŷÿỹ", "y"], ["źẑžƶ", "z"]]; var hash = {}; for (var i = 0; i < letras.length; i++) { var arr = letras[i][0].split(""); var dest = letras[i][1]; for (var j = 0; j < arr.length; j++) { hash[arr[j]] = dest; } } mw.config.set('tableSorterCollation', hash); })(); /** * Los WikiWidgets son pequeños programas que sirven para ilustrar y explicar de manera interactiva conceptos tratados en los artículos. * El código de inicialización de los WikiWidgets se carga desde Commons cuando se encuentra una plantilla de WikiWidgets en la página. */ if ( $( '.WikiWidget' ).length ) { mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:WikiWidgets.js&action=raw&ctype=text/javascript' ); } /* Fin de alias */ })( jQuery, mediaWiki );