Diferencia entre revisiones de «MediaWiki:Common.js»

De La Coppermind
Ir a la navegación Ir a la búsqueda
m (fix problem)
m
 
(No se muestran 90 ediciones intermedias de 5 usuarios)
Línea 1: Línea 1:
 
/* Any JavaScript here will be loaded for all users on every page load. */
 
/* Any JavaScript here will be loaded for all users on every page load. */
   
  +
/* replace "Coppermind:Bienvenidos" with "Te damos la bienvenida a la Coppermind" */
/* 2014-05
 
  +
$('h1:contains("Coppermind:Bienvenidos")').text("Te damos la bienvenida a la Coppermind");
add title attributes to all ref tags, containing the text shown in the ref
 
*/
 
$('[id*="cite_ref"]').each(function (i, el) {
 
var el = $(el)
 
var a = $('[href="#'+el.attr('id')+'"]')
 
el.attr('title', a.next('.reference-text').text() || a.parent().nextAll('.reference-text').text())
 
})
 
 
/** Test if an element has a certain class **************************************
 
*
 
* Description: Uses regular expressions and caching for better performance.
 
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 
*/
 
 
var hasClass = ( function () {
 
var reCache = {};
 
return function (element, className) {
 
return (reCache[className] ? reCache[className] :
 
(reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))
 
).test(element.className);
 
};
 
})();
 
 
/*
 
some skin tweaks
 
*/
 
jQuery(function ($) {
 
/* push Notes down below infoboxes */
 
$('h2:contains("Notes")').attr('class','notes');
 
/* replace "Coppermind:Welcome" with "Welcome to the Coppermind" */
 
$('h1:contains("Coppermind:Welcome")').text("Welcome to the Coppermind");
 
/* autocollapse infoboxes if off page
 
$('.notes').nextAll('.collapsible').each(function(i,el){
 
if (el.getBoundingClientRect().top > 0)
 
return;
 
})
 
*/
 
})
 
 
/*
 
filters for the first previous `sel` on each of `this`
 
cb gets the passed element and the first matched element (or _default, if nothing matched)
 
*/
 
$.fn.previous = function(sel, cb/*(el)*/, _default){
 
$(this).each(function(){ var pre = $(this).prevAll(sel); cb.call(this, pre.length ? pre.first() : _default); })
 
}
 
/* returns true if the element has the passed class */
 
$.fn.classed = function(cls){ return $(this)[0].classList?$(this)[0].classList.contains(cls):false; }
 
 
function ne(tag, attrs){ var _ = $(document.createElement(tag)); for (var i in attrs) _.attr(i, attrs[i]); return _; }
 
 
/*
 
filter for all .notice instances (not including .stub's)
 
returning the 'parent' header:
 
- subsection: the hX of the subsection
 
- preamble: the first h1 element
 
*/
 
function NoticeHeaderPairs(cb/*(el_header)*/){
 
$('.notice:not(.stub)').previous('h1,h2,h3,h4,h5', cb, $('h1'))
 
}
 
 
/*
 
pass to NoticeHeaderPairs to add notices to headers
 
*/
 
function AddNoticeToHeader(h){
 
var that = $(this)
 
function _match(cls,el){
 
if (!that.classed(cls))
 
return;
 
h.append(el);
 
that.hide();
 
el.click(function(){ that.toggle(); });
 
}
 
function _el(text,color){ return ne('span').attr('class','notice').attr('title',text).css('color',color); }
 
function _img(source,text){ return ne('img').attr('class','notice').attr('src', source).attr('alt', text).attr('title', text); }
 
/* matches */
 
_match('exemplary',_el('This article is exemplary','gold').text('★'));
 
_match('attention',_el('This article needs serious attention', 'red').text('!'));
 
_match('delete',_img('http://upload.wikimedia.org/wikipedia/commons/9/93/Trash_can.svg', 'This article is to be deleted'));
 
_match('move',_el('This article may be moved', 'blue').text('⇄'));
 
_match('copyright',_el('This article is copyright','brown').text('©'));
 
_match('spoilers',_el('This article/section has spoilers','#FAA').text('¬.¬'));
 
_match('theory',_el('This article/section contains theory or speculation','#29F').text('¿'));
 
}
 
 
jQuery(function($){
 
NoticeHeaderPairs(AddNoticeToHeader);
 
$('h1,h2:not(.notes),h3,h4').children(':not(.editsection,.notice)').css('margin-right','1em');
 
$('head').append(ne('meta', { name: 'viewport', content: 'width=device-width' }))
 
})
 
   
 
