Mediawiki:common.js
| Строка 2221: | Строка 2221: | ||
}; | }; | ||
var | var AprilFoolsPrankModule = { | ||
started: false, | started: false, | ||
closing: false, | |||
overlay: null, | overlay: null, | ||
imageLayer: null, | |||
audio: null, | |||
init: function () { | init: function () { | ||
| Строка 2247: | Строка 2232: | ||
this.started = true; | this.started = true; | ||
if (!window.mw || !mw.config || !mw.config.get('wgIsMainPage')) { | |||
return; | |||
} | } | ||
var | var params = new URLSearchParams(window.location.search); | ||
var | var prankByFlag = params.get('prank') === '1'; | ||
var enableForAll = false; | |||
if (!prankByFlag && !enableForAll) { | |||
if (! | return; | ||
} | } | ||
this.injectStyles(); | this.injectStyles(); | ||
this.createOverlay(); | this.createOverlay(); | ||
this. | this.lockPageScroll(); | ||
}, | }, | ||
injectStyles: function () { | injectStyles: function () { | ||
if (document.getElementById('april-fools- | if (document.getElementById('april-fools-prank-styles')) return; | ||
var style = document.createElement('style'); | var style = document.createElement('style'); | ||
style.id = 'april-fools- | style.id = 'april-fools-prank-styles'; | ||
style.textContent = | style.textContent = | ||
'#april-fools- | '#april-fools-prank-overlay{' + | ||
'position: fixed;' + | 'position:fixed;' + | ||
'inset: 0;' + | 'inset:0;' + | ||
'z-index: 2147483647 | 'z-index:2147483647;' + | ||
'background:#000;' + | |||
'background: #000;' + | 'overflow-y:auto;' + | ||
'overflow | 'overflow-x:hidden;' + | ||
'cursor:pointer;' + | |||
'transform:translateY(0);' + | |||
'transition:transform 5s linear;' + | |||
'overflow | |||
' | |||
'transform | |||
' | |||
'}' + | '}' + | ||
'#april-fools- | '#april-fools-prank-overlay.closing{' + | ||
' | 'transform:translateY(-100%);' + | ||
'}' + | '}' + | ||
' | '#april-fools-prank-image{' + | ||
' | 'display:block;' + | ||
'width:100vw;' + | |||
'min-height:100vh;' + | |||
' | 'height:auto;' + | ||
' | 'object-fit:cover;' + | ||
'object-position:top center;' + | |||
' | |||
'}'; | '}'; | ||
document.head.appendChild(style); | document.head.appendChild(style); | ||
| Строка 2363: | Строка 2283: | ||
createOverlay: function () { | createOverlay: function () { | ||
var overlay = document.createElement('div'); | var overlay = document.createElement('div'); | ||
overlay.id = 'april-fools- | overlay.id = 'april-fools-prank-overlay'; | ||
var img = document.createElement('img'); | var img = document.createElement('img'); | ||
img.src = | img.id = 'april-fools-prank-image'; | ||
img.alt = 'Wikipedia homepage | img.src = 'https://upload.wikimedia.org/wikipedia/commons/d/d4/2019_Screenshot_of_English_Wikipedia_homepage.png'; | ||
img.alt = 'Wikipedia homepage'; | |||
overlay.appendChild(img); | |||
document.body.appendChild(overlay); | |||
this.overlay = overlay; | this.overlay = overlay; | ||
this.imageLayer = img; | |||
this.audio = new Audio('https://zvukogram.com/mp3/40/stone-plate.mp3'); | |||
this.audio.preload = 'auto'; | |||
var self = this; | |||
overlay.addEventListener('click', function () { | |||
self.closeWithSound(); | |||
}, { once: true }); | |||
}, | }, | ||
closeWithSound: function () { | |||
if (this.closing || !this.overlay) return; | |||
this.closing = true; | |||
try { | |||
this.audio.currentTime = 0; | |||
this.audio.play(); | |||
} catch (e) { | |||
} | |||
this.overlay.classList.add('closing'); | |||
var self = this; | var self = this; | ||
this.overlay.addEventListener('transitionend', function handleEnd(e) { | |||
if (e.propertyName !== 'transform') return; | |||
self.overlay.removeEventListener('transitionend', handleEnd); | |||
self.unlockPageScroll(); | |||
if (self.overlay && self.overlay.parentNode) { | |||
if ( | self.overlay.parentNode.removeChild(self.overlay); | ||
self. | |||
} | } | ||
self.overlay = null; | |||
}); | }); | ||
}, | }, | ||
lockPageScroll: function () { | |||
document.documentElement.style.overflow = 'hidden'; | |||
document.body.style.overflow = 'hidden'; | |||
document. | |||
}, | }, | ||
unlockPageScroll: function () { | |||
document.documentElement.style.overflow = ''; | |||
document.body.style.overflow = ''; | |||
} | } | ||
}; | }; | ||