Files
aowow/setup/tools/filegen/templates/global.js/lightbox.js
Sarjuuk 6557e70d5c Template/Update (Part 47)
* split global.js into its components, so it can be reasonably processed by setup
 * make reputation requirements configurable
 * move Markup and Locale back into global.js (removed associated build scripts)
 * extend Icon to display iconId in lightbox popup
2025-09-25 16:01:14 +02:00

162 lines
3.1 KiB
JavaScript

var Lightbox = new function()
{
var overlay,
outer,
inner,
divs = {},
funcs = {},
prepared,
lastId;
function hookEvents()
{
$WH.aE(overlay, 'click', hide);
$WH.aE(document, 'keydown', onKeyDown);
$WH.aE(window, 'resize', onResize);
}
function unhookEvents()
{
$WH.dE(overlay, 'click', hide);
$WH.dE(document, 'keydown', onKeyDown);
$WH.dE(window, 'resize', onResize);
}
function prepare()
{
if (prepared)
return;
prepared = 1;
var dest = document.body;
overlay = $WH.ce('div');
overlay.className = 'lightbox-overlay';
outer = $WH.ce('div');
outer.className = 'lightbox-outer';
inner = $WH.ce('div');
inner.className = 'lightbox-inner';
overlay.style.display = outer.style.display = 'none';
$WH.ae(dest, overlay);
$WH.ae(outer, inner);
$WH.ae(dest, outer);
}
function onKeyDown(e)
{
e = $WH.$E(e);
switch (e.keyCode)
{
case 27: // Escape
hide();
break;
}
}
function onResize(fake)
{
if (fake != 1234)
{
if (funcs.onResize)
funcs.onResize();
}
overlay.style.height = document.body.offsetHeight + 'px';
}
function hide()
{
if (!prepared)
return;
unhookEvents();
if (funcs.onHide)
funcs.onHide();
overlay.style.display = outer.style.display = 'none';
g_enableScroll(true);
}
function reveal()
{
overlay.style.display = outer.style.display = divs[lastId].style.display = '';
Lightbox.setSize(inner.offsetWidth, inner.offsetHeight, 1);
}
this.setSize = function(w, h, auto)
{
inner.style.visibility = 'hidden';
if (!auto)
{
inner.style.width = w + 'px';
if (h)
inner.style.height = h + 'px';
}
inner.style.left = -parseInt(w / 2) + 'px';
if (h)
inner.style.top = -parseInt(h / 2) + 'px';
inner.style.visibility = 'visible';
}
this.show = function(id, _funcs, opt) {
funcs = _funcs || {};
prepare();
hookEvents();
if (lastId != id && divs[lastId] != null)
divs[lastId].style.display = 'none';
lastId = id;
var first = 0,
d;
if (divs[id] == null)
{
first = 1;
d = $WH.ce('div');
$WH.ae(inner, d);
divs[id] = d;
}
else
d = divs[id];
if (funcs.onShow)
funcs.onShow(d, first, opt);
onResize(1234);
reveal();
g_enableScroll(false);
}
this.reveal = function()
{
reveal();
}
this.hide = function()
{
hide();
}
this.isVisible = function()
{
return (overlay && overlay.style.display != 'none');
}
};