Files
aowow/setup/tools/filegen/templates/global.js/mapviewer.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

294 lines
8.4 KiB
JavaScript

var MapViewer = new function()
{
var imgWidth,
imgHeight,
scale,
desiredScale,
mapper,
oldOnClick,
oldOnUpdate,
oldParent,
oldSibling,
tempParent,
placeholder,
container,
screen,
imgDiv,
aCover;
function computeDimensions()
{
var availHeight = Math.max(50, Math.min(618, $WH.g_getWindowSize().h - 72));
desiredScale = 1;
scale = 1;//Math.min(1, availHeight / 515);
// no scaling because it doesnt work with background images
if (desiredScale > 1)
desiredScale = 1;
if (scale > 1)
scale = 1;
imgWidth = Math.round(scale * 772);
imgHeight = Math.round(scale * 515);
var lbWidth = Math.max(480, imgWidth);
Lightbox.setSize(lbWidth + 20, imgHeight + 52);
}
function getPound(extra)
{
var extraBits = function(map, s)
{
s += ':' + map.zone;
if (map.level)
s += '.' + map.level;
return s;
};
var buff = '#map';
if (tempParent)
buff += '=' + mapper.getLink();
else if (Mapper.zoneDefaultLevel[mapper.zone])
{
if (Mapper.zoneDefaultLevel[mapper.zone] != mapper.level)
buff = extraBits(mapper, buff);
}
else if (mapper.level != 0)
buff = extraBits(mapper, buff);
else if ((!$WH.isset('g_mapperData') || !g_mapperData[mapper.zone]) && (!$WH.isset('g_mapper_data') || !g_mapper_data[mapper.zone]))
buff = extraBits(mapper, buff);
return buff;
}
function onUpdate()
{
if (oldOnUpdate)
oldOnUpdate(mapper);
location.replace(getPound(true));
}
function render(resizing)
{
if (resizing && (scale == desiredScale) && $WH.g_getWindowSize().h > container.offsetHeight)
return;
container.style.visibility = 'hidden';
computeDimensions(0);
if (!resizing)
{
if (!placeholder)
{
placeholder = $WH.ce('div');
placeholder.style.height = '325px';
placeholder.style.padding = '3px';
placeholder.style.marginTop = '10px';
}
mapper.parent.style.borderWidth = '0px';
mapper.parent.style.marginTop = '0px';
mapper.span.style.cursor = 'pointer';
if (mapper.span.onclick)
oldOnClick = mapper.span.onclick;
mapper.span.onclick = Lightbox.hide;
mapper.span.onmouseover = function() { aCover.style.display = 'block'; };
mapper.span.onmouseout = function() { setTimeout(function() { if (!aCover.hasMouse) aCover.style.display = 'none'; }, 10); };
if (mapper.onMapUpdate)
oldOnUpdate = mapper.onMapUpdate;
mapper.onMapUpdate = onUpdate;
if (!tempParent)
{
oldParent = mapper.parent.parentNode;
oldSibling = mapper.parent.nextSibling;
oldParent.insertBefore(placeholder, mapper.parent);
$WH.de(mapper.parent);
$WH.ae(mapDiv, mapper.parent);
}
else
{
$WH.de(tempParent);
$WH.ae(mapDiv, tempParent);
}
if (location.hash.indexOf('#show') == -1)
location.replace(getPound(false));
else if ($WH.isset('mapShower'))
mapShower.onExpand();
}
Lightbox.reveal();
container.style.visibility = 'visible';
}
function onResize()
{
render(1);
}
function onHide()
{
if (oldOnClick)
mapper.span.onclick = oldOnClick;
else
mapper.span.onclick = null;
oldOnClick = null;
if (oldOnUpdate)
mapper.onMapUpdate = oldOnUpdate
else
mapper.onMapUpdate = null;
oldOnUpdate = null;
mapper.span.style.cursor = '';
mapper.span.onmouseover = null;
mapper.span.onmouseout = null;
if (!tempParent)
{
$WH.de(placeholder);
$WH.de(mapper.parent);
mapper.parent.style.borderWidth = '';
mapper.parent.style.marginTop = '';
if (oldSibling)
oldParent.insertBefore(mapper.parent, oldSibling);
else
$WH.ae(oldParent, mapper.parent);
oldParent = oldSibling = null;
}
else
{
$WH.de(tempParent);
tempParent = null;
}
mapper.toggleZoom();
if (location.hash.indexOf('#show') == -1)
location.replace('#.');
else if ($WH.isset('mapShower'))
mapShower.onCollapse();
}
function onShow(dest, first, opt)
{
mapper = opt.mapper;
container = dest;
if (first)
{
dest.className = 'mapviewer';
screen = $WH.ce('div');
screen.style.width = '772px';
screen.style.height = '515px';
screen.className = 'mapviewer-screen';
aCover = $WH.ce('a');
aCover.className = 'mapviewer-cover';
aCover.href = 'javascript:;';
aCover.onclick = Lightbox.hide;
aCover.onmouseover = function() { aCover.hasMouse = true; };
aCover.onmouseout = function() { aCover.hasMouse = false; };
var foo = $WH.ce('span');
var b = $WH.ce('b');
$WH.ae(b, $WH.ct(LANG.close));
$WH.ae(foo, b);
$WH.ae(aCover, foo);
$WH.ae(screen, aCover);
mapDiv = $WH.ce('div');
$WH.ae(screen, mapDiv);
$WH.ae(dest, screen);
var aClose = $WH.ce('a');
// aClose.className = 'dialog-x'; aowow - button not yet renamed
aClose.className = 'dialog-cancel';
aClose.href = 'javascript:;';
aClose.onclick = Lightbox.hide;
$WH.ae(aClose, $WH.ct(LANG.close));
$WH.ae(dest, aClose);
var d = $WH.ce('div');
d.className = 'clear';
$WH.ae(dest, d);
}
onRender();
}
function onRender()
{
render();
}
this.checkPound = function()
{
if (location.hash && location.hash.indexOf('#map') == 0)
{
var parts = location.hash.split('=');
if (parts.length == 2)
{
var link = parts[1];
if (link)
{
/*tempParent = $WH.ce('div');
tempParent.id = 'fewuiojfdksl';
$WH.ae(document.body, tempParent);
var map = new Mapper({ parent: tempParent.id });
map.setLink(link, true);
map.toggleZoom();*/
MapViewer.show({ link: link });
}
}
else
{
parts = location.hash.split(':');
var map = $WH.ge('sjdhfkljawelis');
if (map)
map.onclick();
if (parts.length == 2)
{
if (!map)
MapViewer.show({ link: parts[1]});
var subparts = parts[1].split('.');
var opts = { zone: subparts[0] };
if (subparts.length == 2)
opts.level = parseInt(subparts[1])+1;
mapper.update(opts);
//if (Mapper.multiLevelZones[mapper.zone])
// mapper.setMap(Mapper.multiLevelZones[mapper.zone][floor], floor, true);
}
}
}
}
this.show = function(opt)
{
if (opt.link)
{
tempParent = $WH.ce('div');
tempParent.id = 'fewuiojfdksl';
$WH.aef(document.body, tempParent); // aowow - aef() insteead of ae() - rather scroll page to top instead of bottom
var map = new Mapper({ parent: tempParent.id });
map.setLink(opt.link, true);
map.toggleZoom();
}
else
Lightbox.show('mapviewer', { onShow: onShow, onHide: onHide, onResize: onResize }, opt);
}
$(document).ready(this.checkPound);
};