Difference between revisions of "MediaWiki:Common.js"

From DKC Speedruns
Jump to: navigation, search
 
(79 intermediate revisions by 3 users not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
 
 
/*
 
/*
function parseResponse(data) {
 
    var ip = data.ip;
 
    console.log(ip);
 
}
 
  
var script = document.createElement('script');
+
TODO:
script.src = 'https://ipinfo.io?callback=parseResponse';
+
- Speedrun.com scrape bot
document.getElementsByTagName('head')[0].appendChild(script);
+
    - nodemw
 +
    - cheerio
 +
- Fix misc tab formatting
 +
- Alternate embeds
  
window.onload = function() {
+
*/
  
if (ip = '108.184.181.197' || '108.184.181.197') { // testing
+
var body = document.getElementsByTagName('body')[0];
 +
if (window.location.href == 'https://dkcspeedruns.com/Main_Page') {
 +
    var donkey, clickbait, krool;
 +
    donkey = document.createElement('span');
 +
    donkey.className = 'donkey-vine';
 +
    body.appendChild(donkey);
 +
    var donkeyImg = document.createElement('img');
 +
    donkeyImg.src = 'https://dkcspeedruns.com/mediawiki/img_auth.php/d/dd/Donkey-vine.png';
 +
    donkey.appendChild(donkeyImg);
 +
    clickbait = document.createElement('img');
 +
    clickbait.src = 'https://dkcspeedruns.com/mediawiki/img_auth.php/d/d1/Dkc-ad.gif';
 +
    clickbait.id = "clickbait";
 +
    document.getElementById('bodyContent').insertBefore(clickbait, document.getElementById('bodyContent').firstChild);
 +
    krool = document.createElement('div');
 +
    krool.id = 'krool';
 +
    krool.className = 'pop-out';
 +
    krool.className += ' paused';
 +
    body.appendChild(krool);
 +
    clickbait.onclick = function() {
 +
        krool.classList.remove('paused');
 +
    }
 +
}
  
    if (window.location.href.indexOf('action=edit') > -1) { // edit page
+
if (window.location.href == 'https://dkcspeedruns.com/Leaderboards' || window.location.href == 'https://dkcspeedruns.com/Leaderboards/Misc_Categories') {
         localStorage.setItem('edit', 'yes');
+
    document.getElementById('firstHeading').style.border = 'none';
         //localStorage.setItem('edit', 'no');
+
    var editLinks = document.getElementsByClassName('mw-editsection-visualeditor');
 +
    for (var i = 0; i < editLinks.length; i++) {
 +
        editLinks[i].style.display = 'none';
 +
        var newLink = document.createElement('a');
 +
        newLink.href = 'https://dkcspeedruns.com/' + editLinks[i].href.substr(51).split('&')[0] + '?veaction=edit';
 +
         newLink.innerHTML = 'edit';
 +
            editLinks[i].parentNode.insertBefore(newLink, editLinks[i]);
 +
    }
 +
    var toc, container, gameTabs, gameTabsContainer, catTabs, games, gamesContainer, cats, catsContainer, currentGame;
 +
    toc = document.getElementById('toc');
 +
    container = document.getElementById('mw-content-text');
 +
    toc.style.display = 'none';
 +
    gameTabs = document.getElementById('mw-content-text').getElementsByTagName('h1');
 +
    catTabs = document.getElementById('mw-content-text').getElementsByTagName('h2');
 +
    currentGame = 0;
 +
    $(gameTabs).each(function(i) {
 +
        if (i == 0) {
 +
            $(this).addClass('game-tab selected');
 +
        } else {
 +
            $(this).addClass('game-tab');
 +
         }
 +
        $(this).nextUntil('h1').wrapAll('<div class="game"></div>');
 +
    });
 +
    $(catTabs).each(function(i) {
 +
        if (i == 0) {} else if (i == 1) {
 +
            $(this).addClass('cat-tab selected');
 +
        } else {
 +
            $(this).addClass('cat-tab');
 +
        }
 +
        $(this).nextUntil('h2').wrapAll('<div class="cat"></div>');
 +
    });
 +
    games = document.getElementsByClassName('game');
 +
    cats = document.getElementsByClassName('cat');
 +
    gameTabsContainer = document.createElement('div');
 +
    gameTabsContainer.id = 'game-tabs';
 +
    body.appendChild(gameTabsContainer);
 +
    while (gameTabs.length > 0) {
 +
        gameTabsContainer.appendChild(gameTabs[0]);
 +
    }
 +
    container.insertBefore(gameTabsContainer, container.firstChild);
 +
    for (var i = 0; i < games.length; i++) {
 +
        var catTabsContainer = document.createElement('div');
 +
        catTabsContainer.className = 'cat-tabs';
 +
        var tabs = games[i].getElementsByClassName('cat-tab');
 +
        while (tabs.length > 0) {
 +
            catTabsContainer.appendChild(tabs[0]);
 +
        }
 +
        games[i].insertBefore(catTabsContainer, games[i].firstChild);
 
     };
 
     };
 
+
    for (var i = 0; i < games.length; i++) {
     if (localStorage.getItem('edit') === 'yes') { // edit was made
+
        if (i == 0) {
    // check everything
+
            games[i].className += ' dkc-show';
        var links = [],
+
        };
             lnk = document.links,
+
    }
             images = [],
+
     for (var i = 0; i < cats.length; i++) {
             img = document.images;
+
        if (i == 0) {
      
+
            cats[i].className += ' dkc-show';
        for(var i = 0; i < lnk.length; i++) {
+
        };
             links.push(lnk[i].getAttribute('href'));
+
    }
 +
    for (var i = 0; i < gameTabs.length; i++) {
 +
        (function(index) {
 +
            gameTabs[i].onclick = function() {
 +
                showCurrentGame(index);
 +
            }
 +
        })(i);
 +
    }
 +
    var showCurrentGame = function(index) {
 +
        if (currentGame != index) {
 +
            currentGame = index;
 +
            for (var k = 0; k < games.length; k++) {
 +
                games[k].classList.remove('dkc-show');
 +
                gameTabs[k].className = 'game-tab';
 +
                var resetCatTabs = games[k].getElementsByClassName('cat-tab');
 +
                for (var p = 0; p < resetCatTabs.length; p++) {
 +
                    if (resetCatTabs[p].classList.contains('selected')) {
 +
                        resetCatTabs[p].classList.remove('selected');
 +
                    }
 +
                }
 +
                var resetCats = games[k].getElementsByClassName('cat');
 +
                for (var p = 0; p < resetCats.length; p++) {
 +
                    if (resetCats[p].classList.contains('dkc-show')) {
 +
                        resetCats[p].classList.remove('dkc-show');
 +
                    }
 +
                }
 +
            }
 +
             gameTabs[index].className += ' selected';
 +
            games[index].className += ' dkc-show';
 +
             games[index].getElementsByClassName('cat')[0].className += ' dkc-show';
 +
            games[index].getElementsByClassName('cat-tab')[0].className = 'cat-tab selected';
 +
        } else {
 +
             for (var k = 0; k < games.length; k++) {
 +
                games[k].classList.remove('dkc-show');
 +
            }
 +
            games[index].className += ' dkc-show';
 +
        }
 +
     }
 +
    for (var i = 0; i < catTabs.length; i++) {
 +
        (function(index) {
 +
             catTabs[i].onclick = function() {
 +
                showCurrentCat(index - 1);
 +
            }
 +
        })(i);
 +
    }
 +
    var showCurrentCat = function(cat) {
 +
        for (var k = 0; k < cats.length; k++) {
 +
            cats[k].classList.remove('dkc-show');
 +
            catTabs[k].className = 'cat-tab';
 
         }
 
         }
          
+
         catTabs[cat + 1].className = 'cat-tab selected';
         for(var i = 0; i < img.length; i++) {
+
         cats[cat].className += ' dkc-show';
             images.push(img[i].getAttribute('src'));
+
    }
 +
    container.style.marginBottom = '-10px';
 +
    container.style.display = 'block';
 +
    createModals();
 +
}
 +
if (window.location.href.indexOf('Leaderboards') > -1) {
 +
    body.classList.remove('page-Leaderboards');
 +
    body.classList.remove('page-Leaderboards_Misc_Categories');
 +
}
 +
function createModals() {
 +
    var currentGame = document.getElementsByClassName('dkc-show')[0];
 +
    var gameTRs = document.getElementsByTagName('tr');
 +
    for (var t = 0; t < gameTRs.length; t++) {
 +
        if (gameTRs[t].lastChild.innerHTML.length > 1) {
 +
             var newHTML = '<div>' + gameTRs[t].lastChild.innerHTML + '</div>';
 +
            gameTRs[t].lastChild.innerHTML = newHTML;
 
         }
 
         }
          
+
    }
         //console.log(links);
+
    var games = document.getElementsByClassName('game');
        //console.log(images);
+
    for (var g = 0; g < games.length; g++) {
       
+
         var links = games[g].getElementsByTagName('a');
        links.forEach(function(link) {
+
         for (var a = 0; a < links.length; a++) {
            //console.log(link);
+
            if (links[a].href.indexOf('youtu') > -1 || links[a].href.indexOf('twitch') > -1) {
            if (link.includes('dkcspeedruns') && !link.includes('mediawiki')) {
+
                var link = links[a].href;
                localStorage.setItem('status', 'fail');
+
                links[a].setAttribute('data-embed', link);
                console.log('bad link found');
+
                links[a].removeAttribute('href');
                if (link.includes('jpg') || link.includes('png') || link.includes('gif')) {
+
                links[a].onclick = function() {
                    console.log('bad image link found');
+
                    var link = this.getAttribute('data-embed');
 +
                    //document.getElementsByTagName('html')[0].className += ' ve-loading'; visual editor is ded
 +
                    document.getElementsByTagName('html')[0].className += ' modalbg';
 +
                    var modal = document.createElement('div');
 +
                    var close = document.createElement('div');
 +
                    close.id = "close";
 +
                    close.onclick = function() {
 +
                        document.getElementsByTagName('html')[0].className = document.getElementsByTagName('html')[0].className.substr(0, document.getElementsByTagName('html')[0].className.length - 8);
 +
                        document.getElementById('modal').outerHTML = '';
 +
                    }
 +
                    modal.id = "modal";
 +
                    if (link.indexOf('twitch') > -1) {
 +
                        modal.innerHTML = '<iframe src="https://player.twitch.tv/?video=' + link.substr(link.length - 9) + '&parent=dkcspeedruns.com" height="100%" width="100%"></iframe>';
 +
                        body.appendChild(modal);
 +
                        modal.appendChild(close);
 +
                    } else if (link.indexOf('youtu') > -1) {
 +
                        modal.innerHTML = '<iframe src="https://www.youtube.com/embed/' + link.substr(link.length - 11) + '?autoplay=1" height="100%" width="100%"></iframe>';
 +
                        body.appendChild(modal);
 +
                        modal.appendChild(close);
 +
                    }
 
                 }
 
                 }
                var warning = document.createElement('div');
 
                warning.className = 'warning';
 
                var pathname = link.replace(/^.*\/\/[^\/]+/, '');
 
                //console.log(pathname);
 
                var oops = "<div><p>Oops! Looks like you've formatted something incorrectly. Please refer <a href=\"/Contributing\">here</a> for information on how to fix this error. Thanks! (Still need to make this say better stuff.)</p>";
 
                var error = "<p>Error: Internal Link<p></p><p>" + pathname + " " + link + "</div>";
 
                warning.innerHTML = oops + error;
 
                //console.log(link);
 
                //console.log(oops);
 
                //console.log(error);
 
                var body = document.getElementsByTagName('body')[0];
 
                body.appendChild(warning);
 
                warning.onclick = function() {
 
                    body.removeChild(warning);
 
                };
 
            } else {
 
                localStorage.setItem('status', 'pass');
 
                console.log('no bad links or image links found');
 
 
             }
 
             }
        });
 
       
 
        images.forEach(function(image) {
 
            console.log(image);
 
            if (!image.includes('mediawiki')) {
 
                localStorage.setItem('status', 'fail');
 
                console.log('bad image found');
 
            } else {
 
                localStorage.setItem('status', 'pass');
 
                console.log('no bad images found');
 
            }
 
        });
 
       
 
        // do something after check
 
        if (localStorage.getItem('status') === 'pass') {
 
            //localStorage.setItem('edit', 'no');
 
 
         }
 
         }
       
+
     }
     } // user made an edit
+
}
   
 
} // testing
 
  
}
+
if (window.location.href == 'https://dkcspeedruns.com/Leaderboards/Misc_Categories') {
*/
+
    body.onclick = function() {
document.getElementById('clickbait').children[0].children[0].children[0].className = 'advert';
+
        var tabs = document.getElementsByClassName('game dkc-show')[0].getElementsByClassName('cat-tabs')[0];
var krool = document.getElementById('krool');
+
        var cat = document.getElementsByClassName('game dkc-show')[0].getElementsByClassName('cat dkc-show')[0];
var advert = document.getElementsByClassName('advert')[0];
+
        if (tabs.offsetHeight < cat.offsetHeight) {
advert.onclick = function() {
+
            document.getElementById('mw-content-text').style.height = cat.offsetHeight + 38 + "px";
    krool.className += 'show';
+
        } else {
    setTimeout(function () {
+
            document.getElementById('mw-content-text').style.height = tabs.offsetHeight + 55 + "px";
         krool.className += ' hide';
+
        }
     }, 4000);
+
    }
 +
    var clear = document.getElementsByClassName('mw-parser-output')[0], child = clear.firstChild, nextChild;
 +
    while (child) {
 +
        nextChild = child.nextSibling;
 +
        if (child.nodeType == 3) {
 +
            clear.removeChild(child);
 +
        }
 +
         child = nextChild;
 +
     }
 
}
 
}

