Difference between revisions of "MediaWiki:Common.js"

From The Coppermind
Jump to navigation Jump to search
m (-> gadget)
m (rm Defiant)
 
(39 intermediate revisions by 4 users not shown)
Line 1: Line 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. */
 
/*
 
wrapper for creating new html elements
 
*/
 
function ne(tag, attrs) {
 
var _ = $(document.createElement(tag));
 
for (var i in attrs)
 
_.attr(i, attrs[i]);
 
return _;
 
}
 
   
 
/* replace "Coppermind:Welcome" with "Welcome to the Coppermind" */
 
/* replace "Coppermind:Welcome" with "Welcome to the Coppermind" */
 
$('h1:contains("Coppermind:Welcome")').text("Welcome to the Coppermind");
 
$('h1:contains("Coppermind:Welcome")').text("Welcome to the Coppermind");
 
/* 2017-11 - protect roll back links */
 
$('.mw-rollback-link').attr('onclick', "return confirm('definitely roll back?')")
 
   
 
/* 2014-04
 
/* 2014-04
Line 41: Line 28:
 
});
 
});
   
  +
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');
function ModifySidebar( action, section, name, link ) {
 
  +
window.className = 'coppermind-spoiler-warning';
/* from https://www.mediawiki.org/wiki/Manual:Interface/Sidebar#Add_or_remove_toolbox_sections_.28JavaScript.29 */
 
  +
window.style.boxShadow = '0 4px 30px 0 rgba(0, 0, 0, 0.2)';
try {
 
  +
window.style.width = '90%';
switch ( section ) {
 
  +
window.style.maxWidth = '600px';
case 'languages':
 
  +
window.style.borderRadius = '3px';
var target = 'p-lang';
 
  +
window.style.background = 'white';
break;
 
  +
window.style.display = 'flex';
case 'toolbox':
 
  +
window.style.flexDirection = 'column';
var target = 'p-tb';
 
  +
window.style.boxSizing = 'border-box';
break;
 
  +
window.style.padding = '16px';
case 'navigation':
 
  +
window.style.fontSize = '1.5em';
var target = 'p-navigation';
 
  +
window.style.maxHeight = '90%';
break;
 
  +
container.appendChild(window);
default:
 
  +
var target = 'p-' + section;
 
  +
window.innerHTML = '<h2>⚠️ Spoiler Warning</h2>';
break;
 
  +
window.innerHTML += '<p style="font-size: 1em; overflow-y: auto; flex: 1;">Welcome to the Coppermind! Be aware that the wiki may have spoilers for all published works by Brandon Sanderson, <b>including <em>The Sunlit Man</em></b>. By browsing this wiki, you may therefore be subject to spoilers for the entire Cosmere as well as Brandon\'s other works. Additionally, certain pages may contain information about books that have yet to be released. For our full spoiler policy and guidelines, you can visit <a id="spoiler-warning__spoiler-policy-link" href="https://coppermind.net/wiki/Help:Spoilers">our help page on spoilers</a>! If you\'d like to visit the site as it was prior to any book release, you can go to <a id="spoiler-warning__time-machine-link" href="https://coppermind.net/wiki/Special:TimeMachine">our Time Machine!</a></p>';
}
 
  +
 
  +
var button = document.createElement('button');
if ( action == 'add' ) {
 
  +
button.className = 'mw-ui-button mw-ui-destructive';
var node = document.getElementById( target )
 
  +
button.style.alignSelf = 'center';
.getElementsByTagName( 'div' )[0]
 
  +
button.style.fontSize = '1em';
.getElementsByTagName( 'ul' )[0];
 
  +
button.innerHTML = 'Proceed';
 
  +
button.onclick = function () {
var aNode = document.createElement( 'a' );
 
  +
localStorage.setItem('defiant-spoiler-warning', 'seen');
var liNode = document.createElement( 'li' );
 
  +
document.body.removeChild(container);
 
  +
$(document.body).removeClass('spoiler-warning-blur');
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');
 
  +
$(document.body).addClass('spoiler-warning-blur');
ModifySidebar( 'add', 'toolbox', "Search Brandon's website for " + title, 'https://brandonsanderson.com/?s='+ title );
 
  +
document.body.appendChild(container);
ModifySidebar( 'add', 'toolbox', 'Search Arcanum for '+ title, 'https://wob.coppermind.net/adv_search/?query='+ title );
 
  +
$('#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();
  +
}

Latest revision as of 19:31, 21 February 2024

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

/* replace "Coppermind:Welcome" with "Welcome to the Coppermind" */
$('h1:contains("Coppermind:Welcome")').text("Welcome to the 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>⚠️ Spoiler Warning</h2>';
  window.innerHTML += '<p style="font-size: 1em; overflow-y: auto; flex: 1;">Welcome to the Coppermind! Be aware that the wiki may have spoilers for all published works by Brandon Sanderson, <b>including <em>The Sunlit Man</em></b>. By browsing this wiki, you may therefore be subject to spoilers for the entire Cosmere as well as Brandon\'s other works. Additionally, certain pages may contain information about books that have yet to be released. For our full spoiler policy and guidelines, you can visit <a id="spoiler-warning__spoiler-policy-link" href="https://coppermind.net/wiki/Help:Spoilers">our help page on spoilers</a>! If you\'d like to visit the site as it was prior to any book release, you can go to <a id="spoiler-warning__time-machine-link" href="https://coppermind.net/wiki/Special:TimeMachine">our Time Machine!</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 = 'Proceed';
  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();
}