Template:FAFU CHINA/js/jquery.jcarousel.min
(function(t) {
"use strict"; var i = t.jCarousel = {}; i.version = "0.3.1"; 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 && !this.underflow && (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 && !this.underflow && (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 g = this.index(this._last); if (g >= 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 && g === 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 v = this.dimension(h); c = {}, c[this.lt] = -v, 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) < this.index(r.first), o = function(s) { var o = [], l = []; i[s].each(function() { 0 > 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 '<a href="#' + t + '">' + t + "</a>" }, event: "click", method: "scroll" }, _carouselItems: null, _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), this._carouselItems = null }, _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._getCarouselItems(), 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"), c = this._getCarouselItems().length; 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 = "+=" + (c - e + r)) : r > e && (t = "-=" + (e + (c - 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 }, reloadCarouselItems: function() { return this._carouselItems = null, this }, _clear: function() { this._element.empty(), this._currentPage = null }, _calculatePages: function() { for (var t, i = this.carousel().data("jcarousel"), s = this._getCarouselItems(), 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 }, _getCarouselItems: function() { return this._carouselItems || (this._carouselItems = this.carousel().jcarousel("items")), this._carouselItems } })
} (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);