mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
* 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
294 lines
8.4 KiB
JavaScript
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);
|
|
};
|