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

No edit summary
Undo revision 3327 by TadeLn (talk)
Tag: Undo
 
(11 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", () => {
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;
     }
     }


     let screen = document.createElement("div");
     let screen = document.createElement("div");
    screen.innerText = "Spoiler warning!";
     screen.classList.add("rgwiki-main-spoiler-warning-screen");
     screen.classList.add("rgwiki-main-spoiler-warning-screen");
    let header = document.createElement("h1");
    header.innerText = "Spoiler warning!";
    screen.appendChild(header);
    let description = document.createElement("p");
    description.innerHTML = trigger.innerHTML;
    screen.appendChild(description);
    let buttons = document.createElement("div");
    let backBtn = document.createElement("button");
    backBtn.innerText = "Go back";
    backBtn.addEventListener("click", (e) => {
        window.history.back();
    });
    buttons.appendChild(backBtn);
    let continueBtn = document.createElement("button");
    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);
    screen.appendChild(buttons);
     document.body.appendChild(screen);
     document.body.appendChild(screen);


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