/* 2014-04
 
/* 2014-04
 
augment actionpaths edits to LocalSetting.php
 
augment actionpaths edits to LocalSetting.php
 
*/
 
*/
jQuery(function ($) {
+
$('[href*="title="]').attr('href', function (i, value) {
  +
const old_link = value
$('[href*="title="]').attr('href', function (i, value) {
 
  +
//console.debug('was linking to:', value)
return value.replace(/\/w\/index.php\?title=(.+?)\&(.+?)/, "/wiki/$1?$2")
 
  +
value = value.replace(/\/wiki\/\?title=([^&]+)\&(.+)/, "/wiki/$1?$2")
})
 
  +
value = value.replace(/\/w\/index.php\?title=(.+?)\&(.+?)/, "/wiki/$1?$2")
$('#searchform').attr('action', '/wiki/Special:Search')
 
$('form').attr('action', function (i, value) {
+
if (old_link != value)
  +
console.debug('now linking to:', value, 'not:', old_link)
return value.replace("/w/index.php", "/wiki/" + $('[name="title"]', this).attr('value'))
 
  +
return value
})
 
$("[name='title']",$('form')).remove()
 
 
})
 
})
  +
$(function() {
   
  +
document.querySelectorAll('form.mw-search').forEach(function(form) { form.setAttribute('action','/wiki/Special:Search') })
  +
document.querySelectorAll('form#search').forEach(function(form) { form.setAttribute('action', '/wiki/Special:Search') })
   
  +
document.querySelectorAll('form[action*="/w/index.php"]').forEach(function(form) {
/* Any JavaScript here will be loaded for all users on every page load. */
 
  +
console.debug('changing form', form, 'with action', form.getAttribute('action'), 'to `?`')
 
  +
form.setAttribute('action', '?')
/* 2014-05
 
add title attributes to all ref tags, containing the text shown in the ref
 
*/
 
$('[id*="cite_ref"]').each(function (i, el) {
 
var el = $(el)
 
var a = $('[href="#'+el.attr('id')+'"]')
 
el.attr('title', a.next('.reference-text').text() || a.parent().nextAll('.reference-text').text())
 
 
})
 
})
   
  +
});
/** Test if an element has a certain class **************************************
 
*
 
* Description: Uses regular expressions and caching for better performance.
 
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 
*/
 
 
var hasClass = ( function () {
 
var reCache = {};
 
return function (element, className) {
 
return (reCache[className] ? reCache[className] :
 
(reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))
 
).test(element.className);
 
};
 
})();
 
   
  +
