Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- cinematic : function(__SELF, SETTINGS)
- {
- var regName = 'app-cinematic';
- /*
- based on .w_10
- */
- var __settings =
- {
- bioscoop : null, // id of target
- autoplay :
- {
- enabled : false,
- interval : 10,
- showNext : true,
- showPlay : true,
- showPrev : true,
- showTimer : true,
- },
- thumbs :
- {
- preloadAllBeforeShow : false,
- callBackAfterShow : function() {},
- asCssBackgroundImage : true // otherwise img-tag
- },
- loader :
- {
- lines : 16,
- length : 50,
- width : 1,
- radius : 40,
- rotate : 0,
- color : '#00FF1A',
- speed : 1.9,
- trail : 100,
- shadow : false,
- hwaccel : true,
- className : 'ddlsl',
- zIndex : -1,//2e9,
- top : 0,
- left : 'auto'
- }
- };
- var log =
- {
- n : function(t, l)
- {
- $.tri4m.log('tri4m.app.cinematic: ' + t, l);
- },
- t : function(t, l)
- {
- log.n('trigger: ' + t, l);
- },
- t107 : function(t, l)
- {
- log.t('preload-cinematic-thumb: ' + t, l);
- },
- t108 : function(t, l)
- {
- log.t('preload-cinematic-image: ' + t, l);
- }
- }
- var __instance = function(element)
- {
- var _queue = [],
- _element = element,
- _isset = $.tri4m.global.__INSTANCE_REGISTRY__.isset(element, regName),
- _init, _dom, _reg = {}, _bnd = {}, _update,
- _ctrl =
- {
- onActivation : function(scrollrollerItem)
- {
- scrollrollerItem.parent().data('tri4m.ui.scrollroller.listitem.state', {ai : scrollrollerItem});
- scrollrollerItem.find('a').trigger('preload-cinematic-image');
- },
- pause : function()
- {
- },
- play : function()
- {
- },
- next : function(scrollroller)
- {
- scrollroller.trigger('activate-next-or-first', [_ctrl.onActivation]);
- },
- prev : function(scrollroller)
- {
- scrollroller.trigger('activate-next-or-first', [_ctrl.onActivation]);
- }
- };
- _c =
- {
- o : function(t)
- {
- var p = {width: 0, height: 0};
- p.width = (typeof t === 'undefined' || t.innerWidth() === 0) ? $(window).width() : t.innerWidth();
- p.height = (typeof t === 'undefined' || t.innerHeight() === 0) ? $(window).height() : t.innerHeight();
- return p;
- },
- i : function(image, target)
- {
- var p = {width: 0, height: 0, left: 0, top: 0};
- if(typeof image !== 'object'
- || typeof image.width === 'undefined'
- || typeof image.height === 'undefined') return p;
- var iw = image.width;
- var ih = image.height;
- var ir = ih / iw;
- var w = _c.o(target);
- var ww = w.width;
- var wh = w.height;
- var wr = wh / ww;
- switch(true)
- {
- case (wr > ir):
- p.width = Math.round(wh/ir);
- p.height = wh;
- break;
- case (typeof $('body.fit-images').size() !== 'undefined'):
- p.width = ww;
- p.height = wh;
- break;
- case (ir > 1 || ir === 1):
- var j = wh / ih;
- p.width = Math.round(iw * j);
- p.height = wh;
- break;
- default:
- p.width = ww;
- p.height = Math.round(ww * ir);
- break;
- }
- p.left = Math.round((ww - p.width) / 2);
- p.top = Math.round((wh - p.height) / 2);
- return p;
- }
- };
- _j =
- {
- isw : false,
- window : function()
- {
- var d = _reg.j.get('d');
- var wait = setInterval(function()
- {
- clearInterval(wait);
- _j.isw = false;
- d.find('img:visible')
- .each(function()
- {
- $(this).animate(_c.i({width : $(this).width(), height : $(this).height()}, d), 500, 'easeOutCubic');
- });
- }, 600);
- if(true === _j.isw)
- clearInterval(wait);
- _j.isw = true;
- }
- }
- _update = function()
- {
- var j = _reg.j, __i = 'li', __a = 'a',
- ba = _bnd.a.toValueObject(), bi = _bnd.i.toValueObject(), bt = _bnd.t.toValueObject();
- j.register('a', $(__a, j.get('l')), false);
- j.register('i', $(__i, j.get('l')), false);
- j.get('a').addClass('tri4m-app-cinematic-resourcelink').hide();
- j.get('i').addClass('tri4m-app-cinematic-resourceitem');
- var a = j.get('a'), i = j.get('i'), _a = '<a />';
- i.each(function(index)
- {
- for(var i in bi) $(this).unbind(i).bind(i, bi[i]);
- var it = $(this).find(__a + '.tri4m-app-cinematic-resourcethumb').eq(0);
- if(it.length === 0)
- $(this).append($(_a).addClass('tri4m-app-cinematic-resourcethumb').hide());
- });
- j.register('t', $(__a + '.tri4m-app-cinematic-resourcethumb', j.get('i')), false);
- var t = j.get('t');
- a.each(function(index)
- {
- for(var i in ba) $(this).unbind(i).bind(i, ba[i]);
- });
- t.each(function(index)
- {
- for(var i in bt) $(this).unbind(i).bind(i, bt[i]);
- var ds = $(this).data(_reg.n.get('dts'));
- var dv = { i : index };
- if(!ds)
- {
- dv.created = false;
- $(this).data(_reg.n.get('dts'), dv).trigger('preload-cinematic-thumb');
- }
- else
- {
- $(this).data(_reg.n.get('dts'), dv);
- }
- });
- };
- _dom = function()
- {
- var j = _reg.j, _d = '<div />', _l = '<ul />', __d = 'div', __i = 'li', __a = 'a', _a = '<a />', __l = 'ul';
- var d = $('#' + __settings.bioscoop).find(__d).eq(0);
- var l = _element.find(__l).eq(0); // 0: cur is ul
- j.register('b', $('#' + __settings.bioscoop), true);
- j.register('d', ((d.length === 0) ? $(_d).appendTo(j.get('b')) : d), true);
- j.register('l', ((l.length === 0) ? $(_element).wrap(_d) : l), true);
- j.register('c', j.get('l').parent());
- j.get('l').addClass('tri4m-app-cinematic-list');
- j.get('b').addClass('tri4m-app-cinematic-bioscoop');
- j.get('d').addClass('tri4m-app-cinematic-decorontwerp')
- .css({overflow: 'hidden'})
- .data(_reg.n.get('dcs'), { initialized : false });
- j.get('c').addClass('tri4m-ui-scrollroller-x tri4m-app-gallery-thumbs tri4m-app-cinematics')
- //j.get('c').addClass('tri4m-ui-scrollroller-x tri4m-app-cinematics')
- .tri4m().proto().ui().scrollroller
- ({
- sensitive: true,
- easing :
- {
- duration : 400,
- callback :
- {
- item :
- {
- deactivate : function(e)
- {
- $(this).trigger('activate-first');
- }
- }
- }
- }
- });
- };
- _init = function()
- {
- if(true === _isset) return;
- _reg.j = new $.tri4m.global.__CLASS__.__VARIABLE__.__REGISTRY__();
- _reg.n = new $.tri4m.global.__CLASS__.__VARIABLE__.__REGISTRY__();
- _bnd.a = new $.tri4m.global.__CLASS__.__VARIABLE__.__REGISTRY__();
- _bnd.t = new $.tri4m.global.__CLASS__.__VARIABLE__.__REGISTRY__();
- _bnd.i = new $.tri4m.global.__CLASS__.__VARIABLE__.__REGISTRY__();
- _bnd.r = new $.tri4m.global.__CLASS__.__VARIABLE__.__REGISTRY__();
- _reg.n.register('dcs', 'tri4m.app.cinematic.state');
- _reg.n.register('dts', 'tri4m.app.cinematic.thumbstate');
- _bnd.i.register('click', function()
- {
- $(this).trigger('activate', [_ctrl.onActivation]);
- });
- _bnd.t.register('preload-cinematic-thumb', function(e)
- {
- if(typeof ILLI === 'undefined')
- {
- $(this).parent().prepend('<span>where is ILLI?</span>');
- log.t107('ILLI is undefined (required for thumb-url)', 2);
- return;
- }
- var t = $(this), p = t.parent().css({opacity : 0}),
- i = t.data(_reg.n.get('dts')).i,
- href = $('a.tri4m-app-cinematic-resourcelink', p).attr('href');
- log.t107('init ' + i);
- if(typeof _queue[i] !== 'undefined' && _queue[i].status === true)
- return;
- log.t107('push to queue ' + i);
- _queue[i] = {status : false, error : false, attempt : 0, thumb : t, parent : p, src : null, image : $('<img />').addClass('tri4m-app-cinematic-thumbnail').css({opacity : 0})};
- var islast = (_queue.length === _reg.j.get('t').length);
- if(true === islast)
- log.t107('is last ' + i);
- var dequeue = function()
- {
- log.t107('try dequeue: caller is ' + i);
- if(true === __settings.thumbs.preloadAllBeforeShow)
- {
- if(false === islast)
- return;
- log.t107('try dequeue: preloadAllBeforeShow = true');
- var success = true;
- for(var idx in _queue)
- if(_queue[idx].status === false)
- success = false;
- if(false === success)
- {
- log.t107('try dequeue: success = false');
- var refetch = setInterval(function()
- {
- clearInterval(refetch);
- log.t107('try again');
- dequeue();
- }, 50);
- return;
- }
- }
- log.t107('try dequeue: start iteration');
- for(var idx in _queue)
- {
- if(true === _queue[idx].error)
- {
- log.t107('try dequeue: error: ' + src, 3);
- log.t107('try dequeue: --continue');
- continue;
- }
- (function()
- {
- log.t107('try dequeue: auto-init ' + idx);
- var cur = _queue[idx];
- var islast = _queue.length === _queue[idx - 1];
- var wait = setInterval(function()
- {
- cur.attempt++;
- if(false === __settings.thumbs.preloadAllBeforeShow
- && cur.status === false)
- {
- log.t107('try dequeue: waiting: preloadAllBeforeShow = false, cur.status = false, try = ' + cur.attempt + ' index = ' + idx + ', caller = ' + i);
- if(cur.attempt >= 10)
- {
- log.t107('try dequeue: waiting: preloadAllBeforeShow = false, cur.status = false, max.attempts = 10, index = ' + idx + ', caller = ' + i);
- log.t107('try dequeue: waiting: -- index ' + idx + ' was kicked from #list (idle flood), caller = ' + i);
- clearInterval(wait);
- }
- log.t107('try dequeue: waiting: coffeetime index = ' + idx + ', caller = ' + i);
- return;
- }
- clearInterval(wait);
- if(true === __settings.thumbs.asCssBackgroundImage)
- {
- log.t107('try dequeue: asCssBackgroundImage = true ' + idx);
- cur.parent.css({'background-image' : 'url("' + cur.src + '")'});
- cur.parent.animate({opacity : 1}, 500);
- }
- else
- {
- log.t107('try dequeue: asCssBackgroundImage = false ' + idx);
- cur.parent.prepend(cur.image);
- cur.image.animate({opacity : 1}, 500);
- }
- //if(islast === true) __settings.thumbs.callBackAfterShow();
- }, idx * 50);
- })();
- }
- }
- var load = function(src)
- {
- log.t107('try load: ' + src);
- var IMG = new Image();
- $(IMG)
- .addClass('dummy')
- .hide()
- .load(function()
- {
- log.t107('try load: complete: ' + src);
- $(IMG).remove();
- t.wait = setInterval(function()
- {
- clearInterval(t.wait);
- log.t107('try load: append: ' + src);
- _queue[i].image.attr('src', src);
- _queue[i].src = src;
- _queue[i].status = true;
- dequeue();
- }, 100);
- IMG.onload = function(){};
- })
- .error(function()
- {
- log.t107('try load: error: ' + src, 3);
- _queue[i].image.attr('src', src);
- _queue[i].src = src;
- _queue[i].status = true;
- _queue[i].error = true;
- dequeue();
- IMG.onerror = function(){};
- });
- $(IMG).attr('src', src);
- t.append(IMG);
- };
- t.idle = setInterval(function()
- {
- clearInterval(t.idle);
- log.t107('try get thumb for ' + i + ': ' + href);
- // create thumb url from img-a-href
- ILLI.router.create.thumb(href, p.height(), p.width(), function(url)
- {
- log.t107('thumb for ' + i + ' is ' + url);
- t.attr('href', url);
- load(url);
- });
- }, 100);
- });
- _bnd.a.register('preload-cinematic-image', function()
- {
- var src = $(this).attr('href');
- log.t108('init ' + src);
- /*
- if(_reg.j.get('d').children('div.hidden').length === 0)
- {
- var hidden = $('<div />').hide().addClass('hidden');
- _reg.j.get('d').prepend(hidden);
- }
- */
- var load = function()
- {
- log.t108('try load: ' + src);
- if(_reg.j.get('d').children('img' + "[src='" + src + "']").length === 0)
- {
- log.t108('try load: unknown source ' + src);
- var img = $('<img />').css({position: 'absolute'}).addClass('tri4m-app-cinematic-image').css('position', 'absolute');
- var IMG = new Image();
- $(IMG)
- .hide()
- .load(function()
- {
- log.t108('try load: complete: ' + src);
- var css = _c.i(IMG, _reg.j.get('d'));
- $(IMG).remove();
- var wait = setInterval(function()
- {
- clearInterval(wait);
- log.t108('try load: append: ' + src);
- _reg.j.get('d').prepend(img.attr('src', src).css(css));
- _reg.j.get('d').animate({opacity : 1}, 500);
- }, 100);
- IMG.onload = function(){};
- })
- .error(function()
- {
- log.t108('try load: error: ' + src, 3);
- IMG.onerror = function(){};
- });
- $(IMG).attr('src', src);
- _reg.j.get('d').html(IMG);
- }
- else
- {
- log.t108('try load: known source ' + src);
- var img = _reg.j.get('d').children('img' + "[src='" + src + "']");
- img.show();
- _reg.j.get('d').animate({opacity : 1}, 500);
- }
- };
- if(_reg.j.get('d').children('img').length === 0)
- {
- log.t108('try load: bioscoop has no images -- construct squence');
- _reg.j.get('d').css({opacity : 0});
- load();
- }
- else
- {
- log.t108('try load: bioscoop has images -- destruct-construct squence');
- _reg.j.get('d').stop().animate({opacity : 0}, 500, function()
- {
- $('img', _reg.j.get('d')).remove();
- load();
- });
- }
- }, true);
- _bnd.r.register('resize.resolutionchange', _j.window, true);
- var foo = false;
- __settings.thumbs.callBackAfterShow = function()
- {
- if(true === foo) return;
- foo = true;
- _update();
- };
- _dom();
- _update();
- var br = _bnd.r.toValueObject();
- for(var i in br) { $(window).bind(i, br[i]); }
- };
- if(__settings.bioscoop === null)
- {
- __settings.bioscoop = 'target';
- $('body').prepend('<div id="'+ __settings.bioscoop +'"/>');
- }
- _init();
- };
- var instance = new __instance(__SELF);
- $.tri4m.global.__INSTANCE_REGISTRY__.register(__SELF, regName, instance);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement