Mediawiki:common.js
| Строка 2221: | Строка 2221: | ||
}; | }; | ||
var | var AprilPrankModule = { | ||
FORCE_PRANK_FOR_ALL: false, // <- поставь true, если нужно включить всем без ?prank | |||
ONLY_MAIN_PAGE: true, // <- оставить true, чтобы работало только на главной | |||
ANIMATION_MS: 5000, | |||
SHOWN_SESSION_KEY: 'april-prank-shown-v2', | |||
overlay: null, | overlay: null, | ||
audio: null, | audio: null, | ||
isClosing: false, | |||
init: function () { | init: function () { | ||
if (this. | if (this.ONLY_MAIN_PAGE && window.mw && mw.config && !mw.config.get('wgIsMainPage')) { | ||
this. | return; | ||
} | |||
if (!this.shouldRun()) { | |||
return; | |||
} | |||
if ( | // Чтобы не показывалось повторно в одной вкладке | ||
if (sessionStorage.getItem(this.SHOWN_SESSION_KEY) === '1') { | |||
return; | |||
} | |||
sessionStorage.setItem(this.SHOWN_SESSION_KEY, '1'); | |||
this.injectStyles(); | |||
this.buildOverlay(); | |||
this.bindEvents(); | |||
}, | |||
shouldRun: function () { | |||
if (this.FORCE_PRANK_FOR_ALL) { | |||
return true; | |||
} | |||
var params = new URLSearchParams(window.location.search); | var params = new URLSearchParams(window.location.search); | ||
if (!params.has('prank')) { | |||
return false; | |||
} | |||
var value = (params.get('prank') || '').trim().toLowerCase(); | |||
if ( | // Работает для ?prank, ?prank=1, ?prank=true, ?prank=on, ?prank=yes | ||
if (value === '' || value === '1' || value === 'true' || value === 'on' || value === 'yes') { | |||
return true; | |||
} | } | ||
return false; | |||
}, | }, | ||
injectStyles: function () { | injectStyles: function () { | ||
if (document.getElementById('april-prank | if (document.getElementById('april-prank-styles')) { | ||
return; | |||
} | |||
var style = document.createElement('style'); | var style = document.createElement('style'); | ||
style.id = 'april-prank | style.id = 'april-prank-styles'; | ||
style.textContent = | style.textContent = | ||
'#april-prank-overlay{' + | '#april-prank-overlay {' + | ||
'position:fixed;' + | 'position: fixed;' + | ||
'inset:0;' + | 'inset: 0;' + | ||
'z-index:2147483647;' + | 'z-index: 2147483647;' + | ||
'background:#000;' + | 'background: #000;' + | ||
'overflow: | 'overflow: auto;' + | ||
' | 'cursor: pointer;' + | ||
' | 'transform: translateY(0);' + | ||
'will-change: transform;' + | |||
'}' + | '}' + | ||
'#april-prank-overlay . | '#april-prank-overlay.closing {' + | ||
' | 'transition: transform 5000ms linear;' + | ||
' | 'transform: translateY(-100%);' + | ||
'}' + | '}' + | ||
'#april-prank-overlay | '#april-prank-overlay img {' + | ||
'display:block;' + | 'display: block;' + | ||
'width:100%;' + | 'width: 100%;' + | ||
'height:auto;' + | 'height: auto;' + | ||
' | 'min-height: 100vh;' + | ||
'user-select:none;' + | 'object-fit: cover;' + | ||
'-webkit-user-drag:none;' + | 'user-select: none;' + | ||
'pointer-events:none;' + | '-webkit-user-drag: none;' + | ||
'pointer-events: none;' + | |||
'}'; | '}'; | ||
document.head.appendChild(style); | document.head.appendChild(style); | ||
}, | }, | ||
buildOverlay: function () { | |||
var overlay = document.createElement('div'); | var overlay = document.createElement('div'); | ||
overlay.id = 'april-prank-overlay'; | overlay.id = 'april-prank-overlay'; | ||
var | var img = document.createElement('img'); | ||
img.src = 'https://upload.wikimedia.org/wikipedia/commons/d/d4/2019_Screenshot_of_English_Wikipedia_homepage.png'; | |||
img.alt = 'Wikipedia homepage screenshot'; | |||
overlay.appendChild(img); | |||
overlay.appendChild( | |||
document.body.appendChild(overlay); | document.body.appendChild(overlay); | ||
this.overlay = overlay; | this.overlay = overlay; | ||
this.audio = new Audio('https://zvukogram.com/mp3/40/stone-plate.mp3'); | |||
this.audio.preload = 'auto'; | |||
}, | |||
bindEvents: function () { | |||
var self = this; | var self = this; | ||
if (!this.overlay) { | |||
self. | return; | ||
}); | } | ||
this.overlay.addEventListener('click', function () { | |||
self.startClose(); | |||
}, { passive: true }); | |||
}, | }, | ||
startClose: function () { | |||
if ( | if (this.isClosing || !this.overlay) { | ||
return; | |||
} | |||
this. | this.isClosing = true; | ||
if (this.audio) { | |||
this.audio.currentTime = 0; | |||
this.audio.play().catch(function () { | |||
// Браузер может заблокировать autoplay — клик уже есть, обычно играет | |||
}); | |||
} | |||
this.overlay.classList.add('closing'); | |||
var self = this; | var self = this; | ||
setTimeout(function () { | |||
if ( | if (self.audio) { | ||
self.audio.pause(); | |||
self.audio.currentTime = 0; | |||
self. | |||
} | } | ||
}, this.ANIMATION_MS); | |||
}); | |||
this.overlay.addEventListener('transitionend', function onEnd(e) { | |||
if (e.propertyName !== 'transform') { | |||
return; | |||
} | |||
self.overlay.removeEventListener('transitionend', onEnd); | |||
if (self.overlay && self.overlay.parentNode) { | |||
self.overlay.parentNode.removeChild(self.overlay); | |||
} | |||
self.overlay = null; | |||
}); | }); | ||
} | } | ||
}; | }; | ||
| Строка 2380: | Строка 2385: | ||
// LawCalculatorModule.init(); | // LawCalculatorModule.init(); | ||
EquipmentFilterModule.init(); | EquipmentFilterModule.init(); | ||
AprilPrankModule.init(); | |||
} | } | ||