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 )