function showDialog () {
/*
 
  +
var container = document.createElement('div');
some skin tweaks
 
  +
container.style.display = 'flex';
*/
 
  +
container.style.alignItems = 'center';
jQuery(function ($) {
 
  +
container.style.justifyContent = 'center';
/* push Notes down below infoboxes */
 
  +
container.style.position = 'fixed';
$('h2:contains("Notes")').attr('class','notes');
 
  +
container.style.left = '0';
/* replace "Coppermind:Welcome" with "Welcome to the Coppermind" */
 
  +
container.style.right = '0';
$('h1:contains("Coppermind:Welcome")').text("Welcome to the Coppermind");
 
  +
container.style.top = '0';
/* autocollapse infoboxes if off page
 
  +
container.style.bottom = '0';
$('.notes').nextAll('.collapsible').each(function(i,el){
 
  +
container.style.zIndex = '10000';
if (el.getBoundingClientRect().top > 0)
 
  +
container.style.background = 'rgba(0, 0, 0, 0.5)';
return;
 
  +
container.style.filter = 'initial';
})
 
*/
 
})
 
   
  +
var window = document.createElement('div');
/*
 
  +
window.className = 'coppermind-spoiler-warning';
filters for the first previous `sel` on each of `this`
 
  +
window.style.boxShadow = '0 4px 30px 0 rgba(0, 0, 0, 0.2)';
cb gets the passed element and the first matched element (or _default, if nothing matched)
 
  +
window.style.width = '90%';
*/
 
  +
window.style.maxWidth = '600px';
$.fn.previous = function(sel, cb/*(el)*/, _default){
 
  +
window.style.borderRadius = '3px';
$(this).each(function(){ var pre = $(this).prevAll(sel); cb.call(this, pre.length ? pre.first() : _default); })
 
  +
window.style.background = 'white';
}
 
  +
window.style.display = 'flex';
/* returns true if the element has the passed class */
 
  +
window.style.flexDirection = 'column';
$.fn.classed = function(cls){ return $(this)[0].classList?$(this)[0].classList.contains(cls):false; }
 
  +
window.style.boxSizing = 'border-box';
  +
window.style.padding = '16px';
  +
window.style.fontSize = '1.5em';
  +
window.style.maxHeight = '90%';
  +
container.appendChild(window);
   
  +
window.innerHTML = '<h2>⚠️ Aviso de Spoiler</h2>';
function ne(tag, attrs){ var _ = $(document.createElement(tag)); for (var i in attrs) _.attr(i, attrs[i]); return _; }
 
  +
window.innerHTML += '<p style="font-size: 1em; overflow-y: auto; flex: 1;">¡Has llegado a la Coppermind en español! Esta wiki tiene spoilers de todos los trabajos publicados de Brandon, incluyendo <b><em>El Hombre Iluminado</b></em>. Por lo tanto, al navegar por esta wiki, puedes sufrir spoilers de todo el Cosmere, así como de otras obras de Brandon. Además, algunas páginas pueden contener información sobre libros que aún no han sido publicados. Si quieres visitar el sitio tal y como era antes de la publicación de algún libro, ¡puedes ir a nuestra <a id="spoiler-warning__time-machine-link" href="https://es.coppermind.net/wiki/Especial:M%C3%A1quinaDelTiempo">Máquina del Tiempo!</a></p>';
   
/*
 
filter for all .notice instances (not including .stub's)
 
returning the 'parent' header:
 
- subsection: the hX of the subsection
 
- preamble: the first h1 element
 
*/
 
function NoticeHeaderPairs(cb/*(el_header)*/){
 
$('.notice:not(.stub)').previous('h1,h2,h3,h4,h5', cb, $('h1'))
 
}
 
   
  +
var button = document.createElement('button');
/*
 
  +
button.className = 'mw-ui-button mw-ui-destructive';
pass to NoticeHeaderPairs to add notices to headers
 
  +
button.style.alignSelf = 'center';
*/
 
  +
button.style.fontSize = '1em';
function AddNoticeToHeader(h){
 
  +
button.innerHTML = 'Acceder';
var that = $(this)
 
function _match(cls,el){
+
button.onclick = function () {
  +
localStorage.setItem('defiant-spoiler-warning', 'seen');
if (!that.classed(cls))
 
  +
document.body.removeChild(container);
return;
 
  +
$(document.body).removeClass('spoiler-warning-blur');
h.append(el);
 
  +
}
that.hide();
 
  +
window.appendChild(button);
el.click(function(){ that.toggle(); });
 
}
 
function _el(text,color){ return ne('span').attr('class','notice').attr('title',text).css('color',color); }
 
function _img(source,text){ return ne('img').attr('class','notice').attr('src', source).attr('alt', text).attr('title', text); }
 
/* matches */
 
_match('exemplary',_el('This article is exemplary','gold').text('★'));
 
_match('attention',_el('This article needs serious attention', 'red').text('!'));
 
_match('delete',_img('http://upload.wikimedia.org/wikipedia/commons/9/93/Trash_can.svg', 'This article is to be deleted'));
 
_match('move',_el('This article may be moved', 'blue').text('⇄'));
 
_match('copyright',_el('This article is copyright','brown').text('©'));
 
_match('spoilers',_el('This article/section has spoilers','#FAA').text('¬.¬'));
 
_match('theory',_el('This article/section contains theory or speculation','#29F').text('¿'));
 
}
 
   
  +
var style = document.createElement('style');
jQuery(function($){
 
  +
style.type = 'text/css';
NoticeHeaderPairs(AddNoticeToHeader);
 
  +
style.innerHTML = '.spoiler-warning-blur > * { filter: blur(50px); }';
$('h1,h2:not(.notes),h3,h4').children(':not(.editsection,.notice)').css('margin-right','1em');
 
  +
document.getElementsByTagName('head')[0].appendChild(style);
$('head').append(ne('meta', { name: 'viewport', content: 'width=device-width' }))
 
})
 
   
  +
$(document.body).addClass('spoiler-warning-blur');
/* 2014-04
 
  +
document.body.appendChild(container);
augment actionpaths edits to LocalSetting.php
 
  +
$('#spoiler-warning__time-machine-link').click(function () { localStorage.setItem('defiant-spoiler-warning', 'seen'); })
*/
 
  +
$('#spoiler-warning__spoiler-policy-link').click(function () { localStorage.setItem('defiant-spoiler-warning', 'seen'); })
jQuery(function ($) {
 
  +
}
$('[href*="title="]').attr('href', function (i, value) {
 
return value.replace(/\/w\/index.php\?title=(.+?)\&(.+?)/, "/wiki/$1?$2")
 
})
 
$('#searchform').attr('action', '/wiki/Special:Search')
 
$('form').attr('action', function (i, value) {
 
return value.replace("/w/index.php", "/wiki/" + $('[name="title"]', this).attr('value'))
 
})
 
$("[name='title']",$('form')).remove()
 
})
 
   
  +
