MediaWiki:Minerva.js

From Elwiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* All JavaScript here will be loaded for users of the MinervaNeue skin */

function docReady(fn) {
    // see if DOM is already available
    if (document.readyState === "complete" || document.readyState === "interactive") {
        // call on next available tick
        setTimeout(fn, 1);
    } else {
        document.addEventListener("DOMContentLoaded", fn);
    }
}

var loadJS = function (url, implementationCode, location) {
    var scriptTag = document.createElement('script');
    scriptTag.src = url;
    scriptTag.onload = implementationCode;
    scriptTag.onreadystatechange = implementationCode;
    location.appendChild(scriptTag);
};
var popperLoaded = function () {
    var tippyLoaded = function () {
        tippy('.tippy-btn', {
            interactive: true,
            allowHTML: true,
            appendTo: document.body,
            delay: 200
        });
        document.body.classList.add('tippy-loaded');
    };

    loadJS('https://elwiki.net/wiki/index.php?title=MediaWiki:Tippy.js&action=raw&ctype=text/javascript', tippyLoaded, document.body);
}
loadJS('https://unpkg.com/@popperjs/core@2.11.6/dist/umd/popper.min.js', popperLoaded, document.body);

$(function () {
    $('.tabs.tabs-tabbox .tabs-container .tabs-header:first-of-type').click();

    /* Tabs */

    $('.tabber-new').each(function () {
        var tabs = $(this).find('> ul li');
        var cont = $(this);
        tabs.unwrap();
        tabs.each(function () {
            $(this).wrap('<ul class="tabber-tab-wrap">');
            $(this).parent().append(cont.find('> .tabber-content:first'));
        });
    });

    $('.tabber-new .tabber-tab-wrap > li').click(function () {
        var tabContent = $(this).parent().find('> .tabber-content');
        $(this).parent().toggleClass('active');
        tabContent.toggle();
    });

    $('.boss-timer-section .tabber-tab').click(function (e) {
        if (e.screenX && e.screenX != 0 && e.screenY && e.screenY != 0) {
            setCookie('current-server-timer', $(this).text());
        }
    });

    // Different handling for boss timers etc.
    $('.tabber-new').each(function () {
        $(this).find('.tabber-tab:eq(0)').not('.boss-timer-section .tabber-tab').click();
        var cookieValue = getCookie('current-server-timer');
        if (cookieValue !== null && $(this).hasClass('boss-timer-section')) {
            // Force all the tabs them closed (only if a cookie is detected)
            $(this).find('> ul > .tabber-content').hide();
            $(this).find('> ul > li.active').removeClass('active');
            // Invoke the one saved in cookies
            $(this).find('> ul > li:contains("' + cookieValue + '")').click();
            console.log(cookieValue)
        }
    })

    var tabber = window.location.hash.replace('#', '').replace(/_/g, ' ');
    if (tabber != '') {
        var matchedTabber = $('.tabber-tab:contains("' + tabber + '")');
        matchedTabber.each(function () {
            $(this).click();
            $(this).parents('.tabber-new:eq(0)').find('.tabber-tab:eq(0)').click();
        });

    }

    $('.embedvideo').unwrap();

    $('.tabber-tab.active').removeClass('active').parent().addClass('active').find('> .tabber-content').show();

    $('.section-border .mw-collapsible, .section-border.mw-collapsible').not('.segment').prepend('<div class="mw-collapsible-button mw-mobile-collapsed-button"></div>');
    $('.mw-collapsible-button').each(function () {
        $(this).next().addClass('mw-mobile-collapsed')
    });
    $('.mw-collapsible-button').click(function () {
        var $content = $(this).next();
        $content.toggleClass('mw-mobile-collapsed')
        $(this).toggleClass('mw-mobile-collapsed-button mw-mobile-expanded-button')
    });

    $('.job-change-collapsible .segment-headers').prepend('<div class="mw-collapsible-button mw-mobile-collapsed-button"></div>');
    $('.mw-collapsible-button').each(function () {
        $(this).parent().next().addClass('mw-mobile-collapsed')
    });
    $('.mw-collapsible-button').click(function () {
        var $content = $(this).parent().next();
        $content.toggleClass('mw-mobile-collapsed')
        $(this).toggleClass('mw-mobile-collapsed-button mw-mobile-expanded-button')
    });

    var time_loading = 0;
    var chkReadyState = setInterval(function () {
        if (document.readyState == "complete" || time_loading > 3000) {
            // clear the interval
            clearInterval(chkReadyState);
            $('#loading-screen').css({ transition: '300ms', pointerEvents: 'none', opacity: 0 });
        }
        time_loading += 100;
    }, 100);

});

