MediaWiki:Gadget-main-spoiler-warning-screen.js: Difference between revisions
No edit summary |
Tag: Undo |
||
(11 intermediate revisions by the same user not shown) | |||
Line 12: | Line 12: | ||
/* Spoiler warning screen */ | /* Spoiler warning screen */ | ||
window. | window.rgwiki_main_spoilerWarningScreenWasShown = false; | ||
findAndExecute(".rgwiki-main-show-spoiler-warning-screen", () => { | findAndExecute(".rgwiki-main-show-spoiler-warning-screen", (trigger) => { | ||
if (window. | 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.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. | window.rgwiki_main_spoilerWarningScreenWasShown = true; | ||
}); | }); |