MediaWiki:Common.js: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
(javascript from https://github.com/dougmartin/Stop-Censorship)
No edit summary
 
(26 intermediate revisions by 5 users not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
ga('create','UA-68102409-1','auto');ga('send','pageview');


// from https://github.com/dougmartin/Stop-Censorship
$(function () {
  $('#content').prepend("<div class='noisebridge-donate-button' style='position: fixed; top: 50px; right: 0;'><a href='https://noisebridge.net/donate'><img src='https://noisebridge.net/images/5/55/Donate.png' alt='Donate'></a></div>");
  /* EFF borked their widget, try uncommenting to see if it's fixed
  var e = document.createElement('script'); e.type='text/javascript'; e.async = true;
  e.src = 'https://www.eff.org/doa/widget.min.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(e, s);
  */
});


//
var fontloader = [`
// stopcensorship.js
    <link rel="preconnect" href="https://fonts.googleapis.com">
//
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
// Author: Doug Martin (@dougmartin or http://dougmart.in/)
    <link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap" rel="stylesheet">`
//
]
// Usage: Add to head or body of any page to automatically censor the content to protest censorship of the Internet
//
// Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
//
// NOTE: PLEASE DON'T HOTLINK THIS SCRIPT!
//


(function () {
if ( mw.config.get( 'wgPageName' ) === 'Sandbox2' ) {
var walker, node, root, bar;
    var head = document.querySelector("head");
    head.innerHTML = fontloader;
function removeBar() {
}
// set the no-censor cookie for this session
document.cookie = "__REMOVE_STOP_CENSORSHIP__=1;path=/";
// and reload the page
window.location.reload();
return false;
}
function addBar() {
var baseStyles, linkStyles, stopLink, removeLink;
function createStyledNode(type, text, nodeStyles) {
var i, node, e;
function applyStyles(styles) {
if (styles) {
for (i in styles) {
if (styles.hasOwnProperty(i)) {
try {
node.style[i] = styles[i];
}
catch (e) {
}
}
}
}
}
node = document.createElement(type);
node.innerHTML = text;
applyStyles(baseStyles);
applyStyles(nodeStyles);
return node;
}
// create the base styles
baseStyles = {
"background": "#000 none repeat scroll 0% 0%",
"borderCollapse": "separate",
"borderSpacing": "0",
"border": "medium none #000",
"bottom": "auto",
"captionSide": "top",
"clear": "none",
"clip": "auto",
"color": "#fff",
"cursor": "auto",
"direction": "ltr",
"display": "inline",
"emptyCells": "show",
"float": "none",
"fontStyle": "normal",
"fontVariant": "normal",
"fontWeight": "bold",
"fontSize": "12px",
"fontFamily": "verdana,helvetica,arial,sans-serif",
"height": "auto",
"left": "auto",
"letterSpacing": "normal",
"lineHeight": "normal",
"listStyle": "disc outside none",
"margin": "0",
"maxHeight": "none",
"maxWidth": "none",
"minHeight": "0",
"minWidth": "0",
"orphans": "2",
"outline": "invert none medium",
"overflow": "visible",
"padding": "0",
"pageBreakAfter": "auto",
"pageBreakBefore": "auto",
"pageBreakInside": "auto",
"position": "static",
"right": "auto",
"tableLayout": "auto",
"textAlign": "left",
"textDecoration": "none",
"textIndent": "0",
"textTransform": "none",
"top": "auto",
"unicodeBidi": "normal",
"verticalAlign": "baseline",
"visibility": "visible",
"whiteSpace": "normal",
"widows": "2",
"width": "auto",
"wordSpacing": "normal",
"zIndex": "auto"
};
// and the link styles
linkStyles = {
"textDecoration": "underline",
"cursor": "pointer"
};
// add bar to top of page with link to anti-censor site and link to set cookie
bar = createStyledNode("div", "", {
"position": "absolute",
"top": "0",
"left": "0",
"textAlign": "center",
"margin": "0",
"padding": "5px 0",
"width": "100%",
"borderTop": "2px solid #fff",
"borderBottom": "2px solid #fff",
"zIndex": 2147483647
});
stopLink = createStyledNode("a", "STOP CENSORSHIP", linkStyles);
stopLink.href = "http://americancensorship.org/";
removeLink = createStyledNode("a", "Remove this", linkStyles);
removeLink.href = "#";
removeLink.onclick = removeBar;
bar.appendChild(stopLink);
bar.appendChild(createStyledNode("span", "|", {
"padding": "0 10px"
}));
bar.appendChild(removeLink);
document.body.appendChild(bar);
}
function run() {
var blackout, blackoutArray;
function censorNode(node) {
var words, i, j;
// split contents on whitespace
words = node.nodeValue.split(/\s/);
// randomly replace words with black bars
for (i = 0, j = words.length; i < j; i++) {
if (Math.random() < 0.5) {
words[i] = blackoutArray.slice(0, words[i].length).join("");
}
}
// and rejoin using just space
node.nodeValue = words.join(" ");
}
// create a big blackout array string to pull from
blackout = String.fromCharCode(0x2588);
blackoutArray = [];
while (blackoutArray.length < 1024) {
blackoutArray.push(blackout);
}
// process all the text
if (document.createTreeWalker) {
walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
while (walker.nextNode()) {
censorNode(walker.currentNode);
}
}
else {
// do depth first traveral from "Iterative Tree Traversal" at
// http://stackoverflow.com/questions/2579666/getelementsbytagname-equivalent-for-textnodes
root = document.body;
node = root.childNodes[0];
while (node != null) {
if (node.nodeType == 3) {
censorNode(node);
}
 
if (node.hasChildNodes()) {
node = node.firstChild;
}
else {
while (node.nextSibling == null && node != root) {
node = node.parentNode;
}
node = node.nextSibling;
}
}
}
addBar();
}
// adapted from jQuery
function onReady(callback) {
 
var isReady = false;
function ready() {
if (isReady) {
return;
}
if (!document.body) {
return setTimeout(ready, 1);
}
 
isReady = true;
callback();
}
function domContentLoaded() {
if (document.addEventListener) {
document.removeEventListener("DOMContentLoaded", domContentLoaded, false);
ready();
}
else if (document.attachEvent && (document.readyState === "complete")) {
document.detachEvent("onreadystatechange", domContentLoaded);
ready();
}
}
function doScrollCheck() {
if (isReady) {
return;
}
 
try {
document.documentElement.doScroll("left");
} catch (e) {
setTimeout(doScrollCheck, 1);
return;
}
 
ready();
}
 
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", domContentLoaded, false);
window.addEventListener("load", ready, false);
}
else if (document.attachEvent) {
document.attachEvent("onreadystatechange", domContentLoaded);
window.attachEvent("onload", ready);
try {
if ((window.frameElement === null) && document.documentElement.doScroll) {
doScrollCheck();
}
} catch (e) {
}
}
}
// if undo-censor cookie set, return
if (/__REMOVE_STOP_CENSORSHIP__=1/.test(document.cookie)) {
return;
}
 
// wait for document load and then run
if (!document.body) {
onReady(run);
}
else {
run();
}
 
}());

Latest revision as of 10:30, 18 August 2022

(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
ga('create','UA-68102409-1','auto');ga('send','pageview');

$(function () {
  $('#content').prepend("<div class='noisebridge-donate-button' style='position: fixed; top: 50px; right: 0;'><a href='https://noisebridge.net/donate'><img src='https://noisebridge.net/images/5/55/Donate.png' alt='Donate'></a></div>");
  /* EFF borked their widget, try uncommenting to see if it's fixed
  var e = document.createElement('script'); e.type='text/javascript'; e.async = true;
  e.src = 'https://www.eff.org/doa/widget.min.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(e, s);
  */
});

var fontloader = [`
    <link rel="preconnect" href="https://fonts.googleapis.com"> 
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap" rel="stylesheet">`
]

if ( mw.config.get( 'wgPageName' ) === 'Sandbox2' ) {
    var head = document.querySelector("head");
    head.innerHTML = fontloader;
}