User:Moony/common.js: Difference between revisions

From Space Station 14 Wiki
(Created page with "// The user script that runs on the client side - this was thrown together in a couple hours // Apache 2.0/CC-BY-SA // (c) 2021 User:Ed6767 - full attributions https://github.com/wikimedia-gadgets/EasyWikiDev/commits/main/.wikidev/wikiscript.js let hasRecievedFirstMessage = false; const currentSkin = mw.config.get("skin"); const portletLinkSelector = { 'vector': 'a > span', 'monobook': 'a', 'timeless': 'a' } const currentPortletLinkSelector = portletLinkSelector[c...")
 
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
// The user script that runs on the client side - this was thrown together in a couple hours
var loadedScripts={};
// Apache 2.0/CC-BY-SA
function importScript(page){var uri=mw.config.get('wgScript')+'?title='+page+'&action=raw&ctype=text/javascript';return importScriptURI(uri);}
// (c) 2021 User:Ed6767 - full attributions https://github.com/wikimedia-gadgets/EasyWikiDev/commits/main/.wikidev/wikiscript.js
function importScriptURI(url){var s;if(loadedScripts[url]){return null;}loadedScripts[url]=true;s=document.createElement('script');s.setAttribute('src',url);document.head.appendChild(s);return s;}
 
importScript("User:Moony/devel.js");
let hasRecievedFirstMessage = false;
 
const currentSkin = mw.config.get("skin");
 
const portletLinkSelector = {
'vector': 'a > span',
'monobook': 'a',
'timeless': 'a'
}
 
const currentPortletLinkSelector = portletLinkSelector[currentSkin];
 
const currentPageLink = mw.util.addPortletLink(
    'p-personal',
    '#',
    "Develop",
    "developLink",
    null, null, // ones we don't need
    '#pt-preferences' // put before preferences
);
 
currentPageLink.onclick = () => {
    if (hasRecievedFirstMessage) {
        stopDeveloperMode();
        window.location.reload(); // Clear the indev script
    } else {
        runDeveloperMode();
    }
}
 
function stopDeveloperMode() {
    localStorage.setItem('EasyWikiDev', 'disabled');
    currentPageLink.querySelector(currentPortletLinkSelector).innerText = "Develop";
}
 
function runDeveloperMode() {
    currentPageLink.querySelector(currentPortletLinkSelector).innerText = "Stop Developing";
 
    // Create the localstorage note
    localStorage.setItem('EasyWikiDev', 'enabled');
 
    try {
        // Connect to the websocket at ws://localhost:6767
        const ws = new WebSocket("ws://localhost:6767");
 
        ws.onerror = e => { throw e; };
 
        ws.onclose = () => {
            mw.notify("EasyWikiDev: Websocket closed. The server may not be running, else try enabling developer mode again.", {
                title: "Socket closed",
                type: "error",
                autoHide: false,
            });
            stopDeveloperMode();
        }
 
        // When the websocket receives a message, it will run this function
        ws.onmessage = e => {
            if (!hasRecievedFirstMessage) {
                hasRecievedFirstMessage = true;
 
                // The message is the script.js file
                // It's just a string, so we can just eval it
                eval(e.data);
            } else {
                window.location.reload();
            }
           
        }
 
    } catch (error) {
        console.error(error);
        mw.notify("EasyWikiDev: An error occured. Make sure the server is running, then check the Javascript console for more info.", {
            title: "Error",
            type: "error",
            autoHide: false,
        });
        stopDeveloperMode();
    }
}
 
// If present, run the developer mode
if (localStorage.getItem('EasyWikiDev') === 'enabled') {
    runDeveloperMode();
}

Latest revision as of 23:19, 21 December 2021

var loadedScripts={};
function importScript(page){var uri=mw.config.get('wgScript')+'?title='+page+'&action=raw&ctype=text/javascript';return importScriptURI(uri);}
function importScriptURI(url){var s;if(loadedScripts[url]){return null;}loadedScripts[url]=true;s=document.createElement('script');s.setAttribute('src',url);document.head.appendChild(s);return s;}
importScript("User:Moony/devel.js");