docReady(function () {
    $('.related-skills td[width="150"]').each(function () {
        if (!$(this).find('.skill-wrap').length) {
            $(this).wrapInner('<div class="skill-wrap-text"></div>');
            $(this).wrapInner('<div class="skill-wrap"></div>');
        }
    });

    $('.related-skills:not(.no-div):not(.skill-table)').each(function () {
        var limit = 1;
        var limitString = '';
        if (limit !== undefined) limitString = " data-limit='" + limit + "'";
        $(this).replaceWith($(this).html()
            .replace(/<tbody/gi, "<div class='" + $(this).attr('class') + "'" + limitString)
            .replace(/<tr/gi, "<div data-type='table-row'")
            .replace(/<\/tr>/gi, "</div>")
            .replace(/<td/gi, "<div data-type='table-cell'")
            .replace(/<\/td>/gi, "</div>")
            .replace(/<th/gi, "<div data-type='table-head'")
            .replace(/<\/th>/gi, "</div>")
            .replace(/<\/tbody/gi, "<\/div")
        );
    });

    $('.skill-wrap:not(.no-div .skill-wrap)').click(function () {
        var link = $(this).find('> .skill-wrap-text a:not(.image)').attr('href');
        if (link.length) window.location.href = link;
    });

    $('.related-skills.no-div td[width="150"]').click(function () {
        var link = $(this).find('.skill-wrap > .skill-wrap-text a:not(.image)').attr('href');
        if (link.length) window.location.href = link;
    });

    function chunk(arr, len) {
        var chunks = [],
            i = 0,
            n = arr.length;
        while (i < n) {
            chunks.push(arr.slice(i, i += len));
        }
        return chunks;
    }


    $('.related-skills:not(.skill-table)').each(function () {
        var cell = $(this).find('[data-type="table-cell"]');
        var limit = $(this).attr('data-limit');
        if (limit !== undefined && limit != '' && !isNaN(limit)) limit = parseInt(limit) * 2;
        else limit = 2;
        var attempt = false;
        $(this).find('[data-type="table-row"]').each(function () {
            if ($(this).find('[data-type="table-cell"]').length > limit) attempt = true;
        });
        if (attempt) {
            var overflow_elems = chunk(cell, limit);
            $(this).empty();
            for (var i = 0; i < overflow_elems.length; i++) {
                $(this).append('<div data-type="table-row">');
                $(this).find('[data-type="table-row"]:last').append(overflow_elems[i]);
            }
        }
    });

    $('.related-skills:not(.no-div):not(.skill-table)').addClass('shown');

    if ($('.boss-timer').length) {
        mw.loader.load('https://elwiki.net/wiki/index.php?title=MediaWiki:BossTimer.js&action=raw&ctype=text/javascript');
    }
    if ($('.server-time').length) {
        mw.loader.load('https://elwiki.net/wiki/index.php?title=MediaWiki:ServerTime.js&action=raw&ctype=text/javascript');
    }
    setTimeout(function () {
        $('.current-info .segment-contents > .mw-collapsible-content').css({ height: 'auto', overflow: 'initial' });
    }, 100);
    mw.loader.load('https://elwiki.net/wiki/index.php?title=MediaWiki:Character-Banner.js&action=raw&ctype=text/javascript')
});

function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function setCookie(name, value, days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "") + expires + "; path=/";
}