if (window.localStorage.getItem('defiant-spoiler-warning') === null && !mw.config.get('wgUserGroups').includes('keeper')) {
/* from https://www.mediawiki.org/wiki/Manual:Interface/Sidebar#Add_or_remove_toolbox_sections_.28JavaScript.29 */
 
  +
showDialog();
function ModifySidebar( action, section, name, link ) {
 
try {
 
switch ( section ) {
 
case 'languages':
 
var target = 'p-lang';
 
break;
 
case 'toolbox':
 
var target = 'p-tb';
 
break;
 
case 'navigation':
 
var target = 'p-navigation';
 
break;
 
default:
 
var target = 'p-' + section;
 
break;
 
}
 
 
if ( action == 'add' ) {
 
var node = document.getElementById( target )
 
.getElementsByTagName( 'div' )[0]
 
.getElementsByTagName( 'ul' )[0];
 
 
var aNode = document.createElement( 'a' );
 
var liNode = document.createElement( 'li' );
 
 
aNode.appendChild( document.createTextNode( name ) );
 
aNode.setAttribute( 'href', link );
 
liNode.appendChild( aNode );
 
liNode.className = 'plainlinks';
 
node.appendChild( liNode );
 
}
 
 
if ( action == 'remove' ) {
 
var list = document.getElementById( target )
 
.getElementsByTagName( 'div' )[0]
 
.getElementsByTagName( 'ul' )[0];
 
 
var listelements = list.getElementsByTagName( 'li' );
 
 
for ( var i = 0; i < listelements.length; i++ ) {
 
if (
 
listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
 
listelements[i].getElementsByTagName( 'a' )[0].href == link
 
)
 
{
 
list.removeChild( listelements[i] );
 
}
 
}
 
}
 
 
} catch( e ) {
 
// let's just ignore what's happened
 
return;
 
}
 
 
}
 
}
 
