Diferencia entre revisiones de «MediaWiki:Common.js»

De La Coppermind
Ir a la navegación Ir a la búsqueda
m (try this)
m
 
(No se muestran 51 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" */
/*
 
  +
$('h1:contains("Coppermind:Bienvenidos")').text("Te damos la bienvenida a la Coppermind");
wrapper for creating new html elements
 
*/
 
function ne(tag, attrs) {
 
var _ = $(document.createElement(tag));
 
for (var i in attrs)
 
_.attr(i, attrs[i]);
 
return _;
 
}
 
 
/* 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");
 
 
/* 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())
 
})
 
 
/* 2017-11 - protect roll back links */
 
$('.mw-rollback-link').attr('onclick', "return confirm('definitely roll back?')")
 
   
 
/* 2014-04
 
/* 2014-04
Línea 48: Línea 23:
 
document.querySelectorAll('form[action*="/w/index.php"]').forEach(function(form) {
 
document.querySelectorAll('form[action*="/w/index.php"]').forEach(function(form) {
 
console.debug('changing form', form, 'with action', form.getAttribute('action'), 'to `?`')
 
console.debug('changing form', form, 'with action', form.getAttribute('action'), 'to `?`')
//-form.setAttribute('action', '?')
+
form.setAttribute('action', '?')
 
})
 
})
   
 
});
 
});
   
  +
function showDialog () {
/* 2015-01
 
  +
var container = document.createElement('div');
add links to Brandon's site and the interview database to the sidebar
 
  +
container.style.display = 'flex';
*/
 
  +
container.style.alignItems = 'center';
jQuery(function () {
 
  +
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>';
function ModifySidebar( action, section, name, link ) {
 
  +
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>';
/* from https://www.mediawiki.org/wiki/Manual:Interface/Sidebar#Add_or_remove_toolbox_sections_.28JavaScript.29 */
 
  +
try {
 
  +
switch ( section ) {
 
  +
var button = document.createElement('button');
case 'languages':
 
  +
button.className = 'mw-ui-button mw-ui-destructive';
var target = 'p-lang';
 
  +
button.style.alignSelf = 'center';
break;
 
  +
button.style.fontSize = '1em';
case 'toolbox':
 
  +
button.innerHTML = 'Acceder';
var target = 'p-tb';
 
  +
button.onclick = function () {
break;
 
  +
localStorage.setItem('defiant-spoiler-warning', 'seen');
case 'navigation':
 
  +
document.body.removeChild(container);
var target = 'p-navigation';
 
  +
$(document.body).removeClass('spoiler-warning-blur');
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;
 
}
 
 
}
 
}
  +
window.appendChild(button);
   
  +
var style = document.createElement('style');
if (!mw.config.get('wgIsArticle') || mw.config.get('wgCanonicalNamespace') !== '')
 
  +
style.type = 'text/css';
return;
 
  +
style.innerHTML = '.spoiler-warning-blur > * { filter: blur(50px); }';
if (mw.config.get('wgCategories').includes('Meta'))
 
  +
document.getElementsByTagName('head')[0].appendChild(style);
return;
 
var title = mw.config.get('wgTitle');
 
ModifySidebar( 'add', 'toolbox', "Search Brandon's website for " + title, 'https://brandonsanderson.com/?s='+ title );
 
ModifySidebar( 'add', 'toolbox', 'Search Arcanum for '+ title, 'https://wob.coppermind.net/adv_search/?query='+ title );
 
});
 
   
  +
$(document.body).addClass('spoiler-warning-blur');
/* 2017-11: functions for generating links and buttons */
 
  +
document.body.appendChild(container);
// make an <a> with a url and some text
 
  +
$('#spoiler-warning__time-machine-link').click(function () { localStorage.setItem('defiant-spoiler-warning', 'seen'); })
function make_a(url, text) {
 
  +
$('#spoiler-warning__spoiler-policy-link').click(function () { localStorage.setItem('defiant-spoiler-warning', 'seen'); })
const el = document.createElement('a')
 
el.setAttribute('href', url)
 
el.innerText = text
 
return el
 
 
}
 
}
   
  +
if (window.localStorage.getItem('defiant-spoiler-warning') === null && !mw.config.get('wgUserGroups').includes('keeper')) {
// make a nice link button for the edit box
 
  +
showDialog();
function make_edit_button(url, text, title) {
 
// create link element
 
const ln = make_a(url, text)
 
ln.setAttribute('target', '_blank')
 
// create wrap element
 
const el = document.createElement('span')
 
el.setAttribute('title', title)
 
el.appendChild(ln)
 
// style elements
 
// FIXME: these are copied from the oo-ui elements in the edit box
 
ln.className = 'oo-ui-inputWidget-input oo-ui-buttonElement-button'
 
el.className = 'oo-ui-widget oo-ui-widget-enabled oo-ui-inputWidget oo-ui-buttonElement oo-ui-buttonElement-framed oo-ui-labelElement oo-ui-buttonInputWidget'
 
// return element for insertion
 
return el
 
 
}
 
}
 
// create a link that looks like .editsection
 
function make_editsection_link(url) {
 
// generate an edit link
 
const ln = make_a(url, 'edit')
 
// wrap the link in an '.editsection' link floated right
 
const el = document.createElement('span')
 
el.className = 'mw-editsection'
 
el.style.float = 'right'
 
// push [] around the A element into the span
 
el.appendChild(document.createTextNode('['))
 
el.appendChild(ln)
 
el.appendChild(document.createTextNode(']'))
 
return el
 
}
 
 
/* add links to edit box */
 
$(function () {
 
 
const edit_box = document.querySelector('.editButtons')
 
// check that there is an edit box
 
if (!edit_box || mw.config.get('wgCanonicalNamespace') !== '') return
 
 
const page_name = mw.config.get('wgPageName').replace(/[_]/g, '+')
 
 
// add a link to the Arcanum
 
const wob_url = make_edit_button('https://wob.coppermind.net/adv_search/?query='+ page_name, 'Search Arcanum', 'Search Arcanum for "'+ page_name +'"')
 
edit_box.appendChild(wob_url)
 
 
});
 
 
/* 2018-08-22 auto-generate Cite:Arcanum pages for {{wob ref}} */
 
$(function () {
 
// determine if this page is editing a Cite: Arcanum page
 
const edit_box = document.querySelector('#editform textarea');
 
// check that there is an edit box
 
if (!edit_box || mw.config.get('wgCanonicalNamespace') !== 'Cite') return -1;
 
// check that it's a page creation
 
if (mw.config.get('wgArticleId') != 0) return -2;
 
// check that it's an Arcanum page
 
const page_name = mw.config.get('wgPageName');
 
if (!page_name.startsWith('Cite:Arcanum-')) return -3;
 
// work out the api url
 
const entry = page_name.split('-')[1];
 
const url = 'https://wob.coppermind.net/api/entry/'+ entry +'/';
 
// start fetching from Arcanum
 
fetch(url)
 
.then(function(resp) { return resp.json() })
 
.then(function(json) {
 
if (!json || !json.event) { return; }
 
// the <arcanum-entry-info> tag
 
const tag = '<arcanum-entry-info date="'+ (json.date || json.event_date) +'" event="'+ json.event +'">'+ json.event_name +'</arcanum-entry-info>';
 
// the rest of the page
 
const page = tag +"<noinclude>\n\n== Users ==\n{{Special:WhatLinksHere/{{FULLPAGENAME}}|}}\n[[category: generated citations]]\n";
 
// only fill in the edit box if it is currently blank
 
if (edit_box.value == '') {
 
edit_box.value = page;
 
// preview the page
 
document.querySelector('[name="wpPreview"]').click()
 
}
 
})
 
})
 
 
/* 2018-09-16 display Arcanum entry on Cite:Arcanum-X page */
 
function show_arcanum_entry() {
 
// check that it's an Arcanum page
 
const page_name = mw.config.get('wgPageName');
 
if (!page_name.startsWith('Cite:Arcanum-')) return;
 
// work out the api url
 
const entry = page_name.split('-')[1];
 
const url = 'https://wob.coppermind.net/api/entry/'+ entry +'/';
 
// start fetching from Arcanum
 
console.log('fetching '+ url);
 
fetch(url)
 
.then(function(resp) { return resp.json() })
 
.then(function(json) {
 
// debugging:
 
console.log('Entry '+ entry, json);
 
// create containing element
 
const entry_el = document.createElement('article');
 
entry_el.classList.add('arcanum-entry');
 
// add lines
 
json.lines.forEach(function(line) {
 
// create speaker element
 
const speaker = document.createElement('h4');
 
speaker.innerText = line.speaker;
 
if (speaker.innerText.includes('href') && speaker.innerText.includes('twitter.com')) {
 
// speaker is a link to twitter, so show it as such
 
speaker.innerHTML = speaker.innerText
 
}
 
// append the speaker and html from the line
 
entry_el.appendChild(speaker);
 
entry_el.innerHTML += line.text;
 
});
 
// place container on page
 
const users_el = document.getElementById('Users').parentElement
 
users_el.parentElement.insertBefore(entry_el, users_el);
 
});
 
};
 
// 2018-11-27 split the above into two so the function can be used elsewhere
 
//$(function () { show_arcanum_entry() });
 
mw.hook('wikipage.content').add(show_arcanum_entry)
 

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();
}