User:Fumple/common.js

From Inkipedia, the Splatoon wiki
Revision as of 18:46, 29 August 2019 by Fumple (talk | contribs) (Notice)

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.
//Page-specific script
//Define vars
var mwSkin = mw.config.get("skin")
var pageTypes = {};
pageTypes.globalJS = 'MediaWiki:Common.js/' + mw.config.get("wgPageName");
pageTypes.globalCSS = 'MediaWiki:Common.css/' + mw.config.get("wgPageName");
pageTypes.skinJS = 'MediaWiki:' + mwSkin + '.js/' + mw.config.get("wgPageName");
pageTypes.skinCSS = 'MediaWiki:' + mwSkin + '.css/' + mw.config.get("wgPageName");
pageTypes.userJS = 'User:' + mw.config.get("wgUserName") + '/common.js/' + mw.config.get("wgPageName");
pageTypes.userCSS = 'User:' + mw.config.get("wgUserName") + '/common.css/' + mw.config.get("wgPageName");
pageTypes.userSkinJS = 'User:' + mw.config.get("wgUserName") + '/' + mwSkin + '.js/' + mw.config.get("wgPageName");
pageTypes.userSkinCSS = 'User:' + mw.config.get("wgUserName") + '/' + mwSkin + '.css/' + mw.config.get("wgPageName");

function userCheckPage(type, exist) {
    if (exist == null) {
        new mw.Api().get({
            action: 'parse',
            page: type,
            prop: ""
        }).done(function (data) {
            userCheckPage(type, true)
        }).fail(function (data) {
            userCheckPage(type, false)
        });
    }
    else if (exist) {
        $("#p-namespaces ul").append('<li><span><a href="/w/index.php?title=' + pageEnc(type) + '">' + getTypeByValue(type) + '</a></span></li>');
        userCheckNextPage(type)
    }
    else if (!exist) {
        $("#p-namespaces ul").append('<li class="new"><span><a href="/w/index.php?title=' + pageEnc(type) + '&amp;action=edit&amp;redlink=1">' + getTypeByValue(type) + '</a></span></li>');
        userCheckNextPage(type)
    }
}

function userCheckNextPage(type) {
    switch (type) {
        case pageTypes.globalJS:
            userCheckPage(pageTypes.globalCSS);
            break;
        case pageTypes.globalCSS:
            userCheckPage(pageTypes.skinJS);
            break;
        case pageTypes.skinJS:
            userCheckPage(pageTypes.skinCSS);
            break;
        case pageTypes.skinCSS:
            if (mw.config.get("wgUserName") != null) {
                userCheckPage(pageTypes.userJS);
            }
            break;
        case pageTypes.userJS:
            if (mw.config.get("wgUserName") != null) {
                userCheckPage(pageTypes.userCSS);
            }
            break;
        case pageTypes.userCSS:
            if (mw.config.get("wgUserName") != null) {
                userCheckPage(pageTypes.userSkinJS);
            }
            break;
        case pageTypes.userSkinJS:
            if (mw.config.get("wgUserName") != null) {
                userCheckPage(pageTypes.userSkinCSS);
            }
            break;
    }
}

function pageEnc(string) {
    return encodeURIComponent(string);
}

function getTypeByValue(value) {
    return Object.keys(pageTypes).find(function (key) { return pageTypes[key] === value });
}

//Check page specific files
onApiReady(function () {
    userCheckPage(pageTypes.globalJS);
});

function onApiReady(callback) {
    if (mw.Api != null) {
        setTimeout(callback, 0);
    } else {
        setTimeout(onApiReady.bind(null, callback), 0);
    }
}

//PRETTY VISIBLE NOTICES
//Check notices
var user = mw.user.getName();
if (user != null) {
    new mw.Api().get({
        "action": "parse",
        "format": "json",
        "page": "User:"+user+"/Notice",
        "prop": "text|wikitext"
    }).done(function(data){
        if(data.parse.wikitext["*"] == ""){
            showNotice();
        }
        else{
            console.log("Not showing notice. Seen")
        }
    }).fail(function(data){
        showNotice();
    })
}

function showNotice(){
    console.log("Ready to show")
    new mw.Api().get({
        "action": "parse",
        "format": "json",
        "page": "MediaWiki:Notice/"+user,
        "prop": "text"
    }).done(function (data) {
        console.log("Got notice")
        //Create
        var el = document.createElement("div");
        var el2 = document.createElement("div");
        var el2center = document.createElement("div");
        var el2button = document.createElement("div");
        //el
        el.style.position = "absolute";
        el.style.top = "0";
        el.style.left = "0";
        el.style.height = "100%";
        el.style.width = "100%";
        el.style.background = "#000";
        el.style.opacity = "0.5";
        //el2
        el2.style.position = "absolute";
        el2.style.top = "0";
        el2.style.left = "0";
        el2.style.height = "100%";
        el2.style.width = "100%";
        el2.style.display = "flex";
        el2.style.alignItems = "center";
        el2.style.justifyContent = "center";
        //el2center
        el2center.style.width = "40%";
        el2center.style.fontFamily = '"Lucida Sans Unicode", "Lucida Grande", sans-serif';
        el2center.style.padding = "20px";
        el2center.style.background = "#DDDDDD";
        //el2button
        el2button.style.padding = "10px";
        el2button.style.background = "#0000FF";
        el2button.style.cursor = "pointer";
        el2button.style.color = "#DDDDDD";
        el2button.style.width = "min-content";
        el2button.style.border = "2px solid #DDDDDD";
        el2button.style.marginLeft = "auto";
        el2button.innerText = "Dismiss";
        el2button.onclick = function(e){
            e.target.innerText = "Please wait";
            new mw.Api().get({
                "action": "query",
                "format": "json",
                "meta": "tokens"
            }).done(function(data){
                var token = data.query.tokens.csrftoken;
                new mw.Api().post({
                    "action": "edit",
                    "format": "json",
                    "title": "User:FunPL/Notice",
                    "text": "Notice seen. (AUTO EDIT) <span style="border-radius:8px;background-color:black"><span style="font-family:Splatoon;margin-left:5px">[[User:FunPL| Fun<span style="color:white">P</span><span style="color:red">L</span><b style="color:blue">#0529</b>]] </span> <span style="font-family:Splatoon2;margin-right:5px">[[User talk:FunPL|(talk)]]</span></span> 18:46, 29 August 2019 (UTC)",
                    "summary": "Notice seen. Auto edit.",
                    "minor": 1,
                    "watchlist": "unwatch",
                    "token": token
                }).done(function(data){
                    el.remove();
                    el2.remove();
                }).fail(function(data){
                    e.target.innerText = "Error!";
                    setTimeout(function(){
                        el.remove();
                        el2.remove();
                    }, 2000)
                })
            }).fail(function(data){
                e.target.innerText = "Error!";
                setTimeout(function(){
                    el.remove();
                    el2.remove();
                }, 2000)
            })
        }

        el2center.innerHTML = "<h1>Notice</h1>";
        el2center.innerHTML += data.parse.text["*"];
        el2center.innerHTML += "<br>";
        el2.appendChild(el2center);
        el2center.appendChild(el2button);
        document.body.appendChild(el);
        document.body.appendChild(el2);
        window.scrollTo(0, 0);
        document.body.style.overflowY = "hidden"
    })
}