Index: experimental/webtry/res/webtry/js/bootstrap/carousel.js |
diff --git a/experimental/webtry/res/webtry/js/bootstrap/carousel.js b/experimental/webtry/res/webtry/js/bootstrap/carousel.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b7da1ba53e213b03c491a4b36bb58f8f2a2ae220 |
--- /dev/null |
+++ b/experimental/webtry/res/webtry/js/bootstrap/carousel.js |
@@ -0,0 +1,223 @@ |
+/* ======================================================================== |
+ * Bootstrap: carousel.js v3.2.0 |
+ * http://getbootstrap.com/javascript/#carousel |
+ * ======================================================================== |
+ * Copyright 2011-2014 Twitter, Inc. |
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
+ * ======================================================================== */ |
+ |
+ |
++function ($) { |
+ 'use strict'; |
+ |
+ // CAROUSEL CLASS DEFINITION |
+ // ========================= |
+ |
+ var Carousel = function (element, options) { |
+ this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this)) |
+ this.$indicators = this.$element.find('.carousel-indicators') |
+ this.options = options |
+ this.paused = |
+ this.sliding = |
+ this.interval = |
+ this.$active = |
+ this.$items = null |
+ |
+ this.options.pause == 'hover' && this.$element |
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) |
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) |
+ } |
+ |
+ Carousel.VERSION = '3.2.0' |
+ |
+ Carousel.DEFAULTS = { |
+ interval: 5000, |
+ pause: 'hover', |
+ wrap: true |
+ } |
+ |
+ Carousel.prototype.keydown = function (e) { |
+ switch (e.which) { |
+ case 37: this.prev(); break |
+ case 39: this.next(); break |
+ default: return |
+ } |
+ |
+ e.preventDefault() |
+ } |
+ |
+ Carousel.prototype.cycle = function (e) { |
+ e || (this.paused = false) |
+ |
+ this.interval && clearInterval(this.interval) |
+ |
+ this.options.interval |
+ && !this.paused |
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) |
+ |
+ return this |
+ } |
+ |
+ Carousel.prototype.getItemIndex = function (item) { |
+ this.$items = item.parent().children('.item') |
+ return this.$items.index(item || this.$active) |
+ } |
+ |
+ Carousel.prototype.to = function (pos) { |
+ var that = this |
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) |
+ |
+ if (pos > (this.$items.length - 1) || pos < 0) return |
+ |
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" |
+ if (activeIndex == pos) return this.pause().cycle() |
+ |
+ return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) |
+ } |
+ |
+ Carousel.prototype.pause = function (e) { |
+ e || (this.paused = true) |
+ |
+ if (this.$element.find('.next, .prev').length && $.support.transition) { |
+ this.$element.trigger($.support.transition.end) |
+ this.cycle(true) |
+ } |
+ |
+ this.interval = clearInterval(this.interval) |
+ |
+ return this |
+ } |
+ |
+ Carousel.prototype.next = function () { |
+ if (this.sliding) return |
+ return this.slide('next') |
+ } |
+ |
+ Carousel.prototype.prev = function () { |
+ if (this.sliding) return |
+ return this.slide('prev') |
+ } |
+ |
+ Carousel.prototype.slide = function (type, next) { |
+ var $active = this.$element.find('.item.active') |
+ var $next = next || $active[type]() |
+ var isCycling = this.interval |
+ var direction = type == 'next' ? 'left' : 'right' |
+ var fallback = type == 'next' ? 'first' : 'last' |
+ var that = this |
+ |
+ if (!$next.length) { |
+ if (!this.options.wrap) return |
+ $next = this.$element.find('.item')[fallback]() |
+ } |
+ |
+ if ($next.hasClass('active')) return (this.sliding = false) |
+ |
+ var relatedTarget = $next[0] |
+ var slideEvent = $.Event('slide.bs.carousel', { |
+ relatedTarget: relatedTarget, |
+ direction: direction |
+ }) |
+ this.$element.trigger(slideEvent) |
+ if (slideEvent.isDefaultPrevented()) return |
+ |
+ this.sliding = true |
+ |
+ isCycling && this.pause() |
+ |
+ if (this.$indicators.length) { |
+ this.$indicators.find('.active').removeClass('active') |
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) |
+ $nextIndicator && $nextIndicator.addClass('active') |
+ } |
+ |
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" |
+ if ($.support.transition && this.$element.hasClass('slide')) { |
+ $next.addClass(type) |
+ $next[0].offsetWidth // force reflow |
+ $active.addClass(direction) |
+ $next.addClass(direction) |
+ $active |
+ .one('bsTransitionEnd', function () { |
+ $next.removeClass([type, direction].join(' ')).addClass('active') |
+ $active.removeClass(['active', direction].join(' ')) |
+ that.sliding = false |
+ setTimeout(function () { |
+ that.$element.trigger(slidEvent) |
+ }, 0) |
+ }) |
+ .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) |
+ } else { |
+ $active.removeClass('active') |
+ $next.addClass('active') |
+ this.sliding = false |
+ this.$element.trigger(slidEvent) |
+ } |
+ |
+ isCycling && this.cycle() |
+ |
+ return this |
+ } |
+ |
+ |
+ // CAROUSEL PLUGIN DEFINITION |
+ // ========================== |
+ |
+ function Plugin(option) { |
+ return this.each(function () { |
+ var $this = $(this) |
+ var data = $this.data('bs.carousel') |
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) |
+ var action = typeof option == 'string' ? option : options.slide |
+ |
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) |
+ if (typeof option == 'number') data.to(option) |
+ else if (action) data[action]() |
+ else if (options.interval) data.pause().cycle() |
+ }) |
+ } |
+ |
+ var old = $.fn.carousel |
+ |
+ $.fn.carousel = Plugin |
+ $.fn.carousel.Constructor = Carousel |
+ |
+ |
+ // CAROUSEL NO CONFLICT |
+ // ==================== |
+ |
+ $.fn.carousel.noConflict = function () { |
+ $.fn.carousel = old |
+ return this |
+ } |
+ |
+ |
+ // CAROUSEL DATA-API |
+ // ================= |
+ |
+ $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { |
+ var href |
+ var $this = $(this) |
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 |
+ if (!$target.hasClass('carousel')) return |
+ var options = $.extend({}, $target.data(), $this.data()) |
+ var slideIndex = $this.attr('data-slide-to') |
+ if (slideIndex) options.interval = false |
+ |
+ Plugin.call($target, options) |
+ |
+ if (slideIndex) { |
+ $target.data('bs.carousel').to(slideIndex) |
+ } |
+ |
+ e.preventDefault() |
+ }) |
+ |
+ $(window).on('load', function () { |
+ $('[data-ride="carousel"]').each(function () { |
+ var $carousel = $(this) |
+ Plugin.call($carousel, $carousel.data()) |
+ }) |
+ }) |
+ |
+}(jQuery); |