Files

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()
}
}