MediaWiki:Common.js/Clases/SkinPropagation.js
De WikiDex
Ir a la navegaciónIr a la búsqueda
Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.
- Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
- Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
- Internet Explorer/Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
- Opera: Presiona Ctrl+F5.
/**
* SkinPropagation: Propaga el &useskin= de la URL (siempre que sea posible) por los enlaces y formularios
* Copyright (C) 2010-2017 Jesús Martínez Novo ([[User:Ciencia Al Poder]])
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version
*/
(function($, mw) {
'use strict';
var _skin = '',
_init = function() {
var url;
if (window.location.href.indexOf('useskin=') == -1) return;
url = _parseURL(window.location.href);
// Si existe propagateskin, se propagará este en los siguientes enlaces en lugar del useskin (p.ej. enlaces para
if (url.query.useskin) {
_skin = (url.query.propagateskin || url.query.useskin);
}
if (_skin) {
$(document.body).bind('click.skinpropagation', _clicEvent);
$('form').bind('submit.skinpropagation', _submitEvent);
}
},
_parseURL = function(url) {
var ret = { base:'', qs:'', query: {}, hash: '' }, loc = url.indexOf('#'), paras, i, p;
if (loc != -1) {
ret.hash = url.substr(loc + 1);
url = url.substr(0, loc);
}
loc = url.indexOf('?');
if (loc != -1) {
ret.qs = url.substr(loc + 1);
url = url.substr(0, loc);
paras = ret.qs.split('&');
for (i = 0; i < paras.length; i++) {
p = paras[i].split('=');
if (p.length == 2) {
ret.query[p[0]] = p[1];
}
}
}
ret.base = url;
return ret;
},
_getURL = function(url) {
var nurl, p;
nurl = url.base + '?';
for (p in url.query) {
if (url.query.hasOwnProperty(p) && (url.query[p] || url.query[p] === '')) {
nurl += p + '=' + url.query[p] + '&';
}
}
nurl = nurl.substr(0, nurl.length - 1);
if (url.hash) {
nurl += '#' + url.hash;
}
return nurl;
},
_clicEvent = function(e) {
var url, thisloc;
if (e.target.tagName.toLowerCase() != 'a') return;
if (e.target.href.indexOf(mw.config.get('wgServer')) !== 0) return;
url = _parseURL(e.target.href);
thisloc = _parseURL(window.location.href);
// Si es enlace a sección, no hacer nada
if (url.base == thisloc.base && url.qs == thisloc.qs && url.hash) {
return;
}
if (url.query.useskin && url.query.useskin != _skin) {
url.query.propagateskin = _skin;
} else {
url.query.useskin = _skin;
}
e.target.href = _getURL(url);
},
_submitEvent = function(e) {
var url;
if (this.action.indexOf(mw.config.get('wgServer')) !== 0) return;
if (this.method.toLowerCase() == 'post') {
url = _parseURL(this.action);
url.query.useskin = _skin;
this.action = _getURL(url);
} else {
$('<input type="hidden" name="useskin">').val(_skin).appendTo(this);
}
},
_addUseSkin = function(url, skin) {
var nurl = _parseURL(url);
nurl.query.useskin = skin;
nurl.query.propagateskin = false;
return _getURL(nurl);
};
window.SkinPropagation = {
addUseSkin: _addUseSkin
};
$(_init);
})(jQuery, mw);