Line 23: | Line 23: | ||
* Licensed under the MIT license | * Licensed under the MIT license | ||
*/ | */ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | if (typeof jQuery === 'undefined') { | |
− | if ( | + | throw new Error('Bootstrap\'s JavaScript requires jQuery') |
− | + | ||
− | + | ||
− | + | ||
} | } | ||
− | |||
− | |||
− | + | +function ($) { | |
− | + | 'use strict'; | |
− | + | var version = $.fn.jquery.split(' ')[0].split('.') | |
− | + | if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { | |
− | + | throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') | |
− | + | } | |
− | + | }(jQuery); | |
− | + | ||
− | }); | + | |
− | + | ||
− | + | /* ======================================================================== | |
− | + | * Bootstrap: transition.js v3.3.5 | |
− | + | * http://getbootstrap.com/javascript/#transitions | |
− | + | * ======================================================================== | |
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
− | |||
− | + | +function ($) { | |
− | + | 'use strict'; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) | |
− | + | // ============================================================ | |
− | + | function transitionEnd() { | |
− | + | var el = document.createElement('bootstrap') | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | var transEndEventNames = { | |
− | + | WebkitTransition: 'webkitTransitionEnd', | |
− | + | MozTransition: 'transitionend', | |
− | + | OTransition: 'oTransitionEnd otransitionend', | |
− | + | transition: 'transitionend' | |
− | + | } | |
− | + | for (var name in transEndEventNames) { | |
− | + | if (el.style[name] !== undefined) { | |
+ | return {end: transEndEventNames[name]} | ||
+ | } | ||
+ | } | ||
− | + | return false // explicit for ie8 ( ._.) | |
− | + | } | |
− | + | ||
− | + | // http://blog.alexmaccaw.com/css-transitions | |
− | + | $.fn.emulateTransitionEnd = function (duration) { | |
− | + | var called = false | |
− | + | var $el = this | |
− | + | $(this).one('bsTransitionEnd', function () { | |
− | + | called = true | |
− | + | }) | |
− | + | var callback = function () { | |
− | + | if (!called) | |
− | + | $($el).trigger($.support.transition.end) | |
} | } | ||
− | + | setTimeout(callback, duration) | |
− | + | return this | |
− | + | } | |
− | + | ||
− | + | ||
− | + | ||
− | + | $(function () { | |
− | + | $.support.transition = transitionEnd() | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | if (!$.support.transition) | |
− | + | return | |
− | + | $.event.special.bsTransitionEnd = { | |
− | + | bindType: $.support.transition.end, | |
+ | delegateType: $.support.transition.end, | ||
+ | handle: function (e) { | ||
+ | if ($(e.target).is(this)) | ||
+ | return e.handleObj.handler.apply(this, arguments) | ||
+ | } | ||
+ | } | ||
+ | }) | ||
− | + | }(jQuery); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | /* ======================================================================== | |
− | + | * Bootstrap: alert.js v3.3.5 | |
− | + | * http://getbootstrap.com/javascript/#alerts | |
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | +function ($) { | |
− | + | 'use strict'; | |
− | + | ||
− | + | // ALERT CLASS DEFINITION | |
− | + | // ====================== | |
− | + | ||
− | + | var dismiss = '[data-dismiss="alert"]' | |
− | + | var Alert = function (el) { | |
− | + | $(el).on('click', dismiss, this.close) | |
− | var | + | } |
− | + | ||
− | + | Alert.VERSION = '3.3.5' | |
− | if ( | + | |
− | + | Alert.TRANSITION_DURATION = 150 | |
− | + | ||
− | + | Alert.prototype.close = function (e) { | |
− | + | var $this = $(this) | |
− | + | var selector = $this.attr('data-target') | |
+ | |||
+ | if (!selector) { | ||
+ | selector = $this.attr('href') | ||
+ | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 | ||
} | } | ||
− | + | ||
− | + | var $parent = $(selector) | |
− | + | ||
− | + | if (e) | |
+ | e.preventDefault() | ||
+ | |||
+ | if (!$parent.length) { | ||
+ | $parent = $this.closest('.alert') | ||
} | } | ||
− | if ( | + | $parent.trigger(e = $.Event('close.bs.alert')) |
− | + | ||
+ | if (e.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | $parent.removeClass('in') | ||
+ | |||
+ | function removeElement() { | ||
+ | // detach from parent, fire event then clean up data | ||
+ | $parent.detach().trigger('closed.bs.alert').remove() | ||
} | } | ||
− | if (typeof | + | $.support.transition && $parent.hasClass('fade') ? |
− | + | $parent | |
− | $. | + | .one('bsTransitionEnd', removeElement) |
+ | .emulateTransitionEnd(Alert.TRANSITION_DURATION) : | ||
+ | removeElement() | ||
+ | } | ||
+ | |||
+ | |||
+ | // ALERT PLUGIN DEFINITION | ||
+ | // ======================= | ||
+ | |||
+ | function Plugin(option) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.alert') | ||
+ | |||
+ | if (!data) | ||
+ | $this.data('bs.alert', (data = new Alert(this))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option].call($this) | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.alert | ||
+ | |||
+ | $.fn.alert = Plugin | ||
+ | $.fn.alert.Constructor = Alert | ||
+ | |||
+ | |||
+ | // ALERT NO CONFLICT | ||
+ | // ================= | ||
+ | |||
+ | $.fn.alert.noConflict = function () { | ||
+ | $.fn.alert = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | |||
+ | // ALERT DATA-API | ||
+ | // ============== | ||
+ | |||
+ | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: button.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#buttons | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // BUTTON PUBLIC CLASS DEFINITION | ||
+ | // ============================== | ||
+ | |||
+ | var Button = function (element, options) { | ||
+ | this.$element = $(element) | ||
+ | this.options = $.extend({}, Button.DEFAULTS, options) | ||
+ | this.isLoading = false | ||
+ | } | ||
+ | |||
+ | Button.VERSION = '3.3.5' | ||
+ | |||
+ | Button.DEFAULTS = { | ||
+ | loadingText: 'loading...' | ||
+ | } | ||
+ | |||
+ | Button.prototype.setState = function (state) { | ||
+ | var d = 'disabled' | ||
+ | var $el = this.$element | ||
+ | var val = $el.is('input') ? 'val' : 'html' | ||
+ | var data = $el.data() | ||
+ | |||
+ | state += 'Text' | ||
+ | |||
+ | if (data.resetText == null) | ||
+ | $el.data('resetText', $el[val]()) | ||
+ | |||
+ | // push to event loop to allow forms to submit | ||
+ | setTimeout($.proxy(function () { | ||
+ | $el[val](data[state] == null ? this.options[state] : data[state]) | ||
+ | |||
+ | if (state == 'loadingText') { | ||
+ | this.isLoading = true | ||
+ | $el.addClass(d).attr(d, d) | ||
+ | } else if (this.isLoading) { | ||
+ | this.isLoading = false | ||
+ | $el.removeClass(d).removeAttr(d) | ||
+ | } | ||
+ | }, this), 0) | ||
+ | } | ||
+ | |||
+ | Button.prototype.toggle = function () { | ||
+ | var changed = true | ||
+ | var $parent = this.$element.closest('[data-toggle="buttons"]') | ||
+ | |||
+ | if ($parent.length) { | ||
+ | var $input = this.$element.find('input') | ||
+ | if ($input.prop('type') == 'radio') { | ||
+ | if ($input.prop('checked')) | ||
+ | changed = false | ||
+ | $parent.find('.active').removeClass('active') | ||
+ | this.$element.addClass('active') | ||
+ | } else if ($input.prop('type') == 'checkbox') { | ||
+ | if (($input.prop('checked')) !== this.$element.hasClass('active')) | ||
+ | changed = false | ||
+ | this.$element.toggleClass('active') | ||
+ | } | ||
+ | $input.prop('checked', this.$element.hasClass('active')) | ||
+ | if (changed) | ||
+ | $input.trigger('change') | ||
} else { | } else { | ||
− | + | this.$element.attr('aria-pressed', !this.$element.hasClass('active')) | |
+ | this.$element.toggleClass('active') | ||
} | } | ||
− | + | } | |
− | + | ||
− | var | + | |
− | + | // BUTTON PLUGIN DEFINITION | |
− | + | // ======================== | |
− | + | ||
− | + | function Plugin(option) { | |
− | + | return this.each(function () { | |
− | + | var $this = $(this) | |
− | + | var data = $this.data('bs.button') | |
− | + | var options = typeof option == 'object' && option | |
− | + | ||
− | + | if (!data) | |
− | + | $this.data('bs.button', (data = new Button(this, options))) | |
− | + | ||
− | + | if (option == 'toggle') | |
− | + | data.toggle() | |
− | + | else if (option) | |
− | + | data.setState(option) | |
− | + | }) | |
− | + | } | |
− | + | ||
− | + | var old = $.fn.button | |
− | + | ||
− | + | $.fn.button = Plugin | |
− | + | $.fn.button.Constructor = Button | |
− | + | ||
− | + | ||
− | + | // BUTTON NO CONFLICT | |
− | + | // ================== | |
− | + | ||
− | + | $.fn.button.noConflict = function () { | |
− | + | $.fn.button = old | |
− | + | return this | |
− | + | } | |
− | + | ||
− | + | ||
− | + | // BUTTON DATA-API | |
− | + | // =============== | |
− | + | ||
− | + | $(document) | |
+ | .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { | ||
+ | var $btn = $(e.target) | ||
+ | if (!$btn.hasClass('btn')) | ||
+ | $btn = $btn.closest('.btn') | ||
+ | Plugin.call($btn, 'toggle') | ||
+ | if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) | ||
+ | e.preventDefault() | ||
+ | }) | ||
+ | .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { | ||
+ | $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) | ||
+ | }) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: carousel.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#carousel | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 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) | ||
+ | this.$indicators = this.$element.find('.carousel-indicators') | ||
+ | this.options = options | ||
+ | this.paused = null | ||
+ | this.sliding = null | ||
+ | this.interval = null | ||
+ | this.$active = null | ||
+ | this.$items = null | ||
+ | |||
+ | this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) | ||
+ | |||
+ | this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element | ||
+ | .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) | ||
+ | .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) | ||
+ | } | ||
+ | |||
+ | Carousel.VERSION = '3.3.5' | ||
+ | |||
+ | Carousel.TRANSITION_DURATION = 600 | ||
+ | |||
+ | Carousel.DEFAULTS = { | ||
+ | interval: 5000, | ||
+ | pause: 'hover', | ||
+ | wrap: true, | ||
+ | keyboard: true | ||
+ | } | ||
+ | |||
+ | Carousel.prototype.keydown = function (e) { | ||
+ | if (/input|textarea/i.test(e.target.tagName)) | ||
+ | return | ||
+ | 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.getItemForDirection = function (direction, active) { | ||
+ | var activeIndex = this.getItemIndex(active) | ||
+ | var willWrap = (direction == 'prev' && activeIndex === 0) | ||
+ | || (direction == 'next' && activeIndex == (this.$items.length - 1)) | ||
+ | if (willWrap && !this.options.wrap) | ||
+ | return active | ||
+ | var delta = direction == 'prev' ? -1 : 1 | ||
+ | var itemIndex = (activeIndex + delta) % this.$items.length | ||
+ | return this.$items.eq(itemIndex) | ||
+ | } | ||
+ | |||
+ | 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.eq(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) | |
− | if ( | + | |
− | + | 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 || this.getItemForDirection(type, $active) | ||
+ | var isCycling = this.interval | ||
+ | var direction = type == 'next' ? 'left' : 'right' | ||
+ | var that = this | ||
+ | |||
+ | 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(Carousel.TRANSITION_DURATION) | ||
} else { | } 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 | ||
+ | // ================= | ||
+ | |||
+ | var clickHandler = 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() | |
− | var | + | } |
− | + | ||
− | + | $(document) | |
+ | .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) | ||
+ | .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) | ||
+ | |||
+ | $(window).on('load', function () { | ||
+ | $('[data-ride="carousel"]').each(function () { | ||
+ | var $carousel = $(this) | ||
+ | Plugin.call($carousel, $carousel.data()) | ||
+ | }) | ||
+ | }) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: collapse.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#collapse | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // COLLAPSE PUBLIC CLASS DEFINITION | ||
+ | // ================================ | ||
+ | |||
+ | var Collapse = function (element, options) { | ||
+ | this.$element = $(element) | ||
+ | this.options = $.extend({}, Collapse.DEFAULTS, options) | ||
+ | this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + | ||
+ | '[data-toggle="collapse"][data-target="#' + element.id + '"]') | ||
+ | this.transitioning = null | ||
+ | |||
+ | if (this.options.parent) { | ||
+ | this.$parent = this.getParent() | ||
+ | } else { | ||
+ | this.addAriaAndCollapsedClass(this.$element, this.$trigger) | ||
} | } | ||
− | if ( | + | |
− | + | if (this.options.toggle) | |
+ | this.toggle() | ||
+ | } | ||
+ | |||
+ | Collapse.VERSION = '3.3.5' | ||
+ | |||
+ | Collapse.TRANSITION_DURATION = 350 | ||
+ | |||
+ | Collapse.DEFAULTS = { | ||
+ | toggle: true | ||
+ | } | ||
+ | |||
+ | Collapse.prototype.dimension = function () { | ||
+ | var hasWidth = this.$element.hasClass('width') | ||
+ | return hasWidth ? 'width' : 'height' | ||
+ | } | ||
+ | |||
+ | Collapse.prototype.show = function () { | ||
+ | if (this.transitioning || this.$element.hasClass('in')) | ||
+ | return | ||
+ | |||
+ | var activesData | ||
+ | var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') | ||
+ | |||
+ | if (actives && actives.length) { | ||
+ | activesData = actives.data('bs.collapse') | ||
+ | if (activesData && activesData.transitioning) | ||
+ | return | ||
} | } | ||
− | + | ||
− | if ( | + | var startEvent = $.Event('show.bs.collapse') |
− | + | this.$element.trigger(startEvent) | |
+ | if (startEvent.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | if (actives && actives.length) { | ||
+ | Plugin.call(actives, 'hide') | ||
+ | activesData || actives.data('bs.collapse', null) | ||
} | } | ||
− | + | ||
− | + | var dimension = this.dimension() | |
− | + | ||
− | + | this.$element | |
− | + | .removeClass('collapse') | |
+ | .addClass('collapsing')[dimension](0) | ||
+ | .attr('aria-expanded', true) | ||
+ | |||
+ | this.$trigger | ||
+ | .removeClass('collapsed') | ||
+ | .attr('aria-expanded', true) | ||
+ | |||
+ | this.transitioning = 1 | ||
+ | |||
+ | var complete = function () { | ||
+ | this.$element | ||
+ | .removeClass('collapsing') | ||
+ | .addClass('collapse in')[dimension]('') | ||
+ | this.transitioning = 0 | ||
+ | this.$element | ||
+ | .trigger('shown.bs.collapse') | ||
} | } | ||
− | + | ||
− | + | if (!$.support.transition) | |
− | + | return complete.call(this) | |
− | + | ||
− | + | var scrollSize = $.camelCase(['scroll', dimension].join('-')) | |
− | + | ||
− | if ( | + | this.$element |
− | + | .one('bsTransitionEnd', $.proxy(complete, this)) | |
+ | .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) | ||
+ | } | ||
+ | |||
+ | Collapse.prototype.hide = function () { | ||
+ | if (this.transitioning || !this.$element.hasClass('in')) | ||
+ | return | ||
+ | |||
+ | var startEvent = $.Event('hide.bs.collapse') | ||
+ | this.$element.trigger(startEvent) | ||
+ | if (startEvent.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | var dimension = this.dimension() | ||
+ | |||
+ | this.$element[dimension](this.$element[dimension]())[0].offsetHeight | ||
+ | |||
+ | this.$element | ||
+ | .addClass('collapsing') | ||
+ | .removeClass('collapse in') | ||
+ | .attr('aria-expanded', false) | ||
+ | |||
+ | this.$trigger | ||
+ | .addClass('collapsed') | ||
+ | .attr('aria-expanded', false) | ||
+ | |||
+ | this.transitioning = 1 | ||
+ | |||
+ | var complete = function () { | ||
+ | this.transitioning = 0 | ||
+ | this.$element | ||
+ | .removeClass('collapsing') | ||
+ | .addClass('collapse') | ||
+ | .trigger('hidden.bs.collapse') | ||
} | } | ||
− | + | ||
− | + | if (!$.support.transition) | |
− | var | + | return complete.call(this) |
− | + | ||
− | + | this.$element | |
− | + | [dimension](0) | |
− | }, | + | .one('bsTransitionEnd', $.proxy(complete, this)) |
− | + | .emulateTransitionEnd(Collapse.TRANSITION_DURATION) | |
− | var | + | } |
− | + | ||
− | + | Collapse.prototype.toggle = function () { | |
− | + | this[this.$element.hasClass('in') ? 'hide' : 'show']() | |
− | + | } | |
− | + | ||
− | + | Collapse.prototype.getParent = function () { | |
+ | return $(this.options.parent) | ||
+ | .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') | ||
+ | .each($.proxy(function (i, element) { | ||
+ | var $element = $(element) | ||
+ | this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) | ||
+ | }, this)) | ||
+ | .end() | ||
+ | } | ||
+ | |||
+ | Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { | ||
+ | var isOpen = $element.hasClass('in') | ||
+ | |||
+ | $element.attr('aria-expanded', isOpen) | ||
+ | $trigger | ||
+ | .toggleClass('collapsed', !isOpen) | ||
+ | .attr('aria-expanded', isOpen) | ||
+ | } | ||
+ | |||
+ | function getTargetFromTrigger($trigger) { | ||
+ | var href | ||
+ | var target = $trigger.attr('data-target') | ||
+ | || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 | ||
+ | |||
+ | return $(target) | ||
+ | } | ||
+ | |||
+ | |||
+ | // COLLAPSE PLUGIN DEFINITION | ||
+ | // ========================== | ||
+ | |||
+ | function Plugin(option) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.collapse') | ||
+ | var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) | ||
+ | |||
+ | if (!data && options.toggle && /show|hide/.test(option)) | ||
+ | options.toggle = false | ||
+ | if (!data) | ||
+ | $this.data('bs.collapse', (data = new Collapse(this, options))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option]() | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.collapse | ||
+ | |||
+ | $.fn.collapse = Plugin | ||
+ | $.fn.collapse.Constructor = Collapse | ||
+ | |||
+ | |||
+ | // COLLAPSE NO CONFLICT | ||
+ | // ==================== | ||
+ | |||
+ | $.fn.collapse.noConflict = function () { | ||
+ | $.fn.collapse = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | |||
+ | // COLLAPSE DATA-API | ||
+ | // ================= | ||
+ | |||
+ | $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { | ||
+ | var $this = $(this) | ||
+ | |||
+ | if (!$this.attr('data-target')) | ||
+ | e.preventDefault() | ||
+ | |||
+ | var $target = getTargetFromTrigger($this) | ||
+ | var data = $target.data('bs.collapse') | ||
+ | var option = data ? 'toggle' : $this.data() | ||
+ | |||
+ | Plugin.call($target, option) | ||
+ | }) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: dropdown.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#dropdowns | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // DROPDOWN CLASS DEFINITION | ||
+ | // ========================= | ||
+ | |||
+ | var backdrop = '.dropdown-backdrop' | ||
+ | var toggle = '[data-toggle="dropdown"]' | ||
+ | var Dropdown = function (element) { | ||
+ | $(element).on('click.bs.dropdown', this.toggle) | ||
+ | } | ||
+ | |||
+ | Dropdown.VERSION = '3.3.5' | ||
+ | |||
+ | function getParent($this) { | ||
+ | var selector = $this.attr('data-target') | ||
+ | |||
+ | if (!selector) { | ||
+ | selector = $this.attr('href') | ||
+ | selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 | ||
} | } | ||
− | + | ||
− | if ( | + | var $parent = selector && $(selector) |
− | + | ||
− | + | return $parent && $parent.length ? $parent : $this.parent() | |
− | + | } | |
+ | |||
+ | function clearMenus(e) { | ||
+ | if (e && e.which === 3) | ||
+ | return | ||
+ | $(backdrop).remove() | ||
+ | $(toggle).each(function () { | ||
+ | var $this = $(this) | ||
+ | var $parent = getParent($this) | ||
+ | var relatedTarget = {relatedTarget: this} | ||
+ | |||
+ | if (!$parent.hasClass('open')) | ||
+ | return | ||
+ | |||
+ | if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) | ||
+ | return | ||
+ | |||
+ | $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) | ||
+ | |||
+ | if (e.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | $this.attr('aria-expanded', 'false') | ||
+ | $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | Dropdown.prototype.toggle = function (e) { | ||
+ | var $this = $(this) | ||
+ | |||
+ | if ($this.is('.disabled, :disabled')) | ||
+ | return | ||
+ | |||
+ | var $parent = getParent($this) | ||
+ | var isActive = $parent.hasClass('open') | ||
+ | |||
+ | clearMenus() | ||
+ | |||
+ | if (!isActive) { | ||
+ | if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { | ||
+ | // if mobile we use a backdrop because click events don't delegate | ||
+ | $(document.createElement('div')) | ||
+ | .addClass('dropdown-backdrop') | ||
+ | .insertAfter($(this)) | ||
+ | .on('click', clearMenus) | ||
+ | } | ||
+ | |||
+ | var relatedTarget = {relatedTarget: this} | ||
+ | $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) | ||
+ | |||
+ | if (e.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | $this | ||
+ | .trigger('focus') | ||
+ | .attr('aria-expanded', 'true') | ||
+ | |||
+ | $parent | ||
+ | .toggleClass('open') | ||
+ | .trigger('shown.bs.dropdown', relatedTarget) | ||
} | } | ||
− | + | ||
− | + | return false | |
− | + | } | |
− | + | ||
− | + | Dropdown.prototype.keydown = function (e) { | |
− | + | if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) | |
− | + | return | |
− | + | ||
− | + | var $this = $(this) | |
− | + | ||
− | var | + | e.preventDefault() |
− | + | e.stopPropagation() | |
− | + | ||
− | if (! | + | if ($this.is('.disabled, :disabled')) |
− | + | return | |
+ | |||
+ | var $parent = getParent($this) | ||
+ | var isActive = $parent.hasClass('open') | ||
+ | |||
+ | if (!isActive && e.which != 27 || isActive && e.which == 27) { | ||
+ | if (e.which == 27) | ||
+ | $parent.find(toggle).trigger('focus') | ||
+ | return $this.trigger('click') | ||
} | } | ||
− | if (! | + | var desc = ' li:not(.disabled):visible a' |
− | + | var $items = $parent.find('.dropdown-menu' + desc) | |
+ | |||
+ | if (!$items.length) | ||
+ | return | ||
+ | |||
+ | var index = $items.index(e.target) | ||
+ | |||
+ | if (e.which == 38 && index > 0) | ||
+ | index-- // up | ||
+ | if (e.which == 40 && index < $items.length - 1) | ||
+ | index++ // down | ||
+ | if (!~index) | ||
+ | index = 0 | ||
+ | |||
+ | $items.eq(index).trigger('focus') | ||
+ | } | ||
+ | |||
+ | |||
+ | // DROPDOWN PLUGIN DEFINITION | ||
+ | // ========================== | ||
+ | |||
+ | function Plugin(option) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.dropdown') | ||
+ | |||
+ | if (!data) | ||
+ | $this.data('bs.dropdown', (data = new Dropdown(this))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option].call($this) | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.dropdown | ||
+ | |||
+ | $.fn.dropdown = Plugin | ||
+ | $.fn.dropdown.Constructor = Dropdown | ||
+ | |||
+ | |||
+ | // DROPDOWN NO CONFLICT | ||
+ | // ==================== | ||
+ | |||
+ | $.fn.dropdown.noConflict = function () { | ||
+ | $.fn.dropdown = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | |||
+ | // APPLY TO STANDARD DROPDOWN ELEMENTS | ||
+ | // =================================== | ||
+ | |||
+ | $(document) | ||
+ | .on('click.bs.dropdown.data-api', clearMenus) | ||
+ | .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { | ||
+ | e.stopPropagation() | ||
+ | }) | ||
+ | .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) | ||
+ | .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) | ||
+ | .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: modal.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#modals | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // MODAL CLASS DEFINITION | ||
+ | // ====================== | ||
+ | |||
+ | var Modal = function (element, options) { | ||
+ | this.options = options | ||
+ | this.$body = $(document.body) | ||
+ | this.$element = $(element) | ||
+ | this.$dialog = this.$element.find('.modal-dialog') | ||
+ | this.$backdrop = null | ||
+ | this.isShown = null | ||
+ | this.originalBodyPad = null | ||
+ | this.scrollbarWidth = 0 | ||
+ | this.ignoreBackdropClick = false | ||
+ | |||
+ | if (this.options.remote) { | ||
+ | this.$element | ||
+ | .find('.modal-content') | ||
+ | .load(this.options.remote, $.proxy(function () { | ||
+ | this.$element.trigger('loaded.bs.modal') | ||
+ | }, this)) | ||
} | } | ||
− | + | } | |
− | + | ||
− | var | + | Modal.VERSION = '3.3.5' |
− | if ( | + | |
− | return false | + | Modal.TRANSITION_DURATION = 300 |
+ | Modal.BACKDROP_TRANSITION_DURATION = 150 | ||
+ | |||
+ | Modal.DEFAULTS = { | ||
+ | backdrop: true, | ||
+ | keyboard: true, | ||
+ | show: true | ||
+ | } | ||
+ | |||
+ | Modal.prototype.toggle = function (_relatedTarget) { | ||
+ | return this.isShown ? this.hide() : this.show(_relatedTarget) | ||
+ | } | ||
+ | |||
+ | Modal.prototype.show = function (_relatedTarget) { | ||
+ | var that = this | ||
+ | var e = $.Event('show.bs.modal', {relatedTarget: _relatedTarget}) | ||
+ | |||
+ | this.$element.trigger(e) | ||
+ | |||
+ | if (this.isShown || e.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | this.isShown = true | ||
+ | |||
+ | this.checkScrollbar() | ||
+ | this.setScrollbar() | ||
+ | this.$body.addClass('modal-open') | ||
+ | |||
+ | this.escape() | ||
+ | this.resize() | ||
+ | |||
+ | this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) | ||
+ | |||
+ | this.$dialog.on('mousedown.dismiss.bs.modal', function () { | ||
+ | that.$element.one('mouseup.dismiss.bs.modal', function (e) { | ||
+ | if ($(e.target).is(that.$element)) | ||
+ | that.ignoreBackdropClick = true | ||
+ | }) | ||
+ | }) | ||
+ | |||
+ | this.backdrop(function () { | ||
+ | var transition = $.support.transition && that.$element.hasClass('fade') | ||
+ | |||
+ | if (!that.$element.parent().length) { | ||
+ | that.$element.appendTo(that.$body) // don't move modals dom position | ||
+ | } | ||
+ | |||
+ | that.$element | ||
+ | .show() | ||
+ | .scrollTop(0) | ||
+ | |||
+ | that.adjustDialog() | ||
+ | |||
+ | if (transition) { | ||
+ | that.$element[0].offsetWidth // force reflow | ||
+ | } | ||
+ | |||
+ | that.$element.addClass('in') | ||
+ | |||
+ | that.enforceFocus() | ||
+ | |||
+ | var e = $.Event('shown.bs.modal', {relatedTarget: _relatedTarget}) | ||
+ | |||
+ | transition ? | ||
+ | that.$dialog // wait for modal to slide in | ||
+ | .one('bsTransitionEnd', function () { | ||
+ | that.$element.trigger('focus').trigger(e) | ||
+ | }) | ||
+ | .emulateTransitionEnd(Modal.TRANSITION_DURATION) : | ||
+ | that.$element.trigger('focus').trigger(e) | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | Modal.prototype.hide = function (e) { | ||
+ | if (e) | ||
+ | e.preventDefault() | ||
+ | |||
+ | e = $.Event('hide.bs.modal') | ||
+ | |||
+ | this.$element.trigger(e) | ||
+ | |||
+ | if (!this.isShown || e.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | this.isShown = false | ||
+ | |||
+ | this.escape() | ||
+ | this.resize() | ||
+ | |||
+ | $(document).off('focusin.bs.modal') | ||
+ | |||
+ | this.$element | ||
+ | .removeClass('in') | ||
+ | .off('click.dismiss.bs.modal') | ||
+ | .off('mouseup.dismiss.bs.modal') | ||
+ | |||
+ | this.$dialog.off('mousedown.dismiss.bs.modal') | ||
+ | |||
+ | $.support.transition && this.$element.hasClass('fade') ? | ||
+ | this.$element | ||
+ | .one('bsTransitionEnd', $.proxy(this.hideModal, this)) | ||
+ | .emulateTransitionEnd(Modal.TRANSITION_DURATION) : | ||
+ | this.hideModal() | ||
+ | } | ||
+ | |||
+ | Modal.prototype.enforceFocus = function () { | ||
+ | $(document) | ||
+ | .off('focusin.bs.modal') // guard against infinite focus loop | ||
+ | .on('focusin.bs.modal', $.proxy(function (e) { | ||
+ | if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { | ||
+ | this.$element.trigger('focus') | ||
+ | } | ||
+ | }, this)) | ||
+ | } | ||
+ | |||
+ | Modal.prototype.escape = function () { | ||
+ | if (this.isShown && this.options.keyboard) { | ||
+ | this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { | ||
+ | e.which == 27 && this.hide() | ||
+ | }, this)) | ||
+ | } else if (!this.isShown) { | ||
+ | this.$element.off('keydown.dismiss.bs.modal') | ||
} | } | ||
− | + | } | |
− | + | ||
− | + | Modal.prototype.resize = function () { | |
− | + | if (this.isShown) { | |
− | + | $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) | |
− | + | } else { | |
− | + | $(window).off('resize.bs.modal') | |
− | + | ||
− | + | ||
} | } | ||
+ | } | ||
− | + | Modal.prototype.hideModal = function () { | |
− | if ( | + | var that = this |
− | + | this.$element.hide() | |
+ | this.backdrop(function () { | ||
+ | that.$body.removeClass('modal-open') | ||
+ | that.resetAdjustments() | ||
+ | that.resetScrollbar() | ||
+ | that.$element.trigger('hidden.bs.modal') | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | Modal.prototype.removeBackdrop = function () { | ||
+ | this.$backdrop && this.$backdrop.remove() | ||
+ | this.$backdrop = null | ||
+ | } | ||
+ | |||
+ | Modal.prototype.backdrop = function (callback) { | ||
+ | var that = this | ||
+ | var animate = this.$element.hasClass('fade') ? 'fade' : '' | ||
+ | |||
+ | if (this.isShown && this.options.backdrop) { | ||
+ | var doAnimate = $.support.transition && animate | ||
+ | |||
+ | this.$backdrop = $(document.createElement('div')) | ||
+ | .addClass('modal-backdrop ' + animate) | ||
+ | .appendTo(this.$body) | ||
+ | |||
+ | this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { | ||
+ | if (this.ignoreBackdropClick) { | ||
+ | this.ignoreBackdropClick = false | ||
+ | return | ||
+ | } | ||
+ | if (e.target !== e.currentTarget) | ||
+ | return | ||
+ | this.options.backdrop == 'static' | ||
+ | ? this.$element[0].focus() | ||
+ | : this.hide() | ||
+ | }, this)) | ||
+ | |||
+ | if (doAnimate) | ||
+ | this.$backdrop[0].offsetWidth // force reflow | ||
+ | |||
+ | this.$backdrop.addClass('in') | ||
+ | |||
+ | if (!callback) | ||
+ | return | ||
+ | |||
+ | doAnimate ? | ||
+ | this.$backdrop | ||
+ | .one('bsTransitionEnd', callback) | ||
+ | .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : | ||
+ | callback() | ||
+ | |||
+ | } else if (!this.isShown && this.$backdrop) { | ||
+ | this.$backdrop.removeClass('in') | ||
+ | |||
+ | var callbackRemove = function () { | ||
+ | that.removeBackdrop() | ||
+ | callback && callback() | ||
+ | } | ||
+ | $.support.transition && this.$element.hasClass('fade') ? | ||
+ | this.$backdrop | ||
+ | .one('bsTransitionEnd', callbackRemove) | ||
+ | .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : | ||
+ | callbackRemove() | ||
+ | |||
+ | } else if (callback) { | ||
+ | callback() | ||
} | } | ||
− | + | } | |
− | + | ||
− | + | // these following methods are used to handle overflowing modals | |
− | + | ||
− | + | Modal.prototype.handleUpdate = function () { | |
− | + | this.adjustDialog() | |
+ | } | ||
+ | |||
+ | Modal.prototype.adjustDialog = function () { | ||
+ | var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight | ||
+ | |||
+ | this.$element.css({ | ||
+ | paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', | ||
+ | paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | Modal.prototype.resetAdjustments = function () { | ||
+ | this.$element.css({ | ||
+ | paddingLeft: '', | ||
+ | paddingRight: '' | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | Modal.prototype.checkScrollbar = function () { | ||
+ | var fullWindowWidth = window.innerWidth | ||
+ | if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 | ||
+ | var documentElementRect = document.documentElement.getBoundingClientRect() | ||
+ | fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) | ||
} | } | ||
+ | this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth | ||
+ | this.scrollbarWidth = this.measureScrollbar() | ||
+ | } | ||
+ | |||
+ | Modal.prototype.setScrollbar = function () { | ||
+ | var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) | ||
+ | this.originalBodyPad = document.body.style.paddingRight || '' | ||
+ | if (this.bodyIsOverflowing) | ||
+ | this.$body.css('padding-right', bodyPad + this.scrollbarWidth) | ||
+ | } | ||
+ | |||
+ | Modal.prototype.resetScrollbar = function () { | ||
+ | this.$body.css('padding-right', this.originalBodyPad) | ||
+ | } | ||
+ | |||
+ | Modal.prototype.measureScrollbar = function () { // thx walsh | ||
+ | var scrollDiv = document.createElement('div') | ||
+ | scrollDiv.className = 'modal-scrollbar-measure' | ||
+ | this.$body.append(scrollDiv) | ||
+ | var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth | ||
+ | this.$body[0].removeChild(scrollDiv) | ||
+ | return scrollbarWidth | ||
+ | } | ||
+ | |||
+ | |||
+ | // MODAL PLUGIN DEFINITION | ||
+ | // ======================= | ||
+ | |||
+ | function Plugin(option, _relatedTarget) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.modal') | ||
+ | var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) | ||
+ | |||
+ | if (!data) | ||
+ | $this.data('bs.modal', (data = new Modal(this, options))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option](_relatedTarget) | ||
+ | else if (options.show) | ||
+ | data.show(_relatedTarget) | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.modal | ||
+ | |||
+ | $.fn.modal = Plugin | ||
+ | $.fn.modal.Constructor = Modal | ||
+ | |||
+ | |||
+ | // MODAL NO CONFLICT | ||
+ | // ================= | ||
+ | |||
+ | $.fn.modal.noConflict = function () { | ||
+ | $.fn.modal = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | |||
+ | // MODAL DATA-API | ||
+ | // ============== | ||
+ | |||
+ | $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { | ||
+ | var $this = $(this) | ||
+ | var href = $this.attr('href') | ||
+ | var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 | ||
+ | var option = $target.data('bs.modal') ? 'toggle' : $.extend({remote: !/#/.test(href) && href}, $target.data(), $this.data()) | ||
+ | |||
+ | if ($this.is('a')) | ||
+ | e.preventDefault() | ||
+ | |||
+ | $target.one('show.bs.modal', function (showEvent) { | ||
+ | if (showEvent.isDefaultPrevented()) | ||
+ | return // only register focus restorer if modal will actually get shown | ||
+ | $target.one('hidden.bs.modal', function () { | ||
+ | $this.is(':visible') && $this.trigger('focus') | ||
+ | }) | ||
+ | }) | ||
+ | Plugin.call($target, option, this) | ||
+ | }) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: tooltip.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#tooltip | ||
+ | * Inspired by the original jQuery.tipsy by Jason Frame | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // TOOLTIP PUBLIC CLASS DEFINITION | ||
+ | // =============================== | ||
+ | |||
+ | var Tooltip = function (element, options) { | ||
+ | this.type = null | ||
+ | this.options = null | ||
+ | this.enabled = null | ||
+ | this.timeout = null | ||
+ | this.hoverState = null | ||
+ | this.$element = null | ||
+ | this.inState = null | ||
+ | |||
+ | this.init('tooltip', element, options) | ||
+ | } | ||
+ | |||
+ | Tooltip.VERSION = '3.3.5' | ||
+ | |||
+ | Tooltip.TRANSITION_DURATION = 150 | ||
+ | |||
+ | Tooltip.DEFAULTS = { | ||
+ | animation: true, | ||
+ | placement: 'top', | ||
+ | selector: false, | ||
+ | template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', | ||
+ | trigger: 'hover focus', | ||
+ | title: '', | ||
+ | delay: 0, | ||
+ | html: false, | ||
+ | container: false, | ||
+ | viewport: { | ||
+ | selector: 'body', | ||
+ | padding: 0 | ||
} | } | ||
+ | } | ||
− | + | Tooltip.prototype.init = function (type, element, options) { | |
+ | this.enabled = true | ||
+ | this.type = type | ||
+ | this.$element = $(element) | ||
+ | this.options = this.getOptions(options) | ||
+ | this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) | ||
+ | this.inState = {click: false, hover: false, focus: false} | ||
− | if ( | + | if (this.$element[0] instanceof document.constructor && !this.options.selector) { |
− | + | throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') | |
} | } | ||
− | + | var triggers = this.options.trigger.split(' ') | |
− | + | ||
+ | for (var i = triggers.length; i--; ) { | ||
+ | var trigger = triggers[i] | ||
+ | |||
+ | if (trigger == 'click') { | ||
+ | this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) | ||
+ | } else if (trigger != 'manual') { | ||
+ | var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' | ||
+ | var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' | ||
+ | |||
+ | this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) | ||
+ | this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) | ||
+ | } | ||
} | } | ||
− | + | this.options.selector ? | |
− | + | (this._options = $.extend({}, this.options, {trigger: 'manual', selector: ''})) : | |
+ | this.fixTitle() | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.getDefaults = function () { | ||
+ | return Tooltip.DEFAULTS | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.getOptions = function (options) { | ||
+ | options = $.extend({}, this.getDefaults(), this.$element.data(), options) | ||
+ | |||
+ | if (options.delay && typeof options.delay == 'number') { | ||
+ | options.delay = { | ||
+ | show: options.delay, | ||
+ | hide: options.delay | ||
+ | } | ||
} | } | ||
− | + | return options | |
− | + | } | |
+ | |||
+ | Tooltip.prototype.getDelegateOptions = function () { | ||
+ | var options = {} | ||
+ | var defaults = this.getDefaults() | ||
+ | |||
+ | this._options && $.each(this._options, function (key, value) { | ||
+ | if (defaults[key] != value) | ||
+ | options[key] = value | ||
+ | }) | ||
+ | |||
+ | return options | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.enter = function (obj) { | ||
+ | var self = obj instanceof this.constructor ? | ||
+ | obj : $(obj.currentTarget).data('bs.' + this.type) | ||
+ | |||
+ | if (!self) { | ||
+ | self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) | ||
+ | $(obj.currentTarget).data('bs.' + this.type, self) | ||
} | } | ||
− | if ( | + | if (obj instanceof $.Event) { |
− | + | self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true | |
} | } | ||
+ | |||
+ | if (self.tip().hasClass('in') || self.hoverState == 'in') { | ||
+ | self.hoverState = 'in' | ||
+ | return | ||
} | } | ||
− | + | clearTimeout(self.timeout) | |
− | if ( | + | |
− | + | self.hoverState = 'in' | |
+ | |||
+ | if (!self.options.delay || !self.options.delay.show) | ||
+ | return self.show() | ||
+ | |||
+ | self.timeout = setTimeout(function () { | ||
+ | if (self.hoverState == 'in') | ||
+ | self.show() | ||
+ | }, self.options.delay.show) | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.isInStateTrue = function () { | ||
+ | for (var key in this.inState) { | ||
+ | if (this.inState[key]) | ||
+ | return true | ||
} | } | ||
− | } | + | |
− | + | return false | |
− | var | + | } |
− | + | ||
− | + | Tooltip.prototype.leave = function (obj) { | |
− | if ( | + | var self = obj instanceof this.constructor ? |
− | + | obj : $(obj.currentTarget).data('bs.' + this.type) | |
+ | |||
+ | if (!self) { | ||
+ | self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) | ||
+ | $(obj.currentTarget).data('bs.' + this.type, self) | ||
} | } | ||
− | + | ||
− | + | if (obj instanceof $.Event) { | |
− | if ($ | + | self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false |
− | + | ||
− | + | ||
} | } | ||
− | + | ||
− | + | if (self.isInStateTrue()) | |
− | + | return | |
− | + | ||
− | }, | + | clearTimeout(self.timeout) |
+ | |||
+ | self.hoverState = 'out' | ||
+ | |||
+ | if (!self.options.delay || !self.options.delay.hide) | ||
+ | return self.hide() | ||
+ | |||
+ | self.timeout = setTimeout(function () { | ||
+ | if (self.hoverState == 'out') | ||
+ | self.hide() | ||
+ | }, self.options.delay.hide) | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.show = function () { | ||
+ | var e = $.Event('show.bs.' + this.type) | ||
+ | |||
+ | if (this.hasContent() && this.enabled) { | ||
+ | this.$element.trigger(e) | ||
+ | |||
+ | var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) | ||
+ | if (e.isDefaultPrevented() || !inDom) | ||
+ | return | ||
+ | var that = this | ||
+ | |||
+ | var $tip = this.tip() | ||
+ | |||
+ | var tipId = this.getUID(this.type) | ||
+ | |||
+ | this.setContent() | ||
+ | $tip.attr('id', tipId) | ||
+ | this.$element.attr('aria-describedby', tipId) | ||
+ | |||
+ | if (this.options.animation) | ||
+ | $tip.addClass('fade') | ||
+ | |||
+ | var placement = typeof this.options.placement == 'function' ? | ||
+ | this.options.placement.call(this, $tip[0], this.$element[0]) : | ||
+ | this.options.placement | ||
+ | |||
+ | var autoToken = /\s?auto?\s?/i | ||
+ | var autoPlace = autoToken.test(placement) | ||
+ | if (autoPlace) | ||
+ | placement = placement.replace(autoToken, '') || 'top' | ||
+ | |||
+ | $tip | ||
+ | .detach() | ||
+ | .css({top: 0, left: 0, display: 'block'}) | ||
+ | .addClass(placement) | ||
+ | .data('bs.' + this.type, this) | ||
+ | |||
+ | this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) | ||
+ | this.$element.trigger('inserted.bs.' + this.type) | ||
+ | |||
+ | var pos = this.getPosition() | ||
+ | var actualWidth = $tip[0].offsetWidth | ||
+ | var actualHeight = $tip[0].offsetHeight | ||
+ | |||
+ | if (autoPlace) { | ||
+ | var orgPlacement = placement | ||
+ | var viewportDim = this.getPosition(this.$viewport) | ||
+ | |||
+ | placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : | ||
+ | placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : | ||
+ | placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : | ||
+ | placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : | ||
+ | placement | ||
+ | |||
+ | $tip | ||
+ | .removeClass(orgPlacement) | ||
+ | .addClass(placement) | ||
+ | } | ||
+ | |||
+ | var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) | ||
+ | |||
+ | this.applyPlacement(calculatedOffset, placement) | ||
+ | |||
+ | var complete = function () { | ||
+ | var prevHoverState = that.hoverState | ||
+ | that.$element.trigger('shown.bs.' + that.type) | ||
+ | that.hoverState = null | ||
+ | |||
+ | if (prevHoverState == 'out') | ||
+ | that.leave(that) | ||
+ | } | ||
+ | |||
+ | $.support.transition && this.$tip.hasClass('fade') ? | ||
+ | $tip | ||
+ | .one('bsTransitionEnd', complete) | ||
+ | .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : | ||
+ | complete() | ||
} | } | ||
− | + | } | |
− | $( | + | |
− | + | Tooltip.prototype.applyPlacement = function (offset, placement) { | |
− | + | var $tip = this.tip() | |
− | + | var width = $tip[0].offsetWidth | |
− | + | var height = $tip[0].offsetHeight | |
− | if | + | |
− | + | // manually read margins because getBoundingClientRect includes difference | |
+ | var marginTop = parseInt($tip.css('margin-top'), 10) | ||
+ | var marginLeft = parseInt($tip.css('margin-left'), 10) | ||
+ | |||
+ | // we must check for NaN for ie 8/9 | ||
+ | if (isNaN(marginTop)) | ||
+ | marginTop = 0 | ||
+ | if (isNaN(marginLeft)) | ||
+ | marginLeft = 0 | ||
+ | |||
+ | offset.top += marginTop | ||
+ | offset.left += marginLeft | ||
+ | |||
+ | // $.fn.offset doesn't round pixel values | ||
+ | // so we use setOffset directly with our own function B-0 | ||
+ | $.offset.setOffset($tip[0], $.extend({ | ||
+ | using: function (props) { | ||
+ | $tip.css({ | ||
+ | top: Math.round(props.top), | ||
+ | left: Math.round(props.left) | ||
+ | }) | ||
+ | } | ||
+ | }, offset), 0) | ||
+ | |||
+ | $tip.addClass('in') | ||
+ | |||
+ | // check to see if placing tip in new offset caused the tip to resize itself | ||
+ | var actualWidth = $tip[0].offsetWidth | ||
+ | var actualHeight = $tip[0].offsetHeight | ||
+ | |||
+ | if (placement == 'top' && actualHeight != height) { | ||
+ | offset.top = offset.top + height - actualHeight | ||
} | } | ||
− | + | ||
− | + | var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) | |
− | + | ||
− | + | if (delta.left) | |
− | + | offset.left += delta.left | |
− | + | else | |
− | + | offset.top += delta.top | |
− | + | ||
− | .css( | + | var isVertical = /top|bottom/.test(placement) |
− | . | + | var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight |
− | + | var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' | |
− | if (!( | + | |
− | + | $tip.offset(offset) | |
+ | this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { | ||
+ | this.arrow() | ||
+ | .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') | ||
+ | .css(isVertical ? 'top' : 'left', '') | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.setContent = function () { | ||
+ | var $tip = this.tip() | ||
+ | var title = this.getTitle() | ||
+ | |||
+ | $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) | ||
+ | $tip.removeClass('fade in top bottom left right') | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.hide = function (callback) { | ||
+ | var that = this | ||
+ | var $tip = $(this.$tip) | ||
+ | var e = $.Event('hide.bs.' + this.type) | ||
+ | |||
+ | function complete() { | ||
+ | if (that.hoverState != 'in') | ||
+ | $tip.detach() | ||
+ | that.$element | ||
+ | .removeAttr('aria-describedby') | ||
+ | .trigger('hidden.bs.' + that.type) | ||
+ | callback && callback() | ||
} | } | ||
+ | |||
+ | this.$element.trigger(e) | ||
+ | |||
+ | if (e.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | $tip.removeClass('in') | ||
+ | |||
+ | $.support.transition && $tip.hasClass('fade') ? | ||
+ | $tip | ||
+ | .one('bsTransitionEnd', complete) | ||
+ | .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : | ||
+ | complete() | ||
+ | |||
+ | this.hoverState = null | ||
+ | |||
+ | return this | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.fixTitle = function () { | ||
+ | var $e = this.$element | ||
+ | if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { | ||
+ | $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') | ||
} | } | ||
− | + | } | |
− | + | ||
− | + | Tooltip.prototype.hasContent = function () { | |
− | + | return this.getTitle() | |
− | + | } | |
− | + | ||
− | + | Tooltip.prototype.getPosition = function ($element) { | |
− | + | $element = $element || this.$element | |
− | + | ||
− | + | var el = $element[0] | |
− | + | var isBody = el.tagName == 'BODY' | |
− | } | + | |
− | + | var elRect = el.getBoundingClientRect() | |
− | var | + | if (elRect.width == null) { |
− | + | // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 | |
− | + | elRect = $.extend({}, elRect, {width: elRect.right - elRect.left, height: elRect.bottom - elRect.top}) | |
− | + | } | |
− | + | var elOffset = isBody ? {top: 0, left: 0} : $element.offset() | |
− | + | var scroll = {scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop()} | |
− | + | var outerDims = isBody ? {width: $(window).width(), height: $(window).height()} : null | |
− | + | ||
− | + | return $.extend({}, elRect, scroll, outerDims, elOffset) | |
− | + | } | |
− | + | ||
− | var | + | Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { |
− | + | return placement == 'bottom' ? {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} : | |
− | if ( | + | placement == 'top' ? {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} : |
− | + | placement == 'left' ? {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} : | |
− | + | /* placement == 'right' */ {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} | |
− | + | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { | ||
+ | var delta = {top: 0, left: 0} | ||
+ | if (!this.$viewport) | ||
+ | return delta | ||
+ | |||
+ | var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 | ||
+ | var viewportDimensions = this.getPosition(this.$viewport) | ||
+ | |||
+ | if (/right|left/.test(placement)) { | ||
+ | var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll | ||
+ | var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight | ||
+ | if (topEdgeOffset < viewportDimensions.top) { // top overflow | ||
+ | delta.top = viewportDimensions.top - topEdgeOffset | ||
+ | } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow | ||
+ | delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset | ||
+ | } | ||
} else { | } else { | ||
− | + | var leftEdgeOffset = pos.left - viewportPadding | |
− | + | var rightEdgeOffset = pos.left + viewportPadding + actualWidth | |
+ | if (leftEdgeOffset < viewportDimensions.left) { // left overflow | ||
+ | delta.left = viewportDimensions.left - leftEdgeOffset | ||
+ | } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow | ||
+ | delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset | ||
+ | } | ||
} | } | ||
− | return | + | |
− | + | return delta | |
− | + | } | |
− | + | ||
− | + | Tooltip.prototype.getTitle = function () { | |
− | + | var title | |
− | var | + | var $e = this.$element |
− | + | var o = this.options | |
− | + | ||
− | + | title = $e.attr('data-original-title') | |
− | + | || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) | |
− | + | ||
− | + | return title | |
− | + | } | |
− | + | ||
− | + | Tooltip.prototype.getUID = function (prefix) { | |
− | + | do | |
− | + | prefix += ~~(Math.random() * 1000000) | |
− | + | while (document.getElementById(prefix)) | |
− | + | return prefix | |
− | + | } | |
− | + | ||
− | + | Tooltip.prototype.tip = function () { | |
+ | if (!this.$tip) { | ||
+ | this.$tip = $(this.options.template) | ||
+ | if (this.$tip.length != 1) { | ||
+ | throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') | ||
+ | } | ||
} | } | ||
+ | return this.$tip | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.arrow = function () { | ||
+ | return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.enable = function () { | ||
+ | this.enabled = true | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.disable = function () { | ||
+ | this.enabled = false | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.toggleEnabled = function () { | ||
+ | this.enabled = !this.enabled | ||
+ | } | ||
+ | |||
+ | Tooltip.prototype.toggle = function (e) { | ||
+ | var self = this | ||
+ | if (e) { | ||
+ | self = $(e.currentTarget).data('bs.' + this.type) | ||
+ | if (!self) { | ||
+ | self = new this.constructor(e.currentTarget, this.getDelegateOptions()) | ||
+ | $(e.currentTarget).data('bs.' + this.type, self) | ||
+ | } | ||
} | } | ||
+ | |||
+ | if (e) { | ||
+ | self.inState.click = !self.inState.click | ||
+ | if (self.isInStateTrue()) | ||
+ | self.enter(self) | ||
+ | else | ||
+ | self.leave(self) | ||
+ | } else { | ||
+ | self.tip().hasClass('in') ? self.leave(self) : self.enter(self) | ||
} | } | ||
− | + | } | |
− | + | ||
− | var | + | Tooltip.prototype.destroy = function () { |
− | if ( | + | var that = this |
− | + | clearTimeout(this.timeout) | |
+ | this.hide(function () { | ||
+ | that.$element.off('.' + that.type).removeData('bs.' + that.type) | ||
+ | if (that.$tip) { | ||
+ | that.$tip.detach() | ||
+ | } | ||
+ | that.$tip = null | ||
+ | that.$arrow = null | ||
+ | that.$viewport = null | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | |||
+ | // TOOLTIP PLUGIN DEFINITION | ||
+ | // ========================= | ||
+ | |||
+ | function Plugin(option) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.tooltip') | ||
+ | var options = typeof option == 'object' && option | ||
+ | |||
+ | if (!data && /destroy|hide/.test(option)) | ||
+ | return | ||
+ | if (!data) | ||
+ | $this.data('bs.tooltip', (data = new Tooltip(this, options))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option]() | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.tooltip | ||
+ | |||
+ | $.fn.tooltip = Plugin | ||
+ | $.fn.tooltip.Constructor = Tooltip | ||
+ | |||
+ | |||
+ | // TOOLTIP NO CONFLICT | ||
+ | // =================== | ||
+ | |||
+ | $.fn.tooltip.noConflict = function () { | ||
+ | $.fn.tooltip = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: popover.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#popovers | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // POPOVER PUBLIC CLASS DEFINITION | ||
+ | // =============================== | ||
+ | |||
+ | var Popover = function (element, options) { | ||
+ | this.init('popover', element, options) | ||
+ | } | ||
+ | |||
+ | if (!$.fn.tooltip) | ||
+ | throw new Error('Popover requires tooltip.js') | ||
+ | |||
+ | Popover.VERSION = '3.3.5' | ||
+ | |||
+ | Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { | ||
+ | placement: 'right', | ||
+ | trigger: 'click', | ||
+ | content: '', | ||
+ | template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' | ||
+ | }) | ||
+ | |||
+ | |||
+ | // NOTE: POPOVER EXTENDS tooltip.js | ||
+ | // ================================ | ||
+ | |||
+ | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) | ||
+ | |||
+ | Popover.prototype.constructor = Popover | ||
+ | |||
+ | Popover.prototype.getDefaults = function () { | ||
+ | return Popover.DEFAULTS | ||
+ | } | ||
+ | |||
+ | Popover.prototype.setContent = function () { | ||
+ | var $tip = this.tip() | ||
+ | var title = this.getTitle() | ||
+ | var content = this.getContent() | ||
+ | |||
+ | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) | ||
+ | $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events | ||
+ | this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' | ||
+ | ](content) | ||
+ | |||
+ | $tip.removeClass('fade top bottom left right in') | ||
+ | |||
+ | // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do | ||
+ | // this manually by checking the contents. | ||
+ | if (!$tip.find('.popover-title').html()) | ||
+ | $tip.find('.popover-title').hide() | ||
+ | } | ||
+ | |||
+ | Popover.prototype.hasContent = function () { | ||
+ | return this.getTitle() || this.getContent() | ||
+ | } | ||
+ | |||
+ | Popover.prototype.getContent = function () { | ||
+ | var $e = this.$element | ||
+ | var o = this.options | ||
+ | |||
+ | return $e.attr('data-content') | ||
+ | || (typeof o.content == 'function' ? | ||
+ | o.content.call($e[0]) : | ||
+ | o.content) | ||
+ | } | ||
+ | |||
+ | Popover.prototype.arrow = function () { | ||
+ | return (this.$arrow = this.$arrow || this.tip().find('.arrow')) | ||
+ | } | ||
+ | |||
+ | |||
+ | // POPOVER PLUGIN DEFINITION | ||
+ | // ========================= | ||
+ | |||
+ | function Plugin(option) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.popover') | ||
+ | var options = typeof option == 'object' && option | ||
+ | |||
+ | if (!data && /destroy|hide/.test(option)) | ||
+ | return | ||
+ | if (!data) | ||
+ | $this.data('bs.popover', (data = new Popover(this, options))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option]() | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.popover | ||
+ | |||
+ | $.fn.popover = Plugin | ||
+ | $.fn.popover.Constructor = Popover | ||
+ | |||
+ | |||
+ | // POPOVER NO CONFLICT | ||
+ | // =================== | ||
+ | |||
+ | $.fn.popover.noConflict = function () { | ||
+ | $.fn.popover = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: scrollspy.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#scrollspy | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // SCROLLSPY CLASS DEFINITION | ||
+ | // ========================== | ||
+ | |||
+ | function ScrollSpy(element, options) { | ||
+ | this.$body = $(document.body) | ||
+ | this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) | ||
+ | this.options = $.extend({}, ScrollSpy.DEFAULTS, options) | ||
+ | this.selector = (this.options.target || '') + ' .nav li > a' | ||
+ | this.offsets = [] | ||
+ | this.targets = [] | ||
+ | this.activeTarget = null | ||
+ | this.scrollHeight = 0 | ||
+ | |||
+ | this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) | ||
+ | this.refresh() | ||
+ | this.process() | ||
+ | } | ||
+ | |||
+ | ScrollSpy.VERSION = '3.3.5' | ||
+ | |||
+ | ScrollSpy.DEFAULTS = { | ||
+ | offset: 10 | ||
+ | } | ||
+ | |||
+ | ScrollSpy.prototype.getScrollHeight = function () { | ||
+ | return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) | ||
+ | } | ||
+ | |||
+ | ScrollSpy.prototype.refresh = function () { | ||
+ | var that = this | ||
+ | var offsetMethod = 'offset' | ||
+ | var offsetBase = 0 | ||
+ | |||
+ | this.offsets = [] | ||
+ | this.targets = [] | ||
+ | this.scrollHeight = this.getScrollHeight() | ||
+ | |||
+ | if (!$.isWindow(this.$scrollElement[0])) { | ||
+ | offsetMethod = 'position' | ||
+ | offsetBase = this.$scrollElement.scrollTop() | ||
} | } | ||
− | + | ||
− | + | this.$body | |
+ | .find(this.selector) | ||
+ | .map(function () { | ||
+ | var $el = $(this) | ||
+ | var href = $el.data('target') || $el.attr('href') | ||
+ | var $href = /^#./.test(href) && $(href) | ||
+ | |||
+ | return ($href | ||
+ | && $href.length | ||
+ | && $href.is(':visible') | ||
+ | && [[$href[offsetMethod]().top + offsetBase, href]]) || null | ||
+ | }) | ||
+ | .sort(function (a, b) { | ||
+ | return a[0] - b[0] | ||
+ | }) | ||
+ | .each(function () { | ||
+ | that.offsets.push(this[0]) | ||
+ | that.targets.push(this[1]) | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | ScrollSpy.prototype.process = function () { | ||
+ | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset | ||
+ | var scrollHeight = this.getScrollHeight() | ||
+ | var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() | ||
+ | var offsets = this.offsets | ||
+ | var targets = this.targets | ||
+ | var activeTarget = this.activeTarget | ||
+ | var i | ||
+ | |||
+ | if (this.scrollHeight != scrollHeight) { | ||
+ | this.refresh() | ||
} | } | ||
− | if ( | + | |
− | + | if (scrollTop >= maxScroll) { | |
+ | return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) | ||
} | } | ||
− | + | ||
− | + | if (activeTarget && scrollTop < offsets[0]) { | |
− | + | this.activeTarget = null | |
− | + | return this.clear() | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
− | + | ||
− | + | for (i = offsets.length; i--; ) { | |
− | + | activeTarget != targets[i] | |
− | + | && scrollTop >= offsets[i] | |
− | + | && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) | |
− | + | && this.activate(targets[i]) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
− | + | } | |
− | + | ||
− | + | ScrollSpy.prototype.activate = function (target) { | |
− | var | + | this.activeTarget = target |
− | + | ||
− | + | this.clear() | |
− | + | ||
− | + | var selector = this.selector + | |
− | + | '[data-target="' + target + '"],' + | |
− | + | this.selector + '[href="' + target + '"]' | |
− | if ( | + | |
− | + | var active = $(selector) | |
+ | .parents('li') | ||
+ | .addClass('active') | ||
+ | |||
+ | if (active.parent('.dropdown-menu').length) { | ||
+ | active = active | ||
+ | .closest('li.dropdown') | ||
+ | .addClass('active') | ||
} | } | ||
− | + | active.trigger('activate.bs.scrollspy') | |
− | + | } | |
− | + | ||
− | + | ScrollSpy.prototype.clear = function () { | |
− | if ( | + | $(this.selector) |
− | + | .parentsUntil(this.options.target, '.active') | |
− | + | .removeClass('active') | |
− | + | } | |
+ | |||
+ | |||
+ | // SCROLLSPY PLUGIN DEFINITION | ||
+ | // =========================== | ||
+ | |||
+ | function Plugin(option) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.scrollspy') | ||
+ | var options = typeof option == 'object' && option | ||
+ | |||
+ | if (!data) | ||
+ | $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option]() | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.scrollspy | ||
+ | |||
+ | $.fn.scrollspy = Plugin | ||
+ | $.fn.scrollspy.Constructor = ScrollSpy | ||
+ | |||
+ | |||
+ | // SCROLLSPY NO CONFLICT | ||
+ | // ===================== | ||
+ | |||
+ | $.fn.scrollspy.noConflict = function () { | ||
+ | $.fn.scrollspy = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | |||
+ | // SCROLLSPY DATA-API | ||
+ | // ================== | ||
+ | |||
+ | $(window).on('load.bs.scrollspy.data-api', function () { | ||
+ | $('[data-spy="scroll"]').each(function () { | ||
+ | var $spy = $(this) | ||
+ | Plugin.call($spy, $spy.data()) | ||
+ | }) | ||
+ | }) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: tab.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#tabs | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // TAB CLASS DEFINITION | ||
+ | // ==================== | ||
+ | |||
+ | var Tab = function (element) { | ||
+ | // jscs:disable requireDollarBeforejQueryAssignment | ||
+ | this.element = $(element) | ||
+ | // jscs:enable requireDollarBeforejQueryAssignment | ||
+ | } | ||
+ | |||
+ | Tab.VERSION = '3.3.5' | ||
+ | |||
+ | Tab.TRANSITION_DURATION = 150 | ||
+ | |||
+ | Tab.prototype.show = function () { | ||
+ | var $this = this.element | ||
+ | var $ul = $this.closest('ul:not(.dropdown-menu)') | ||
+ | var selector = $this.data('target') | ||
+ | |||
+ | if (!selector) { | ||
+ | selector = $this.attr('href') | ||
+ | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 | ||
} | } | ||
− | + | ||
− | + | if ($this.parent('li').hasClass('active')) | |
− | }) | + | return |
− | + | ||
− | + | var $previous = $ul.find('.active:last a') | |
− | + | var hideEvent = $.Event('hide.bs.tab', { | |
− | }) | + | relatedTarget: $this[0] |
− | + | }) | |
− | + | var showEvent = $.Event('show.bs.tab', { | |
− | + | relatedTarget: $previous[0] | |
− | + | }) | |
+ | |||
+ | $previous.trigger(hideEvent) | ||
+ | $this.trigger(showEvent) | ||
+ | |||
+ | if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | var $target = $(selector) | ||
+ | |||
+ | this.activate($this.closest('li'), $ul) | ||
+ | this.activate($target, $target.parent(), function () { | ||
+ | $previous.trigger({ | ||
+ | type: 'hidden.bs.tab', | ||
+ | relatedTarget: $this[0] | ||
+ | }) | ||
+ | $this.trigger({ | ||
+ | type: 'shown.bs.tab', | ||
+ | relatedTarget: $previous[0] | ||
+ | }) | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | Tab.prototype.activate = function (element, container, callback) { | ||
+ | var $active = container.find('> .active') | ||
+ | var transition = callback | ||
+ | && $.support.transition | ||
+ | && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) | ||
+ | |||
+ | function next() { | ||
+ | $active | ||
+ | .removeClass('active') | ||
+ | .find('> .dropdown-menu > .active') | ||
+ | .removeClass('active') | ||
+ | .end() | ||
+ | .find('[data-toggle="tab"]') | ||
+ | .attr('aria-expanded', false) | ||
+ | |||
+ | element | ||
+ | .addClass('active') | ||
+ | .find('[data-toggle="tab"]') | ||
+ | .attr('aria-expanded', true) | ||
+ | |||
+ | if (transition) { | ||
+ | element[0].offsetWidth // reflow for transition | ||
+ | element.addClass('in') | ||
+ | } else { | ||
+ | element.removeClass('fade') | ||
+ | } | ||
+ | |||
+ | if (element.parent('.dropdown-menu').length) { | ||
+ | element | ||
+ | .closest('li.dropdown') | ||
+ | .addClass('active') | ||
+ | .end() | ||
+ | .find('[data-toggle="tab"]') | ||
+ | .attr('aria-expanded', true) | ||
+ | } | ||
+ | |||
+ | callback && callback() | ||
} | } | ||
+ | |||
+ | $active.length && transition ? | ||
+ | $active | ||
+ | .one('bsTransitionEnd', next) | ||
+ | .emulateTransitionEnd(Tab.TRANSITION_DURATION) : | ||
+ | next() | ||
+ | |||
+ | $active.removeClass('in') | ||
+ | } | ||
+ | |||
+ | |||
+ | // TAB PLUGIN DEFINITION | ||
+ | // ===================== | ||
+ | |||
+ | function Plugin(option) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.tab') | ||
+ | |||
+ | if (!data) | ||
+ | $this.data('bs.tab', (data = new Tab(this))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option]() | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.tab | ||
+ | |||
+ | $.fn.tab = Plugin | ||
+ | $.fn.tab.Constructor = Tab | ||
+ | |||
+ | |||
+ | // TAB NO CONFLICT | ||
+ | // =============== | ||
+ | |||
+ | $.fn.tab.noConflict = function () { | ||
+ | $.fn.tab = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | |||
+ | // TAB DATA-API | ||
+ | // ============ | ||
+ | |||
+ | var clickHandler = function (e) { | ||
+ | e.preventDefault() | ||
+ | Plugin.call($(this), 'show') | ||
+ | } | ||
+ | |||
+ | $(document) | ||
+ | .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) | ||
+ | .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | /* ======================================================================== | ||
+ | * Bootstrap: affix.js v3.3.5 | ||
+ | * http://getbootstrap.com/javascript/#affix | ||
+ | * ======================================================================== | ||
+ | * Copyright 2011-2015 Twitter, Inc. | ||
+ | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
+ | * ======================================================================== */ | ||
+ | |||
+ | |||
+ | +function ($) { | ||
+ | 'use strict'; | ||
+ | |||
+ | // AFFIX CLASS DEFINITION | ||
+ | // ====================== | ||
+ | |||
+ | var Affix = function (element, options) { | ||
+ | this.options = $.extend({}, Affix.DEFAULTS, options) | ||
+ | |||
+ | this.$target = $(this.options.target) | ||
+ | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) | ||
+ | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) | ||
+ | |||
+ | this.$element = $(element) | ||
+ | this.affixed = null | ||
+ | this.unpin = null | ||
+ | this.pinnedOffset = null | ||
+ | |||
+ | this.checkPosition() | ||
+ | } | ||
+ | |||
+ | Affix.VERSION = '3.3.5' | ||
+ | |||
+ | Affix.RESET = 'affix affix-top affix-bottom' | ||
+ | |||
+ | Affix.DEFAULTS = { | ||
+ | offset: 0, | ||
+ | target: window | ||
+ | } | ||
+ | |||
+ | Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { | ||
+ | var scrollTop = this.$target.scrollTop() | ||
+ | var position = this.$element.offset() | ||
+ | var targetHeight = this.$target.height() | ||
+ | |||
+ | if (offsetTop != null && this.affixed == 'top') | ||
+ | return scrollTop < offsetTop ? 'top' : false | ||
+ | |||
+ | if (this.affixed == 'bottom') { | ||
+ | if (offsetTop != null) | ||
+ | return (scrollTop + this.unpin <= position.top) ? false : 'bottom' | ||
+ | return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' | ||
} | } | ||
− | + | ||
− | + | var initializing = this.affixed == null | |
− | + | var colliderTop = initializing ? scrollTop : position.top | |
− | var | + | var colliderHeight = initializing ? targetHeight : height |
− | if ( | + | |
− | return | + | if (offsetTop != null && scrollTop <= offsetTop) |
+ | return 'top' | ||
+ | if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) | ||
+ | return 'bottom' | ||
+ | |||
+ | return false | ||
+ | } | ||
+ | |||
+ | Affix.prototype.getPinnedOffset = function () { | ||
+ | if (this.pinnedOffset) | ||
+ | return this.pinnedOffset | ||
+ | this.$element.removeClass(Affix.RESET).addClass('affix') | ||
+ | var scrollTop = this.$target.scrollTop() | ||
+ | var position = this.$element.offset() | ||
+ | return (this.pinnedOffset = position.top - scrollTop) | ||
+ | } | ||
+ | |||
+ | Affix.prototype.checkPositionWithEventLoop = function () { | ||
+ | setTimeout($.proxy(this.checkPosition, this), 1) | ||
+ | } | ||
+ | |||
+ | Affix.prototype.checkPosition = function () { | ||
+ | if (!this.$element.is(':visible')) | ||
+ | return | ||
+ | |||
+ | var height = this.$element.height() | ||
+ | var offset = this.options.offset | ||
+ | var offsetTop = offset.top | ||
+ | var offsetBottom = offset.bottom | ||
+ | var scrollHeight = Math.max($(document).height(), $(document.body).height()) | ||
+ | |||
+ | if (typeof offset != 'object') | ||
+ | offsetBottom = offsetTop = offset | ||
+ | if (typeof offsetTop == 'function') | ||
+ | offsetTop = offset.top(this.$element) | ||
+ | if (typeof offsetBottom == 'function') | ||
+ | offsetBottom = offset.bottom(this.$element) | ||
+ | |||
+ | var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) | ||
+ | |||
+ | if (this.affixed != affix) { | ||
+ | if (this.unpin != null) | ||
+ | this.$element.css('top', '') | ||
+ | |||
+ | var affixType = 'affix' + (affix ? '-' + affix : '') | ||
+ | var e = $.Event(affixType + '.bs.affix') | ||
+ | |||
+ | this.$element.trigger(e) | ||
+ | |||
+ | if (e.isDefaultPrevented()) | ||
+ | return | ||
+ | |||
+ | this.affixed = affix | ||
+ | this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null | ||
+ | |||
+ | this.$element | ||
+ | .removeClass(Affix.RESET) | ||
+ | .addClass(affixType) | ||
+ | .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') | ||
} | } | ||
− | + | ||
− | + | if (affix == 'bottom') { | |
− | + | this.$element.offset({ | |
− | + | top: scrollHeight - height - offsetBottom | |
− | + | }) | |
− | + | ||
} | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // AFFIX PLUGIN DEFINITION | ||
+ | // ======================= | ||
+ | |||
+ | function Plugin(option) { | ||
+ | return this.each(function () { | ||
+ | var $this = $(this) | ||
+ | var data = $this.data('bs.affix') | ||
+ | var options = typeof option == 'object' && option | ||
+ | |||
+ | if (!data) | ||
+ | $this.data('bs.affix', (data = new Affix(this, options))) | ||
+ | if (typeof option == 'string') | ||
+ | data[option]() | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | var old = $.fn.affix | ||
+ | |||
+ | $.fn.affix = Plugin | ||
+ | $.fn.affix.Constructor = Affix | ||
+ | |||
+ | |||
+ | // AFFIX NO CONFLICT | ||
+ | // ================= | ||
+ | |||
+ | $.fn.affix.noConflict = function () { | ||
+ | $.fn.affix = old | ||
+ | return this | ||
+ | } | ||
+ | |||
+ | |||
+ | // AFFIX DATA-API | ||
+ | // ============== | ||
+ | |||
+ | $(window).on('load', function () { | ||
+ | $('[data-spy="affix"]').each(function () { | ||
+ | var $spy = $(this) | ||
+ | var data = $spy.data() | ||
+ | |||
+ | data.offset = data.offset || {} | ||
+ | |||
+ | if (data.offsetBottom != null) | ||
+ | data.offset.bottom = data.offsetBottom | ||
+ | if (data.offsetTop != null) | ||
+ | data.offset.top = data.offsetTop | ||
+ | |||
+ | Plugin.call($spy, data) | ||
+ | }) | ||
+ | }) | ||
+ | |||
+ | }(jQuery); | ||
+ | |||
+ | </script> | ||
+ | <!--end custom--> | ||
+ | <!-- start custom.js --> | ||
+ | <script type="text/javascript"> | ||
+ | $(document).ready(function () { | ||
+ | /***************** Navbar-Collapse ******************/ | ||
+ | |||
+ | $(window).scroll(function () { | ||
+ | if ($(".navbar").offset().top > 50) { | ||
+ | $(".navbar-fixed-top").addClass("top-nav-collapse"); | ||
+ | } else { | ||
+ | $(".navbar-fixed-top").removeClass("top-nav-collapse"); | ||
+ | } | ||
+ | }); | ||
+ | /***************** Page Scroll ******************/ | ||
+ | |||
+ | $(function () { | ||
+ | $('a.page-scroll').bind('click', function (event) { | ||
+ | var $anchor = $(this); | ||
+ | $('html, body').stop().animate({ | ||
+ | scrollTop: $($anchor.attr('href')).offset().top | ||
+ | }, 1500, 'easeInOutExpo'); | ||
+ | event.preventDefault(); | ||
}); | }); | ||
− | + | }); | |
− | + | /***************** Scroll Spy ******************/ | |
− | + | ||
− | + | $('body').scrollspy({ | |
− | + | target: '.navbar-fixed-top', | |
− | + | offset: 51 | |
− | + | }) | |
− | + | ||
− | + | /***************** Owl Carousel ******************/ | |
− | + | ||
− | + | $("#owl-hero").owlCarousel({ | |
− | + | navigation: true, // Show next and prev buttons | |
− | + | slideSpeed: 300, | |
− | } | + | paginationSpeed: 400, |
− | + | singleItem: true, | |
− | + | transitionStyle: "fadeUp", | |
− | + | autoPlay: true, | |
− | + | navigationText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"] | |
− | + | ||
+ | }); | ||
+ | /***************** Full Width Slide ******************/ | ||
+ | |||
+ | var slideHeight = $(window).height(); | ||
+ | $('#owl-hero .item').css('height', slideHeight); | ||
+ | $(window).resize(function () { | ||
+ | $('#owl-hero .item').css('height', slideHeight); | ||
+ | }); | ||
+ | /***************** Owl Carousel Testimonials ******************/ | ||
+ | |||
+ | $("#owl-testi").owlCarousel({ | ||
+ | navigation: false, // Show next and prev buttons | ||
+ | paginationSpeed: 400, | ||
+ | singleItem: true, | ||
+ | transitionStyle: "backSlide", | ||
+ | autoPlay: true | ||
+ | |||
+ | }); | ||
+ | /***************** Countdown ******************/ | ||
+ | |||
+ | $('#fun-facts').bind('inview', function (event, visible, visiblePartX, visiblePartY) { | ||
+ | if (visible) { | ||
+ | $(this).find('.timer').each(function () { | ||
+ | var $this = $(this); | ||
+ | $({ | ||
+ | Counter: 0 | ||
+ | }).animate({ | ||
+ | Counter: $this.text() | ||
+ | }, { | ||
+ | duration: 2000, | ||
+ | easing: 'swing', | ||
+ | step: function () { | ||
+ | $this.text(Math.ceil(this.Counter)); | ||
+ | } | ||
+ | }); | ||
+ | }); | ||
+ | $(this).unbind('inview'); | ||
} | } | ||
+ | }); | ||
+ | /***************** Google Map ******************/ | ||
+ | |||
+ | function initialize() { | ||
+ | var mapCanvas = document.getElementById('map'); | ||
+ | var mapOptions = { | ||
+ | center: new google.maps.LatLng(39.92757, -83.160207), | ||
+ | zoom: 8, | ||
+ | mapTypeId: google.maps.MapTypeId.ROADMAP | ||
} | } | ||
+ | var map = new google.maps.Map(mapCanvas, mapOptions); | ||
+ | } | ||
+ | |||
+ | google.maps.event.addDomListener(window, 'load', initialize); | ||
+ | /***************** Wow.js ******************/ | ||
+ | |||
+ | new WOW().init(); | ||
+ | /***************** Preloader ******************/ | ||
+ | |||
+ | var preloader = $('.preloader'); | ||
+ | $(window).load(function () { | ||
+ | preloader.remove(); | ||
+ | }); | ||
+ | }) | ||
+ | </script> | ||
+ | <!--end custom--> | ||
+ | <!-- ############ JS PLUGINS ############ --> | ||
+ | <!--start owl carousel--> | ||
+ | <script type="text/javascript"> | ||
+ | /* | ||
+ | * jQuery OwlCarousel v1.3.3 | ||
+ | * | ||
+ | * Copyright (c) 2013 Bartosz Wojciechowski | ||
+ | * http://www.owlgraphic.com/owlcarousel/ | ||
+ | * | ||
+ | * Licensed under MIT | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | /*JS Lint helpers: */ | ||
+ | /*global dragMove: false, dragEnd: false, $, jQuery, alert, window, document */ | ||
+ | /*jslint nomen: true, continue:true */ | ||
+ | |||
+ | if (typeof Object.create !== "function") { | ||
+ | Object.create = function (obj) { | ||
+ | function F() {} | ||
+ | F.prototype = obj; | ||
+ | return new F(); | ||
+ | }; | ||
+ | } | ||
+ | (function ($, window, document) { | ||
+ | |||
+ | var Carousel = { | ||
+ | init: function (options, el) { | ||
+ | var base = this; | ||
+ | base.$elem = $(el); | ||
+ | base.options = $.extend({}, $.fn.owlCarousel.options, base.$elem.data(), options); | ||
+ | base.userOptions = options; | ||
+ | base.loadContent(); | ||
}, | }, | ||
− | + | loadContent: function () { | |
− | + | var base = this, url; | |
− | + | function getData(data) { | |
− | + | var i, content = ""; | |
− | + | if (typeof base.options.jsonSuccess === "function") { | |
− | + | base.options.jsonSuccess.apply(this, [data]); | |
− | + | } else { | |
− | + | for (i in data.owl) { | |
− | + | if (data.owl.hasOwnProperty(i)) { | |
− | + | content += data.owl[i].item; | |
− | + | } | |
+ | } | ||
+ | base.$elem.html(content); | ||
+ | } | ||
+ | base.logIn(); | ||
+ | } | ||
+ | |||
+ | if (typeof base.options.beforeInit === "function") { | ||
+ | base.options.beforeInit.apply(this, [base.$elem]); | ||
+ | } | ||
+ | |||
+ | if (typeof base.options.jsonPath === "string") { | ||
+ | url = base.options.jsonPath; | ||
+ | $.getJSON(url, getData); | ||
+ | } else { | ||
+ | base.logIn(); | ||
+ | } | ||
}, | }, | ||
− | + | logIn: function () { | |
− | + | var base = this; | |
− | + | base.$elem.data("owl-originalStyles", base.$elem.attr("style")); | |
− | + | base.$elem.data("owl-originalClasses", base.$elem.attr("class")); | |
− | + | base.$elem.css({opacity: 0}); | |
+ | base.orignalItems = base.options.items; | ||
+ | base.checkBrowser(); | ||
+ | base.wrapperWidth = 0; | ||
+ | base.checkVisible = null; | ||
+ | base.setVars(); | ||
}, | }, | ||
− | next : function ( | + | setVars: function () { |
− | var base = this; | + | var base = this; |
− | if (base. | + | if (base.$elem.children().length === 0) { |
− | return false; | + | return false; |
− | } | + | } |
+ | base.baseClass(); | ||
+ | base.eventTypes(); | ||
+ | base.$userItems = base.$elem.children(); | ||
+ | base.itemsAmount = base.$userItems.length; | ||
+ | base.wrapItems(); | ||
+ | base.$owlItems = base.$elem.find(".owl-item"); | ||
+ | base.$owlWrapper = base.$elem.find(".owl-wrapper"); | ||
+ | base.playDirection = "next"; | ||
+ | base.prevItem = 0; | ||
+ | base.prevArr = [0]; | ||
+ | base.currentItem = 0; | ||
+ | base.customEvents(); | ||
+ | base.onStartup(); | ||
+ | }, | ||
+ | onStartup: function () { | ||
+ | var base = this; | ||
+ | base.updateItems(); | ||
+ | base.calculateAll(); | ||
+ | base.buildControls(); | ||
+ | base.updateControls(); | ||
+ | base.response(); | ||
+ | base.moveEvents(); | ||
+ | base.stopOnHover(); | ||
+ | base.owlStatus(); | ||
+ | if (base.options.transitionStyle !== false) { | ||
+ | base.transitionTypes(base.options.transitionStyle); | ||
+ | } | ||
+ | if (base.options.autoPlay === true) { | ||
+ | base.options.autoPlay = 5000; | ||
+ | } | ||
+ | base.play(); | ||
+ | base.$elem.find(".owl-wrapper").css("display", "block"); | ||
+ | if (!base.$elem.is(":visible")) { | ||
+ | base.watchVisibility(); | ||
+ | } else { | ||
+ | base.$elem.css("opacity", 1); | ||
+ | } | ||
+ | base.onstartup = false; | ||
+ | base.eachMoveUpdate(); | ||
+ | if (typeof base.options.afterInit === "function") { | ||
+ | base.options.afterInit.apply(this, [base.$elem]); | ||
+ | } | ||
+ | }, | ||
+ | eachMoveUpdate: function () { | ||
+ | var base = this; | ||
+ | if (base.options.lazyLoad === true) { | ||
+ | base.lazyLoad(); | ||
+ | } | ||
+ | if (base.options.autoHeight === true) { | ||
+ | base.autoHeight(); | ||
+ | } | ||
+ | base.onVisibleItems(); | ||
+ | if (typeof base.options.afterAction === "function") { | ||
+ | base.options.afterAction.apply(this, [base.$elem]); | ||
+ | } | ||
+ | }, | ||
+ | updateVars: function () { | ||
+ | var base = this; | ||
+ | if (typeof base.options.beforeUpdate === "function") { | ||
+ | base.options.beforeUpdate.apply(this, [base.$elem]); | ||
+ | } | ||
+ | base.watchVisibility(); | ||
+ | base.updateItems(); | ||
+ | base.calculateAll(); | ||
+ | base.updatePosition(); | ||
+ | base.updateControls(); | ||
+ | base.eachMoveUpdate(); | ||
+ | if (typeof base.options.afterUpdate === "function") { | ||
+ | base.options.afterUpdate.apply(this, [base.$elem]); | ||
+ | } | ||
+ | }, | ||
+ | reload: function () { | ||
+ | var base = this; | ||
+ | window.setTimeout(function () { | ||
+ | base.updateVars(); | ||
+ | }, 0); | ||
+ | }, | ||
+ | watchVisibility: function () { | ||
+ | var base = this; | ||
+ | if (base.$elem.is(":visible") === false) { | ||
+ | base.$elem.css({opacity: 0}); | ||
+ | window.clearInterval(base.autoPlayInterval); | ||
+ | window.clearInterval(base.checkVisible); | ||
+ | } else { | ||
+ | return false; | ||
+ | } | ||
+ | base.checkVisible = window.setInterval(function () { | ||
+ | if (base.$elem.is(":visible")) { | ||
+ | base.reload(); | ||
+ | base.$elem.animate({opacity: 1}, 200); | ||
+ | window.clearInterval(base.checkVisible); | ||
+ | } | ||
+ | }, 500); | ||
+ | }, | ||
+ | wrapItems: function () { | ||
+ | var base = this; | ||
+ | base.$userItems.wrapAll("<div class=\"owl-wrapper\">").wrap("<div class=\"owl-item\"></div>"); | ||
+ | base.$elem.find(".owl-wrapper").wrap("<div class=\"owl-wrapper-outer\">"); | ||
+ | base.wrapperOuter = base.$elem.find(".owl-wrapper-outer"); | ||
+ | base.$elem.css("display", "block"); | ||
+ | }, | ||
+ | baseClass: function () { | ||
+ | var base = this, | ||
+ | hasBaseClass = base.$elem.hasClass(base.options.baseClass), | ||
+ | hasThemeClass = base.$elem.hasClass(base.options.theme); | ||
+ | if (!hasBaseClass) { | ||
+ | base.$elem.addClass(base.options.baseClass); | ||
+ | } | ||
− | + | if (!hasThemeClass) { | |
− | + | base.$elem.addClass(base.options.theme); | |
− | + | } | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
}, | }, | ||
− | + | updateItems: function () { | |
− | + | var base = this, width, i; | |
− | + | if (base.options.responsive === false) { | |
− | + | return false; | |
− | + | } | |
+ | if (base.options.singleItem === true) { | ||
+ | base.options.items = base.orignalItems = 1; | ||
+ | base.options.itemsCustom = false; | ||
+ | base.options.itemsDesktop = false; | ||
+ | base.options.itemsDesktopSmall = false; | ||
+ | base.options.itemsTablet = false; | ||
+ | base.options.itemsTabletSmall = false; | ||
+ | base.options.itemsMobile = false; | ||
+ | return false; | ||
+ | } | ||
− | + | width = $(base.options.responsiveBaseWidth).width(); | |
− | + | if (width > (base.options.itemsDesktop[0] || base.orignalItems)) { | |
− | + | base.options.items = base.orignalItems; | |
− | + | } | |
− | + | if (base.options.itemsCustom !== false) { | |
− | + | //Reorder array by screen size | |
− | + | base.options.itemsCustom.sort(function (a, b) { | |
− | + | return a[0] - b[0]; | |
− | + | }); | |
− | + | for (i = 0; i < base.options.itemsCustom.length; i += 1) { | |
− | + | if (base.options.itemsCustom[i][0] <= width) { | |
− | + | base.options.items = base.options.itemsCustom[i][1]; | |
− | + | } | |
− | + | } | |
− | + | ||
+ | } else { | ||
+ | |||
+ | if (width <= base.options.itemsDesktop[0] && base.options.itemsDesktop !== false) { | ||
+ | base.options.items = base.options.itemsDesktop[1]; | ||
+ | } | ||
+ | |||
+ | if (width <= base.options.itemsDesktopSmall[0] && base.options.itemsDesktopSmall !== false) { | ||
+ | base.options.items = base.options.itemsDesktopSmall[1]; | ||
+ | } | ||
+ | |||
+ | if (width <= base.options.itemsTablet[0] && base.options.itemsTablet !== false) { | ||
+ | base.options.items = base.options.itemsTablet[1]; | ||
+ | } | ||
+ | |||
+ | if (width <= base.options.itemsTabletSmall[0] && base.options.itemsTabletSmall !== false) { | ||
+ | base.options.items = base.options.itemsTabletSmall[1]; | ||
+ | } | ||
+ | |||
+ | if (width <= base.options.itemsMobile[0] && base.options.itemsMobile !== false) { | ||
+ | base.options.items = base.options.itemsMobile[1]; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //if number of items is less than declared | ||
+ | if (base.options.items > base.itemsAmount && base.options.itemsScaleUp === true) { | ||
+ | base.options.items = base.itemsAmount; | ||
+ | } | ||
}, | }, | ||
− | + | response: function () { | |
− | + | var base = this, | |
− | + | smallDelay, | |
− | + | lastWindowWidth; | |
− | + | if (base.options.responsive !== true) { | |
− | } | + | return false; |
− | if ( | + | } |
− | base. | + | lastWindowWidth = $(window).width(); |
− | } | + | base.resizer = function () { |
− | if ( | + | if ($(window).width() !== lastWindowWidth) { |
− | + | if (base.options.autoPlay !== false) { | |
− | } | + | window.clearInterval(base.autoPlayInterval); |
− | + | } | |
− | } | + | window.clearTimeout(smallDelay); |
+ | smallDelay = window.setTimeout(function () { | ||
+ | lastWindowWidth = $(window).width(); | ||
+ | base.updateVars(); | ||
+ | }, base.options.responsiveRefreshRate); | ||
+ | } | ||
+ | }; | ||
+ | $(window).resize(base.resizer); | ||
+ | }, | ||
+ | updatePosition: function () { | ||
+ | var base = this; | ||
+ | base.jumpTo(base.currentItem); | ||
+ | if (base.options.autoPlay !== false) { | ||
+ | base.checkAp(); | ||
+ | } | ||
+ | }, | ||
+ | appendItemsSizes: function () { | ||
+ | var base = this, | ||
+ | roundPages = 0, | ||
+ | lastItem = base.itemsAmount - base.options.items; | ||
+ | base.$owlItems.each(function (index) { | ||
+ | var $this = $(this); | ||
+ | $this | ||
+ | .css({"width": base.itemWidth}) | ||
+ | .data("owl-item", Number(index)); | ||
+ | if (index % base.options.items === 0 || index === lastItem) { | ||
+ | if (!(index > lastItem)) { | ||
+ | roundPages += 1; | ||
+ | } | ||
+ | } | ||
+ | $this.data("owl-roundPages", roundPages); | ||
+ | }); | ||
+ | }, | ||
+ | appendWrapperSizes: function () { | ||
+ | var base = this, | ||
+ | width = base.$owlItems.length * base.itemWidth; | ||
+ | base.$owlWrapper.css({ | ||
+ | "width": width * 2, | ||
+ | "left": 0 | ||
+ | }); | ||
+ | base.appendItemsSizes(); | ||
+ | }, | ||
+ | calculateAll: function () { | ||
+ | var base = this; | ||
+ | base.calculateWidth(); | ||
+ | base.appendWrapperSizes(); | ||
+ | base.loops(); | ||
+ | base.max(); | ||
+ | }, | ||
+ | calculateWidth: function () { | ||
+ | var base = this; | ||
+ | base.itemWidth = Math.round(base.$elem.width() / base.options.items); | ||
+ | }, | ||
+ | max: function () { | ||
+ | var base = this, | ||
+ | maximum = ((base.itemsAmount * base.itemWidth) - base.options.items * base.itemWidth) * -1; | ||
+ | if (base.options.items > base.itemsAmount) { | ||
+ | base.maximumItem = 0; | ||
+ | maximum = 0; | ||
+ | base.maximumPixels = 0; | ||
+ | } else { | ||
+ | base.maximumItem = base.itemsAmount - base.options.items; | ||
+ | base.maximumPixels = maximum; | ||
+ | } | ||
+ | return maximum; | ||
+ | }, | ||
+ | min: function () { | ||
+ | return 0; | ||
+ | }, | ||
+ | loops: function () { | ||
+ | var base = this, | ||
+ | prev = 0, | ||
+ | elWidth = 0, | ||
+ | i, | ||
+ | item, | ||
+ | roundPageNum; | ||
+ | base.positionsInArray = [0]; | ||
+ | base.pagesInArray = []; | ||
+ | for (i = 0; i < base.itemsAmount; i += 1) { | ||
+ | elWidth += base.itemWidth; | ||
+ | base.positionsInArray.push(-elWidth); | ||
+ | if (base.options.scrollPerPage === true) { | ||
+ | item = $(base.$owlItems[i]); | ||
+ | roundPageNum = item.data("owl-roundPages"); | ||
+ | if (roundPageNum !== prev) { | ||
+ | base.pagesInArray[prev] = base.positionsInArray[i]; | ||
+ | prev = roundPageNum; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | buildControls: function () { | ||
+ | var base = this; | ||
+ | if (base.options.navigation === true || base.options.pagination === true) { | ||
+ | base.owlControls = $("<div class=\"owl-controls\"/>").toggleClass("clickable", !base.browser.isTouch).appendTo(base.$elem); | ||
+ | } | ||
+ | if (base.options.pagination === true) { | ||
+ | base.buildPagination(); | ||
+ | } | ||
+ | if (base.options.navigation === true) { | ||
+ | base.buildButtons(); | ||
+ | } | ||
+ | }, | ||
+ | buildButtons: function () { | ||
+ | var base = this, | ||
+ | buttonsWrapper = $("<div class=\"owl-buttons\"/>"); | ||
+ | base.owlControls.append(buttonsWrapper); | ||
+ | base.buttonPrev = $("<div/>", { | ||
+ | "class": "owl-prev", | ||
+ | "html": base.options.navigationText[0] || "" | ||
+ | }); | ||
+ | base.buttonNext = $("<div/>", { | ||
+ | "class": "owl-next", | ||
+ | "html": base.options.navigationText[1] || "" | ||
+ | }); | ||
+ | buttonsWrapper | ||
+ | .append(base.buttonPrev) | ||
+ | .append(base.buttonNext); | ||
+ | buttonsWrapper.on("touchstart.owlControls mousedown.owlControls", "div[class^=\"owl\"]", function (event) { | ||
+ | event.preventDefault(); | ||
+ | }); | ||
+ | buttonsWrapper.on("touchend.owlControls mouseup.owlControls", "div[class^=\"owl\"]", function (event) { | ||
+ | event.preventDefault(); | ||
+ | if ($(this).hasClass("owl-next")) { | ||
+ | base.next(); | ||
+ | } else { | ||
+ | base.prev(); | ||
+ | } | ||
+ | }); | ||
+ | }, | ||
+ | buildPagination: function () { | ||
+ | var base = this; | ||
+ | base.paginationWrapper = $("<div class=\"owl-pagination\"/>"); | ||
+ | base.owlControls.append(base.paginationWrapper); | ||
+ | base.paginationWrapper.on("touchend.owlControls mouseup.owlControls", ".owl-page", function (event) { | ||
+ | event.preventDefault(); | ||
+ | if (Number($(this).data("owl-page")) !== base.currentItem) { | ||
+ | base.goTo(Number($(this).data("owl-page")), true); | ||
+ | } | ||
+ | }); | ||
+ | }, | ||
+ | updatePagination: function () { | ||
+ | var base = this, | ||
+ | counter, | ||
+ | lastPage, | ||
+ | lastItem, | ||
+ | i, | ||
+ | paginationButton, | ||
+ | paginationButtonInner; | ||
+ | if (base.options.pagination === false) { | ||
+ | return false; | ||
+ | } | ||
− | + | base.paginationWrapper.html(""); | |
− | + | counter = 0; | |
− | + | lastPage = base.itemsAmount - base.itemsAmount % base.options.items; | |
− | + | for (i = 0; i < base.itemsAmount; i += 1) { | |
− | + | if (i % base.options.items === 0) { | |
− | + | counter += 1; | |
− | + | if (lastPage === i) { | |
− | + | lastItem = base.itemsAmount - base.options.items; | |
− | + | } | |
− | + | paginationButton = $("<div/>", { | |
− | + | "class": "owl-page" | |
− | + | }); | |
− | + | paginationButtonInner = $("<span></span>", { | |
− | + | "text": base.options.paginationNumbers === true ? counter : "", | |
− | + | "class": base.options.paginationNumbers === true ? "owl-numbers" : "" | |
− | + | }); | |
− | + | paginationButton.append(paginationButtonInner); | |
− | + | paginationButton.data("owl-page", lastPage === i ? lastItem : i); | |
− | + | paginationButton.data("owl-roundPages", counter); | |
− | + | base.paginationWrapper.append(paginationButton); | |
− | + | } | |
− | + | } | |
− | + | base.checkPagination(); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
}, | }, | ||
− | + | checkPagination: function () { | |
− | + | var base = this; | |
− | + | if (base.options.pagination === false) { | |
− | + | return false; | |
− | + | } | |
− | + | base.paginationWrapper.find(".owl-page").each(function () { | |
− | + | if ($(this).data("owl-roundPages") === $(base.$owlItems[base.currentItem]).data("owl-roundPages")) { | |
− | + | base.paginationWrapper | |
− | + | .find(".owl-page") | |
− | + | .removeClass("active"); | |
− | + | $(this).addClass("active"); | |
− | + | } | |
− | + | }); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
}, | }, | ||
− | + | checkNavigation: function () { | |
− | + | var base = this; | |
− | + | if (base.options.navigation === false) { | |
− | + | return false; | |
− | + | } | |
− | + | if (base.options.rewindNav === false) { | |
− | + | if (base.currentItem === 0 && base.maximumItem === 0) { | |
− | + | base.buttonPrev.addClass("disabled"); | |
− | + | base.buttonNext.addClass("disabled"); | |
− | + | } else if (base.currentItem === 0 && base.maximumItem !== 0) { | |
− | + | base.buttonPrev.addClass("disabled"); | |
− | + | base.buttonNext.removeClass("disabled"); | |
− | + | } else if (base.currentItem === base.maximumItem) { | |
− | + | base.buttonPrev.removeClass("disabled"); | |
− | + | base.buttonNext.addClass("disabled"); | |
− | + | } else if (base.currentItem !== 0 && base.currentItem !== base.maximumItem) { | |
+ | base.buttonPrev.removeClass("disabled"); | ||
+ | base.buttonNext.removeClass("disabled"); | ||
+ | } | ||
+ | } | ||
}, | }, | ||
− | + | updateControls: function () { | |
− | + | var base = this; | |
− | + | base.updatePagination(); | |
− | + | base.checkNavigation(); | |
+ | if (base.owlControls) { | ||
+ | if (base.options.items >= base.itemsAmount) { | ||
+ | base.owlControls.hide(); | ||
+ | } else { | ||
+ | base.owlControls.show(); | ||
+ | } | ||
+ | } | ||
}, | }, | ||
− | + | destroyControls: function () { | |
− | + | var base = this; | |
− | + | if (base.owlControls) { | |
− | + | base.owlControls.remove(); | |
− | + | } | |
}, | }, | ||
− | + | next: function (speed) { | |
− | + | var base = this; | |
− | + | if (base.isTransition) { | |
− | + | return false; | |
− | + | } | |
− | + | ||
− | + | base.currentItem += base.options.scrollPerPage === true ? base.options.items : 1; | |
− | + | if (base.currentItem > base.maximumItem + (base.options.scrollPerPage === true ? (base.options.items - 1) : 0)) { | |
− | + | if (base.options.rewindNav === true) { | |
− | + | base.currentItem = 0; | |
+ | speed = "rewind"; | ||
+ | } else { | ||
+ | base.currentItem = base.maximumItem; | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | base.goTo(base.currentItem, speed); | ||
}, | }, | ||
− | swapSpeed : function ( | + | prev: function (speed) { |
− | var base = this; | + | var base = this; |
− | if (action === "slideSpeed") { | + | if (base.isTransition) { |
− | + | return false; | |
− | + | } | |
− | + | ||
− | + | if (base.options.scrollPerPage === true && base.currentItem > 0 && base.currentItem < base.options.items) { | |
− | + | base.currentItem = 0; | |
− | + | } else { | |
+ | base.currentItem -= base.options.scrollPerPage === true ? base.options.items : 1; | ||
+ | } | ||
+ | if (base.currentItem < 0) { | ||
+ | if (base.options.rewindNav === true) { | ||
+ | base.currentItem = base.maximumItem; | ||
+ | speed = "rewind"; | ||
+ | } else { | ||
+ | base.currentItem = 0; | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | base.goTo(base.currentItem, speed); | ||
+ | }, | ||
+ | goTo: function (position, speed, drag) { | ||
+ | var base = this, | ||
+ | goToPixel; | ||
+ | if (base.isTransition) { | ||
+ | return false; | ||
+ | } | ||
+ | if (typeof base.options.beforeMove === "function") { | ||
+ | base.options.beforeMove.apply(this, [base.$elem]); | ||
+ | } | ||
+ | if (position >= base.maximumItem) { | ||
+ | position = base.maximumItem; | ||
+ | } else if (position <= 0) { | ||
+ | position = 0; | ||
+ | } | ||
+ | |||
+ | base.currentItem = base.owl.currentItem = position; | ||
+ | if (base.options.transitionStyle !== false && drag !== "drag" && base.options.items === 1 && base.browser.support3d === true) { | ||
+ | base.swapSpeed(0); | ||
+ | if (base.browser.support3d === true) { | ||
+ | base.transition3d(base.positionsInArray[position]); | ||
+ | } else { | ||
+ | base.css2slide(base.positionsInArray[position], 1); | ||
+ | } | ||
+ | base.afterGo(); | ||
+ | base.singleItemTransition(); | ||
+ | return false; | ||
+ | } | ||
+ | goToPixel = base.positionsInArray[position]; | ||
+ | if (base.browser.support3d === true) { | ||
+ | base.isCss3Finish = false; | ||
+ | if (speed === true) { | ||
+ | base.swapSpeed("paginationSpeed"); | ||
+ | window.setTimeout(function () { | ||
+ | base.isCss3Finish = true; | ||
+ | }, base.options.paginationSpeed); | ||
+ | } else if (speed === "rewind") { | ||
+ | base.swapSpeed(base.options.rewindSpeed); | ||
+ | window.setTimeout(function () { | ||
+ | base.isCss3Finish = true; | ||
+ | }, base.options.rewindSpeed); | ||
+ | } else { | ||
+ | base.swapSpeed("slideSpeed"); | ||
+ | window.setTimeout(function () { | ||
+ | base.isCss3Finish = true; | ||
+ | }, base.options.slideSpeed); | ||
+ | } | ||
+ | base.transition3d(goToPixel); | ||
+ | } else { | ||
+ | if (speed === true) { | ||
+ | base.css2slide(goToPixel, base.options.paginationSpeed); | ||
+ | } else if (speed === "rewind") { | ||
+ | base.css2slide(goToPixel, base.options.rewindSpeed); | ||
+ | } else { | ||
+ | base.css2slide(goToPixel, base.options.slideSpeed); | ||
+ | } | ||
+ | } | ||
+ | base.afterGo(); | ||
+ | }, | ||
+ | jumpTo: function (position) { | ||
+ | var base = this; | ||
+ | if (typeof base.options.beforeMove === "function") { | ||
+ | base.options.beforeMove.apply(this, [base.$elem]); | ||
+ | } | ||
+ | if (position >= base.maximumItem || position === -1) { | ||
+ | position = base.maximumItem; | ||
+ | } else if (position <= 0) { | ||
+ | position = 0; | ||
+ | } | ||
+ | base.swapSpeed(0); | ||
+ | if (base.browser.support3d === true) { | ||
+ | base.transition3d(base.positionsInArray[position]); | ||
+ | } else { | ||
+ | base.css2slide(base.positionsInArray[position], 1); | ||
+ | } | ||
+ | base.currentItem = base.owl.currentItem = position; | ||
+ | base.afterGo(); | ||
+ | }, | ||
+ | afterGo: function () { | ||
+ | var base = this; | ||
+ | base.prevArr.push(base.currentItem); | ||
+ | base.prevItem = base.owl.prevItem = base.prevArr[base.prevArr.length - 2]; | ||
+ | base.prevArr.shift(0); | ||
+ | if (base.prevItem !== base.currentItem) { | ||
+ | base.checkPagination(); | ||
+ | base.checkNavigation(); | ||
+ | base.eachMoveUpdate(); | ||
+ | if (base.options.autoPlay !== false) { | ||
+ | base.checkAp(); | ||
+ | } | ||
+ | } | ||
+ | if (typeof base.options.afterMove === "function" && base.prevItem !== base.currentItem) { | ||
+ | base.options.afterMove.apply(this, [base.$elem]); | ||
+ | } | ||
+ | }, | ||
+ | stop: function () { | ||
+ | var base = this; | ||
+ | base.apStatus = "stop"; | ||
+ | window.clearInterval(base.autoPlayInterval); | ||
+ | }, | ||
+ | checkAp: function () { | ||
+ | var base = this; | ||
+ | if (base.apStatus !== "stop") { | ||
+ | base.play(); | ||
+ | } | ||
+ | }, | ||
+ | play: function () { | ||
+ | var base = this; | ||
+ | base.apStatus = "play"; | ||
+ | if (base.options.autoPlay === false) { | ||
+ | return false; | ||
+ | } | ||
+ | window.clearInterval(base.autoPlayInterval); | ||
+ | base.autoPlayInterval = window.setInterval(function () { | ||
+ | base.next(true); | ||
+ | }, base.options.autoPlay); | ||
+ | }, | ||
+ | swapSpeed: function (action) { | ||
+ | var base = this; | ||
+ | if (action === "slideSpeed") { | ||
+ | base.$owlWrapper.css(base.addCssSpeed(base.options.slideSpeed)); | ||
+ | } else if (action === "paginationSpeed") { | ||
+ | base.$owlWrapper.css(base.addCssSpeed(base.options.paginationSpeed)); | ||
+ | } else if (typeof action !== "string") { | ||
+ | base.$owlWrapper.css(base.addCssSpeed(action)); | ||
+ | } | ||
}, | }, | ||
− | addCssSpeed : function (speed) { | + | addCssSpeed: function (speed) { |
− | + | return { | |
− | + | "-webkit-transition": "all " + speed + "ms ease", | |
"-moz-transition": "all " + speed + "ms ease", | "-moz-transition": "all " + speed + "ms ease", | ||
"-o-transition": "all " + speed + "ms ease", | "-o-transition": "all " + speed + "ms ease", | ||
"transition": "all " + speed + "ms ease" | "transition": "all " + speed + "ms ease" | ||
− | + | }; | |
}, | }, | ||
− | removeTransition : function () { | + | removeTransition: function () { |
− | + | return { | |
− | + | "-webkit-transition": "", | |
"-moz-transition": "", | "-moz-transition": "", | ||
"-o-transition": "", | "-o-transition": "", | ||
"transition": "" | "transition": "" | ||
− | + | }; | |
}, | }, | ||
− | doTranslate : function (pixels) { | + | doTranslate: function (pixels) { |
− | + | return { | |
− | + | "-webkit-transform": "translate3d(" + pixels + "px, 0px, 0px)", | |
"-moz-transform": "translate3d(" + pixels + "px, 0px, 0px)", | "-moz-transform": "translate3d(" + pixels + "px, 0px, 0px)", | ||
"-o-transform": "translate3d(" + pixels + "px, 0px, 0px)", | "-o-transform": "translate3d(" + pixels + "px, 0px, 0px)", | ||
"-ms-transform": "translate3d(" + pixels + "px, 0px, 0px)", | "-ms-transform": "translate3d(" + pixels + "px, 0px, 0px)", | ||
"transform": "translate3d(" + pixels + "px, 0px,0px)" | "transform": "translate3d(" + pixels + "px, 0px,0px)" | ||
− | + | }; | |
}, | }, | ||
− | transition3d : function (value) { | + | transition3d: function (value) { |
− | + | var base = this; | |
− | + | base.$owlWrapper.css(base.doTranslate(value)); | |
}, | }, | ||
− | css2move : function (value) { | + | css2move: function (value) { |
− | + | var base = this; | |
− | + | base.$owlWrapper.css({"left": value}); | |
}, | }, | ||
− | css2slide : function (value, speed) { | + | css2slide: function (value, speed) { |
− | + | var base = this; | |
− | + | base.isCssFinish = false; | |
− | + | base.$owlWrapper.stop(true, true).animate({ | |
− | + | "left": value | |
− | + | }, { | |
− | + | duration: speed || base.options.slideSpeed, | |
− | complete : function () { | + | complete: function () { |
− | + | base.isCssFinish = true; | |
} | } | ||
− | + | }); | |
}, | }, | ||
− | checkBrowser : function () { | + | checkBrowser: function () { |
− | + | var base = this, | |
− | + | translate3D = "translate3d(0px, 0px, 0px)", | |
− | + | tempElem = document.createElement("div"), | |
− | + | regex, | |
− | + | asSupport, | |
− | + | support3d, | |
− | + | isTouch; | |
− | + | tempElem.style.cssText = " -moz-transform:" + translate3D + | |
− | + | "; -ms-transform:" + translate3D + | |
− | + | "; -o-transform:" + translate3D + | |
− | + | "; -webkit-transform:" + translate3D + | |
− | + | "; transform:" + translate3D; | |
− | + | regex = /translate3d\(0px, 0px, 0px\)/g; | |
− | + | asSupport = tempElem.style.cssText.match(regex); | |
− | + | support3d = (asSupport !== null && asSupport.length === 1); | |
− | + | isTouch = "ontouchstart" in window || window.navigator.msMaxTouchPoints; | |
− | + | base.browser = { | |
− | + | "support3d": support3d, | |
− | "isTouch" : isTouch | + | "isTouch": isTouch |
− | + | }; | |
}, | }, | ||
− | moveEvents : function () { | + | moveEvents: function () { |
− | + | var base = this; | |
− | + | if (base.options.mouseDrag !== false || base.options.touchDrag !== false) { | |
− | + | base.gestures(); | |
− | + | base.disabledEvents(); | |
− | + | } | |
}, | }, | ||
− | eventTypes : function () { | + | eventTypes: function () { |
− | + | var base = this, | |
− | + | types = ["s", "e", "x"]; | |
− | + | base.ev_types = {}; | |
− | + | if (base.options.mouseDrag === true && base.options.touchDrag === true) { | |
− | + | types = [ | |
− | + | "touchstart.owl mousedown.owl", | |
− | + | "touchmove.owl mousemove.owl", | |
− | + | "touchend.owl touchcancel.owl mouseup.owl" | |
− | + | ]; | |
− | + | } else if (base.options.mouseDrag === false && base.options.touchDrag === true) { | |
− | + | types = [ | |
− | + | "touchstart.owl", | |
− | + | "touchmove.owl", | |
− | + | "touchend.owl touchcancel.owl" | |
− | + | ]; | |
− | + | } else if (base.options.mouseDrag === true && base.options.touchDrag === false) { | |
− | + | types = [ | |
− | + | "mousedown.owl", | |
− | + | "mousemove.owl", | |
− | + | "mouseup.owl" | |
− | + | ]; | |
− | + | } | |
− | + | base.ev_types.start = types[0]; | |
− | + | base.ev_types.move = types[1]; | |
− | + | base.ev_types.end = types[2]; | |
}, | }, | ||
− | disabledEvents : | + | disabledEvents: function () { |
− | + | var base = this; | |
− | + | base.$elem.on("dragstart.owl", function (event) { | |
− | + | event.preventDefault(); | |
− | + | }); | |
− | + | base.$elem.on("mousedown.disableTextSelect", function (e) { | |
+ | return $(e.target).is('input, textarea, select, option'); | ||
+ | }); | ||
}, | }, | ||
− | gestures : function () { | + | gestures: function () { |
− | + | /*jslint unparam: true*/ | |
− | + | var base = this, | |
− | + | locals = { | |
− | + | offsetX: 0, | |
− | offsetY : 0, | + | offsetY: 0, |
− | baseElWidth : 0, | + | baseElWidth: 0, |
− | relativePos : 0, | + | relativePos: 0, |
position: null, | position: null, | ||
− | minSwipe : null, | + | minSwipe: null, |
maxSwipe: null, | maxSwipe: null, | ||
− | sliding : null, | + | sliding: null, |
dargging: null, | dargging: null, | ||
− | targetElement : null | + | targetElement: null |
− | + | }; | |
− | + | base.isCssFinish = true; | |
− | + | function getTouches(event) { | |
− | + | if (event.touches !== undefined) { | |
− | + | return { | |
− | + | x: event.touches[0].pageX, | |
− | + | y: event.touches[0].pageY | |
− | + | }; | |
− | + | } | |
− | + | if (event.touches === undefined) { | |
− | + | if (event.pageX !== undefined) { | |
− | + | return { | |
− | + | x: event.pageX, | |
− | + | y: event.pageY | |
− | + | }; | |
− | + | } | |
− | + | if (event.pageX === undefined) { | |
− | + | return { | |
− | + | x: event.clientX, | |
− | + | y: event.clientY | |
− | + | }; | |
− | + | } | |
− | + | } | |
− | + | } | |
− | + | function swapEvents(type) { | |
− | + | if (type === "on") { | |
− | + | $(document).on(base.ev_types.move, dragMove); | |
− | + | $(document).on(base.ev_types.end, dragEnd); | |
− | + | } else if (type === "off") { | |
− | + | $(document).off(base.ev_types.move); | |
− | + | $(document).off(base.ev_types.end); | |
− | + | } | |
− | + | } | |
− | + | function dragStart(event) { | |
− | + | var ev = event.originalEvent || event || window.event, | |
− | + | position; | |
− | + | if (ev.which === 3) { | |
− | + | return false; | |
− | + | } | |
− | + | if (base.itemsAmount <= base.options.items) { | |
− | + | return; | |
− | + | } | |
− | + | if (base.isCssFinish === false && !base.options.dragBeforeAnimFinish) { | |
− | + | return false; | |
− | + | } | |
− | + | if (base.isCss3Finish === false && !base.options.dragBeforeAnimFinish) { | |
− | + | return false; | |
− | + | } | |
− | + | if (base.options.autoPlay !== false) { | |
− | + | window.clearInterval(base.autoPlayInterval); | |
− | + | } | |
− | + | if (base.browser.isTouch !== true && !base.$owlWrapper.hasClass("grabbing")) { | |
− | + | base.$owlWrapper.addClass("grabbing"); | |
− | + | } | |
− | + | base.newPosX = 0; | |
− | + | base.newRelativeX = 0; | |
− | + | $(this).css(base.removeTransition()); | |
− | + | position = $(this).position(); | |
− | + | locals.relativePos = position.left; | |
− | + | locals.offsetX = getTouches(ev).x - position.left; | |
− | + | locals.offsetY = getTouches(ev).y - position.top; | |
− | + | swapEvents("on"); | |
− | + | locals.sliding = false; | |
− | + | locals.targetElement = ev.target || ev.srcElement; | |
− | + | } | |
− | + | function dragMove(event) { | |
− | + | var ev = event.originalEvent || event || window.event, | |
− | + | minSwipe, | |
− | + | maxSwipe; | |
− | + | base.newPosX = getTouches(ev).x - locals.offsetX; | |
− | + | base.newPosY = getTouches(ev).y - locals.offsetY; | |
− | + | base.newRelativeX = base.newPosX - locals.relativePos; | |
− | + | if (typeof base.options.startDragging === "function" && locals.dragging !== true && base.newRelativeX !== 0) { | |
− | + | locals.dragging = true; | |
− | + | base.options.startDragging.apply(base, [base.$elem]); | |
− | + | } | |
− | + | if ((base.newRelativeX > 8 || base.newRelativeX < -8) && (base.browser.isTouch === true)) { | |
− | + | if (ev.preventDefault !== undefined) { | |
− | + | ev.preventDefault(); | |
− | + | } else { | |
− | + | ev.returnValue = false; | |
− | + | } | |
− | + | locals.sliding = true; | |
− | + | } | |
− | + | if ((base.newPosY > 10 || base.newPosY < -10) && locals.sliding === false) { | |
− | + | $(document).off("touchmove.owl"); | |
− | + | } | |
− | + | minSwipe = function () { | |
− | + | return base.newRelativeX / 5; | |
− | + | }; | |
− | + | maxSwipe = function () { | |
− | + | return base.maximumPixels + base.newRelativeX / 5; | |
− | + | }; | |
− | + | base.newPosX = Math.max(Math.min(base.newPosX, minSwipe()), maxSwipe()); | |
− | + | if (base.browser.support3d === true) { | |
− | + | base.transition3d(base.newPosX); | |
− | + | } else { | |
− | + | base.css2move(base.newPosX); | |
− | + | } | |
− | + | } | |
− | + | function dragEnd(event) { | |
− | + | var ev = event.originalEvent || event || window.event, | |
− | + | newPosition, | |
− | + | handlers, | |
− | + | owlStopEvent; | |
− | + | ev.target = ev.target || ev.srcElement; | |
− | + | locals.dragging = false; | |
− | + | if (base.browser.isTouch !== true) { | |
− | + | base.$owlWrapper.removeClass("grabbing"); | |
− | + | } | |
− | + | if (base.newRelativeX < 0) { | |
− | + | base.dragDirection = base.owl.dragDirection = "left"; | |
− | + | } else { | |
− | + | base.dragDirection = base.owl.dragDirection = "right"; | |
− | + | } | |
− | + | if (base.newRelativeX !== 0) { | |
− | + | newPosition = base.getNewPosition(); | |
− | + | base.goTo(newPosition, false, "drag"); | |
− | + | if (locals.targetElement === ev.target && base.browser.isTouch !== true) { | |
− | + | $(ev.target).on("click.disable", function (ev) { | |
− | + | ev.stopImmediatePropagation(); | |
− | + | ev.stopPropagation(); | |
− | + | ev.preventDefault(); | |
− | + | $(ev.target).off("click.disable"); | |
− | + | }); | |
− | + | handlers = $._data(ev.target, "events").click; | |
− | + | owlStopEvent = handlers.pop(); | |
− | + | handlers.splice(0, 0, owlStopEvent); | |
− | + | } | |
− | + | } | |
− | + | swapEvents("off"); | |
− | + | } | |
− | + | base.$elem.on(base.ev_types.start, ".owl-wrapper", dragStart); | |
}, | }, | ||
− | getNewPosition : function () { | + | getNewPosition: function () { |
− | + | var base = this, | |
− | + | newPosition = base.closestItem(); | |
− | + | if (newPosition > base.maximumItem) { | |
− | + | base.currentItem = base.maximumItem; | |
− | + | newPosition = base.maximumItem; | |
− | + | } else if (base.newPosX >= 0) { | |
− | + | newPosition = 0; | |
− | + | base.currentItem = 0; | |
− | + | } | |
− | + | return newPosition; | |
}, | }, | ||
− | closestItem : function () { | + | closestItem: function () { |
− | + | var base = this, | |
− | + | array = base.options.scrollPerPage === true ? base.pagesInArray : base.positionsInArray, | |
− | + | goal = base.newPosX, | |
− | + | closest = null; | |
− | + | $.each(array, function (i, v) { | |
− | + | if (goal - (base.itemWidth / 20) > array[i + 1] && goal - (base.itemWidth / 20) < v && base.moveDirection() === "left") { | |
− | + | closest = v; | |
− | + | if (base.options.scrollPerPage === true) { | |
− | + | base.currentItem = $.inArray(closest, base.positionsInArray); | |
− | + | } else { | |
− | + | base.currentItem = i; | |
− | + | } | |
− | + | } else if (goal + (base.itemWidth / 20) < v && goal + (base.itemWidth / 20) > (array[i + 1] || array[i] - base.itemWidth) && base.moveDirection() === "right") { | |
− | + | if (base.options.scrollPerPage === true) { | |
− | + | closest = array[i + 1] || array[array.length - 1]; | |
− | + | base.currentItem = $.inArray(closest, base.positionsInArray); | |
− | + | } else { | |
− | + | closest = array[i + 1]; | |
− | + | base.currentItem = i + 1; | |
− | + | } | |
− | + | } | |
− | + | }); | |
− | + | return base.currentItem; | |
}, | }, | ||
− | moveDirection : function () { | + | moveDirection: function () { |
− | + | var base = this, | |
− | + | direction; | |
− | + | if (base.newRelativeX < 0) { | |
− | + | direction = "right"; | |
− | + | base.playDirection = "next"; | |
− | + | } else { | |
− | + | direction = "left"; | |
− | + | base.playDirection = "prev"; | |
− | + | } | |
− | + | return direction; | |
}, | }, | ||
− | customEvents : function () { | + | customEvents: function () { |
− | + | /*jslint unparam: true*/ | |
− | + | var base = this; | |
− | + | base.$elem.on("owl.next", function () { | |
− | + | base.next(); | |
− | + | }); | |
− | + | base.$elem.on("owl.prev", function () { | |
− | + | base.prev(); | |
− | + | }); | |
− | + | base.$elem.on("owl.play", function (event, speed) { | |
− | + | base.options.autoPlay = speed; | |
− | + | base.play(); | |
− | + | base.hoverStatus = "play"; | |
− | + | }); | |
− | + | base.$elem.on("owl.stop", function () { | |
− | + | base.stop(); | |
− | + | base.hoverStatus = "stop"; | |
− | + | }); | |
− | + | base.$elem.on("owl.goTo", function (event, item) { | |
− | + | base.goTo(item); | |
− | + | }); | |
− | + | base.$elem.on("owl.jumpTo", function (event, item) { | |
− | + | base.jumpTo(item); | |
− | + | }); | |
}, | }, | ||
− | stopOnHover : function () { | + | stopOnHover: function () { |
− | + | var base = this; | |
− | + | if (base.options.stopOnHover === true && base.browser.isTouch !== true && base.options.autoPlay !== false) { | |
− | + | base.$elem.on("mouseover", function () { | |
− | + | base.stop(); | |
− | + | }); | |
− | + | base.$elem.on("mouseout", function () { | |
− | + | if (base.hoverStatus !== "stop") { | |
− | + | base.play(); | |
− | + | } | |
− | + | }); | |
− | + | } | |
}, | }, | ||
− | lazyLoad : function () { | + | lazyLoad: function () { |
− | + | var base = this, | |
− | + | i, | |
− | + | $item, | |
− | + | itemNumber, | |
− | + | $lazyImg, | |
− | + | follow; | |
− | + | if (base.options.lazyLoad === false) { | |
− | + | return false; | |
− | + | } | |
− | + | for (i = 0; i < base.itemsAmount; i += 1) { | |
− | + | $item = $(base.$owlItems[i]); | |
− | + | if ($item.data("owl-loaded") === "loaded") { | |
− | + | continue; | |
− | + | } | |
− | + | itemNumber = $item.data("owl-item"); | |
− | + | $lazyImg = $item.find(".lazyOwl"); | |
− | + | if (typeof $lazyImg.data("src") !== "string") { | |
− | + | $item.data("owl-loaded", "loaded"); | |
− | + | continue; | |
− | + | } | |
− | + | if ($item.data("owl-loaded") === undefined) { | |
− | + | $lazyImg.hide(); | |
− | + | $item.addClass("loading").data("owl-loaded", "checked"); | |
− | + | } | |
− | + | if (base.options.lazyFollow === true) { | |
− | + | follow = itemNumber >= base.currentItem; | |
− | + | } else { | |
− | + | follow = true; | |
− | + | } | |
− | + | if (follow && itemNumber < base.currentItem + base.options.items && $lazyImg.length) { | |
− | + | base.lazyPreload($item, $lazyImg); | |
− | + | } | |
− | + | } | |
}, | }, | ||
− | lazyPreload : function ($item, $lazyImg) { | + | lazyPreload: function ($item, $lazyImg) { |
− | + | var base = this, | |
− | + | iterations = 0, | |
− | + | isBackgroundImg; | |
− | + | if ($lazyImg.prop("tagName") === "DIV") { | |
− | + | $lazyImg.css("background-image", "url(" + $lazyImg.data("src") + ")"); | |
− | + | isBackgroundImg = true; | |
− | + | } else { | |
− | + | $lazyImg[0].src = $lazyImg.data("src"); | |
− | + | } | |
− | + | function showImage() { | |
− | + | $item.data("owl-loaded", "loaded").removeClass("loading"); | |
− | + | $lazyImg.removeAttr("data-src"); | |
− | + | if (base.options.lazyEffect === "fade") { | |
− | + | $lazyImg.fadeIn(400); | |
− | + | } else { | |
− | + | $lazyImg.show(); | |
− | + | } | |
− | + | if (typeof base.options.afterLazyLoad === "function") { | |
− | + | base.options.afterLazyLoad.apply(this, [base.$elem]); | |
− | + | } | |
− | + | } | |
− | + | function checkLazyImage() { | |
− | + | iterations += 1; | |
− | + | if (base.completeImg($lazyImg.get(0)) || isBackgroundImg === true) { | |
− | + | showImage(); | |
− | + | } else if (iterations <= 100) {//if image loads in less than 10 seconds | |
− | + | window.setTimeout(checkLazyImage, 100); | |
− | + | } else { | |
− | + | showImage(); | |
− | + | } | |
− | + | } | |
− | + | checkLazyImage(); | |
}, | }, | ||
− | autoHeight : function () { | + | autoHeight: function () { |
− | + | var base = this, | |
− | + | $currentimg = $(base.$owlItems[base.currentItem]).find("img"), | |
− | + | iterations; | |
− | + | function addHeight() { | |
− | + | var $currentItem = $(base.$owlItems[base.currentItem]).height(); | |
− | + | base.wrapperOuter.css("height", $currentItem + "px"); | |
− | + | if (!base.wrapperOuter.hasClass("autoHeight")) { | |
− | + | window.setTimeout(function () { | |
− | + | base.wrapperOuter.addClass("autoHeight"); | |
− | + | }, 0); | |
− | + | } | |
− | + | } | |
− | + | function checkImage() { | |
− | + | iterations += 1; | |
− | + | if (base.completeImg($currentimg.get(0))) { | |
− | + | addHeight(); | |
− | + | } else if (iterations <= 100) { //if image loads in less than 10 seconds | |
− | + | window.setTimeout(checkImage, 100); | |
− | + | } else { | |
− | + | base.wrapperOuter.css("height", ""); //Else remove height attribute | |
− | + | } | |
− | + | } | |
− | + | if ($currentimg.get(0) !== undefined) { | |
− | + | iterations = 0; | |
− | + | checkImage(); | |
− | + | } else { | |
− | + | addHeight(); | |
− | + | } | |
}, | }, | ||
− | completeImg : function (img) { | + | completeImg: function (img) { |
− | + | var naturalWidthType; | |
− | + | if (!img.complete) { | |
− | + | return false; | |
− | + | } | |
− | + | naturalWidthType = typeof img.naturalWidth; | |
− | + | if (naturalWidthType !== "undefined" && img.naturalWidth === 0) { | |
− | + | return false; | |
− | + | } | |
− | + | return true; | |
}, | }, | ||
− | onVisibleItems : function () { | + | onVisibleItems: function () { |
− | + | var base = this, | |
− | + | i; | |
− | + | if (base.options.addClassActive === true) { | |
− | + | base.$owlItems.removeClass("active"); | |
− | + | } | |
− | + | base.visibleItems = []; | |
− | + | for (i = base.currentItem; i < base.currentItem + base.options.items; i += 1) { | |
− | + | base.visibleItems.push(i); | |
− | + | if (base.options.addClassActive === true) { | |
− | + | $(base.$owlItems[i]).addClass("active"); | |
− | + | } | |
− | + | } | |
− | + | base.owl.visibleItems = base.visibleItems; | |
}, | }, | ||
− | transitionTypes : function (className) { | + | transitionTypes: function (className) { |
− | + | var base = this; | |
− | + | //Currently available: "fade", "backSlide", "goDown", "fadeUp" | |
− | + | base.outClass = "owl-" + className + "-out"; | |
− | + | base.inClass = "owl-" + className + "-in"; | |
}, | }, | ||
− | singleItemTransition : function () { | + | singleItemTransition: function () { |
− | + | var base = this, | |
− | + | outClass = base.outClass, | |
− | + | inClass = base.inClass, | |
− | + | $currentItem = base.$owlItems.eq(base.currentItem), | |
− | + | $prevItem = base.$owlItems.eq(base.prevItem), | |
− | + | prevPos = Math.abs(base.positionsInArray[base.currentItem]) + base.positionsInArray[base.prevItem], | |
− | + | origin = Math.abs(base.positionsInArray[base.currentItem]) + base.itemWidth / 2, | |
− | + | animEnd = 'webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend'; | |
− | + | base.isTransition = true; | |
− | + | base.$owlWrapper | |
− | + | .addClass('owl-origin') | |
− | + | .css({ | |
− | + | "-webkit-transform-origin": origin + "px", | |
− | "-moz-perspective-origin" : origin + "px", | + | "-moz-perspective-origin": origin + "px", |
− | "perspective-origin" : origin + "px" | + | "perspective-origin": origin + "px" |
− | + | }); | |
− | + | function transStyles(prevPos) { | |
− | + | return { | |
− | + | "position": "relative", | |
− | + | "left": prevPos + "px" | |
− | + | }; | |
− | + | } | |
− | + | $prevItem | |
− | + | .css(transStyles(prevPos, 10)) | |
− | + | .addClass(outClass) | |
− | + | .on(animEnd, function () { | |
− | + | base.endPrev = true; | |
− | + | $prevItem.off(animEnd); | |
− | + | base.clearTransStyle($prevItem, outClass); | |
− | + | }); | |
− | + | $currentItem | |
− | + | .addClass(inClass) | |
− | + | .on(animEnd, function () { | |
− | + | base.endCurrent = true; | |
− | + | $currentItem.off(animEnd); | |
− | + | base.clearTransStyle($currentItem, inClass); | |
− | + | }); | |
}, | }, | ||
− | clearTransStyle : function (item, classToRemove) { | + | clearTransStyle: function (item, classToRemove) { |
− | + | var base = this; | |
− | + | item.css({ | |
− | + | "position": "", | |
− | "left" : "" | + | "left": "" |
− | + | }).removeClass(classToRemove); | |
− | + | if (base.endPrev && base.endCurrent) { | |
− | + | base.$owlWrapper.removeClass('owl-origin'); | |
− | + | base.endPrev = false; | |
− | + | base.endCurrent = false; | |
− | + | base.isTransition = false; | |
− | + | } | |
}, | }, | ||
− | owlStatus : function () { | + | owlStatus: function () { |
− | + | var base = this; | |
− | + | base.owl = { | |
− | + | "userOptions": base.userOptions, | |
− | "baseElement" | + | "baseElement": base.$elem, |
− | "userItems" | + | "userItems": base.$userItems, |
− | "owlItems" | + | "owlItems": base.$owlItems, |
− | "currentItem" | + | "currentItem": base.currentItem, |
− | "prevItem" | + | "prevItem": base.prevItem, |
− | "visibleItems" | + | "visibleItems": base.visibleItems, |
− | "isTouch" | + | "isTouch": base.browser.isTouch, |
− | "browser" | + | "browser": base.browser, |
− | "dragDirection" : base.dragDirection | + | "dragDirection": base.dragDirection |
− | + | }; | |
}, | }, | ||
− | clearEvents : function () { | + | clearEvents: function () { |
− | + | var base = this; | |
− | + | base.$elem.off(".owl owl mousedown.disableTextSelect"); | |
− | + | $(document).off(".owl owl"); | |
− | + | $(window).off("resize", base.resizer); | |
}, | }, | ||
− | unWrap : function () { | + | unWrap: function () { |
− | + | var base = this; | |
− | + | if (base.$elem.children().length !== 0) { | |
− | + | base.$owlWrapper.unwrap(); | |
− | + | base.$userItems.unwrap().unwrap(); | |
− | + | if (base.owlControls) { | |
− | + | base.owlControls.remove(); | |
− | + | } | |
− | + | } | |
− | + | base.clearEvents(); | |
− | + | base.$elem | |
− | + | .attr("style", base.$elem.data("owl-originalStyles") || "") | |
− | + | .attr("class", base.$elem.data("owl-originalClasses")); | |
}, | }, | ||
− | destroy : function () { | + | destroy: function () { |
− | + | var base = this; | |
− | + | base.stop(); | |
− | + | window.clearInterval(base.checkVisible); | |
− | + | base.unWrap(); | |
− | + | base.$elem.removeData(); | |
}, | }, | ||
− | reinit : function (newOptions) { | + | reinit: function (newOptions) { |
− | + | var base = this, | |
− | + | options = $.extend({}, base.userOptions, newOptions); | |
− | + | base.unWrap(); | |
− | + | base.init(options, base.$elem); | |
}, | }, | ||
− | addItem : function (htmlString, targetPosition) { | + | addItem: function (htmlString, targetPosition) { |
− | + | var base = this, | |
− | + | position; | |
− | + | if (!htmlString) { | |
+ | return false; | ||
+ | } | ||
− | + | if (base.$elem.children().length === 0) { | |
− | + | base.$elem.append(htmlString); | |
− | + | base.setVars(); | |
− | + | return false; | |
− | + | } | |
− | + | base.unWrap(); | |
− | + | if (targetPosition === undefined || targetPosition === -1) { | |
− | + | position = -1; | |
− | + | } else { | |
− | + | position = targetPosition; | |
− | + | } | |
− | + | if (position >= base.$userItems.length || position === -1) { | |
− | + | base.$userItems.eq(-1).after(htmlString); | |
− | + | } else { | |
− | + | base.$userItems.eq(position).before(htmlString); | |
− | + | } | |
− | + | base.setVars(); | |
}, | }, | ||
− | removeItem : function (targetPosition) { | + | removeItem: function (targetPosition) { |
− | + | var base = this, | |
− | + | position; | |
− | + | if (base.$elem.children().length === 0) { | |
− | + | return false; | |
− | + | } | |
− | + | if (targetPosition === undefined || targetPosition === -1) { | |
− | + | position = -1; | |
− | + | } else { | |
− | + | position = targetPosition; | |
− | + | } | |
− | + | base.unWrap(); | |
− | + | base.$userItems.eq(position).remove(); | |
− | + | base.setVars(); | |
} | } | ||
− | + | }; | |
− | + | $.fn.owlCarousel = function (options) { | |
− | + | return this.each(function () { | |
− | + | if ($(this).data("owl-init") === true) { | |
− | + | return false; | |
− | + | } | |
− | + | $(this).data("owl-init", true); | |
− | + | var carousel = Object.create(Carousel); | |
− | + | carousel.init(options, this); | |
− | + | $.data(this, "owlCarousel", carousel); | |
− | + | }); | |
− | + | }; | |
− | + | $.fn.owlCarousel.options = { | |
− | + | items: 5, | |
− | + | itemsCustom: false, | |
− | itemsCustom : false, | + | itemsDesktop: [1199, 4], |
− | itemsDesktop : [1199, 4], | + | itemsDesktopSmall: [979, 3], |
− | itemsDesktopSmall : [979, 3], | + | itemsTablet: [768, 2], |
− | itemsTablet : [768, 2], | + | itemsTabletSmall: false, |
− | itemsTabletSmall : false, | + | itemsMobile: [479, 1], |
− | itemsMobile : [479, 1], | + | singleItem: false, |
− | singleItem : false, | + | itemsScaleUp: false, |
− | itemsScaleUp : false, | + | slideSpeed: 200, |
− | slideSpeed : 200, | + | paginationSpeed: 800, |
− | paginationSpeed : 800, | + | rewindSpeed: 1000, |
− | rewindSpeed : 1000, | + | autoPlay: false, |
− | autoPlay : false, | + | stopOnHover: false, |
− | stopOnHover : false, | + | navigation: false, |
− | navigation : false, | + | navigationText: ["prev", "next"], |
− | navigationText : ["prev", "next"], | + | rewindNav: true, |
− | rewindNav : true, | + | scrollPerPage: false, |
− | scrollPerPage : false, | + | pagination: true, |
− | pagination : true, | + | paginationNumbers: false, |
− | paginationNumbers : false, | + | responsive: true, |
− | responsive : true, | + | responsiveRefreshRate: 200, |
− | responsiveRefreshRate : 200, | + | responsiveBaseWidth: window, |
− | responsiveBaseWidth : window, | + | baseClass: "owl-carousel", |
− | baseClass : "owl-carousel", | + | theme: "owl-theme", |
− | theme : "owl-theme", | + | lazyLoad: false, |
− | lazyLoad : false, | + | lazyFollow: true, |
− | lazyFollow : true, | + | lazyEffect: "fade", |
− | lazyEffect : "fade", | + | autoHeight: false, |
− | autoHeight : false, | + | jsonPath: false, |
− | jsonPath : false, | + | jsonSuccess: false, |
− | jsonSuccess : false, | + | dragBeforeAnimFinish: true, |
− | dragBeforeAnimFinish : true, | + | mouseDrag: true, |
− | mouseDrag : true, | + | touchDrag: true, |
− | touchDrag : true, | + | addClassActive: false, |
− | addClassActive : false, | + | transitionStyle: false, |
− | transitionStyle : false, | + | beforeUpdate: false, |
− | beforeUpdate : false, | + | afterUpdate: false, |
− | afterUpdate : false, | + | beforeInit: false, |
− | beforeInit : false, | + | afterInit: false, |
− | afterInit : false, | + | beforeMove: false, |
− | beforeMove : false, | + | afterMove: false, |
− | afterMove : false, | + | afterAction: false, |
− | afterAction : false, | + | startDragging: false, |
− | startDragging : false, | + | |
afterLazyLoad: false | afterLazyLoad: false | ||
− | + | }; | |
}(jQuery, window, document)); | }(jQuery, window, document)); | ||
</script> | </script> | ||
Line 1,494: | Line 3,994: | ||
<script type="text/javascript"> | <script type="text/javascript"> | ||
/*! WOW - v1.1.2 - 2015-08-19 | /*! WOW - v1.1.2 - 2015-08-19 | ||
− | * Copyright (c) 2015 Matthieu Aussaguel; Licensed MIT */(function(){var a, b, c, d, e, f = function(a, b){return function(){return a.apply(b, arguments)}}, g = [].indexOf || function(a){for (var b = 0, c = this.length; c > b; b++)if (b in this && this[b] === a)return b; return - 1}; b = function(){function a(){}return a.prototype.extend = function(a, b){var c, d; for (c in b)d = b[c], null == a[c] && (a[c] = d); return a}, a.prototype.isMobile = function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)}, a.prototype.createEvent = function(a, b, c, d){var e; return null == b && (b = !1), null == c && (c = !1), null == d && (d = null), null != document.createEvent?(e = document.createEvent("CustomEvent"), e.initCustomEvent(a, b, c, d)):null != document.createEventObject?(e = document.createEventObject(), e.eventType = a):e.eventName = a, e}, a.prototype.emitEvent = function(a, b){return null != a.dispatchEvent?a.dispatchEvent(b):b in(null != a)?a[b]():"on" + b in(null != a)?a["on" + b]():void 0}, a.prototype.addEvent = function(a, b, c){return null != a.addEventListener?a.addEventListener(b, c, !1):null != a.attachEvent?a.attachEvent("on" + b, c):a[b] = c}, a.prototype.removeEvent = function(a, b, c){return null != a.removeEventListener?a.removeEventListener(b, c, !1):null != a.detachEvent?a.detachEvent("on" + b, c):delete a[b]}, a.prototype.innerHeight = function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight}, a}(), c = this.WeakMap || this.MozWeakMap || (c = function(){function a(){this.keys = [], this.values = []}return a.prototype.get = function(a){var b, c, d, e, f; for (f = this.keys, b = d = 0, e = f.length; e > d; b = ++d)if (c = f[b], c === a)return this.values[b]}, a.prototype.set = function(a, b){var c, d, e, f, g; for (g = this.keys, c = e = 0, f = g.length; f > e; c = ++e)if (d = g[c], d === a)return void(this.values[c] = b); return this.keys.push(a), this.values.push(b)}, a}()), a = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (a = function(){function a(){"undefined" != typeof console && null !== console && console.warn("MutationObserver is not supported by your browser."), "undefined" != typeof console && null !== console && console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported = !0, a.prototype.observe = function(){}, a}()), d = this.getComputedStyle || function(a){return this.getPropertyValue = function(b){var c; return"float" === b && (b = "styleFloat"), e.test(b) && b.replace(e, function(a, b){return b.toUpperCase()}), (null != (c = a.currentStyle)?c[b]:void 0) || null}, this}, e = /(\-([a-z]){1})/g, this.WOW = function(){function e(a){null == a && (a = {}), this.scrollCallback = f(this.scrollCallback, this), this.scrollHandler = f(this.scrollHandler, this), this.resetAnimation = f(this.resetAnimation, this), this.start = f(this.start, this), this.scrolled = !0, this.config = this.util().extend(a, this.defaults), null != a.scrollContainer && (this.config.scrollContainer = document.querySelector(a.scrollContainer)), this.animationNameCache = new c, this.wowEvent = this.util().createEvent(this.config.boxClass)}return e.prototype.defaults = {boxClass:"wow", animateClass:"animated", offset:0, mobile:!0, live:!0, callback:null, scrollContainer:null}, e.prototype.init = function(){var a; return this.element = window.document.documentElement, "interactive" === (a = document.readyState) || "complete" === a?this.start():this.util().addEvent(document, "DOMContentLoaded", this.start), this.finished = []}, e.prototype.start = function(){var b, c, d, e; if (this.stopped = !1, this.boxes = function(){var a, c, d, e; for (d = this.element.querySelectorAll("." + this.config.boxClass), e = [], a = 0, c = d.length; c > a; a++)b = d[a], e.push(b); return e}.call(this), this.all = function(){var a, c, d, e; for (d = this.boxes, e = [], a = 0, c = d.length; c > a; a++)b = d[a], e.push(b); return e}.call(this), this.boxes.length)if (this.disabled())this.resetStyle(); else for (e = this.boxes, c = 0, d = e.length; d > c; c++)b = e[c], this.applyStyle(b, !0); return this.disabled() || (this.util().addEvent(this.config.scrollContainer || window, "scroll", this.scrollHandler), this.util().addEvent(window, "resize", this.scrollHandler), this.interval = setInterval(this.scrollCallback, 50)), this.config.live?new a(function(a){return function(b){var c, d, e, f, g; for (g = [], c = 0, d = b.length; d > c; c++)f = b[c], g.push(function(){var a, b, c, d; for (c = f.addedNodes || [], d = [], a = 0, b = c.length; b > a; a++)e = c[a], d.push(this.doSync(e)); return d}.call(a)); return g}}(this)).observe(document.body, {childList:!0, subtree:!0}):void 0}, e.prototype.stop = function(){return this.stopped = !0, this.util().removeEvent(this.config.scrollContainer || window, "scroll", this.scrollHandler), this.util().removeEvent(window, "resize", this.scrollHandler), null != this.interval?clearInterval(this.interval):void 0}, e.prototype.sync = function(){return a.notSupported?this.doSync(this.element):void 0}, e.prototype.doSync = function(a){var b, c, d, e, f; if (null == a && (a = this.element), 1 === a.nodeType){for (a = a.parentNode || a, e = a.querySelectorAll("." + this.config.boxClass), f = [], c = 0, d = e.length; d > c; c++)b = e[c], g.call(this.all, b) < 0?(this.boxes.push(b), this.all.push(b), this.stopped || this.disabled()?this.resetStyle():this.applyStyle(b, !0), f.push(this.scrolled = !0)):f.push(void 0); return f}}, e.prototype.show = function(a){return this.applyStyle(a), a.className = a.className + " " + this.config.animateClass, null != this.config.callback && this.config.callback(a), this.util().emitEvent(a, this.wowEvent), this.util().addEvent(a, "animationend", this.resetAnimation), this.util().addEvent(a, "oanimationend", this.resetAnimation), this.util().addEvent(a, "webkitAnimationEnd", this.resetAnimation), this.util().addEvent(a, "MSAnimationEnd", this.resetAnimation), a}, e.prototype.applyStyle = function(a, b){var c, d, e; return d = a.getAttribute("data-wow-duration"), c = a.getAttribute("data-wow-delay"), e = a.getAttribute("data-wow-iteration"), this.animate(function(f){return function(){return f.customStyle(a, b, d, c, e)}}(this))}, e.prototype.animate = function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(), e.prototype.resetStyle = function(){var a, b, c, d, e; for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++)a = d[b], e.push(a.style.visibility = "visible"); return e}, e.prototype.resetAnimation = function(a){var b; return a.type.toLowerCase().indexOf("animationend") >= 0?(b = a.target || a.srcElement, b.className = b.className.replace(this.config.animateClass, "").trim()):void 0}, e.prototype.customStyle = function(a, b, c, d, e){return b && this.cacheAnimationName(a), a.style.visibility = b?"hidden":"visible", c && this.vendorSet(a.style, {animationDuration:c}), d && this.vendorSet(a.style, {animationDelay:d}), e && this.vendorSet(a.style, {animationIterationCount:e}), this.vendorSet(a.style, {animationName:b?"none":this.cachedAnimationName(a)}), a}, e.prototype.vendors = ["moz", "webkit"], e.prototype.vendorSet = function(a, b){var c, d, e, f; d = []; for (c in b)e = b[c], a["" + c] = e, d.push(function(){var b, d, g, h; for (g = this.vendors, h = [], b = 0, d = g.length; d > b; b++)f = g[b], h.push(a["" + f + c.charAt(0).toUpperCase() + c.substr(1)] = e); return h}.call(this)); return d}, e.prototype.vendorCSS = function(a, b){var c, e, f, g, h, i; for (h = d(a), g = h.getPropertyCSSValue(b), f = this.vendors, c = 0, e = f.length; e > c; c++)i = f[c], g = g || h.getPropertyCSSValue("-" + i + "-" + b); return g}, e.prototype.animationName = function(a){var b; try{b = this.vendorCSS(a, "animation-name").cssText} catch (c){b = d(a).getPropertyValue("animation-name")}return"none" === b?"":b}, e.prototype.cacheAnimationName = function(a){return this.animationNameCache.set(a, this.animationName(a))}, e.prototype.cachedAnimationName = function(a){return this.animationNameCache.get(a)}, e.prototype.scrollHandler = function(){return this.scrolled = !0}, e.prototype.scrollCallback = function(){var a; return!this.scrolled || (this.scrolled = !1, this.boxes = function(){var b, c, d, e; for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++)a = d[b], a && (this.isVisible(a)?this.show(a):e.push(a)); return e}.call(this), this.boxes.length || this.config.live)?void 0:this.stop()}, e.prototype.offsetTop = function(a){for (var b; void 0 === a.offsetTop; )a = a.parentNode; for (b = a.offsetTop; a = a.offsetParent; )b += a.offsetTop; return b}, e.prototype.isVisible = function(a){var b, c, d, e, f; return c = a.getAttribute("data-wow-offset") || this.config.offset, f = this.config.scrollContainer && this.config.scrollContainer.scrollTop || window.pageYOffset, e = f + Math.min(this.element.clientHeight, this.util().innerHeight()) - c, d = this.offsetTop(a), b = d + a.clientHeight, e >= d && b >= f}, e.prototype.util = function(){return null != this._util?this._util:this._util = new b}, e.prototype.disabled = function(){return!this.config.mobile && this.util().isMobile(navigator.userAgent)}, e}()}).call(this); | + | * Copyright (c) 2015 Matthieu Aussaguel; Licensed MIT */(function () { |
+ | var a, b, c, d, e, f = function (a, b) { | ||
+ | return function () { | ||
+ | return a.apply(b, arguments) | ||
+ | } | ||
+ | }, g = [].indexOf || function (a) { | ||
+ | for (var b = 0, c = this.length; c > b; b++) | ||
+ | if (b in this && this[b] === a) | ||
+ | return b; | ||
+ | return -1 | ||
+ | }; | ||
+ | b = function () { | ||
+ | function a() {} | ||
+ | return a.prototype.extend = function (a, b) { | ||
+ | var c, d; | ||
+ | for (c in b) | ||
+ | d = b[c], null == a[c] && (a[c] = d); | ||
+ | return a | ||
+ | }, a.prototype.isMobile = function (a) { | ||
+ | return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a) | ||
+ | }, a.prototype.createEvent = function (a, b, c, d) { | ||
+ | var e; | ||
+ | return null == b && (b = !1), null == c && (c = !1), null == d && (d = null), null != document.createEvent ? (e = document.createEvent("CustomEvent"), e.initCustomEvent(a, b, c, d)) : null != document.createEventObject ? (e = document.createEventObject(), e.eventType = a) : e.eventName = a, e | ||
+ | }, a.prototype.emitEvent = function (a, b) { | ||
+ | return null != a.dispatchEvent ? a.dispatchEvent(b) : b in(null != a) ? a[b]() : "on" + b in(null != a) ? a["on" + b]() : void 0 | ||
+ | }, a.prototype.addEvent = function (a, b, c) { | ||
+ | return null != a.addEventListener ? a.addEventListener(b, c, !1) : null != a.attachEvent ? a.attachEvent("on" + b, c) : a[b] = c | ||
+ | }, a.prototype.removeEvent = function (a, b, c) { | ||
+ | return null != a.removeEventListener ? a.removeEventListener(b, c, !1) : null != a.detachEvent ? a.detachEvent("on" + b, c) : delete a[b] | ||
+ | }, a.prototype.innerHeight = function () { | ||
+ | return"innerHeight"in window ? window.innerHeight : document.documentElement.clientHeight | ||
+ | }, a | ||
+ | }(), c = this.WeakMap || this.MozWeakMap || (c = function () { | ||
+ | function a() { | ||
+ | this.keys = [], this.values = [] | ||
+ | } | ||
+ | return a.prototype.get = function (a) { | ||
+ | var b, c, d, e, f; | ||
+ | for (f = this.keys, b = d = 0, e = f.length; e > d; b = ++d) | ||
+ | if (c = f[b], c === a) | ||
+ | return this.values[b] | ||
+ | }, a.prototype.set = function (a, b) { | ||
+ | var c, d, e, f, g; | ||
+ | for (g = this.keys, c = e = 0, f = g.length; f > e; c = ++e) | ||
+ | if (d = g[c], d === a) | ||
+ | return void(this.values[c] = b); | ||
+ | return this.keys.push(a), this.values.push(b) | ||
+ | }, a | ||
+ | }()), a = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (a = function () { | ||
+ | function a() { | ||
+ | "undefined" != typeof console && null !== console && console.warn("MutationObserver is not supported by your browser."), "undefined" != typeof console && null !== console && console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.") | ||
+ | } | ||
+ | return a.notSupported = !0, a.prototype.observe = function () {}, a | ||
+ | }()), d = this.getComputedStyle || function (a) { | ||
+ | return this.getPropertyValue = function (b) { | ||
+ | var c; | ||
+ | return"float" === b && (b = "styleFloat"), e.test(b) && b.replace(e, function (a, b) { | ||
+ | return b.toUpperCase() | ||
+ | }), (null != (c = a.currentStyle) ? c[b] : void 0) || null | ||
+ | }, this | ||
+ | }, e = /(\-([a-z]){1})/g, this.WOW = function () { | ||
+ | function e(a) { | ||
+ | null == a && (a = {}), this.scrollCallback = f(this.scrollCallback, this), this.scrollHandler = f(this.scrollHandler, this), this.resetAnimation = f(this.resetAnimation, this), this.start = f(this.start, this), this.scrolled = !0, this.config = this.util().extend(a, this.defaults), null != a.scrollContainer && (this.config.scrollContainer = document.querySelector(a.scrollContainer)), this.animationNameCache = new c, this.wowEvent = this.util().createEvent(this.config.boxClass) | ||
+ | } | ||
+ | return e.prototype.defaults = {boxClass: "wow", animateClass: "animated", offset: 0, mobile: !0, live: !0, callback: null, scrollContainer: null}, e.prototype.init = function () { | ||
+ | var a; | ||
+ | return this.element = window.document.documentElement, "interactive" === (a = document.readyState) || "complete" === a ? this.start() : this.util().addEvent(document, "DOMContentLoaded", this.start), this.finished = [] | ||
+ | }, e.prototype.start = function () { | ||
+ | var b, c, d, e; | ||
+ | if (this.stopped = !1, this.boxes = function () { | ||
+ | var a, c, d, e; | ||
+ | for (d = this.element.querySelectorAll("." + this.config.boxClass), e = [], a = 0, c = d.length; c > a; a++) | ||
+ | b = d[a], e.push(b); | ||
+ | return e | ||
+ | }.call(this), this.all = function () { | ||
+ | var a, c, d, e; | ||
+ | for (d = this.boxes, e = [], a = 0, c = d.length; c > a; a++) | ||
+ | b = d[a], e.push(b); | ||
+ | return e | ||
+ | }.call(this), this.boxes.length) | ||
+ | if (this.disabled()) | ||
+ | this.resetStyle(); | ||
+ | else | ||
+ | for (e = this.boxes, c = 0, d = e.length; d > c; c++) | ||
+ | b = e[c], this.applyStyle(b, !0); | ||
+ | return this.disabled() || (this.util().addEvent(this.config.scrollContainer || window, "scroll", this.scrollHandler), this.util().addEvent(window, "resize", this.scrollHandler), this.interval = setInterval(this.scrollCallback, 50)), this.config.live ? new a(function (a) { | ||
+ | return function (b) { | ||
+ | var c, d, e, f, g; | ||
+ | for (g = [], c = 0, d = b.length; d > c; c++) | ||
+ | f = b[c], g.push(function () { | ||
+ | var a, b, c, d; | ||
+ | for (c = f.addedNodes || [], d = [], a = 0, b = c.length; b > a; a++) | ||
+ | e = c[a], d.push(this.doSync(e)); | ||
+ | return d | ||
+ | }.call(a)); | ||
+ | return g | ||
+ | } | ||
+ | }(this)).observe(document.body, {childList: !0, subtree: !0}) : void 0 | ||
+ | }, e.prototype.stop = function () { | ||
+ | return this.stopped = !0, this.util().removeEvent(this.config.scrollContainer || window, "scroll", this.scrollHandler), this.util().removeEvent(window, "resize", this.scrollHandler), null != this.interval ? clearInterval(this.interval) : void 0 | ||
+ | }, e.prototype.sync = function () { | ||
+ | return a.notSupported ? this.doSync(this.element) : void 0 | ||
+ | }, e.prototype.doSync = function (a) { | ||
+ | var b, c, d, e, f; | ||
+ | if (null == a && (a = this.element), 1 === a.nodeType) { | ||
+ | for (a = a.parentNode || a, e = a.querySelectorAll("." + this.config.boxClass), f = [], c = 0, d = e.length; d > c; c++) | ||
+ | b = e[c], g.call(this.all, b) < 0 ? (this.boxes.push(b), this.all.push(b), this.stopped || this.disabled() ? this.resetStyle() : this.applyStyle(b, !0), f.push(this.scrolled = !0)) : f.push(void 0); | ||
+ | return f | ||
+ | } | ||
+ | }, e.prototype.show = function (a) { | ||
+ | return this.applyStyle(a), a.className = a.className + " " + this.config.animateClass, null != this.config.callback && this.config.callback(a), this.util().emitEvent(a, this.wowEvent), this.util().addEvent(a, "animationend", this.resetAnimation), this.util().addEvent(a, "oanimationend", this.resetAnimation), this.util().addEvent(a, "webkitAnimationEnd", this.resetAnimation), this.util().addEvent(a, "MSAnimationEnd", this.resetAnimation), a | ||
+ | }, e.prototype.applyStyle = function (a, b) { | ||
+ | var c, d, e; | ||
+ | return d = a.getAttribute("data-wow-duration"), c = a.getAttribute("data-wow-delay"), e = a.getAttribute("data-wow-iteration"), this.animate(function (f) { | ||
+ | return function () { | ||
+ | return f.customStyle(a, b, d, c, e) | ||
+ | } | ||
+ | }(this)) | ||
+ | }, e.prototype.animate = function () { | ||
+ | return"requestAnimationFrame"in window ? function (a) { | ||
+ | return window.requestAnimationFrame(a) | ||
+ | } : function (a) { | ||
+ | return a() | ||
+ | } | ||
+ | }(), e.prototype.resetStyle = function () { | ||
+ | var a, b, c, d, e; | ||
+ | for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++) | ||
+ | a = d[b], e.push(a.style.visibility = "visible"); | ||
+ | return e | ||
+ | }, e.prototype.resetAnimation = function (a) { | ||
+ | var b; | ||
+ | return a.type.toLowerCase().indexOf("animationend") >= 0 ? (b = a.target || a.srcElement, b.className = b.className.replace(this.config.animateClass, "").trim()) : void 0 | ||
+ | }, e.prototype.customStyle = function (a, b, c, d, e) { | ||
+ | return b && this.cacheAnimationName(a), a.style.visibility = b ? "hidden" : "visible", c && this.vendorSet(a.style, {animationDuration: c}), d && this.vendorSet(a.style, {animationDelay: d}), e && this.vendorSet(a.style, {animationIterationCount: e}), this.vendorSet(a.style, {animationName: b ? "none" : this.cachedAnimationName(a)}), a | ||
+ | }, e.prototype.vendors = ["moz", "webkit"], e.prototype.vendorSet = function (a, b) { | ||
+ | var c, d, e, f; | ||
+ | d = []; | ||
+ | for (c in b) | ||
+ | e = b[c], a["" + c] = e, d.push(function () { | ||
+ | var b, d, g, h; | ||
+ | for (g = this.vendors, h = [], b = 0, d = g.length; d > b; b++) | ||
+ | f = g[b], h.push(a["" + f + c.charAt(0).toUpperCase() + c.substr(1)] = e); | ||
+ | return h | ||
+ | }.call(this)); | ||
+ | return d | ||
+ | }, e.prototype.vendorCSS = function (a, b) { | ||
+ | var c, e, f, g, h, i; | ||
+ | for (h = d(a), g = h.getPropertyCSSValue(b), f = this.vendors, c = 0, e = f.length; e > c; c++) | ||
+ | i = f[c], g = g || h.getPropertyCSSValue("-" + i + "-" + b); | ||
+ | return g | ||
+ | }, e.prototype.animationName = function (a) { | ||
+ | var b; | ||
+ | try { | ||
+ | b = this.vendorCSS(a, "animation-name").cssText | ||
+ | } catch (c) { | ||
+ | b = d(a).getPropertyValue("animation-name") | ||
+ | } | ||
+ | return"none" === b ? "" : b | ||
+ | }, e.prototype.cacheAnimationName = function (a) { | ||
+ | return this.animationNameCache.set(a, this.animationName(a)) | ||
+ | }, e.prototype.cachedAnimationName = function (a) { | ||
+ | return this.animationNameCache.get(a) | ||
+ | }, e.prototype.scrollHandler = function () { | ||
+ | return this.scrolled = !0 | ||
+ | }, e.prototype.scrollCallback = function () { | ||
+ | var a; | ||
+ | return!this.scrolled || (this.scrolled = !1, this.boxes = function () { | ||
+ | var b, c, d, e; | ||
+ | for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++) | ||
+ | a = d[b], a && (this.isVisible(a) ? this.show(a) : e.push(a)); | ||
+ | return e | ||
+ | }.call(this), this.boxes.length || this.config.live) ? void 0 : this.stop() | ||
+ | }, e.prototype.offsetTop = function (a) { | ||
+ | for (var b; void 0 === a.offsetTop; ) | ||
+ | a = a.parentNode; | ||
+ | for (b = a.offsetTop; a = a.offsetParent; ) | ||
+ | b += a.offsetTop; | ||
+ | return b | ||
+ | }, e.prototype.isVisible = function (a) { | ||
+ | var b, c, d, e, f; | ||
+ | return c = a.getAttribute("data-wow-offset") || this.config.offset, f = this.config.scrollContainer && this.config.scrollContainer.scrollTop || window.pageYOffset, e = f + Math.min(this.element.clientHeight, this.util().innerHeight()) - c, d = this.offsetTop(a), b = d + a.clientHeight, e >= d && b >= f | ||
+ | }, e.prototype.util = function () { | ||
+ | return null != this._util ? this._util : this._util = new b | ||
+ | }, e.prototype.disabled = function () { | ||
+ | return!this.config.mobile && this.util().isMobile(navigator.userAgent) | ||
+ | }, e | ||
+ | }() | ||
+ | }).call(this); | ||
</script> | </script> | ||
<!--end wow--> | <!--end wow--> | ||
Line 1,508: | Line 4,195: | ||
$(document).ready(function () { | $(document).ready(function () { | ||
− | + | $("#HQ_page").attr('id', ''); | |
− | + | if (wgPageName.substring(0, 8) == "Template") { // if the page is a template it displays the full name in a single line | |
− | + | $("#team_name").html(wgPageName); | |
− | + | } else if (((wgPageName.match(/\//g) || []).length) == 0) { // if it is the home page , just print the team's name | |
− | + | $("#team_name").html(wgPageName.substring(5, wgPageName.length)); | |
− | + | } else { | |
− | + | // this adds the team's name as an h1 | |
− | + | $("#team_name").html(wgPageName.substring(5, wgPageName.indexOf("/"))); | |
− | + | // this adds the page's title as an h4 | |
− | + | $("#page_name").html((wgPageName.substring(wgPageName.indexOf("/") + 1, wgPageName.length)).replace(/\/|_/g, " ")); | |
− | + | } | |
− | + | $('#accordion').find('.menu_item').click(function () { | |
− | + | //Expand or collapse this panel | |
− | + | submenu = $(this).find('.submenu'); | |
− | + | submenu.toggle(); | |
− | + | icon = $(this).find('.icon'); | |
− | + | if (!$(submenu).is(':visible')) { | |
− | + | icon.removeClass("less").addClass("plus"); | |
− | + | } else { | |
− | + | icon.removeClass("plus").addClass("less"); | |
− | + | } | |
− | + | //Hide the other panels | |
− | + | $(".submenu").not(submenu).hide(); | |
− | + | $(".icon").not(icon).removeClass("less").addClass("plus"); | |
− | + | }); | |
− | + | $(".collapsable_menu_control").click(function () { | |
− | + | $(".menu_item").toggle(); | |
− | + | }); | |
− | + | $(window).resize(function () { | |
− | + | $(".menu_item").show(); | |
− | + | }); | |
}); | }); | ||
Revision as of 18:40, 5 August 2016