MediaWiki:Gadget-main-spoiler-warning-screen.js: Difference between revisions

No edit summary
Undo revision 3327 by TadeLn (talk)
Tag: Undo
 
(10 intermediate revisions by the same user not shown)
Line 12: Line 12:


/* Spoiler warning screen */
/* Spoiler warning screen */
window.rgwiki_main_spoilerWarningScreenShown = false;
window.rgwiki_main_spoilerWarningScreenWasShown = false;
findAndExecute(".rgwiki-main-show-spoiler-warning-screen", (trigger) => {
findAndExecute(".rgwiki-main-show-spoiler-warning-screen", (trigger) => {
     if (window.rgwiki_main_spoilerWarningScreenShown) {
    const acknowledgementDuration = 1 * 24 * 60 * 60 * 1000; // in ms, for how long should the spoiler stay hidden
    const pageName = window.mw.config.values.wgPageName;
    const now = Date.now();
 
    // Check if this spoiler warning was already acknowledged recently
    {
        const localStorageString = window.localStorage.getItem("rgwiki-main-spoilerWarning");
        let localStorageData;
        try {
            let localStorageData = JSON.parse(localStorageString);
            const pageTimestamp = localStorageData.spoilerAcknowledgedTimestamps[pageName];
            const sinceLastClick = (now - pageTimestamp);
            if (pageTimestamp !== undefined && sinceLastClick < acknowledgementDuration) {
                window.rgwiki_main_spoilerWarningScreenWasShown = true;
            }
        } catch (e) {
            localStorageData = {spoilerAcknowledgedTimestamps: {}}
        }
    }
 
     if (window.rgwiki_main_spoilerWarningScreenWasShown) {
         return;
         return;
     }
     }
Line 30: Line 50:


     let buttons = document.createElement("div");
     let buttons = document.createElement("div");
     let backBtn = document.createElement("button");
     let backBtn = document.createElement("button");
     backBtn.innerText = "Go back";
     backBtn.innerText = "Go back";
    backBtn.addEventListener("click", (e) => {
        window.history.back();
    });
     buttons.appendChild(backBtn);
     buttons.appendChild(backBtn);
     let continueBtn = document.createElement("button");
     let continueBtn = document.createElement("button");
     continueBtn.innerText = "Continue and show page";
     continueBtn.innerText = "Continue and show page";
    continueBtn.addEventListener("click", (e) => {
        screen.remove();
   
        // Save acknowledgement to local storage
        const localStorageString = window.localStorage.getItem("rgwiki-main-spoilerWarning");
        let localStorageData;
        try {
            localStorageData = JSON.parse(localStorageString);
            localStorageData.spoilerAcknowledgedTimestamps[pageName] = now;
        } catch (e) {
            localStorageData = {spoilerAcknowledgedTimestamps: {}};
        }
        window.localStorage.setItem("rgwiki-main-spoilerWarning", JSON.stringify(localStorageData));
    });
     buttons.appendChild(continueBtn);
     buttons.appendChild(continueBtn);


Line 40: Line 79:
     document.body.appendChild(screen);
     document.body.appendChild(screen);


     window.rgwiki_main_spoilerWarningScreenShown = true;
     window.rgwiki_main_spoilerWarningScreenWasShown = true;
});
});