From 489d45b26d3e34da11bd44d8453f1ee15a0e6791 Mon Sep 17 00:00:00 2001 From: Jan Sorgalla Date: Fri, 29 Nov 2013 11:58:21 +0100 Subject: [PATCH] Add jcarousel 0.3.0 --- .../0.3.0/jquery.jcarousel-autoscroll.js | 59 + .../0.3.0/jquery.jcarousel-autoscroll.min.js | 4 + .../0.3.0/jquery.jcarousel-control.js | 76 + .../0.3.0/jquery.jcarousel-control.min.js | 4 + .../jcarousel/0.3.0/jquery.jcarousel-core.js | 1021 ++++++++++++ .../0.3.0/jquery.jcarousel-core.min.js | 4 + .../0.3.0/jquery.jcarousel-pagination.js | 185 +++ .../0.3.0/jquery.jcarousel-pagination.min.js | 4 + .../0.3.0/jquery.jcarousel-scrollintoview.js | 63 + .../jquery.jcarousel-scrollintoview.min.js | 4 + ajax/libs/jcarousel/0.3.0/jquery.jcarousel.js | 1396 +++++++++++++++++ .../jcarousel/0.3.0/jquery.jcarousel.min.js | 4 + ajax/libs/jcarousel/package.json | 30 + 13 files changed, 2854 insertions(+) create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-autoscroll.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-autoscroll.min.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-control.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-control.min.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-core.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-core.min.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-pagination.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-pagination.min.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-scrollintoview.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel-scrollintoview.min.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel.js create mode 100644 ajax/libs/jcarousel/0.3.0/jquery.jcarousel.min.js create mode 100644 ajax/libs/jcarousel/package.json diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-autoscroll.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-autoscroll.js new file mode 100644 index 000000000..ae7802358 --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-autoscroll.js @@ -0,0 +1,59 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function($) { + 'use strict'; + + $.jCarousel.plugin('jcarouselAutoscroll', { + _options: { + target: '+=1', + interval: 3000, + autostart: true + }, + _timer: null, + _init: function () { + this.onDestroy = $.proxy(function() { + this._destroy(); + this.carousel() + .one('jcarousel:createend', $.proxy(this._create, this)); + }, this); + + this.onAnimateEnd = $.proxy(this.start, this); + }, + _create: function() { + this.carousel() + .one('jcarousel:destroy', this.onDestroy); + + if (this.options('autostart')) { + this.start(); + } + }, + _destroy: function() { + this.stop(); + this.carousel() + .off('jcarousel:destroy', this.onDestroy); + }, + start: function() { + this.stop(); + + this.carousel() + .one('jcarousel:animateend', this.onAnimateEnd); + + this._timer = setTimeout($.proxy(function() { + this.carousel().jcarousel('scroll', this.options('target')); + }, this), this.options('interval')); + + return this; + }, + stop: function() { + if (this._timer) { + this._timer = clearTimeout(this._timer); + } + + this.carousel() + .off('jcarousel:animateend', this.onAnimateEnd); + + return this; + } + }); +}(jQuery)); diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-autoscroll.min.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-autoscroll.min.js new file mode 100644 index 000000000..c6df4f9e0 --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-autoscroll.min.js @@ -0,0 +1,4 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function(t){"use strict";t.jCarousel.plugin("jcarouselAutoscroll",{_options:{target:"+=1",interval:3e3,autostart:!0},_timer:null,_init:function(){this.onDestroy=t.proxy(function(){this._destroy(),this.carousel().one("jcarousel:createend",t.proxy(this._create,this))},this),this.onAnimateEnd=t.proxy(this.start,this)},_create:function(){this.carousel().one("jcarousel:destroy",this.onDestroy),this.options("autostart")&&this.start()},_destroy:function(){this.stop(),this.carousel().off("jcarousel:destroy",this.onDestroy)},start:function(){return this.stop(),this.carousel().one("jcarousel:animateend",this.onAnimateEnd),this._timer=setTimeout(t.proxy(function(){this.carousel().jcarousel("scroll",this.options("target"))},this),this.options("interval")),this},stop:function(){return this._timer&&(this._timer=clearTimeout(this._timer)),this.carousel().off("jcarousel:animateend",this.onAnimateEnd),this}})})(jQuery); \ No newline at end of file diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-control.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-control.js new file mode 100644 index 000000000..e4f2bd09b --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-control.js @@ -0,0 +1,76 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function($) { + 'use strict'; + + $.jCarousel.plugin('jcarouselControl', { + _options: { + target: '+=1', + event: 'click', + method: 'scroll' + }, + _active: null, + _init: function() { + this.onDestroy = $.proxy(function() { + this._destroy(); + this.carousel() + .one('jcarousel:createend', $.proxy(this._create, this)); + }, this); + this.onReload = $.proxy(this._reload, this); + this.onEvent = $.proxy(function(e) { + e.preventDefault(); + + var method = this.options('method'); + + if ($.isFunction(method)) { + method.call(this); + } else { + this.carousel() + .jcarousel(this.options('method'), this.options('target')); + } + }, this); + }, + _create: function() { + this.carousel() + .one('jcarousel:destroy', this.onDestroy) + .on('jcarousel:reloadend jcarousel:scrollend', this.onReload); + + this._element + .on(this.options('event') + '.jcarouselcontrol', this.onEvent); + + this._reload(); + }, + _destroy: function() { + this._element + .off('.jcarouselcontrol', this.onEvent); + + this.carousel() + .off('jcarousel:destroy', this.onDestroy) + .off('jcarousel:reloadend jcarousel:scrollend', this.onReload); + }, + _reload: function() { + var parsed = $.jCarousel.parseTarget(this.options('target')), + carousel = this.carousel(), + active; + + if (parsed.relative) { + active = carousel + .jcarousel(parsed.target > 0 ? 'hasNext' : 'hasPrev'); + } else { + var target = typeof parsed.target !== 'object' ? + carousel.jcarousel('items').eq(parsed.target) : + parsed.target; + + active = carousel.jcarousel('target').index(target) >= 0; + } + + if (this._active !== active) { + this._trigger(active ? 'active' : 'inactive'); + this._active = active; + } + + return this; + } + }); +}(jQuery)); diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-control.min.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-control.min.js new file mode 100644 index 000000000..60fcbe0ea --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-control.min.js @@ -0,0 +1,4 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function(t){"use strict";t.jCarousel.plugin("jcarouselControl",{_options:{target:"+=1",event:"click",method:"scroll"},_active:null,_init:function(){this.onDestroy=t.proxy(function(){this._destroy(),this.carousel().one("jcarousel:createend",t.proxy(this._create,this))},this),this.onReload=t.proxy(this._reload,this),this.onEvent=t.proxy(function(i){i.preventDefault();var s=this.options("method");t.isFunction(s)?s.call(this):this.carousel().jcarousel(this.options("method"),this.options("target"))},this)},_create:function(){this.carousel().one("jcarousel:destroy",this.onDestroy).on("jcarousel:reloadend jcarousel:scrollend",this.onReload),this._element.on(this.options("event")+".jcarouselcontrol",this.onEvent),this._reload()},_destroy:function(){this._element.off(".jcarouselcontrol",this.onEvent),this.carousel().off("jcarousel:destroy",this.onDestroy).off("jcarousel:reloadend jcarousel:scrollend",this.onReload)},_reload:function(){var i,s=t.jCarousel.parseTarget(this.options("target")),e=this.carousel();if(s.relative)i=e.jcarousel(s.target>0?"hasNext":"hasPrev");else{var r="object"!=typeof s.target?e.jcarousel("items").eq(s.target):s.target;i=e.jcarousel("target").index(r)>=0}return this._active!==i&&(this._trigger(i?"active":"inactive"),this._active=i),this}})})(jQuery); \ No newline at end of file diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-core.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-core.js new file mode 100644 index 000000000..60981e8c2 --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-core.js @@ -0,0 +1,1021 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function($) { + 'use strict'; + + var jCarousel = $.jCarousel = {}; + + jCarousel.version = '0.3.0'; + + var rRelativeTarget = /^([+\-]=)?(.+)$/; + + jCarousel.parseTarget = function(target) { + var relative = false, + parts = typeof target !== 'object' ? + rRelativeTarget.exec(target) : + null; + + if (parts) { + target = parseInt(parts[2], 10) || 0; + + if (parts[1]) { + relative = true; + if (parts[1] === '-=') { + target *= -1; + } + } + } else if (typeof target !== 'object') { + target = parseInt(target, 10) || 0; + } + + return { + target: target, + relative: relative + }; + }; + + jCarousel.detectCarousel = function(element) { + var carousel; + + while (element.length > 0) { + carousel = element.filter('[data-jcarousel]'); + + if (carousel.length > 0) { + return carousel; + } + + carousel = element.find('[data-jcarousel]'); + + if (carousel.length > 0) { + return carousel; + } + + element = element.parent(); + } + + return null; + }; + + jCarousel.base = function(pluginName) { + return { + version: jCarousel.version, + _options: {}, + _element: null, + _carousel: null, + _init: $.noop, + _create: $.noop, + _destroy: $.noop, + _reload: $.noop, + create: function() { + this._element + .attr('data-' + pluginName.toLowerCase(), true) + .data(pluginName, this); + + if (false === this._trigger('create')) { + return this; + } + + this._create(); + + this._trigger('createend'); + + return this; + }, + destroy: function() { + if (false === this._trigger('destroy')) { + return this; + } + + this._destroy(); + + this._trigger('destroyend'); + + this._element + .removeData(pluginName) + .removeAttr('data-' + pluginName.toLowerCase()); + + return this; + }, + reload: function(options) { + if (false === this._trigger('reload')) { + return this; + } + + if (options) { + this.options(options); + } + + this._reload(); + + this._trigger('reloadend'); + + return this; + }, + element: function() { + return this._element; + }, + options: function(key, value) { + if (arguments.length === 0) { + return $.extend({}, this._options); + } + + if (typeof key === 'string') { + if (typeof value === 'undefined') { + return typeof this._options[key] === 'undefined' ? + null : + this._options[key]; + } + + this._options[key] = value; + } else { + this._options = $.extend({}, this._options, key); + } + + return this; + }, + carousel: function() { + if (!this._carousel) { + this._carousel = jCarousel.detectCarousel(this.options('carousel') || this._element); + + if (!this._carousel) { + $.error('Could not detect carousel for plugin "' + pluginName + '"'); + } + } + + return this._carousel; + }, + _trigger: function(type, element, data) { + var event, + defaultPrevented = false; + + data = [this].concat(data || []); + + (element || this._element).each(function() { + event = $.Event((pluginName + ':' + type).toLowerCase()); + + $(this).trigger(event, data); + + if (event.isDefaultPrevented()) { + defaultPrevented = true; + } + }); + + return !defaultPrevented; + } + }; + }; + + jCarousel.plugin = function(pluginName, pluginPrototype) { + var Plugin = $[pluginName] = function(element, options) { + this._element = $(element); + this.options(options); + + this._init(); + this.create(); + }; + + Plugin.fn = Plugin.prototype = $.extend( + {}, + jCarousel.base(pluginName), + pluginPrototype + ); + + $.fn[pluginName] = function(options) { + var args = Array.prototype.slice.call(arguments, 1), + returnValue = this; + + if (typeof options === 'string') { + this.each(function() { + var instance = $(this).data(pluginName); + + if (!instance) { + return $.error( + 'Cannot call methods on ' + pluginName + ' prior to initialization; ' + + 'attempted to call method "' + options + '"' + ); + } + + if (!$.isFunction(instance[options]) || options.charAt(0) === '_') { + return $.error( + 'No such method "' + options + '" for ' + pluginName + ' instance' + ); + } + + var methodValue = instance[options].apply(instance, args); + + if (methodValue !== instance && typeof methodValue !== 'undefined') { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $(this).data(pluginName); + + if (instance instanceof Plugin) { + instance.reload(options); + } else { + new Plugin(this, options); + } + }); + } + + return returnValue; + }; + + return Plugin; + }; +}(jQuery)); + +(function($, window) { + 'use strict'; + + var toFloat = function(val) { + return parseFloat(val) || 0; + }; + + $.jCarousel.plugin('jcarousel', { + animating: false, + tail: 0, + inTail: false, + resizeTimer: null, + lt: null, + vertical: false, + rtl: false, + circular: false, + underflow: false, + relative: false, + + _options: { + list: function() { + return this.element().children().eq(0); + }, + items: function() { + return this.list().children(); + }, + animation: 400, + transitions: false, + wrap: null, + vertical: null, + rtl: null, + center: false + }, + + // Protected, don't access directly + _list: null, + _items: null, + _target: null, + _first: null, + _last: null, + _visible: null, + _fullyvisible: null, + _init: function() { + var self = this; + + this.onWindowResize = function() { + if (self.resizeTimer) { + clearTimeout(self.resizeTimer); + } + + self.resizeTimer = setTimeout(function() { + self.reload(); + }, 100); + }; + + return this; + }, + _create: function() { + this._reload(); + + $(window).on('resize.jcarousel', this.onWindowResize); + }, + _destroy: function() { + $(window).off('resize.jcarousel', this.onWindowResize); + }, + _reload: function() { + this.vertical = this.options('vertical'); + + if (this.vertical == null) { + this.vertical = this.list().height() > this.list().width(); + } + + this.rtl = this.options('rtl'); + + if (this.rtl == null) { + this.rtl = (function(element) { + if (('' + element.attr('dir')).toLowerCase() === 'rtl') { + return true; + } + + var found = false; + + element.parents('[dir]').each(function() { + if ((/rtl/i).test($(this).attr('dir'))) { + found = true; + return false; + } + }); + + return found; + }(this._element)); + } + + this.lt = this.vertical ? 'top' : 'left'; + + // Ensure before closest() call + this.relative = this.list().css('position') === 'relative'; + + // Force list and items reload + this._list = null; + this._items = null; + + var item = this._target && this.index(this._target) >= 0 ? + this._target : + this.closest(); + + // _prepare() needs this here + this.circular = this.options('wrap') === 'circular'; + this.underflow = false; + + var props = {'left': 0, 'top': 0}; + + if (item.length > 0) { + this._prepare(item); + this.list().find('[data-jcarousel-clone]').remove(); + + // Force items reload + this._items = null; + + this.underflow = this._fullyvisible.length >= this.items().length; + this.circular = this.circular && !this.underflow; + + props[this.lt] = this._position(item) + 'px'; + } + + this.move(props); + + return this; + }, + list: function() { + if (this._list === null) { + var option = this.options('list'); + this._list = $.isFunction(option) ? option.call(this) : this._element.find(option); + } + + return this._list; + }, + items: function() { + if (this._items === null) { + var option = this.options('items'); + this._items = ($.isFunction(option) ? option.call(this) : this.list().find(option)).not('[data-jcarousel-clone]'); + } + + return this._items; + }, + index: function(item) { + return this.items().index(item); + }, + closest: function() { + var self = this, + pos = this.list().position()[this.lt], + closest = $(), // Ensure we're returning a jQuery instance + stop = false, + lrb = this.vertical ? 'bottom' : (this.rtl && !this.relative ? 'left' : 'right'), + width; + + if (this.rtl && this.relative && !this.vertical) { + pos += this.list().width() - this.clipping(); + } + + this.items().each(function() { + closest = $(this); + + if (stop) { + return false; + } + + var dim = self.dimension(closest); + + pos += dim; + + if (pos >= 0) { + width = dim - toFloat(closest.css('margin-' + lrb)); + + if ((Math.abs(pos) - dim + (width / 2)) <= 0) { + stop = true; + } else { + return false; + } + } + }); + + + return closest; + }, + target: function() { + return this._target; + }, + first: function() { + return this._first; + }, + last: function() { + return this._last; + }, + visible: function() { + return this._visible; + }, + fullyvisible: function() { + return this._fullyvisible; + }, + hasNext: function() { + if (false === this._trigger('hasnext')) { + return true; + } + + var wrap = this.options('wrap'), + end = this.items().length - 1; + + return end >= 0 && + ((wrap && wrap !== 'first') || + (this.index(this._last) < end) || + (this.tail && !this.inTail)) ? true : false; + }, + hasPrev: function() { + if (false === this._trigger('hasprev')) { + return true; + } + + var wrap = this.options('wrap'); + + return this.items().length > 0 && + ((wrap && wrap !== 'last') || + (this.index(this._first) > 0) || + (this.tail && this.inTail)) ? true : false; + }, + clipping: function() { + return this._element['inner' + (this.vertical ? 'Height' : 'Width')](); + }, + dimension: function(element) { + return element['outer' + (this.vertical ? 'Height' : 'Width')](true); + }, + scroll: function(target, animate, callback) { + if (this.animating) { + return this; + } + + if (false === this._trigger('scroll', null, [target, animate])) { + return this; + } + + if ($.isFunction(animate)) { + callback = animate; + animate = true; + } + + var parsed = $.jCarousel.parseTarget(target); + + if (parsed.relative) { + var end = this.items().length - 1, + scroll = Math.abs(parsed.target), + wrap = this.options('wrap'), + current, + first, + index, + start, + curr, + isVisible, + props, + i; + + if (parsed.target > 0) { + var last = this.index(this._last); + + if (last >= end && this.tail) { + if (!this.inTail) { + this._scrollTail(animate, callback); + } else { + if (wrap === 'both' || wrap === 'last') { + this._scroll(0, animate, callback); + } else { + if ($.isFunction(callback)) { + callback.call(this, false); + } + } + } + } else { + current = this.index(this._target); + + if ((this.underflow && current === end && (wrap === 'circular' || wrap === 'both' || wrap === 'last')) || + (!this.underflow && last === end && (wrap === 'both' || wrap === 'last'))) { + this._scroll(0, animate, callback); + } else { + index = current + scroll; + + if (this.circular && index > end) { + i = end; + curr = this.items().get(-1); + + while (i++ < index) { + curr = this.items().eq(0); + isVisible = this._visible.index(curr) >= 0; + + if (isVisible) { + curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); + } + + this.list().append(curr); + + if (!isVisible) { + props = {}; + props[this.lt] = this.dimension(curr); + this.moveBy(props); + } + + // Force items reload + this._items = null; + } + + this._scroll(curr, animate, callback); + } else { + this._scroll(Math.min(index, end), animate, callback); + } + } + } + } else { + if (this.inTail) { + this._scroll(Math.max((this.index(this._first) - scroll) + 1, 0), animate, callback); + } else { + first = this.index(this._first); + current = this.index(this._target); + start = this.underflow ? current : first; + index = start - scroll; + + if (start <= 0 && ((this.underflow && wrap === 'circular') || wrap === 'both' || wrap === 'first')) { + this._scroll(end, animate, callback); + } else { + if (this.circular && index < 0) { + i = index; + curr = this.items().get(0); + + while (i++ < 0) { + curr = this.items().eq(-1); + isVisible = this._visible.index(curr) >= 0; + + if (isVisible) { + curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); + } + + this.list().prepend(curr); + + // Force items reload + this._items = null; + + var dim = this.dimension(curr); + + props = {}; + props[this.lt] = -dim; + this.moveBy(props); + + } + + this._scroll(curr, animate, callback); + } else { + this._scroll(Math.max(index, 0), animate, callback); + } + } + } + } + } else { + this._scroll(parsed.target, animate, callback); + } + + this._trigger('scrollend'); + + return this; + }, + moveBy: function(properties, opts) { + var position = this.list().position(), + multiplier = 1, + correction = 0; + + if (this.rtl && !this.vertical) { + multiplier = -1; + + if (this.relative) { + correction = this.list().width() - this.clipping(); + } + } + + if (properties.left) { + properties.left = (position.left + correction + toFloat(properties.left) * multiplier) + 'px'; + } + + if (properties.top) { + properties.top = (position.top + correction + toFloat(properties.top) * multiplier) + 'px'; + } + + return this.move(properties, opts); + }, + move: function(properties, opts) { + opts = opts || {}; + + var option = this.options('transitions'), + transitions = !!option, + transforms = !!option.transforms, + transforms3d = !!option.transforms3d, + duration = opts.duration || 0, + list = this.list(); + + if (!transitions && duration > 0) { + list.animate(properties, opts); + return; + } + + var complete = opts.complete || $.noop, + css = {}; + + if (transitions) { + var backup = list.css(['transitionDuration', 'transitionTimingFunction', 'transitionProperty']), + oldComplete = complete; + + complete = function() { + $(this).css(backup); + oldComplete.call(this); + }; + css = { + transitionDuration: (duration > 0 ? duration / 1000 : 0) + 's', + transitionTimingFunction: option.easing || opts.easing, + transitionProperty: duration > 0 ? (function() { + if (transforms || transforms3d) { + // We have to use 'all' because jQuery doesn't prefix + // css values, like transition-property: transform; + return 'all'; + } + + return properties.left ? 'left' : 'top'; + })() : 'none', + transform: 'none' + }; + } + + if (transforms3d) { + css.transform = 'translate3d(' + (properties.left || 0) + ',' + (properties.top || 0) + ',0)'; + } else if (transforms) { + css.transform = 'translate(' + (properties.left || 0) + ',' + (properties.top || 0) + ')'; + } else { + $.extend(css, properties); + } + + if (transitions && duration > 0) { + list.one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd', complete); + } + + list.css(css); + + if (duration <= 0) { + list.each(function() { + complete.call(this); + }); + } + }, + _scroll: function(item, animate, callback) { + if (this.animating) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + if (typeof item !== 'object') { + item = this.items().eq(item); + } else if (typeof item.jquery === 'undefined') { + item = $(item); + } + + if (item.length === 0) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + this.inTail = false; + + this._prepare(item); + + var pos = this._position(item), + currPos = this.list().position()[this.lt]; + + if (pos === currPos) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + var properties = {}; + properties[this.lt] = pos + 'px'; + + this._animate(properties, animate, callback); + + return this; + }, + _scrollTail: function(animate, callback) { + if (this.animating || !this.tail) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + var pos = this.list().position()[this.lt]; + + if (this.rtl && this.relative && !this.vertical) { + pos += this.list().width() - this.clipping(); + } + + if (this.rtl && !this.vertical) { + pos += this.tail; + } else { + pos -= this.tail; + } + + this.inTail = true; + + var properties = {}; + properties[this.lt] = pos + 'px'; + + this._update({ + target: this._target.next(), + fullyvisible: this._fullyvisible.slice(1).add(this._visible.last()) + }); + + this._animate(properties, animate, callback); + + return this; + }, + _animate: function(properties, animate, callback) { + callback = callback || $.noop; + + if (false === this._trigger('animate')) { + callback.call(this, false); + return this; + } + + this.animating = true; + + var animation = this.options('animation'), + complete = $.proxy(function() { + this.animating = false; + + var c = this.list().find('[data-jcarousel-clone]'); + + if (c.length > 0) { + c.remove(); + this._reload(); + } + + this._trigger('animateend'); + + callback.call(this, true); + }, this); + + var opts = typeof animation === 'object' ? + $.extend({}, animation) : + {duration: animation}, + oldComplete = opts.complete || $.noop; + + if (animate === false) { + opts.duration = 0; + } else if (typeof $.fx.speeds[opts.duration] !== 'undefined') { + opts.duration = $.fx.speeds[opts.duration]; + } + + opts.complete = function() { + complete(); + oldComplete.call(this); + }; + + this.move(properties, opts); + + return this; + }, + _prepare: function(item) { + var index = this.index(item), + idx = index, + wh = this.dimension(item), + clip = this.clipping(), + lrb = this.vertical ? 'bottom' : (this.rtl ? 'left' : 'right'), + center = this.options('center'), + update = { + target: item, + first: item, + last: item, + visible: item, + fullyvisible: wh <= clip ? item : $() + }, + curr, + isVisible, + margin, + dim; + + if (center) { + wh /= 2; + clip /= 2; + } + + if (wh < clip) { + while (true) { + curr = this.items().eq(++idx); + + if (curr.length === 0) { + if (!this.circular) { + break; + } + + curr = this.items().eq(0); + + if (item.get(0) === curr.get(0)) { + break; + } + + isVisible = this._visible.index(curr) >= 0; + + if (isVisible) { + curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); + } + + this.list().append(curr); + + if (!isVisible) { + var props = {}; + props[this.lt] = this.dimension(curr); + this.moveBy(props); + } + + // Force items reload + this._items = null; + } + + dim = this.dimension(curr); + + if (dim === 0) { + break; + } + + wh += dim; + + update.last = curr; + update.visible = update.visible.add(curr); + + // Remove right/bottom margin from total width + margin = toFloat(curr.css('margin-' + lrb)); + + if ((wh - margin) <= clip) { + update.fullyvisible = update.fullyvisible.add(curr); + } + + if (wh >= clip) { + break; + } + } + } + + if (!this.circular && !center && wh < clip) { + idx = index; + + while (true) { + if (--idx < 0) { + break; + } + + curr = this.items().eq(idx); + + if (curr.length === 0) { + break; + } + + dim = this.dimension(curr); + + if (dim === 0) { + break; + } + + wh += dim; + + update.first = curr; + update.visible = update.visible.add(curr); + + // Remove right/bottom margin from total width + margin = toFloat(curr.css('margin-' + lrb)); + + if ((wh - margin) <= clip) { + update.fullyvisible = update.fullyvisible.add(curr); + } + + if (wh >= clip) { + break; + } + } + } + + this._update(update); + + this.tail = 0; + + if (!center && + this.options('wrap') !== 'circular' && + this.options('wrap') !== 'custom' && + this.index(update.last) === (this.items().length - 1)) { + + // Remove right/bottom margin from total width + wh -= toFloat(update.last.css('margin-' + lrb)); + + if (wh > clip) { + this.tail = wh - clip; + } + } + + return this; + }, + _position: function(item) { + var first = this._first, + pos = first.position()[this.lt], + center = this.options('center'), + centerOffset = center ? (this.clipping() / 2) - (this.dimension(first) / 2) : 0; + + if (this.rtl && !this.vertical) { + if (this.relative) { + pos -= this.list().width() - this.dimension(first); + } else { + pos -= this.clipping() - this.dimension(first); + } + + pos += centerOffset; + } else { + pos -= centerOffset; + } + + if (!center && + (this.index(item) > this.index(first) || this.inTail) && + this.tail) { + pos = this.rtl && !this.vertical ? pos - this.tail : pos + this.tail; + this.inTail = true; + } else { + this.inTail = false; + } + + return -pos; + }, + _update: function(update) { + var self = this, + current = { + target: this._target || $(), + first: this._first || $(), + last: this._last || $(), + visible: this._visible || $(), + fullyvisible: this._fullyvisible || $() + }, + back = this.index(update.first || current.first) < this.index(current.first), + key, + doUpdate = function(key) { + var elIn = [], + elOut = []; + + update[key].each(function() { + if (current[key].index(this) < 0) { + elIn.push(this); + } + }); + + current[key].each(function() { + if (update[key].index(this) < 0) { + elOut.push(this); + } + }); + + if (back) { + elIn = elIn.reverse(); + } else { + elOut = elOut.reverse(); + } + + self._trigger(key + 'in', $(elIn)); + self._trigger(key + 'out', $(elOut)); + + self['_' + key] = update[key]; + }; + + for (key in update) { + doUpdate(key); + } + + return this; + } + }); +}(jQuery, window)); diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-core.min.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-core.min.js new file mode 100644 index 000000000..47afe818c --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-core.min.js @@ -0,0 +1,4 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function(t){"use strict";var i=t.jCarousel={};i.version="0.3.0";var s=/^([+\-]=)?(.+)$/;i.parseTarget=function(t){var i=!1,e="object"!=typeof t?s.exec(t):null;return e?(t=parseInt(e[2],10)||0,e[1]&&(i=!0,"-="===e[1]&&(t*=-1))):"object"!=typeof t&&(t=parseInt(t,10)||0),{target:t,relative:i}},i.detectCarousel=function(t){for(var i;t.length>0;){if(i=t.filter("[data-jcarousel]"),i.length>0)return i;if(i=t.find("[data-jcarousel]"),i.length>0)return i;t=t.parent()}return null},i.base=function(s){return{version:i.version,_options:{},_element:null,_carousel:null,_init:t.noop,_create:t.noop,_destroy:t.noop,_reload:t.noop,create:function(){return this._element.attr("data-"+s.toLowerCase(),!0).data(s,this),!1===this._trigger("create")?this:(this._create(),this._trigger("createend"),this)},destroy:function(){return!1===this._trigger("destroy")?this:(this._destroy(),this._trigger("destroyend"),this._element.removeData(s).removeAttr("data-"+s.toLowerCase()),this)},reload:function(t){return!1===this._trigger("reload")?this:(t&&this.options(t),this._reload(),this._trigger("reloadend"),this)},element:function(){return this._element},options:function(i,s){if(0===arguments.length)return t.extend({},this._options);if("string"==typeof i){if(s===void 0)return this._options[i]===void 0?null:this._options[i];this._options[i]=s}else this._options=t.extend({},this._options,i);return this},carousel:function(){return this._carousel||(this._carousel=i.detectCarousel(this.options("carousel")||this._element),this._carousel||t.error('Could not detect carousel for plugin "'+s+'"')),this._carousel},_trigger:function(i,e,r){var n,l=!1;return r=[this].concat(r||[]),(e||this._element).each(function(){n=t.Event((s+":"+i).toLowerCase()),t(this).trigger(n,r),n.isDefaultPrevented()&&(l=!0)}),!l}}},i.plugin=function(s,e){var r=t[s]=function(i,s){this._element=t(i),this.options(s),this._init(),this.create()};return r.fn=r.prototype=t.extend({},i.base(s),e),t.fn[s]=function(i){var e=Array.prototype.slice.call(arguments,1),n=this;return"string"==typeof i?this.each(function(){var r=t(this).data(s);if(!r)return t.error("Cannot call methods on "+s+" prior to initialization; "+'attempted to call method "'+i+'"');if(!t.isFunction(r[i])||"_"===i.charAt(0))return t.error('No such method "'+i+'" for '+s+" instance");var l=r[i].apply(r,e);return l!==r&&l!==void 0?(n=l,!1):void 0}):this.each(function(){var e=t(this).data(s);e instanceof r?e.reload(i):new r(this,i)}),n},r}})(jQuery),function(t,i){"use strict";var s=function(t){return parseFloat(t)||0};t.jCarousel.plugin("jcarousel",{animating:!1,tail:0,inTail:!1,resizeTimer:null,lt:null,vertical:!1,rtl:!1,circular:!1,underflow:!1,relative:!1,_options:{list:function(){return this.element().children().eq(0)},items:function(){return this.list().children()},animation:400,transitions:!1,wrap:null,vertical:null,rtl:null,center:!1},_list:null,_items:null,_target:null,_first:null,_last:null,_visible:null,_fullyvisible:null,_init:function(){var t=this;return this.onWindowResize=function(){t.resizeTimer&&clearTimeout(t.resizeTimer),t.resizeTimer=setTimeout(function(){t.reload()},100)},this},_create:function(){this._reload(),t(i).on("resize.jcarousel",this.onWindowResize)},_destroy:function(){t(i).off("resize.jcarousel",this.onWindowResize)},_reload:function(){this.vertical=this.options("vertical"),null==this.vertical&&(this.vertical=this.list().height()>this.list().width()),this.rtl=this.options("rtl"),null==this.rtl&&(this.rtl=function(i){if("rtl"===(""+i.attr("dir")).toLowerCase())return!0;var s=!1;return i.parents("[dir]").each(function(){return/rtl/i.test(t(this).attr("dir"))?(s=!0,!1):void 0}),s}(this._element)),this.lt=this.vertical?"top":"left",this.relative="relative"===this.list().css("position"),this._list=null,this._items=null;var i=this._target&&this.index(this._target)>=0?this._target:this.closest();this.circular="circular"===this.options("wrap"),this.underflow=!1;var s={left:0,top:0};return i.length>0&&(this._prepare(i),this.list().find("[data-jcarousel-clone]").remove(),this._items=null,this.underflow=this._fullyvisible.length>=this.items().length,this.circular=this.circular&&!this.underflow,s[this.lt]=this._position(i)+"px"),this.move(s),this},list:function(){if(null===this._list){var i=this.options("list");this._list=t.isFunction(i)?i.call(this):this._element.find(i)}return this._list},items:function(){if(null===this._items){var i=this.options("items");this._items=(t.isFunction(i)?i.call(this):this.list().find(i)).not("[data-jcarousel-clone]")}return this._items},index:function(t){return this.items().index(t)},closest:function(){var i,e=this,r=this.list().position()[this.lt],n=t(),l=!1,o=this.vertical?"bottom":this.rtl&&!this.relative?"left":"right";return this.rtl&&this.relative&&!this.vertical&&(r+=this.list().width()-this.clipping()),this.items().each(function(){if(n=t(this),l)return!1;var a=e.dimension(n);if(r+=a,r>=0){if(i=a-s(n.css("margin-"+o)),!(0>=Math.abs(r)-a+i/2))return!1;l=!0}}),n},target:function(){return this._target},first:function(){return this._first},last:function(){return this._last},visible:function(){return this._visible},fullyvisible:function(){return this._fullyvisible},hasNext:function(){if(!1===this._trigger("hasnext"))return!0;var t=this.options("wrap"),i=this.items().length-1;return i>=0&&(t&&"first"!==t||i>this.index(this._last)||this.tail&&!this.inTail)?!0:!1},hasPrev:function(){if(!1===this._trigger("hasprev"))return!0;var t=this.options("wrap");return this.items().length>0&&(t&&"last"!==t||this.index(this._first)>0||this.tail&&this.inTail)?!0:!1},clipping:function(){return this._element["inner"+(this.vertical?"Height":"Width")]()},dimension:function(t){return t["outer"+(this.vertical?"Height":"Width")](!0)},scroll:function(i,s,e){if(this.animating)return this;if(!1===this._trigger("scroll",null,[i,s]))return this;t.isFunction(s)&&(e=s,s=!0);var r=t.jCarousel.parseTarget(i);if(r.relative){var n,l,o,a,h,u,c,f,d=this.items().length-1,_=Math.abs(r.target),p=this.options("wrap");if(r.target>0){var v=this.index(this._last);if(v>=d&&this.tail)this.inTail?"both"===p||"last"===p?this._scroll(0,s,e):t.isFunction(e)&&e.call(this,!1):this._scrollTail(s,e);else if(n=this.index(this._target),this.underflow&&n===d&&("circular"===p||"both"===p||"last"===p)||!this.underflow&&v===d&&("both"===p||"last"===p))this._scroll(0,s,e);else if(o=n+_,this.circular&&o>d){for(f=d,h=this.items().get(-1);o>f++;)h=this.items().eq(0),u=this._visible.index(h)>=0,u&&h.after(h.clone(!0).attr("data-jcarousel-clone",!0)),this.list().append(h),u||(c={},c[this.lt]=this.dimension(h),this.moveBy(c)),this._items=null;this._scroll(h,s,e)}else this._scroll(Math.min(o,d),s,e)}else if(this.inTail)this._scroll(Math.max(this.index(this._first)-_+1,0),s,e);else if(l=this.index(this._first),n=this.index(this._target),a=this.underflow?n:l,o=a-_,0>=a&&(this.underflow&&"circular"===p||"both"===p||"first"===p))this._scroll(d,s,e);else if(this.circular&&0>o){for(f=o,h=this.items().get(0);0>f++;){h=this.items().eq(-1),u=this._visible.index(h)>=0,u&&h.after(h.clone(!0).attr("data-jcarousel-clone",!0)),this.list().prepend(h),this._items=null;var g=this.dimension(h);c={},c[this.lt]=-g,this.moveBy(c)}this._scroll(h,s,e)}else this._scroll(Math.max(o,0),s,e)}else this._scroll(r.target,s,e);return this._trigger("scrollend"),this},moveBy:function(t,i){var e=this.list().position(),r=1,n=0;return this.rtl&&!this.vertical&&(r=-1,this.relative&&(n=this.list().width()-this.clipping())),t.left&&(t.left=e.left+n+s(t.left)*r+"px"),t.top&&(t.top=e.top+n+s(t.top)*r+"px"),this.move(t,i)},move:function(i,s){s=s||{};var e=this.options("transitions"),r=!!e,n=!!e.transforms,l=!!e.transforms3d,o=s.duration||0,a=this.list();if(!r&&o>0)return a.animate(i,s),void 0;var h=s.complete||t.noop,u={};if(r){var c=a.css(["transitionDuration","transitionTimingFunction","transitionProperty"]),f=h;h=function(){t(this).css(c),f.call(this)},u={transitionDuration:(o>0?o/1e3:0)+"s",transitionTimingFunction:e.easing||s.easing,transitionProperty:o>0?function(){return n||l?"all":i.left?"left":"top"}():"none",transform:"none"}}l?u.transform="translate3d("+(i.left||0)+","+(i.top||0)+",0)":n?u.transform="translate("+(i.left||0)+","+(i.top||0)+")":t.extend(u,i),r&&o>0&&a.one("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",h),a.css(u),0>=o&&a.each(function(){h.call(this)})},_scroll:function(i,s,e){if(this.animating)return t.isFunction(e)&&e.call(this,!1),this;if("object"!=typeof i?i=this.items().eq(i):i.jquery===void 0&&(i=t(i)),0===i.length)return t.isFunction(e)&&e.call(this,!1),this;this.inTail=!1,this._prepare(i);var r=this._position(i),n=this.list().position()[this.lt];if(r===n)return t.isFunction(e)&&e.call(this,!1),this;var l={};return l[this.lt]=r+"px",this._animate(l,s,e),this},_scrollTail:function(i,s){if(this.animating||!this.tail)return t.isFunction(s)&&s.call(this,!1),this;var e=this.list().position()[this.lt];this.rtl&&this.relative&&!this.vertical&&(e+=this.list().width()-this.clipping()),this.rtl&&!this.vertical?e+=this.tail:e-=this.tail,this.inTail=!0;var r={};return r[this.lt]=e+"px",this._update({target:this._target.next(),fullyvisible:this._fullyvisible.slice(1).add(this._visible.last())}),this._animate(r,i,s),this},_animate:function(i,s,e){if(e=e||t.noop,!1===this._trigger("animate"))return e.call(this,!1),this;this.animating=!0;var r=this.options("animation"),n=t.proxy(function(){this.animating=!1;var t=this.list().find("[data-jcarousel-clone]");t.length>0&&(t.remove(),this._reload()),this._trigger("animateend"),e.call(this,!0)},this),l="object"==typeof r?t.extend({},r):{duration:r},o=l.complete||t.noop;return s===!1?l.duration=0:t.fx.speeds[l.duration]!==void 0&&(l.duration=t.fx.speeds[l.duration]),l.complete=function(){n(),o.call(this)},this.move(i,l),this},_prepare:function(i){var e,r,n,l,o=this.index(i),a=o,h=this.dimension(i),u=this.clipping(),c=this.vertical?"bottom":this.rtl?"left":"right",f=this.options("center"),d={target:i,first:i,last:i,visible:i,fullyvisible:u>=h?i:t()};if(f&&(h/=2,u/=2),u>h)for(;;){if(e=this.items().eq(++a),0===e.length){if(!this.circular)break;if(e=this.items().eq(0),i.get(0)===e.get(0))break;if(r=this._visible.index(e)>=0,r&&e.after(e.clone(!0).attr("data-jcarousel-clone",!0)),this.list().append(e),!r){var _={};_[this.lt]=this.dimension(e),this.moveBy(_)}this._items=null}if(l=this.dimension(e),0===l)break;if(h+=l,d.last=e,d.visible=d.visible.add(e),n=s(e.css("margin-"+c)),u>=h-n&&(d.fullyvisible=d.fullyvisible.add(e)),h>=u)break}if(!this.circular&&!f&&u>h)for(a=o;;){if(0>--a)break;if(e=this.items().eq(a),0===e.length)break;if(l=this.dimension(e),0===l)break;if(h+=l,d.first=e,d.visible=d.visible.add(e),n=s(e.css("margin-"+c)),u>=h-n&&(d.fullyvisible=d.fullyvisible.add(e)),h>=u)break}return this._update(d),this.tail=0,f||"circular"===this.options("wrap")||"custom"===this.options("wrap")||this.index(d.last)!==this.items().length-1||(h-=s(d.last.css("margin-"+c)),h>u&&(this.tail=h-u)),this},_position:function(t){var i=this._first,s=i.position()[this.lt],e=this.options("center"),r=e?this.clipping()/2-this.dimension(i)/2:0;return this.rtl&&!this.vertical?(s-=this.relative?this.list().width()-this.dimension(i):this.clipping()-this.dimension(i),s+=r):s-=r,!e&&(this.index(t)>this.index(i)||this.inTail)&&this.tail?(s=this.rtl&&!this.vertical?s-this.tail:s+this.tail,this.inTail=!0):this.inTail=!1,-s},_update:function(i){var s,e=this,r={target:this._target||t(),first:this._first||t(),last:this._last||t(),visible:this._visible||t(),fullyvisible:this._fullyvisible||t()},n=this.index(i.first||r.first)r[s].index(this)&&l.push(this)}),r[s].each(function(){0>i[s].index(this)&&o.push(this)}),n?l=l.reverse():o=o.reverse(),e._trigger(s+"in",t(l)),e._trigger(s+"out",t(o)),e["_"+s]=i[s]};for(s in i)l(s);return this}})}(jQuery,window); \ No newline at end of file diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-pagination.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-pagination.js new file mode 100644 index 000000000..327407072 --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-pagination.js @@ -0,0 +1,185 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function($) { + 'use strict'; + + $.jCarousel.plugin('jcarouselPagination', { + _options: { + perPage: null, + item: function(page) { + return '' + page + ''; + }, + event: 'click', + method: 'scroll' + }, + _pages: {}, + _items: {}, + _currentPage: null, + _init: function() { + this.onDestroy = $.proxy(function() { + this._destroy(); + this.carousel() + .one('jcarousel:createend', $.proxy(this._create, this)); + }, this); + this.onReload = $.proxy(this._reload, this); + this.onScroll = $.proxy(this._update, this); + }, + _create: function() { + this.carousel() + .one('jcarousel:destroy', this.onDestroy) + .on('jcarousel:reloadend', this.onReload) + .on('jcarousel:scrollend', this.onScroll); + + this._reload(); + }, + _destroy: function() { + this._clear(); + + this.carousel() + .off('jcarousel:destroy', this.onDestroy) + .off('jcarousel:reloadend', this.onReload) + .off('jcarousel:scrollend', this.onScroll); + }, + _reload: function() { + var perPage = this.options('perPage'); + + this._pages = {}; + this._items = {}; + + // Calculate pages + if ($.isFunction(perPage)) { + perPage = perPage.call(this); + } + + if (perPage == null) { + this._pages = this._calculatePages(); + } else { + var pp = parseInt(perPage, 10) || 0, + items = this.carousel().jcarousel('items'), + page = 1, + i = 0, + curr; + + while (true) { + curr = items.eq(i++); + + if (curr.length === 0) { + break; + } + + if (!this._pages[page]) { + this._pages[page] = curr; + } else { + this._pages[page] = this._pages[page].add(curr); + } + + if (i % pp === 0) { + page++; + } + } + } + + this._clear(); + + var self = this, + carousel = this.carousel().data('jcarousel'), + element = this._element, + item = this.options('item'); + + $.each(this._pages, function(page, carouselItems) { + var currItem = self._items[page] = $(item.call(self, page, carouselItems)); + + currItem.on(self.options('event') + '.jcarouselpagination', $.proxy(function() { + var target = carouselItems.eq(0); + + // If circular wrapping enabled, ensure correct scrolling direction + if (carousel.circular) { + var currentIndex = carousel.index(carousel.target()), + newIndex = carousel.index(target); + + if (parseFloat(page) > parseFloat(self._currentPage)) { + if (newIndex < currentIndex) { + target = '+=' + (carousel.items().length - currentIndex + newIndex); + } + } else { + if (newIndex > currentIndex) { + target = '-=' + (currentIndex + (carousel.items().length - newIndex)); + } + } + } + + carousel[this.options('method')](target); + }, self)); + + element.append(currItem); + }); + + this._update(); + }, + _update: function() { + var target = this.carousel().jcarousel('target'), + currentPage; + + $.each(this._pages, function(page, carouselItems) { + carouselItems.each(function() { + if (target.is(this)) { + currentPage = page; + return false; + } + }); + + if (currentPage) { + return false; + } + }); + + if (this._currentPage !== currentPage) { + this._trigger('inactive', this._items[this._currentPage]); + this._trigger('active', this._items[currentPage]); + } + + this._currentPage = currentPage; + }, + items: function() { + return this._items; + }, + _clear: function() { + this._element.empty(); + this._currentPage = null; + }, + _calculatePages: function() { + var carousel = this.carousel().data('jcarousel'), + items = carousel.items(), + clip = carousel.clipping(), + wh = 0, + idx = 0, + page = 1, + pages = {}, + curr; + + while (true) { + curr = items.eq(idx++); + + if (curr.length === 0) { + break; + } + + if (!pages[page]) { + pages[page] = curr; + } else { + pages[page] = pages[page].add(curr); + } + + wh += carousel.dimension(curr); + + if (wh >= clip) { + page++; + wh = 0; + } + } + + return pages; + } + }); +}(jQuery)); diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-pagination.min.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-pagination.min.js new file mode 100644 index 000000000..1e8636c2e --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-pagination.min.js @@ -0,0 +1,4 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function(t){"use strict";t.jCarousel.plugin("jcarouselPagination",{_options:{perPage:null,item:function(t){return''+t+""},event:"click",method:"scroll"},_pages:{},_items:{},_currentPage:null,_init:function(){this.onDestroy=t.proxy(function(){this._destroy(),this.carousel().one("jcarousel:createend",t.proxy(this._create,this))},this),this.onReload=t.proxy(this._reload,this),this.onScroll=t.proxy(this._update,this)},_create:function(){this.carousel().one("jcarousel:destroy",this.onDestroy).on("jcarousel:reloadend",this.onReload).on("jcarousel:scrollend",this.onScroll),this._reload()},_destroy:function(){this._clear(),this.carousel().off("jcarousel:destroy",this.onDestroy).off("jcarousel:reloadend",this.onReload).off("jcarousel:scrollend",this.onScroll)},_reload:function(){var i=this.options("perPage");if(this._pages={},this._items={},t.isFunction(i)&&(i=i.call(this)),null==i)this._pages=this._calculatePages();else for(var s,e=parseInt(i,10)||0,r=this.carousel().jcarousel("items"),n=1,o=0;;){if(s=r.eq(o++),0===s.length)break;this._pages[n]=this._pages[n]?this._pages[n].add(s):s,0===o%e&&n++}this._clear();var l=this,a=this.carousel().data("jcarousel"),h=this._element,c=this.options("item");t.each(this._pages,function(i,s){var e=l._items[i]=t(c.call(l,i,s));e.on(l.options("event")+".jcarouselpagination",t.proxy(function(){var t=s.eq(0);if(a.circular){var e=a.index(a.target()),r=a.index(t);parseFloat(i)>parseFloat(l._currentPage)?e>r&&(t="+="+(a.items().length-e+r)):r>e&&(t="-="+(e+(a.items().length-r)))}a[this.options("method")](t)},l)),h.append(e)}),this._update()},_update:function(){var i,s=this.carousel().jcarousel("target");t.each(this._pages,function(t,e){return e.each(function(){return s.is(this)?(i=t,!1):void 0}),i?!1:void 0}),this._currentPage!==i&&(this._trigger("inactive",this._items[this._currentPage]),this._trigger("active",this._items[i])),this._currentPage=i},items:function(){return this._items},_clear:function(){this._element.empty(),this._currentPage=null},_calculatePages:function(){for(var t,i=this.carousel().data("jcarousel"),s=i.items(),e=i.clipping(),r=0,n=0,o=1,l={};;){if(t=s.eq(n++),0===t.length)break;l[o]=l[o]?l[o].add(t):t,r+=i.dimension(t),r>=e&&(o++,r=0)}return l}})})(jQuery); \ No newline at end of file diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-scrollintoview.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-scrollintoview.js new file mode 100644 index 000000000..f03387cfd --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-scrollintoview.js @@ -0,0 +1,63 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function($) { + 'use strict'; + + $.jcarousel.fn.scrollIntoView = function(target, animate, callback) { + var parsed = $.jCarousel.parseTarget(target), + first = this.index(this._fullyvisible.first()), + last = this.index(this._fullyvisible.last()), + index; + + if (parsed.relative) { + index = parsed.target < 0 ? Math.max(0, first + parsed.target) : last + parsed.target; + } else { + index = typeof parsed.target !== 'object' ? parsed.target : this.index(parsed.target); + } + + if (index < first) { + return this.scroll(index, animate, callback); + } + + if (index >= first && index <= last) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + var items = this.items(), + clip = this.clipping(), + lrb = this.vertical ? 'bottom' : (this.rtl ? 'left' : 'right'), + wh = 0, + curr; + + while (true) { + curr = items.eq(index); + + if (curr.length === 0) { + break; + } + + wh += this.dimension(curr); + + if (wh >= clip) { + var margin = parseFloat(curr.css('margin-' + lrb)) || 0; + if ((wh - margin) !== clip) { + index++; + } + break; + } + + if (index <= 0) { + break; + } + + index--; + } + + return this.scroll(index, animate, callback); + }; +}(jQuery)); diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-scrollintoview.min.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-scrollintoview.min.js new file mode 100644 index 000000000..9426bb900 --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel-scrollintoview.min.js @@ -0,0 +1,4 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function(t){"use strict";t.jcarousel.fn.scrollIntoView=function(i,s,e){var r,n=t.jCarousel.parseTarget(i),l=this.index(this._fullyvisible.first()),o=this.index(this._fullyvisible.last());if(r=n.relative?0>n.target?Math.max(0,l+n.target):o+n.target:"object"!=typeof n.target?n.target:this.index(n.target),l>r)return this.scroll(r,s,e);if(r>=l&&o>=r)return t.isFunction(e)&&e.call(this,!1),this;for(var a,h=this.items(),u=this.clipping(),c=this.vertical?"bottom":this.rtl?"left":"right",f=0;;){if(a=h.eq(r),0===a.length)break;if(f+=this.dimension(a),f>=u){var d=parseFloat(a.css("margin-"+c))||0;f-d!==u&&r++;break}if(0>=r)break;r--}return this.scroll(r,s,e)}})(jQuery); \ No newline at end of file diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel.js new file mode 100644 index 000000000..25c60ad20 --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel.js @@ -0,0 +1,1396 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function($) { + 'use strict'; + + var jCarousel = $.jCarousel = {}; + + jCarousel.version = '0.3.0'; + + var rRelativeTarget = /^([+\-]=)?(.+)$/; + + jCarousel.parseTarget = function(target) { + var relative = false, + parts = typeof target !== 'object' ? + rRelativeTarget.exec(target) : + null; + + if (parts) { + target = parseInt(parts[2], 10) || 0; + + if (parts[1]) { + relative = true; + if (parts[1] === '-=') { + target *= -1; + } + } + } else if (typeof target !== 'object') { + target = parseInt(target, 10) || 0; + } + + return { + target: target, + relative: relative + }; + }; + + jCarousel.detectCarousel = function(element) { + var carousel; + + while (element.length > 0) { + carousel = element.filter('[data-jcarousel]'); + + if (carousel.length > 0) { + return carousel; + } + + carousel = element.find('[data-jcarousel]'); + + if (carousel.length > 0) { + return carousel; + } + + element = element.parent(); + } + + return null; + }; + + jCarousel.base = function(pluginName) { + return { + version: jCarousel.version, + _options: {}, + _element: null, + _carousel: null, + _init: $.noop, + _create: $.noop, + _destroy: $.noop, + _reload: $.noop, + create: function() { + this._element + .attr('data-' + pluginName.toLowerCase(), true) + .data(pluginName, this); + + if (false === this._trigger('create')) { + return this; + } + + this._create(); + + this._trigger('createend'); + + return this; + }, + destroy: function() { + if (false === this._trigger('destroy')) { + return this; + } + + this._destroy(); + + this._trigger('destroyend'); + + this._element + .removeData(pluginName) + .removeAttr('data-' + pluginName.toLowerCase()); + + return this; + }, + reload: function(options) { + if (false === this._trigger('reload')) { + return this; + } + + if (options) { + this.options(options); + } + + this._reload(); + + this._trigger('reloadend'); + + return this; + }, + element: function() { + return this._element; + }, + options: function(key, value) { + if (arguments.length === 0) { + return $.extend({}, this._options); + } + + if (typeof key === 'string') { + if (typeof value === 'undefined') { + return typeof this._options[key] === 'undefined' ? + null : + this._options[key]; + } + + this._options[key] = value; + } else { + this._options = $.extend({}, this._options, key); + } + + return this; + }, + carousel: function() { + if (!this._carousel) { + this._carousel = jCarousel.detectCarousel(this.options('carousel') || this._element); + + if (!this._carousel) { + $.error('Could not detect carousel for plugin "' + pluginName + '"'); + } + } + + return this._carousel; + }, + _trigger: function(type, element, data) { + var event, + defaultPrevented = false; + + data = [this].concat(data || []); + + (element || this._element).each(function() { + event = $.Event((pluginName + ':' + type).toLowerCase()); + + $(this).trigger(event, data); + + if (event.isDefaultPrevented()) { + defaultPrevented = true; + } + }); + + return !defaultPrevented; + } + }; + }; + + jCarousel.plugin = function(pluginName, pluginPrototype) { + var Plugin = $[pluginName] = function(element, options) { + this._element = $(element); + this.options(options); + + this._init(); + this.create(); + }; + + Plugin.fn = Plugin.prototype = $.extend( + {}, + jCarousel.base(pluginName), + pluginPrototype + ); + + $.fn[pluginName] = function(options) { + var args = Array.prototype.slice.call(arguments, 1), + returnValue = this; + + if (typeof options === 'string') { + this.each(function() { + var instance = $(this).data(pluginName); + + if (!instance) { + return $.error( + 'Cannot call methods on ' + pluginName + ' prior to initialization; ' + + 'attempted to call method "' + options + '"' + ); + } + + if (!$.isFunction(instance[options]) || options.charAt(0) === '_') { + return $.error( + 'No such method "' + options + '" for ' + pluginName + ' instance' + ); + } + + var methodValue = instance[options].apply(instance, args); + + if (methodValue !== instance && typeof methodValue !== 'undefined') { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $(this).data(pluginName); + + if (instance instanceof Plugin) { + instance.reload(options); + } else { + new Plugin(this, options); + } + }); + } + + return returnValue; + }; + + return Plugin; + }; +}(jQuery)); + +(function($, window) { + 'use strict'; + + var toFloat = function(val) { + return parseFloat(val) || 0; + }; + + $.jCarousel.plugin('jcarousel', { + animating: false, + tail: 0, + inTail: false, + resizeTimer: null, + lt: null, + vertical: false, + rtl: false, + circular: false, + underflow: false, + relative: false, + + _options: { + list: function() { + return this.element().children().eq(0); + }, + items: function() { + return this.list().children(); + }, + animation: 400, + transitions: false, + wrap: null, + vertical: null, + rtl: null, + center: false + }, + + // Protected, don't access directly + _list: null, + _items: null, + _target: null, + _first: null, + _last: null, + _visible: null, + _fullyvisible: null, + _init: function() { + var self = this; + + this.onWindowResize = function() { + if (self.resizeTimer) { + clearTimeout(self.resizeTimer); + } + + self.resizeTimer = setTimeout(function() { + self.reload(); + }, 100); + }; + + return this; + }, + _create: function() { + this._reload(); + + $(window).on('resize.jcarousel', this.onWindowResize); + }, + _destroy: function() { + $(window).off('resize.jcarousel', this.onWindowResize); + }, + _reload: function() { + this.vertical = this.options('vertical'); + + if (this.vertical == null) { + this.vertical = this.list().height() > this.list().width(); + } + + this.rtl = this.options('rtl'); + + if (this.rtl == null) { + this.rtl = (function(element) { + if (('' + element.attr('dir')).toLowerCase() === 'rtl') { + return true; + } + + var found = false; + + element.parents('[dir]').each(function() { + if ((/rtl/i).test($(this).attr('dir'))) { + found = true; + return false; + } + }); + + return found; + }(this._element)); + } + + this.lt = this.vertical ? 'top' : 'left'; + + // Ensure before closest() call + this.relative = this.list().css('position') === 'relative'; + + // Force list and items reload + this._list = null; + this._items = null; + + var item = this._target && this.index(this._target) >= 0 ? + this._target : + this.closest(); + + // _prepare() needs this here + this.circular = this.options('wrap') === 'circular'; + this.underflow = false; + + var props = {'left': 0, 'top': 0}; + + if (item.length > 0) { + this._prepare(item); + this.list().find('[data-jcarousel-clone]').remove(); + + // Force items reload + this._items = null; + + this.underflow = this._fullyvisible.length >= this.items().length; + this.circular = this.circular && !this.underflow; + + props[this.lt] = this._position(item) + 'px'; + } + + this.move(props); + + return this; + }, + list: function() { + if (this._list === null) { + var option = this.options('list'); + this._list = $.isFunction(option) ? option.call(this) : this._element.find(option); + } + + return this._list; + }, + items: function() { + if (this._items === null) { + var option = this.options('items'); + this._items = ($.isFunction(option) ? option.call(this) : this.list().find(option)).not('[data-jcarousel-clone]'); + } + + return this._items; + }, + index: function(item) { + return this.items().index(item); + }, + closest: function() { + var self = this, + pos = this.list().position()[this.lt], + closest = $(), // Ensure we're returning a jQuery instance + stop = false, + lrb = this.vertical ? 'bottom' : (this.rtl && !this.relative ? 'left' : 'right'), + width; + + if (this.rtl && this.relative && !this.vertical) { + pos += this.list().width() - this.clipping(); + } + + this.items().each(function() { + closest = $(this); + + if (stop) { + return false; + } + + var dim = self.dimension(closest); + + pos += dim; + + if (pos >= 0) { + width = dim - toFloat(closest.css('margin-' + lrb)); + + if ((Math.abs(pos) - dim + (width / 2)) <= 0) { + stop = true; + } else { + return false; + } + } + }); + + + return closest; + }, + target: function() { + return this._target; + }, + first: function() { + return this._first; + }, + last: function() { + return this._last; + }, + visible: function() { + return this._visible; + }, + fullyvisible: function() { + return this._fullyvisible; + }, + hasNext: function() { + if (false === this._trigger('hasnext')) { + return true; + } + + var wrap = this.options('wrap'), + end = this.items().length - 1; + + return end >= 0 && + ((wrap && wrap !== 'first') || + (this.index(this._last) < end) || + (this.tail && !this.inTail)) ? true : false; + }, + hasPrev: function() { + if (false === this._trigger('hasprev')) { + return true; + } + + var wrap = this.options('wrap'); + + return this.items().length > 0 && + ((wrap && wrap !== 'last') || + (this.index(this._first) > 0) || + (this.tail && this.inTail)) ? true : false; + }, + clipping: function() { + return this._element['inner' + (this.vertical ? 'Height' : 'Width')](); + }, + dimension: function(element) { + return element['outer' + (this.vertical ? 'Height' : 'Width')](true); + }, + scroll: function(target, animate, callback) { + if (this.animating) { + return this; + } + + if (false === this._trigger('scroll', null, [target, animate])) { + return this; + } + + if ($.isFunction(animate)) { + callback = animate; + animate = true; + } + + var parsed = $.jCarousel.parseTarget(target); + + if (parsed.relative) { + var end = this.items().length - 1, + scroll = Math.abs(parsed.target), + wrap = this.options('wrap'), + current, + first, + index, + start, + curr, + isVisible, + props, + i; + + if (parsed.target > 0) { + var last = this.index(this._last); + + if (last >= end && this.tail) { + if (!this.inTail) { + this._scrollTail(animate, callback); + } else { + if (wrap === 'both' || wrap === 'last') { + this._scroll(0, animate, callback); + } else { + if ($.isFunction(callback)) { + callback.call(this, false); + } + } + } + } else { + current = this.index(this._target); + + if ((this.underflow && current === end && (wrap === 'circular' || wrap === 'both' || wrap === 'last')) || + (!this.underflow && last === end && (wrap === 'both' || wrap === 'last'))) { + this._scroll(0, animate, callback); + } else { + index = current + scroll; + + if (this.circular && index > end) { + i = end; + curr = this.items().get(-1); + + while (i++ < index) { + curr = this.items().eq(0); + isVisible = this._visible.index(curr) >= 0; + + if (isVisible) { + curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); + } + + this.list().append(curr); + + if (!isVisible) { + props = {}; + props[this.lt] = this.dimension(curr); + this.moveBy(props); + } + + // Force items reload + this._items = null; + } + + this._scroll(curr, animate, callback); + } else { + this._scroll(Math.min(index, end), animate, callback); + } + } + } + } else { + if (this.inTail) { + this._scroll(Math.max((this.index(this._first) - scroll) + 1, 0), animate, callback); + } else { + first = this.index(this._first); + current = this.index(this._target); + start = this.underflow ? current : first; + index = start - scroll; + + if (start <= 0 && ((this.underflow && wrap === 'circular') || wrap === 'both' || wrap === 'first')) { + this._scroll(end, animate, callback); + } else { + if (this.circular && index < 0) { + i = index; + curr = this.items().get(0); + + while (i++ < 0) { + curr = this.items().eq(-1); + isVisible = this._visible.index(curr) >= 0; + + if (isVisible) { + curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); + } + + this.list().prepend(curr); + + // Force items reload + this._items = null; + + var dim = this.dimension(curr); + + props = {}; + props[this.lt] = -dim; + this.moveBy(props); + + } + + this._scroll(curr, animate, callback); + } else { + this._scroll(Math.max(index, 0), animate, callback); + } + } + } + } + } else { + this._scroll(parsed.target, animate, callback); + } + + this._trigger('scrollend'); + + return this; + }, + moveBy: function(properties, opts) { + var position = this.list().position(), + multiplier = 1, + correction = 0; + + if (this.rtl && !this.vertical) { + multiplier = -1; + + if (this.relative) { + correction = this.list().width() - this.clipping(); + } + } + + if (properties.left) { + properties.left = (position.left + correction + toFloat(properties.left) * multiplier) + 'px'; + } + + if (properties.top) { + properties.top = (position.top + correction + toFloat(properties.top) * multiplier) + 'px'; + } + + return this.move(properties, opts); + }, + move: function(properties, opts) { + opts = opts || {}; + + var option = this.options('transitions'), + transitions = !!option, + transforms = !!option.transforms, + transforms3d = !!option.transforms3d, + duration = opts.duration || 0, + list = this.list(); + + if (!transitions && duration > 0) { + list.animate(properties, opts); + return; + } + + var complete = opts.complete || $.noop, + css = {}; + + if (transitions) { + var backup = list.css(['transitionDuration', 'transitionTimingFunction', 'transitionProperty']), + oldComplete = complete; + + complete = function() { + $(this).css(backup); + oldComplete.call(this); + }; + css = { + transitionDuration: (duration > 0 ? duration / 1000 : 0) + 's', + transitionTimingFunction: option.easing || opts.easing, + transitionProperty: duration > 0 ? (function() { + if (transforms || transforms3d) { + // We have to use 'all' because jQuery doesn't prefix + // css values, like transition-property: transform; + return 'all'; + } + + return properties.left ? 'left' : 'top'; + })() : 'none', + transform: 'none' + }; + } + + if (transforms3d) { + css.transform = 'translate3d(' + (properties.left || 0) + ',' + (properties.top || 0) + ',0)'; + } else if (transforms) { + css.transform = 'translate(' + (properties.left || 0) + ',' + (properties.top || 0) + ')'; + } else { + $.extend(css, properties); + } + + if (transitions && duration > 0) { + list.one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd', complete); + } + + list.css(css); + + if (duration <= 0) { + list.each(function() { + complete.call(this); + }); + } + }, + _scroll: function(item, animate, callback) { + if (this.animating) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + if (typeof item !== 'object') { + item = this.items().eq(item); + } else if (typeof item.jquery === 'undefined') { + item = $(item); + } + + if (item.length === 0) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + this.inTail = false; + + this._prepare(item); + + var pos = this._position(item), + currPos = this.list().position()[this.lt]; + + if (pos === currPos) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + var properties = {}; + properties[this.lt] = pos + 'px'; + + this._animate(properties, animate, callback); + + return this; + }, + _scrollTail: function(animate, callback) { + if (this.animating || !this.tail) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + var pos = this.list().position()[this.lt]; + + if (this.rtl && this.relative && !this.vertical) { + pos += this.list().width() - this.clipping(); + } + + if (this.rtl && !this.vertical) { + pos += this.tail; + } else { + pos -= this.tail; + } + + this.inTail = true; + + var properties = {}; + properties[this.lt] = pos + 'px'; + + this._update({ + target: this._target.next(), + fullyvisible: this._fullyvisible.slice(1).add(this._visible.last()) + }); + + this._animate(properties, animate, callback); + + return this; + }, + _animate: function(properties, animate, callback) { + callback = callback || $.noop; + + if (false === this._trigger('animate')) { + callback.call(this, false); + return this; + } + + this.animating = true; + + var animation = this.options('animation'), + complete = $.proxy(function() { + this.animating = false; + + var c = this.list().find('[data-jcarousel-clone]'); + + if (c.length > 0) { + c.remove(); + this._reload(); + } + + this._trigger('animateend'); + + callback.call(this, true); + }, this); + + var opts = typeof animation === 'object' ? + $.extend({}, animation) : + {duration: animation}, + oldComplete = opts.complete || $.noop; + + if (animate === false) { + opts.duration = 0; + } else if (typeof $.fx.speeds[opts.duration] !== 'undefined') { + opts.duration = $.fx.speeds[opts.duration]; + } + + opts.complete = function() { + complete(); + oldComplete.call(this); + }; + + this.move(properties, opts); + + return this; + }, + _prepare: function(item) { + var index = this.index(item), + idx = index, + wh = this.dimension(item), + clip = this.clipping(), + lrb = this.vertical ? 'bottom' : (this.rtl ? 'left' : 'right'), + center = this.options('center'), + update = { + target: item, + first: item, + last: item, + visible: item, + fullyvisible: wh <= clip ? item : $() + }, + curr, + isVisible, + margin, + dim; + + if (center) { + wh /= 2; + clip /= 2; + } + + if (wh < clip) { + while (true) { + curr = this.items().eq(++idx); + + if (curr.length === 0) { + if (!this.circular) { + break; + } + + curr = this.items().eq(0); + + if (item.get(0) === curr.get(0)) { + break; + } + + isVisible = this._visible.index(curr) >= 0; + + if (isVisible) { + curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); + } + + this.list().append(curr); + + if (!isVisible) { + var props = {}; + props[this.lt] = this.dimension(curr); + this.moveBy(props); + } + + // Force items reload + this._items = null; + } + + dim = this.dimension(curr); + + if (dim === 0) { + break; + } + + wh += dim; + + update.last = curr; + update.visible = update.visible.add(curr); + + // Remove right/bottom margin from total width + margin = toFloat(curr.css('margin-' + lrb)); + + if ((wh - margin) <= clip) { + update.fullyvisible = update.fullyvisible.add(curr); + } + + if (wh >= clip) { + break; + } + } + } + + if (!this.circular && !center && wh < clip) { + idx = index; + + while (true) { + if (--idx < 0) { + break; + } + + curr = this.items().eq(idx); + + if (curr.length === 0) { + break; + } + + dim = this.dimension(curr); + + if (dim === 0) { + break; + } + + wh += dim; + + update.first = curr; + update.visible = update.visible.add(curr); + + // Remove right/bottom margin from total width + margin = toFloat(curr.css('margin-' + lrb)); + + if ((wh - margin) <= clip) { + update.fullyvisible = update.fullyvisible.add(curr); + } + + if (wh >= clip) { + break; + } + } + } + + this._update(update); + + this.tail = 0; + + if (!center && + this.options('wrap') !== 'circular' && + this.options('wrap') !== 'custom' && + this.index(update.last) === (this.items().length - 1)) { + + // Remove right/bottom margin from total width + wh -= toFloat(update.last.css('margin-' + lrb)); + + if (wh > clip) { + this.tail = wh - clip; + } + } + + return this; + }, + _position: function(item) { + var first = this._first, + pos = first.position()[this.lt], + center = this.options('center'), + centerOffset = center ? (this.clipping() / 2) - (this.dimension(first) / 2) : 0; + + if (this.rtl && !this.vertical) { + if (this.relative) { + pos -= this.list().width() - this.dimension(first); + } else { + pos -= this.clipping() - this.dimension(first); + } + + pos += centerOffset; + } else { + pos -= centerOffset; + } + + if (!center && + (this.index(item) > this.index(first) || this.inTail) && + this.tail) { + pos = this.rtl && !this.vertical ? pos - this.tail : pos + this.tail; + this.inTail = true; + } else { + this.inTail = false; + } + + return -pos; + }, + _update: function(update) { + var self = this, + current = { + target: this._target || $(), + first: this._first || $(), + last: this._last || $(), + visible: this._visible || $(), + fullyvisible: this._fullyvisible || $() + }, + back = this.index(update.first || current.first) < this.index(current.first), + key, + doUpdate = function(key) { + var elIn = [], + elOut = []; + + update[key].each(function() { + if (current[key].index(this) < 0) { + elIn.push(this); + } + }); + + current[key].each(function() { + if (update[key].index(this) < 0) { + elOut.push(this); + } + }); + + if (back) { + elIn = elIn.reverse(); + } else { + elOut = elOut.reverse(); + } + + self._trigger(key + 'in', $(elIn)); + self._trigger(key + 'out', $(elOut)); + + self['_' + key] = update[key]; + }; + + for (key in update) { + doUpdate(key); + } + + return this; + } + }); +}(jQuery, window)); + +(function($) { + 'use strict'; + + $.jcarousel.fn.scrollIntoView = function(target, animate, callback) { + var parsed = $.jCarousel.parseTarget(target), + first = this.index(this._fullyvisible.first()), + last = this.index(this._fullyvisible.last()), + index; + + if (parsed.relative) { + index = parsed.target < 0 ? Math.max(0, first + parsed.target) : last + parsed.target; + } else { + index = typeof parsed.target !== 'object' ? parsed.target : this.index(parsed.target); + } + + if (index < first) { + return this.scroll(index, animate, callback); + } + + if (index >= first && index <= last) { + if ($.isFunction(callback)) { + callback.call(this, false); + } + + return this; + } + + var items = this.items(), + clip = this.clipping(), + lrb = this.vertical ? 'bottom' : (this.rtl ? 'left' : 'right'), + wh = 0, + curr; + + while (true) { + curr = items.eq(index); + + if (curr.length === 0) { + break; + } + + wh += this.dimension(curr); + + if (wh >= clip) { + var margin = parseFloat(curr.css('margin-' + lrb)) || 0; + if ((wh - margin) !== clip) { + index++; + } + break; + } + + if (index <= 0) { + break; + } + + index--; + } + + return this.scroll(index, animate, callback); + }; +}(jQuery)); + +(function($) { + 'use strict'; + + $.jCarousel.plugin('jcarouselControl', { + _options: { + target: '+=1', + event: 'click', + method: 'scroll' + }, + _active: null, + _init: function() { + this.onDestroy = $.proxy(function() { + this._destroy(); + this.carousel() + .one('jcarousel:createend', $.proxy(this._create, this)); + }, this); + this.onReload = $.proxy(this._reload, this); + this.onEvent = $.proxy(function(e) { + e.preventDefault(); + + var method = this.options('method'); + + if ($.isFunction(method)) { + method.call(this); + } else { + this.carousel() + .jcarousel(this.options('method'), this.options('target')); + } + }, this); + }, + _create: function() { + this.carousel() + .one('jcarousel:destroy', this.onDestroy) + .on('jcarousel:reloadend jcarousel:scrollend', this.onReload); + + this._element + .on(this.options('event') + '.jcarouselcontrol', this.onEvent); + + this._reload(); + }, + _destroy: function() { + this._element + .off('.jcarouselcontrol', this.onEvent); + + this.carousel() + .off('jcarousel:destroy', this.onDestroy) + .off('jcarousel:reloadend jcarousel:scrollend', this.onReload); + }, + _reload: function() { + var parsed = $.jCarousel.parseTarget(this.options('target')), + carousel = this.carousel(), + active; + + if (parsed.relative) { + active = carousel + .jcarousel(parsed.target > 0 ? 'hasNext' : 'hasPrev'); + } else { + var target = typeof parsed.target !== 'object' ? + carousel.jcarousel('items').eq(parsed.target) : + parsed.target; + + active = carousel.jcarousel('target').index(target) >= 0; + } + + if (this._active !== active) { + this._trigger(active ? 'active' : 'inactive'); + this._active = active; + } + + return this; + } + }); +}(jQuery)); + +(function($) { + 'use strict'; + + $.jCarousel.plugin('jcarouselPagination', { + _options: { + perPage: null, + item: function(page) { + return '' + page + ''; + }, + event: 'click', + method: 'scroll' + }, + _pages: {}, + _items: {}, + _currentPage: null, + _init: function() { + this.onDestroy = $.proxy(function() { + this._destroy(); + this.carousel() + .one('jcarousel:createend', $.proxy(this._create, this)); + }, this); + this.onReload = $.proxy(this._reload, this); + this.onScroll = $.proxy(this._update, this); + }, + _create: function() { + this.carousel() + .one('jcarousel:destroy', this.onDestroy) + .on('jcarousel:reloadend', this.onReload) + .on('jcarousel:scrollend', this.onScroll); + + this._reload(); + }, + _destroy: function() { + this._clear(); + + this.carousel() + .off('jcarousel:destroy', this.onDestroy) + .off('jcarousel:reloadend', this.onReload) + .off('jcarousel:scrollend', this.onScroll); + }, + _reload: function() { + var perPage = this.options('perPage'); + + this._pages = {}; + this._items = {}; + + // Calculate pages + if ($.isFunction(perPage)) { + perPage = perPage.call(this); + } + + if (perPage == null) { + this._pages = this._calculatePages(); + } else { + var pp = parseInt(perPage, 10) || 0, + items = this.carousel().jcarousel('items'), + page = 1, + i = 0, + curr; + + while (true) { + curr = items.eq(i++); + + if (curr.length === 0) { + break; + } + + if (!this._pages[page]) { + this._pages[page] = curr; + } else { + this._pages[page] = this._pages[page].add(curr); + } + + if (i % pp === 0) { + page++; + } + } + } + + this._clear(); + + var self = this, + carousel = this.carousel().data('jcarousel'), + element = this._element, + item = this.options('item'); + + $.each(this._pages, function(page, carouselItems) { + var currItem = self._items[page] = $(item.call(self, page, carouselItems)); + + currItem.on(self.options('event') + '.jcarouselpagination', $.proxy(function() { + var target = carouselItems.eq(0); + + // If circular wrapping enabled, ensure correct scrolling direction + if (carousel.circular) { + var currentIndex = carousel.index(carousel.target()), + newIndex = carousel.index(target); + + if (parseFloat(page) > parseFloat(self._currentPage)) { + if (newIndex < currentIndex) { + target = '+=' + (carousel.items().length - currentIndex + newIndex); + } + } else { + if (newIndex > currentIndex) { + target = '-=' + (currentIndex + (carousel.items().length - newIndex)); + } + } + } + + carousel[this.options('method')](target); + }, self)); + + element.append(currItem); + }); + + this._update(); + }, + _update: function() { + var target = this.carousel().jcarousel('target'), + currentPage; + + $.each(this._pages, function(page, carouselItems) { + carouselItems.each(function() { + if (target.is(this)) { + currentPage = page; + return false; + } + }); + + if (currentPage) { + return false; + } + }); + + if (this._currentPage !== currentPage) { + this._trigger('inactive', this._items[this._currentPage]); + this._trigger('active', this._items[currentPage]); + } + + this._currentPage = currentPage; + }, + items: function() { + return this._items; + }, + _clear: function() { + this._element.empty(); + this._currentPage = null; + }, + _calculatePages: function() { + var carousel = this.carousel().data('jcarousel'), + items = carousel.items(), + clip = carousel.clipping(), + wh = 0, + idx = 0, + page = 1, + pages = {}, + curr; + + while (true) { + curr = items.eq(idx++); + + if (curr.length === 0) { + break; + } + + if (!pages[page]) { + pages[page] = curr; + } else { + pages[page] = pages[page].add(curr); + } + + wh += carousel.dimension(curr); + + if (wh >= clip) { + page++; + wh = 0; + } + } + + return pages; + } + }); +}(jQuery)); + +(function($) { + 'use strict'; + + $.jCarousel.plugin('jcarouselAutoscroll', { + _options: { + target: '+=1', + interval: 3000, + autostart: true + }, + _timer: null, + _init: function () { + this.onDestroy = $.proxy(function() { + this._destroy(); + this.carousel() + .one('jcarousel:createend', $.proxy(this._create, this)); + }, this); + + this.onAnimateEnd = $.proxy(this.start, this); + }, + _create: function() { + this.carousel() + .one('jcarousel:destroy', this.onDestroy); + + if (this.options('autostart')) { + this.start(); + } + }, + _destroy: function() { + this.stop(); + this.carousel() + .off('jcarousel:destroy', this.onDestroy); + }, + start: function() { + this.stop(); + + this.carousel() + .one('jcarousel:animateend', this.onAnimateEnd); + + this._timer = setTimeout($.proxy(function() { + this.carousel().jcarousel('scroll', this.options('target')); + }, this), this.options('interval')); + + return this; + }, + stop: function() { + if (this._timer) { + this._timer = clearTimeout(this._timer); + } + + this.carousel() + .off('jcarousel:animateend', this.onAnimateEnd); + + return this; + } + }); +}(jQuery)); diff --git a/ajax/libs/jcarousel/0.3.0/jquery.jcarousel.min.js b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel.min.js new file mode 100644 index 000000000..515f9a326 --- /dev/null +++ b/ajax/libs/jcarousel/0.3.0/jquery.jcarousel.min.js @@ -0,0 +1,4 @@ +/*! jCarousel - v0.3.0 - 2013-11-22 +* http://sorgalla.com/jcarousel +* Copyright (c) 2013 Jan Sorgalla; Licensed MIT */ +(function(t){"use strict";var i=t.jCarousel={};i.version="0.3.0";var s=/^([+\-]=)?(.+)$/;i.parseTarget=function(t){var i=!1,e="object"!=typeof t?s.exec(t):null;return e?(t=parseInt(e[2],10)||0,e[1]&&(i=!0,"-="===e[1]&&(t*=-1))):"object"!=typeof t&&(t=parseInt(t,10)||0),{target:t,relative:i}},i.detectCarousel=function(t){for(var i;t.length>0;){if(i=t.filter("[data-jcarousel]"),i.length>0)return i;if(i=t.find("[data-jcarousel]"),i.length>0)return i;t=t.parent()}return null},i.base=function(s){return{version:i.version,_options:{},_element:null,_carousel:null,_init:t.noop,_create:t.noop,_destroy:t.noop,_reload:t.noop,create:function(){return this._element.attr("data-"+s.toLowerCase(),!0).data(s,this),!1===this._trigger("create")?this:(this._create(),this._trigger("createend"),this)},destroy:function(){return!1===this._trigger("destroy")?this:(this._destroy(),this._trigger("destroyend"),this._element.removeData(s).removeAttr("data-"+s.toLowerCase()),this)},reload:function(t){return!1===this._trigger("reload")?this:(t&&this.options(t),this._reload(),this._trigger("reloadend"),this)},element:function(){return this._element},options:function(i,s){if(0===arguments.length)return t.extend({},this._options);if("string"==typeof i){if(s===void 0)return this._options[i]===void 0?null:this._options[i];this._options[i]=s}else this._options=t.extend({},this._options,i);return this},carousel:function(){return this._carousel||(this._carousel=i.detectCarousel(this.options("carousel")||this._element),this._carousel||t.error('Could not detect carousel for plugin "'+s+'"')),this._carousel},_trigger:function(i,e,r){var n,o=!1;return r=[this].concat(r||[]),(e||this._element).each(function(){n=t.Event((s+":"+i).toLowerCase()),t(this).trigger(n,r),n.isDefaultPrevented()&&(o=!0)}),!o}}},i.plugin=function(s,e){var r=t[s]=function(i,s){this._element=t(i),this.options(s),this._init(),this.create()};return r.fn=r.prototype=t.extend({},i.base(s),e),t.fn[s]=function(i){var e=Array.prototype.slice.call(arguments,1),n=this;return"string"==typeof i?this.each(function(){var r=t(this).data(s);if(!r)return t.error("Cannot call methods on "+s+" prior to initialization; "+'attempted to call method "'+i+'"');if(!t.isFunction(r[i])||"_"===i.charAt(0))return t.error('No such method "'+i+'" for '+s+" instance");var o=r[i].apply(r,e);return o!==r&&o!==void 0?(n=o,!1):void 0}):this.each(function(){var e=t(this).data(s);e instanceof r?e.reload(i):new r(this,i)}),n},r}})(jQuery),function(t,i){"use strict";var s=function(t){return parseFloat(t)||0};t.jCarousel.plugin("jcarousel",{animating:!1,tail:0,inTail:!1,resizeTimer:null,lt:null,vertical:!1,rtl:!1,circular:!1,underflow:!1,relative:!1,_options:{list:function(){return this.element().children().eq(0)},items:function(){return this.list().children()},animation:400,transitions:!1,wrap:null,vertical:null,rtl:null,center:!1},_list:null,_items:null,_target:null,_first:null,_last:null,_visible:null,_fullyvisible:null,_init:function(){var t=this;return this.onWindowResize=function(){t.resizeTimer&&clearTimeout(t.resizeTimer),t.resizeTimer=setTimeout(function(){t.reload()},100)},this},_create:function(){this._reload(),t(i).on("resize.jcarousel",this.onWindowResize)},_destroy:function(){t(i).off("resize.jcarousel",this.onWindowResize)},_reload:function(){this.vertical=this.options("vertical"),null==this.vertical&&(this.vertical=this.list().height()>this.list().width()),this.rtl=this.options("rtl"),null==this.rtl&&(this.rtl=function(i){if("rtl"===(""+i.attr("dir")).toLowerCase())return!0;var s=!1;return i.parents("[dir]").each(function(){return/rtl/i.test(t(this).attr("dir"))?(s=!0,!1):void 0}),s}(this._element)),this.lt=this.vertical?"top":"left",this.relative="relative"===this.list().css("position"),this._list=null,this._items=null;var i=this._target&&this.index(this._target)>=0?this._target:this.closest();this.circular="circular"===this.options("wrap"),this.underflow=!1;var s={left:0,top:0};return i.length>0&&(this._prepare(i),this.list().find("[data-jcarousel-clone]").remove(),this._items=null,this.underflow=this._fullyvisible.length>=this.items().length,this.circular=this.circular&&!this.underflow,s[this.lt]=this._position(i)+"px"),this.move(s),this},list:function(){if(null===this._list){var i=this.options("list");this._list=t.isFunction(i)?i.call(this):this._element.find(i)}return this._list},items:function(){if(null===this._items){var i=this.options("items");this._items=(t.isFunction(i)?i.call(this):this.list().find(i)).not("[data-jcarousel-clone]")}return this._items},index:function(t){return this.items().index(t)},closest:function(){var i,e=this,r=this.list().position()[this.lt],n=t(),o=!1,l=this.vertical?"bottom":this.rtl&&!this.relative?"left":"right";return this.rtl&&this.relative&&!this.vertical&&(r+=this.list().width()-this.clipping()),this.items().each(function(){if(n=t(this),o)return!1;var a=e.dimension(n);if(r+=a,r>=0){if(i=a-s(n.css("margin-"+l)),!(0>=Math.abs(r)-a+i/2))return!1;o=!0}}),n},target:function(){return this._target},first:function(){return this._first},last:function(){return this._last},visible:function(){return this._visible},fullyvisible:function(){return this._fullyvisible},hasNext:function(){if(!1===this._trigger("hasnext"))return!0;var t=this.options("wrap"),i=this.items().length-1;return i>=0&&(t&&"first"!==t||i>this.index(this._last)||this.tail&&!this.inTail)?!0:!1},hasPrev:function(){if(!1===this._trigger("hasprev"))return!0;var t=this.options("wrap");return this.items().length>0&&(t&&"last"!==t||this.index(this._first)>0||this.tail&&this.inTail)?!0:!1},clipping:function(){return this._element["inner"+(this.vertical?"Height":"Width")]()},dimension:function(t){return t["outer"+(this.vertical?"Height":"Width")](!0)},scroll:function(i,s,e){if(this.animating)return this;if(!1===this._trigger("scroll",null,[i,s]))return this;t.isFunction(s)&&(e=s,s=!0);var r=t.jCarousel.parseTarget(i);if(r.relative){var n,o,l,a,h,u,c,f,d=this.items().length-1,_=Math.abs(r.target),p=this.options("wrap");if(r.target>0){var v=this.index(this._last);if(v>=d&&this.tail)this.inTail?"both"===p||"last"===p?this._scroll(0,s,e):t.isFunction(e)&&e.call(this,!1):this._scrollTail(s,e);else if(n=this.index(this._target),this.underflow&&n===d&&("circular"===p||"both"===p||"last"===p)||!this.underflow&&v===d&&("both"===p||"last"===p))this._scroll(0,s,e);else if(l=n+_,this.circular&&l>d){for(f=d,h=this.items().get(-1);l>f++;)h=this.items().eq(0),u=this._visible.index(h)>=0,u&&h.after(h.clone(!0).attr("data-jcarousel-clone",!0)),this.list().append(h),u||(c={},c[this.lt]=this.dimension(h),this.moveBy(c)),this._items=null;this._scroll(h,s,e)}else this._scroll(Math.min(l,d),s,e)}else if(this.inTail)this._scroll(Math.max(this.index(this._first)-_+1,0),s,e);else if(o=this.index(this._first),n=this.index(this._target),a=this.underflow?n:o,l=a-_,0>=a&&(this.underflow&&"circular"===p||"both"===p||"first"===p))this._scroll(d,s,e);else if(this.circular&&0>l){for(f=l,h=this.items().get(0);0>f++;){h=this.items().eq(-1),u=this._visible.index(h)>=0,u&&h.after(h.clone(!0).attr("data-jcarousel-clone",!0)),this.list().prepend(h),this._items=null;var g=this.dimension(h);c={},c[this.lt]=-g,this.moveBy(c)}this._scroll(h,s,e)}else this._scroll(Math.max(l,0),s,e)}else this._scroll(r.target,s,e);return this._trigger("scrollend"),this},moveBy:function(t,i){var e=this.list().position(),r=1,n=0;return this.rtl&&!this.vertical&&(r=-1,this.relative&&(n=this.list().width()-this.clipping())),t.left&&(t.left=e.left+n+s(t.left)*r+"px"),t.top&&(t.top=e.top+n+s(t.top)*r+"px"),this.move(t,i)},move:function(i,s){s=s||{};var e=this.options("transitions"),r=!!e,n=!!e.transforms,o=!!e.transforms3d,l=s.duration||0,a=this.list();if(!r&&l>0)return a.animate(i,s),void 0;var h=s.complete||t.noop,u={};if(r){var c=a.css(["transitionDuration","transitionTimingFunction","transitionProperty"]),f=h;h=function(){t(this).css(c),f.call(this)},u={transitionDuration:(l>0?l/1e3:0)+"s",transitionTimingFunction:e.easing||s.easing,transitionProperty:l>0?function(){return n||o?"all":i.left?"left":"top"}():"none",transform:"none"}}o?u.transform="translate3d("+(i.left||0)+","+(i.top||0)+",0)":n?u.transform="translate("+(i.left||0)+","+(i.top||0)+")":t.extend(u,i),r&&l>0&&a.one("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",h),a.css(u),0>=l&&a.each(function(){h.call(this)})},_scroll:function(i,s,e){if(this.animating)return t.isFunction(e)&&e.call(this,!1),this;if("object"!=typeof i?i=this.items().eq(i):i.jquery===void 0&&(i=t(i)),0===i.length)return t.isFunction(e)&&e.call(this,!1),this;this.inTail=!1,this._prepare(i);var r=this._position(i),n=this.list().position()[this.lt];if(r===n)return t.isFunction(e)&&e.call(this,!1),this;var o={};return o[this.lt]=r+"px",this._animate(o,s,e),this},_scrollTail:function(i,s){if(this.animating||!this.tail)return t.isFunction(s)&&s.call(this,!1),this;var e=this.list().position()[this.lt];this.rtl&&this.relative&&!this.vertical&&(e+=this.list().width()-this.clipping()),this.rtl&&!this.vertical?e+=this.tail:e-=this.tail,this.inTail=!0;var r={};return r[this.lt]=e+"px",this._update({target:this._target.next(),fullyvisible:this._fullyvisible.slice(1).add(this._visible.last())}),this._animate(r,i,s),this},_animate:function(i,s,e){if(e=e||t.noop,!1===this._trigger("animate"))return e.call(this,!1),this;this.animating=!0;var r=this.options("animation"),n=t.proxy(function(){this.animating=!1;var t=this.list().find("[data-jcarousel-clone]");t.length>0&&(t.remove(),this._reload()),this._trigger("animateend"),e.call(this,!0)},this),o="object"==typeof r?t.extend({},r):{duration:r},l=o.complete||t.noop;return s===!1?o.duration=0:t.fx.speeds[o.duration]!==void 0&&(o.duration=t.fx.speeds[o.duration]),o.complete=function(){n(),l.call(this)},this.move(i,o),this},_prepare:function(i){var e,r,n,o,l=this.index(i),a=l,h=this.dimension(i),u=this.clipping(),c=this.vertical?"bottom":this.rtl?"left":"right",f=this.options("center"),d={target:i,first:i,last:i,visible:i,fullyvisible:u>=h?i:t()};if(f&&(h/=2,u/=2),u>h)for(;;){if(e=this.items().eq(++a),0===e.length){if(!this.circular)break;if(e=this.items().eq(0),i.get(0)===e.get(0))break;if(r=this._visible.index(e)>=0,r&&e.after(e.clone(!0).attr("data-jcarousel-clone",!0)),this.list().append(e),!r){var _={};_[this.lt]=this.dimension(e),this.moveBy(_)}this._items=null}if(o=this.dimension(e),0===o)break;if(h+=o,d.last=e,d.visible=d.visible.add(e),n=s(e.css("margin-"+c)),u>=h-n&&(d.fullyvisible=d.fullyvisible.add(e)),h>=u)break}if(!this.circular&&!f&&u>h)for(a=l;;){if(0>--a)break;if(e=this.items().eq(a),0===e.length)break;if(o=this.dimension(e),0===o)break;if(h+=o,d.first=e,d.visible=d.visible.add(e),n=s(e.css("margin-"+c)),u>=h-n&&(d.fullyvisible=d.fullyvisible.add(e)),h>=u)break}return this._update(d),this.tail=0,f||"circular"===this.options("wrap")||"custom"===this.options("wrap")||this.index(d.last)!==this.items().length-1||(h-=s(d.last.css("margin-"+c)),h>u&&(this.tail=h-u)),this},_position:function(t){var i=this._first,s=i.position()[this.lt],e=this.options("center"),r=e?this.clipping()/2-this.dimension(i)/2:0;return this.rtl&&!this.vertical?(s-=this.relative?this.list().width()-this.dimension(i):this.clipping()-this.dimension(i),s+=r):s-=r,!e&&(this.index(t)>this.index(i)||this.inTail)&&this.tail?(s=this.rtl&&!this.vertical?s-this.tail:s+this.tail,this.inTail=!0):this.inTail=!1,-s},_update:function(i){var s,e=this,r={target:this._target||t(),first:this._first||t(),last:this._last||t(),visible:this._visible||t(),fullyvisible:this._fullyvisible||t()},n=this.index(i.first||r.first)r[s].index(this)&&o.push(this)}),r[s].each(function(){0>i[s].index(this)&&l.push(this)}),n?o=o.reverse():l=l.reverse(),e._trigger(s+"in",t(o)),e._trigger(s+"out",t(l)),e["_"+s]=i[s]};for(s in i)o(s);return this}})}(jQuery,window),function(t){"use strict";t.jcarousel.fn.scrollIntoView=function(i,s,e){var r,n=t.jCarousel.parseTarget(i),o=this.index(this._fullyvisible.first()),l=this.index(this._fullyvisible.last());if(r=n.relative?0>n.target?Math.max(0,o+n.target):l+n.target:"object"!=typeof n.target?n.target:this.index(n.target),o>r)return this.scroll(r,s,e);if(r>=o&&l>=r)return t.isFunction(e)&&e.call(this,!1),this;for(var a,h=this.items(),u=this.clipping(),c=this.vertical?"bottom":this.rtl?"left":"right",f=0;;){if(a=h.eq(r),0===a.length)break;if(f+=this.dimension(a),f>=u){var d=parseFloat(a.css("margin-"+c))||0;f-d!==u&&r++;break}if(0>=r)break;r--}return this.scroll(r,s,e)}}(jQuery),function(t){"use strict";t.jCarousel.plugin("jcarouselControl",{_options:{target:"+=1",event:"click",method:"scroll"},_active:null,_init:function(){this.onDestroy=t.proxy(function(){this._destroy(),this.carousel().one("jcarousel:createend",t.proxy(this._create,this))},this),this.onReload=t.proxy(this._reload,this),this.onEvent=t.proxy(function(i){i.preventDefault();var s=this.options("method");t.isFunction(s)?s.call(this):this.carousel().jcarousel(this.options("method"),this.options("target"))},this)},_create:function(){this.carousel().one("jcarousel:destroy",this.onDestroy).on("jcarousel:reloadend jcarousel:scrollend",this.onReload),this._element.on(this.options("event")+".jcarouselcontrol",this.onEvent),this._reload()},_destroy:function(){this._element.off(".jcarouselcontrol",this.onEvent),this.carousel().off("jcarousel:destroy",this.onDestroy).off("jcarousel:reloadend jcarousel:scrollend",this.onReload)},_reload:function(){var i,s=t.jCarousel.parseTarget(this.options("target")),e=this.carousel();if(s.relative)i=e.jcarousel(s.target>0?"hasNext":"hasPrev");else{var r="object"!=typeof s.target?e.jcarousel("items").eq(s.target):s.target;i=e.jcarousel("target").index(r)>=0}return this._active!==i&&(this._trigger(i?"active":"inactive"),this._active=i),this}})}(jQuery),function(t){"use strict";t.jCarousel.plugin("jcarouselPagination",{_options:{perPage:null,item:function(t){return''+t+""},event:"click",method:"scroll"},_pages:{},_items:{},_currentPage:null,_init:function(){this.onDestroy=t.proxy(function(){this._destroy(),this.carousel().one("jcarousel:createend",t.proxy(this._create,this))},this),this.onReload=t.proxy(this._reload,this),this.onScroll=t.proxy(this._update,this)},_create:function(){this.carousel().one("jcarousel:destroy",this.onDestroy).on("jcarousel:reloadend",this.onReload).on("jcarousel:scrollend",this.onScroll),this._reload()},_destroy:function(){this._clear(),this.carousel().off("jcarousel:destroy",this.onDestroy).off("jcarousel:reloadend",this.onReload).off("jcarousel:scrollend",this.onScroll)},_reload:function(){var i=this.options("perPage");if(this._pages={},this._items={},t.isFunction(i)&&(i=i.call(this)),null==i)this._pages=this._calculatePages();else for(var s,e=parseInt(i,10)||0,r=this.carousel().jcarousel("items"),n=1,o=0;;){if(s=r.eq(o++),0===s.length)break;this._pages[n]=this._pages[n]?this._pages[n].add(s):s,0===o%e&&n++}this._clear();var l=this,a=this.carousel().data("jcarousel"),h=this._element,u=this.options("item");t.each(this._pages,function(i,s){var e=l._items[i]=t(u.call(l,i,s));e.on(l.options("event")+".jcarouselpagination",t.proxy(function(){var t=s.eq(0);if(a.circular){var e=a.index(a.target()),r=a.index(t);parseFloat(i)>parseFloat(l._currentPage)?e>r&&(t="+="+(a.items().length-e+r)):r>e&&(t="-="+(e+(a.items().length-r)))}a[this.options("method")](t)},l)),h.append(e)}),this._update()},_update:function(){var i,s=this.carousel().jcarousel("target");t.each(this._pages,function(t,e){return e.each(function(){return s.is(this)?(i=t,!1):void 0}),i?!1:void 0}),this._currentPage!==i&&(this._trigger("inactive",this._items[this._currentPage]),this._trigger("active",this._items[i])),this._currentPage=i},items:function(){return this._items},_clear:function(){this._element.empty(),this._currentPage=null},_calculatePages:function(){for(var t,i=this.carousel().data("jcarousel"),s=i.items(),e=i.clipping(),r=0,n=0,o=1,l={};;){if(t=s.eq(n++),0===t.length)break;l[o]=l[o]?l[o].add(t):t,r+=i.dimension(t),r>=e&&(o++,r=0)}return l}})}(jQuery),function(t){"use strict";t.jCarousel.plugin("jcarouselAutoscroll",{_options:{target:"+=1",interval:3e3,autostart:!0},_timer:null,_init:function(){this.onDestroy=t.proxy(function(){this._destroy(),this.carousel().one("jcarousel:createend",t.proxy(this._create,this))},this),this.onAnimateEnd=t.proxy(this.start,this)},_create:function(){this.carousel().one("jcarousel:destroy",this.onDestroy),this.options("autostart")&&this.start()},_destroy:function(){this.stop(),this.carousel().off("jcarousel:destroy",this.onDestroy)},start:function(){return this.stop(),this.carousel().one("jcarousel:animateend",this.onAnimateEnd),this._timer=setTimeout(t.proxy(function(){this.carousel().jcarousel("scroll",this.options("target"))},this),this.options("interval")),this},stop:function(){return this._timer&&(this._timer=clearTimeout(this._timer)),this.carousel().off("jcarousel:animateend",this.onAnimateEnd),this}})}(jQuery); \ No newline at end of file diff --git a/ajax/libs/jcarousel/package.json b/ajax/libs/jcarousel/package.json new file mode 100644 index 000000000..90c81c862 --- /dev/null +++ b/ajax/libs/jcarousel/package.json @@ -0,0 +1,30 @@ +{ + "name": "jcarousel", + "filename": "jquery.jcarousel.min.js", + "version": "0.3.0", + "description": "jCarousel is a jQuery plugin for controlling a list of items in horizontal or vertical order. It provides a full-featured and flexible toolset for navigating any HTML based content in a carousel-like fashion.", + "homepage": "http://sorgalla.com/jcarousel/", + "keywords": [ + "carousel", + "slideshow", + "animation" + ], + "maintainers": [ + { + "name": "Jan Sorgalla", + "web": "http://sorgalla.com" + } + ], + "repositories": [ + { + "type": "git", + "url": "https://github.com/jsor/jcarousel.git" + } + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/jsor/jcarousel/master/LICENSE" + } + ] +}