85 lines
2.5 KiB
JavaScript
85 lines
2.5 KiB
JavaScript
const STORAGE_KEY = 'skinbase:hidden_homepage_announcements'
|
|
|
|
function readHiddenAnnouncements() {
|
|
try {
|
|
const raw = window.localStorage.getItem(STORAGE_KEY)
|
|
const parsed = raw ? JSON.parse(raw) : {}
|
|
return parsed && typeof parsed === 'object' ? parsed : {}
|
|
} catch {
|
|
return {}
|
|
}
|
|
}
|
|
|
|
function writeHiddenAnnouncements(payload) {
|
|
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(payload))
|
|
}
|
|
|
|
function initAnnouncement() {
|
|
const announcement = document.querySelector('[data-home-announcement]')
|
|
const restoreButton = document.querySelector('[data-home-announcement-restore]')
|
|
|
|
if (!announcement || !restoreButton) {
|
|
return
|
|
}
|
|
|
|
const announcementId = announcement.getAttribute('data-announcement-id')
|
|
const dismissVersion = Number(announcement.getAttribute('data-dismiss-version') || '1')
|
|
|
|
if (!announcementId) {
|
|
return
|
|
}
|
|
|
|
const syncVisibility = () => {
|
|
const hiddenAnnouncements = readHiddenAnnouncements()
|
|
const isHidden = Number(hiddenAnnouncements[String(announcementId)] || 0) === dismissVersion
|
|
|
|
announcement.classList.toggle('hidden', isHidden)
|
|
restoreButton.classList.toggle('hidden', !isHidden)
|
|
restoreButton.classList.toggle('inline-flex', isHidden)
|
|
}
|
|
|
|
announcement.querySelector('[data-home-announcement-dismiss]')?.addEventListener('click', () => {
|
|
const hiddenAnnouncements = readHiddenAnnouncements()
|
|
hiddenAnnouncements[String(announcementId)] = dismissVersion
|
|
writeHiddenAnnouncements(hiddenAnnouncements)
|
|
syncVisibility()
|
|
})
|
|
|
|
restoreButton.addEventListener('click', () => {
|
|
const hiddenAnnouncements = readHiddenAnnouncements()
|
|
delete hiddenAnnouncements[String(announcementId)]
|
|
writeHiddenAnnouncements(hiddenAnnouncements)
|
|
syncVisibility()
|
|
})
|
|
|
|
syncVisibility()
|
|
}
|
|
|
|
function initMatureReveal() {
|
|
document.querySelectorAll('[data-home-mature-toggle]').forEach((button) => {
|
|
button.addEventListener('click', () => {
|
|
const targetId = button.getAttribute('data-home-mature-toggle')
|
|
const image = targetId ? document.getElementById(targetId) : null
|
|
const overlay = button.closest('[data-home-mature-overlay]')
|
|
|
|
if (!image || !overlay) {
|
|
return
|
|
}
|
|
|
|
image.classList.remove('blur-2xl', 'scale-[1.03]')
|
|
overlay.remove()
|
|
})
|
|
})
|
|
}
|
|
|
|
if (typeof document !== 'undefined') {
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
initAnnouncement()
|
|
initMatureReveal()
|
|
}, { once: true })
|
|
} else {
|
|
initAnnouncement()
|
|
initMatureReveal()
|
|
}
|
|
} |