MediaWiki:Gadget-main-spoiler-warning-screen.js: Difference between revisions
No edit summary |
Tag: Undo |
||
(10 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", (trigger) => { | 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; | ||
} | } | ||
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. | window.rgwiki_main_spoilerWarningScreenWasShown = true; | ||
}); | }); |