Latest revision as of 23:52, 23 March 2021

/*

TODO:
- Speedrun.com scrape bot
    - nodemw
    - cheerio
- Fix misc tab formatting
- Alternate embeds

*/

var body = document.getElementsByTagName('body')[0];
if (window.location.href == 'https://dkcspeedruns.com/Main_Page') {
    var donkey, clickbait, krool;
    donkey = document.createElement('span');
    donkey.className = 'donkey-vine';
    body.appendChild(donkey);
    var donkeyImg = document.createElement('img');
    donkeyImg.src = 'https://dkcspeedruns.com/mediawiki/img_auth.php/d/dd/Donkey-vine.png';
    donkey.appendChild(donkeyImg);
    clickbait = document.createElement('img');
    clickbait.src = 'https://dkcspeedruns.com/mediawiki/img_auth.php/d/d1/Dkc-ad.gif';
    clickbait.id = "clickbait";
    document.getElementById('bodyContent').insertBefore(clickbait, document.getElementById('bodyContent').firstChild);
    krool = document.createElement('div');
    krool.id = 'krool';
    krool.className = 'pop-out';
    krool.className += ' paused';
    body.appendChild(krool);
    clickbait.onclick = function() {
        krool.classList.remove('paused');
    }
}

if (window.location.href == 'https://dkcspeedruns.com/Leaderboards' || window.location.href == 'https://dkcspeedruns.com/Leaderboards/Misc_Categories') {
    document.getElementById('firstHeading').style.border = 'none';
    var editLinks = document.getElementsByClassName('mw-editsection-visualeditor');
    for (var i = 0; i < editLinks.length; i++) {
        editLinks[i].style.display = 'none';
        var newLink = document.createElement('a');
        newLink.href = 'https://dkcspeedruns.com/' + editLinks[i].href.substr(51).split('&')[0] + '?veaction=edit';
        newLink.innerHTML = 'edit';
            editLinks[i].parentNode.insertBefore(newLink, editLinks[i]);
    }
    var toc, container, gameTabs, gameTabsContainer, catTabs, games, gamesContainer, cats, catsContainer, currentGame;
    toc = document.getElementById('toc');
    container = document.getElementById('mw-content-text');
    toc.style.display = 'none';
    gameTabs = document.getElementById('mw-content-text').getElementsByTagName('h1');
    catTabs = document.getElementById('mw-content-text').getElementsByTagName('h2');
    currentGame = 0;
    $(gameTabs).each(function(i) {
        if (i == 0) {
            $(this).addClass('game-tab selected');
        } else {
            $(this).addClass('game-tab');
        }
        $(this).nextUntil('h1').wrapAll('<div class="game"></div>');
    });
    $(catTabs).each(function(i) {
        if (i == 0) {} else if (i == 1) {
            $(this).addClass('cat-tab selected');
        } else {
            $(this).addClass('cat-tab');
        }
        $(this).nextUntil('h2').wrapAll('<div class="cat"></div>');
    });
    games = document.getElementsByClassName('game');
    cats = document.getElementsByClassName('cat');
    gameTabsContainer = document.createElement('div');
    gameTabsContainer.id = 'game-tabs';
    body.appendChild(gameTabsContainer);
    while (gameTabs.length > 0) {
        gameTabsContainer.appendChild(gameTabs[0]);
    }
    container.insertBefore(gameTabsContainer, container.firstChild);
    for (var i = 0; i < games.length; i++) {
        var catTabsContainer = document.createElement('div');
        catTabsContainer.className = 'cat-tabs';
        var tabs = games[i].getElementsByClassName('cat-tab');
        while (tabs.length > 0) {
            catTabsContainer.appendChild(tabs[0]);
        }
        games[i].insertBefore(catTabsContainer, games[i].firstChild);
    };
    for (var i = 0; i < games.length; i++) {
        if (i == 0) {
            games[i].className += ' dkc-show';
        };
    }
    for (var i = 0; i < cats.length; i++) {
        if (i == 0) {
            cats[i].className += ' dkc-show';
        };
    }
    for (var i = 0; i < gameTabs.length; i++) {
        (function(index) {
            gameTabs[i].onclick = function() {
                showCurrentGame(index);
            }
        })(i);
    }
    var showCurrentGame = function(index) {
        if (currentGame != index) {
            currentGame = index;
            for (var k = 0; k < games.length; k++) {
                games[k].classList.remove('dkc-show');
                gameTabs[k].className = 'game-tab';
                var resetCatTabs = games[k].getElementsByClassName('cat-tab');
                for (var p = 0; p < resetCatTabs.length; p++) {
                    if (resetCatTabs[p].classList.contains('selected')) {
                        resetCatTabs[p].classList.remove('selected');
                    }
                }
                var resetCats = games[k].getElementsByClassName('cat');
                for (var p = 0; p < resetCats.length; p++) {
                    if (resetCats[p].classList.contains('dkc-show')) {
                        resetCats[p].classList.remove('dkc-show');
                    }
                }
            }
            gameTabs[index].className += ' selected';
            games[index].className += ' dkc-show';
            games[index].getElementsByClassName('cat')[0].className += ' dkc-show';
            games[index].getElementsByClassName('cat-tab')[0].className = 'cat-tab selected';
        } else {
            for (var k = 0; k < games.length; k++) {
                games[k].classList.remove('dkc-show');
            }
            games[index].className += ' dkc-show';
        }
    }
    for (var i = 0; i < catTabs.length; i++) {
        (function(index) {
            catTabs[i].onclick = function() {
                showCurrentCat(index - 1);
            }
        })(i);
    }
    var showCurrentCat = function(cat) {
        for (var k = 0; k < cats.length; k++) {
            cats[k].classList.remove('dkc-show');
            catTabs[k].className = 'cat-tab';
        }
        catTabs[cat + 1].className = 'cat-tab selected';
        cats[cat].className += ' dkc-show';
    }
    container.style.marginBottom = '-10px';
    container.style.display = 'block';
    createModals();
}
if (window.location.href.indexOf('Leaderboards') > -1) {
    body.classList.remove('page-Leaderboards');
    body.classList.remove('page-Leaderboards_Misc_Categories');
}
function createModals() {
    var currentGame = document.getElementsByClassName('dkc-show')[0];
    var gameTRs = document.getElementsByTagName('tr');
    for (var t = 0; t < gameTRs.length; t++) {
        if (gameTRs[t].lastChild.innerHTML.length > 1) {
            var newHTML = '<div>' + gameTRs[t].lastChild.innerHTML + '</div>';
            gameTRs[t].lastChild.innerHTML = newHTML;
        }
    }
    var games = document.getElementsByClassName('game');
    for (var g = 0; g < games.length; g++) {
        var links = games[g].getElementsByTagName('a');
        for (var a = 0; a < links.length; a++) {
            if (links[a].href.indexOf('youtu') > -1 || links[a].href.indexOf('twitch') > -1) {
                var link = links[a].href;
                links[a].setAttribute('data-embed', link);
                links[a].removeAttribute('href');
                links[a].onclick = function() {
                    var link = this.getAttribute('data-embed');
                    //document.getElementsByTagName('html')[0].className += ' ve-loading'; visual editor is ded
                    document.getElementsByTagName('html')[0].className += ' modalbg';
                    var modal = document.createElement('div');
                    var close = document.createElement('div');
                    close.id = "close";
                    close.onclick = function() {
                        document.getElementsByTagName('html')[0].className = document.getElementsByTagName('html')[0].className.substr(0, document.getElementsByTagName('html')[0].className.length - 8);
                        document.getElementById('modal').outerHTML = '';
                    }
                    modal.id = "modal";
                    if (link.indexOf('twitch') > -1) {
                        modal.innerHTML = '<iframe src="https://player.twitch.tv/?video=' + link.substr(link.length - 9) + '&parent=dkcspeedruns.com" height="100%" width="100%"></iframe>';
                        body.appendChild(modal);
                        modal.appendChild(close);
                    } else if (link.indexOf('youtu') > -1) {
                        modal.innerHTML = '<iframe src="https://www.youtube.com/embed/' + link.substr(link.length - 11) + '?autoplay=1" height="100%" width="100%"></iframe>';
                        body.appendChild(modal);
                        modal.appendChild(close);
                    }
                }
            }
        }
    }
}

if (window.location.href == 'https://dkcspeedruns.com/Leaderboards/Misc_Categories') {
    body.onclick = function() {
        var tabs = document.getElementsByClassName('game dkc-show')[0].getElementsByClassName('cat-tabs')[0];
        var cat = document.getElementsByClassName('game dkc-show')[0].getElementsByClassName('cat dkc-show')[0];
        if (tabs.offsetHeight < cat.offsetHeight) {
            document.getElementById('mw-content-text').style.height = cat.offsetHeight + 38 + "px";
        } else {
            document.getElementById('mw-content-text').style.height = tabs.offsetHeight + 55 + "px";
        }
    }
    var clear = document.getElementsByClassName('mw-parser-output')[0], child = clear.firstChild, nextChild;
    while (child) {
        nextChild = child.nextSibling;
        if (child.nodeType == 3) {
            clear.removeChild(child);
        }
        child = nextChild;
    }
}