App-sitelenmute
view release on metacpan or search on metacpan
share/view/index.js view on Meta::CPAN
}
function resetTimeout(id)
{
if(id) clearTimeout(id)
return null;
}
function hideCap(nodelay)
{
captm = resetTimeout(captm);
if(!nodelay)
ecap.tween('opacity', 0);
else
{
ecap.get('tween').cancel();
ecap.setStyle('display', 'none');
}
}
function showCap(nodelay)
{
if(capst == 'never') return;
var cap = imgs.data[ecap.eidx]['caption'];
if(!cap || (cap[0].length + cap[1].length == 0))
{
hideCap(true);
return;
}
captm = resetTimeout(captm);
ecap.get('tween').cancel();
if(nodelay) ecap.fade('show');
else ecap.tween('opacity', 1);
ecap.setStyle('display', 'block');
if(capst != 'always')
{
// calculate a decent reading time
var words = cap[0].split(' ').length + cap[1].split(' ').length;
var delay = Math.max(capdelay, rdwdelay * words);
captm = hideCap.delay(delay);
}
}
function toggleCap()
{
if(!imgs.captions) return;
// switch mode
if(capst == 'normal')
capst = 'never';
else if(capst == 'never')
capst = 'always';
else
capst = 'normal';
// update visual state
if(capst == 'never')
hideCap(true);
else if(ecap.eidx == eidx)
showCap(true);
// update indicator
var img = document.id('togglecap', ehdr);
img.src = 'view/cap-' + capst + '.png';
showHdr();
}
function setSlideshowOff()
{
if(slideshow == 'off') return;
idle.removeEvent('idle', next);
showHdr();
elist.setStyle('display', 'block');
slideshow = 'off';
}
function setSlideshowOn()
{
if(slideshow == 'on') return;
idle.addEvent('idle', next);
hideHdr();
elist.setStyle('display', 'none');
slideshow = 'on';
}
function toggleSlideshow()
{
if(slideshow == 'on')
setSlideshowOff();
else
setSlideshowOn();
resize();
}
function setupHeader()
{
ehdr.empty();
var el;
if(imgs.index)
{
el = new Element('a', { 'title': 'Back to index', 'href': encodeURI(imgs.index) });
el.set('html', '<img src="view/back.png"/>');
ehdr.adopt(el);
}
if(imgs.data[eidx].file)
{
var file = encodeURI(imgs.data[eidx].file[0]);
el = new Element('a', { 'title': 'Download image', 'href': file });
el.set('html', '<img src="view/eye.png"/>');
ehdr.adopt(el);
}
if(imgs.download)
{
el = new Element('a', { 'title': 'Download album', 'href': imgs.download });
el.set('html', '<img src="view/download.png"/>');
ehdr.adopt(el);
}
if(imgs.captions)
{
el = new Element('a', { 'title': 'Toggle captions' });
el.setStyle('cursor', 'pointer');
el.addEvent('click', toggleCap);
var img = new Element('img', { 'id': 'togglecap', 'src': 'view/cap-' + capst + '.png' });
img.inject(el);
el.inject(ehdr);
}
if(imgs.data[eidx].date)
ehdr.adopt(new Element('span', { 'title': 'EXIF timestamp', 'html': imgs.data[eidx].date }));
el = new Element('a', { 'title': 'Overview', 'href': 'view/overview.html' });
el.set('html', '<img src="view/overview.png"/>');
ehdr.adopt(el);
ehdr.setStyle('display', (ehdr.children.length? 'block': 'none'));
ehdr.removeEvent('click', toggleSlideshow);
}
function onMainReady()
{
resizeMainImg(eimg);
eimg.setStyle('opacity', 0);
eimg.addClass('current');
eimg.inject(ebuff);
setupHeader();
if(imgs.data[eidx].file)
{
var file = encodeURI(imgs.data[eidx].file[0]);
eimg.addEvent('click', function() { window.location = file; });
eimg.setStyle('cursor', 'pointer'); // fallback
eimg.setStyle('cursor', 'zoom-in');
}
// caption
if(!imgs.data[eidx]['caption'])
hideCap();
else
{
var cap = imgs.data[eidx]['caption'];
ecap.eidx = eidx
ecap.empty();
if(cap[0].length)
ecap.adopt(new Element('div', { 'id': 'title', 'text': cap[0] }));
if(cap[1].length)
ecap.adopt(new Element('div', { 'id': 'desc', 'text': cap[1] }));
showCap(first);
}
// disable transitions for first image
var d = duration;
if(first !== false)
{
first = false;
d = 0;
}
// start animations
if(oimg)
{
// scrolling direction
var pred = umod(oimg.idx + sdir, imgs.data.length);
if(pred != eidx)
{
var diff = umod(eidx - oimg.idx, imgs.data.length);
if(diff == 1)
sdir = 1;
else if(diff == imgs.data.length - 1)
sdir = -1;
else
sdir = 0;
}
share/view/index.js view on Meta::CPAN
idleMouse.addEvent('idle', hideHdr);
// general idle callback
idle = new IdleTimer(window, { timeout: slidedelay }).start();
// start slide show immediately if specified in data.json
if(imgs.startslideshow == 'yes')
setSlideshowOn();
else
setSlideshowOff();
// prepare first image
sdir = 1;
first = getLocationIndex();
resize();
load(first);
loadThumb(first);
centerThumb(0);
// set visibility
emain.setStyle('visibility', 'visible');
if(slideshow == 'on')
elist.setStyle('display', 'none');
}
function initFailure()
{
emain = $('gallery');
emain.set('html', "<h2>Cannot load gallery data :'(</h2>");
emain.setStyles(
{
'background': 'inherit',
'display': 'block'
});
}
function init()
{
if(!("devicePixelRatio" in window))
window.devicePixelRatio = 1;
// read the data
new Request.JSON(
{
url: datafile,
onRequest: function()
{
if(this.xhr.overrideMimeType)
this.xhr.overrideMimeType('application/json');
},
isSuccess: function()
{
return (!this.status || (this.status >= 200 && this.status < 300));
},
onSuccess: initGallery,
onFailure: initFailure
}).get();
// preload some resources
Asset.images([
'view/throbber.gif', 'view/overview.png', 'view/eye.png',
'view/download.png', 'view/back.png', 'view/cap-normal.png',
'view/cap-always.png', 'view/cap-never.png', 'view/cut-left.png',
'view/cut-right.png', 'view/cut-top.png', 'view/cut-mov.png'
]);
}
window.addEvent('domready', init);
( run in 0.785 second using v1.01-cache-2.11-cpan-744e820c463 )