jQuery(function () {
 
if (!mw.config.get('wgIsArticle') && mw.config.get('wgAction') !== 'edit')
 
return;
 
var title = mw.config.get('wgTitle');
 
ModifySidebar( 'add', 'toolbox', "Search Brandon's website for " + title, //brandonsanderson.com/?s=' + title );
 
ModifySidebar( 'add', 'toolbox', "Interviews relating to " + title, '//www.theoryland.com/intvsresults.php?kw=' + title );
 
});
 

Revisión actual del 09:42 18 mar 2024

/* Any JavaScript here will be loaded for all users on every page load. */

/* replace "Coppermind:Bienvenidos" with "Te damos la bienvenida a la Coppermind" */
$('h1:contains("Coppermind:Bienvenidos")').text("Te damos la bienvenida a la Coppermind");

/* 2014-04
  augment actionpaths edits to LocalSetting.php 
*/
$('[href*="title="]').attr('href', function (i, value) {
  const old_link = value
  //console.debug('was linking to:', value)
  value = value.replace(/\/wiki\/\?title=([^&]+)\&(.+)/, "/wiki/$1?$2")
  value = value.replace(/\/w\/index.php\?title=(.+?)\&(.+?)/, "/wiki/$1?$2")
  if (old_link != value)
    console.debug('now linking to:', value, 'not:', old_link)
  return value
})
$(function() {

document.querySelectorAll('form.mw-search').forEach(function(form) { form.setAttribute('action','/wiki/Special:Search') })
document.querySelectorAll('form#search').forEach(function(form) { form.setAttribute('action', '/wiki/Special:Search') })

document.querySelectorAll('form[action*="/w/index.php"]').forEach(function(form) {
  console.debug('changing form', form, 'with action', form.getAttribute('action'), 'to `?`')
  form.setAttribute('action', '?')
})

});

function showDialog () {
  var container = document.createElement('div');
  container.style.display = 'flex';
  container.style.alignItems = 'center';
  container.style.justifyContent = 'center';
  container.style.position = 'fixed';
  container.style.left = '0';
  container.style.right = '0';
  container.style.top = '0';
  container.style.bottom = '0';
  container.style.zIndex = '10000';
  container.style.background = 'rgba(0, 0, 0, 0.5)';
  container.style.filter = 'initial';

  var window = document.createElement('div');
  window.className = 'coppermind-spoiler-warning';
  window.style.boxShadow = '0 4px 30px 0 rgba(0, 0, 0, 0.2)';
  window.style.width = '90%';
  window.style.maxWidth = '600px';
  window.style.borderRadius = '3px';
  window.style.background = 'white';
  window.style.display = 'flex';
  window.style.flexDirection = 'column';
  window.style.boxSizing = 'border-box';
  window.style.padding = '16px';
  window.style.fontSize = '1.5em';
  window.style.maxHeight = '90%';
  container.appendChild(window);

  window.innerHTML = '<h2>⚠️ Aviso de Spoiler</h2>';
  window.innerHTML += '<p style="font-size: 1em; overflow-y: auto; flex: 1;">¡Has llegado a la Coppermind en español! Esta wiki tiene spoilers de todos los trabajos publicados de Brandon, incluyendo <b><em>El Hombre Iluminado</b></em>. Por lo tanto, al navegar por esta wiki, puedes sufrir spoilers de todo el Cosmere, así como de otras obras de Brandon. Además, algunas páginas pueden contener información sobre libros que aún no han sido publicados. Si quieres visitar el sitio tal y como era antes de la publicación de algún libro, ¡puedes ir a nuestra  <a id="spoiler-warning__time-machine-link" href="https://es.coppermind.net/wiki/Especial:M%C3%A1quinaDelTiempo">Máquina del Tiempo!</a></p>';


  var button = document.createElement('button');
  button.className = 'mw-ui-button mw-ui-destructive';
  button.style.alignSelf = 'center';
  button.style.fontSize = '1em';
  button.innerHTML = 'Acceder';
  button.onclick = function () {
    localStorage.setItem('defiant-spoiler-warning', 'seen');
    document.body.removeChild(container);
    $(document.body).removeClass('spoiler-warning-blur');
  }
  window.appendChild(button);

  var style = document.createElement('style');
  style.type = 'text/css';
  style.innerHTML = '.spoiler-warning-blur > * { filter: blur(50px); }';
  document.getElementsByTagName('head')[0].appendChild(style);

  $(document.body).addClass('spoiler-warning-blur');
  document.body.appendChild(container);
  $('#spoiler-warning__time-machine-link').click(function () { localStorage.setItem('defiant-spoiler-warning', 'seen'); })
  $('#spoiler-warning__spoiler-policy-link').click(function () { localStorage.setItem('defiant-spoiler-warning', 'seen'); })
}

if (window.localStorage.getItem('defiant-spoiler-warning') === null && !mw.config.get('wgUserGroups').includes('keeper')) {
  showDialog();
}