Beurrem Bove!

Keert jouw maag, trots toevend in een fiere Bornemmenaar, zich ook telkens bij het zien van de verwerpelijke hashtag #Beurm en afgeleiden? Dan is dit je kans om er iets aan te doen. Beurrem Bove!

// ==UserScript==
// @name         Beurrem Bove!
// @include      https://mail.google.com/mail/u/0/
// @include      https://www.facebook.com/*
// @include      https://twitter.com/*
// @include      https://www.bornem.be/*
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant        none
// @namespace    http://tampermonkey.net/
// @description  Keert jouw maag, trots toevend in een fiere Bornemmenaar, zich ook telkens bij het zien van de verwerpelijke hashtag #Beurm en afgeleiden? Dan is dit je kans om er iets aan te doen. Beurrem Bove!
// @author       PiPauwels
// @version 0.0.1.20200418093732
// ==/UserScript==

function replace(dom)
{
    if ((website == GOOGLE) || (website == FACEBOOK) || (website == BORNEM) || (website == TWITTER))
    {
        var htmlOrig = dom.innerHTML;
        var htmlNew = dom.innerHTML;
        htmlNew = htmlNew.replace(/Beurmen(eir|eer|aar)/gi, 'Beurremeneir');
        htmlNew = htmlNew.replace(/Bornemn(eir|eer|aar)/gi, 'Bornemmenaar');
        htmlNew = htmlNew.replace(/Beurm/gi, 'Beurrem');
        htmlNew = htmlNew.replace(/bornem/g, 'Bornem');

        if (htmlOrig != htmlNew)
        {
            dom.innerHTML = htmlNew;
            replacedFlag = true;
        }
    }
}
const GOOGLE = 0;
const FACEBOOK = 1;
const TWITTER = 2;
const BORNEM = 3;
let website = -1;
let selectors = [];
let replacedFlag = false;
const url = window.location.href;
if (url.indexOf('mail.google.com') != -1) website = GOOGLE;
if (url.indexOf('facebook.com') != -1) website = FACEBOOK;
if (url.indexOf('twitter.com') != -1) website = TWITTER;
if (url.indexOf('bornem.be') != -1) website = BORNEM;
setWebsite();

function parse()
{
    let dom = '';
    selectors.forEach(selector =>
    {
        dom = document.querySelectorAll(selector);
        for (let i = 0; i < dom.length; i++) replace(dom[i]);
    });
}

function setWebsite()
{
    switch (website)
    {
        case GOOGLE:
            selectors.push('div[class="gs"]');
            selectors.push('.y6 > span > span');
            selectors.push('div.nH > .ha > h2');
            break;
        case FACEBOOK:
            selectors.push('.fb_content');
            selectors.push('.navigationFocus');
            break;
        case TWITTER:
            selectors.push('#react-root > div > div > div > main > div > div > div > div > div section');
            selectors.push('#react-root > div > div > div > main > div > div > div > div > div > div:nth-child(2) > div > div > div:nth-child(1) > div');
            break;
        case BORNEM:
            selectors.push('.content');
            selectors.push('.heading');
            selectors.push('.row');
            break;
    }
}

(function()
{
    const send = XMLHttpRequest.prototype.send
    XMLHttpRequest.prototype.send = function()
    {
        if (website == GOOGLE) this.addEventListener('load', parse);
        return send.apply(this, arguments);
    }
})()

function waitForKeyElements (selectorTxt, actionFunction, bWaitOnce, iframeSelector)
{
    var targetNodes, btargetsFound;

    if (typeof iframeSelector == "undefined") targetNodes = $(selectorTxt);
    else targetNodes = $(iframeSelector).contents().find (selectorTxt);
    if (targetNodes && targetNodes.length > 0)
    {
        btargetsFound = true;
        targetNodes.each ( function ()
        {
            var jThis = $(this);
            var alreadyFound = jThis.data ('alreadyFound') || false;
            if (!alreadyFound)
            {
                var cancelFound = actionFunction (jThis);
                if (cancelFound) btargetsFound = false;
                else jThis.data ('alreadyFound', true);
            }
        } );
    }
    else
    {
        btargetsFound = false;
    }

    var controlObj = waitForKeyElements.controlObj || {};
    var controlKey = selectorTxt.replace (/[^\w]/g, "_");
    var timeControl = controlObj [controlKey];

    if (btargetsFound && bWaitOnce && timeControl)
    {
        clearInterval (timeControl);
        delete controlObj [controlKey]
    }
    else
    {
        if (!timeControl)
        {
            timeControl = setInterval (function()
            {
                 waitForKeyElements (selectorTxt, actionFunction, bWaitOnce, iframeSelector);
            }, 1000);
            controlObj [controlKey] = timeControl;
        }
    }
    waitForKeyElements.controlObj = controlObj;
}

function next() {waitForKeyElements ('img', parse);}
if ((website == FACEBOOK) || (website == BORNEM)) window.addEventListener('load', parse);
if ((website == TWITTER) && (replacedFlag == false)) waitForKeyElements ('.r-wgs6xk', next);