Initial commit
Benjamin Renard authored 8 years ago
|
1) /*!
2) * Bootstrap v3.3.7 (http://getbootstrap.com)
3) * Copyright 2011-2016 Twitter, Inc.
4) * Licensed under the MIT license
5) */
6)
7) if (typeof jQuery === 'undefined') {
8) throw new Error('Bootstrap\'s JavaScript requires jQuery')
9) }
10)
11) +function ($) {
12) 'use strict';
13) var version = $.fn.jquery.split(' ')[0].split('.')
14) if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
15) throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
16) }
17) }(jQuery);
18)
19) /* ========================================================================
20) * Bootstrap: transition.js v3.3.7
21) * http://getbootstrap.com/javascript/#transitions
22) * ========================================================================
23) * Copyright 2011-2016 Twitter, Inc.
24) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25) * ======================================================================== */
26)
27)
28) +function ($) {
29) 'use strict';
30)
31) // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
32) // ============================================================
33)
34) function transitionEnd() {
35) var el = document.createElement('bootstrap')
36)
37) var transEndEventNames = {
38) WebkitTransition : 'webkitTransitionEnd',
39) MozTransition : 'transitionend',
40) OTransition : 'oTransitionEnd otransitionend',
41) transition : 'transitionend'
42) }
43)
44) for (var name in transEndEventNames) {
45) if (el.style[name] !== undefined) {
46) return { end: transEndEventNames[name] }
47) }
48) }
49)
50) return false // explicit for ie8 ( ._.)
51) }
52)
53) // http://blog.alexmaccaw.com/css-transitions
54) $.fn.emulateTransitionEnd = function (duration) {
55) var called = false
56) var $el = this
57) $(this).one('bsTransitionEnd', function () { called = true })
58) var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
59) setTimeout(callback, duration)
60) return this
61) }
62)
63) $(function () {
64) $.support.transition = transitionEnd()
65)
66) if (!$.support.transition) return
67)
68) $.event.special.bsTransitionEnd = {
69) bindType: $.support.transition.end,
70) delegateType: $.support.transition.end,
71) handle: function (e) {
72) if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
73) }
74) }
75) })
76)
77) }(jQuery);
78)
79) /* ========================================================================
80) * Bootstrap: alert.js v3.3.7
81) * http://getbootstrap.com/javascript/#alerts
82) * ========================================================================
83) * Copyright 2011-2016 Twitter, Inc.
84) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
85) * ======================================================================== */
86)
87)
88) +function ($) {
89) 'use strict';
90)
91) // ALERT CLASS DEFINITION
92) // ======================
93)
94) var dismiss = '[data-dismiss="alert"]'
95) var Alert = function (el) {
96) $(el).on('click', dismiss, this.close)
97) }
98)
99) Alert.VERSION = '3.3.7'
100)
101) Alert.TRANSITION_DURATION = 150
102)
103) Alert.prototype.close = function (e) {
104) var $this = $(this)
105) var selector = $this.attr('data-target')
106)
107) if (!selector) {
108) selector = $this.attr('href')
109) selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
110) }
111)
112) var $parent = $(selector === '#' ? [] : selector)
113)
114) if (e) e.preventDefault()
115)
116) if (!$parent.length) {
117) $parent = $this.closest('.alert')
118) }
119)
120) $parent.trigger(e = $.Event('close.bs.alert'))
121)
122) if (e.isDefaultPrevented()) return
123)
124) $parent.removeClass('in')
125)
126) function removeElement() {
127) // detach from parent, fire event then clean up data
128) $parent.detach().trigger('closed.bs.alert').remove()
129) }
130)
131) $.support.transition && $parent.hasClass('fade') ?
132) $parent
133) .one('bsTransitionEnd', removeElement)
134) .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
135) removeElement()
136) }
137)
138)
139) // ALERT PLUGIN DEFINITION
140) // =======================
141)
142) function Plugin(option) {
143) return this.each(function () {
144) var $this = $(this)
145) var data = $this.data('bs.alert')
146)
147) if (!data) $this.data('bs.alert', (data = new Alert(this)))
148) if (typeof option == 'string') data[option].call($this)
149) })
150) }
151)
152) var old = $.fn.alert
153)
154) $.fn.alert = Plugin
155) $.fn.alert.Constructor = Alert
156)
157)
158) // ALERT NO CONFLICT
159) // =================
160)
161) $.fn.alert.noConflict = function () {
162) $.fn.alert = old
163) return this
164) }
165)
166)
167) // ALERT DATA-API
168) // ==============
169)
170) $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
171)
172) }(jQuery);
173)
174) /* ========================================================================
175) * Bootstrap: button.js v3.3.7
176) * http://getbootstrap.com/javascript/#buttons
177) * ========================================================================
178) * Copyright 2011-2016 Twitter, Inc.
179) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
180) * ======================================================================== */
181)
182)
183) +function ($) {
184) 'use strict';
185)
186) // BUTTON PUBLIC CLASS DEFINITION
187) // ==============================
188)
189) var Button = function (element, options) {
190) this.$element = $(element)
191) this.options = $.extend({}, Button.DEFAULTS, options)
192) this.isLoading = false
193) }
194)
195) Button.VERSION = '3.3.7'
196)
197) Button.DEFAULTS = {
198) loadingText: 'loading...'
199) }
200)
201) Button.prototype.setState = function (state) {
202) var d = 'disabled'
203) var $el = this.$element
204) var val = $el.is('input') ? 'val' : 'html'
205) var data = $el.data()
206)
207) state += 'Text'
208)
209) if (data.resetText == null) $el.data('resetText', $el[val]())
210)
211) // push to event loop to allow forms to submit
212) setTimeout($.proxy(function () {
213) $el[val](data[state] == null ? this.options[state] : data[state])
214)
215) if (state == 'loadingText') {
216) this.isLoading = true
217) $el.addClass(d).attr(d, d).prop(d, true)
218) } else if (this.isLoading) {
219) this.isLoading = false
220) $el.removeClass(d).removeAttr(d).prop(d, false)
221) }
222) }, this), 0)
223) }
224)
225) Button.prototype.toggle = function () {
226) var changed = true
227) var $parent = this.$element.closest('[data-toggle="buttons"]')
228)
229) if ($parent.length) {
230) var $input = this.$element.find('input')
231) if ($input.prop('type') == 'radio') {
232) if ($input.prop('checked')) changed = false
233) $parent.find('.active').removeClass('active')
234) this.$element.addClass('active')
235) } else if ($input.prop('type') == 'checkbox') {
236) if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
237) this.$element.toggleClass('active')
238) }
239) $input.prop('checked', this.$element.hasClass('active'))
240) if (changed) $input.trigger('change')
241) } else {
242) this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
243) this.$element.toggleClass('active')
244) }
245) }
246)
247)
248) // BUTTON PLUGIN DEFINITION
249) // ========================
250)
251) function Plugin(option) {
252) return this.each(function () {
253) var $this = $(this)
254) var data = $this.data('bs.button')
255) var options = typeof option == 'object' && option
256)
257) if (!data) $this.data('bs.button', (data = new Button(this, options)))
258)
259) if (option == 'toggle') data.toggle()
260) else if (option) data.setState(option)
261) })
262) }
263)
264) var old = $.fn.button
265)
266) $.fn.button = Plugin
267) $.fn.button.Constructor = Button
268)
269)
270) // BUTTON NO CONFLICT
271) // ==================
272)
273) $.fn.button.noConflict = function () {
274) $.fn.button = old
275) return this
276) }
277)
278)
279) // BUTTON DATA-API
280) // ===============
281)
282) $(document)
283) .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
284) var $btn = $(e.target).closest('.btn')
285) Plugin.call($btn, 'toggle')
286) if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
287) // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
288) e.preventDefault()
289) // The target component still receive the focus
290) if ($btn.is('input,button')) $btn.trigger('focus')
291) else $btn.find('input:visible,button:visible').first().trigger('focus')
292) }
293) })
294) .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
295) $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
296) })
297)
298) }(jQuery);
299)
300) /* ========================================================================
301) * Bootstrap: carousel.js v3.3.7
302) * http://getbootstrap.com/javascript/#carousel
303) * ========================================================================
304) * Copyright 2011-2016 Twitter, Inc.
305) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
306) * ======================================================================== */
307)
308)
309) +function ($) {
310) 'use strict';
311)
312) // CAROUSEL CLASS DEFINITION
313) // =========================
314)
315) var Carousel = function (element, options) {
316) this.$element = $(element)
317) this.$indicators = this.$element.find('.carousel-indicators')
318) this.options = options
319) this.paused = null
320) this.sliding = null
321) this.interval = null
322) this.$active = null
323) this.$items = null
324)
325) this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
326)
327) this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
328) .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
329) .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
330) }
331)
332) Carousel.VERSION = '3.3.7'
333)
334) Carousel.TRANSITION_DURATION = 600
335)
336) Carousel.DEFAULTS = {
337) interval: 5000,
338) pause: 'hover',
339) wrap: true,
340) keyboard: true
341) }
342)
343) Carousel.prototype.keydown = function (e) {
344) if (/input|textarea/i.test(e.target.tagName)) return
345) switch (e.which) {
346) case 37: this.prev(); break
347) case 39: this.next(); break
348) default: return
349) }
350)
351) e.preventDefault()
352) }
353)
354) Carousel.prototype.cycle = function (e) {
355) e || (this.paused = false)
356)
357) this.interval && clearInterval(this.interval)
358)
359) this.options.interval
360) && !this.paused
361) && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
362)
363) return this
364) }
365)
366) Carousel.prototype.getItemIndex = function (item) {
367) this.$items = item.parent().children('.item')
368) return this.$items.index(item || this.$active)
369) }
370)
371) Carousel.prototype.getItemForDirection = function (direction, active) {
372) var activeIndex = this.getItemIndex(active)
373) var willWrap = (direction == 'prev' && activeIndex === 0)
374) || (direction == 'next' && activeIndex == (this.$items.length - 1))
375) if (willWrap && !this.options.wrap) return active
376) var delta = direction == 'prev' ? -1 : 1
377) var itemIndex = (activeIndex + delta) % this.$items.length
378) return this.$items.eq(itemIndex)
379) }
380)
381) Carousel.prototype.to = function (pos) {
382) var that = this
383) var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
384)
385) if (pos > (this.$items.length - 1) || pos < 0) return
386)
387) if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
388) if (activeIndex == pos) return this.pause().cycle()
389)
390) return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
391) }
392)
393) Carousel.prototype.pause = function (e) {
394) e || (this.paused = true)
395)
396) if (this.$element.find('.next, .prev').length && $.support.transition) {
397) this.$element.trigger($.support.transition.end)
398) this.cycle(true)
399) }
400)
401) this.interval = clearInterval(this.interval)
402)
403) return this
404) }
405)
406) Carousel.prototype.next = function () {
407) if (this.sliding) return
408) return this.slide('next')
409) }
410)
411) Carousel.prototype.prev = function () {
412) if (this.sliding) return
413) return this.slide('prev')
414) }
415)
416) Carousel.prototype.slide = function (type, next) {
417) var $active = this.$element.find('.item.active')
418) var $next = next || this.getItemForDirection(type, $active)
419) var isCycling = this.interval
420) var direction = type == 'next' ? 'left' : 'right'
421) var that = this
422)
423) if ($next.hasClass('active')) return (this.sliding = false)
424)
425) var relatedTarget = $next[0]
426) var slideEvent = $.Event('slide.bs.carousel', {
427) relatedTarget: relatedTarget,
428) direction: direction
429) })
430) this.$element.trigger(slideEvent)
431) if (slideEvent.isDefaultPrevented()) return
432)
433) this.sliding = true
434)
435) isCycling && this.pause()
436)
437) if (this.$indicators.length) {
438) this.$indicators.find('.active').removeClass('active')
439) var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
440) $nextIndicator && $nextIndicator.addClass('active')
441) }
442)
443) var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
444) if ($.support.transition && this.$element.hasClass('slide')) {
445) $next.addClass(type)
446) $next[0].offsetWidth // force reflow
447) $active.addClass(direction)
448) $next.addClass(direction)
449) $active
450) .one('bsTransitionEnd', function () {
451) $next.removeClass([type, direction].join(' ')).addClass('active')
452) $active.removeClass(['active', direction].join(' '))
453) that.sliding = false
454) setTimeout(function () {
455) that.$element.trigger(slidEvent)
456) }, 0)
457) })
458) .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
459) } else {
460) $active.removeClass('active')
461) $next.addClass('active')
462) this.sliding = false
463) this.$element.trigger(slidEvent)
464) }
465)
466) isCycling && this.cycle()
467)
468) return this
469) }
470)
471)
472) // CAROUSEL PLUGIN DEFINITION
473) // ==========================
474)
475) function Plugin(option) {
476) return this.each(function () {
477) var $this = $(this)
478) var data = $this.data('bs.carousel')
479) var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
480) var action = typeof option == 'string' ? option : options.slide
481)
482) if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
483) if (typeof option == 'number') data.to(option)
484) else if (action) data[action]()
485) else if (options.interval) data.pause().cycle()
486) })
487) }
488)
489) var old = $.fn.carousel
490)
491) $.fn.carousel = Plugin
492) $.fn.carousel.Constructor = Carousel
493)
494)
495) // CAROUSEL NO CONFLICT
496) // ====================
497)
498) $.fn.carousel.noConflict = function () {
499) $.fn.carousel = old
500) return this
501) }
502)
503)
504) // CAROUSEL DATA-API
505) // =================
506)
507) var clickHandler = function (e) {
508) var href
509) var $this = $(this)
510) var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
511) if (!$target.hasClass('carousel')) return
512) var options = $.extend({}, $target.data(), $this.data())
513) var slideIndex = $this.attr('data-slide-to')
514) if (slideIndex) options.interval = false
515)
516) Plugin.call($target, options)
517)
518) if (slideIndex) {
519) $target.data('bs.carousel').to(slideIndex)
520) }
521)
522) e.preventDefault()
523) }
524)
525) $(document)
526) .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
527) .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
528)
529) $(window).on('load', function () {
530) $('[data-ride="carousel"]').each(function () {
531) var $carousel = $(this)
532) Plugin.call($carousel, $carousel.data())
533) })
534) })
535)
536) }(jQuery);
537)
538) /* ========================================================================
539) * Bootstrap: collapse.js v3.3.7
540) * http://getbootstrap.com/javascript/#collapse
541) * ========================================================================
542) * Copyright 2011-2016 Twitter, Inc.
543) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
544) * ======================================================================== */
545)
546) /* jshint latedef: false */
547)
548) +function ($) {
549) 'use strict';
550)
551) // COLLAPSE PUBLIC CLASS DEFINITION
552) // ================================
553)
554) var Collapse = function (element, options) {
555) this.$element = $(element)
556) this.options = $.extend({}, Collapse.DEFAULTS, options)
557) this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
558) '[data-toggle="collapse"][data-target="#' + element.id + '"]')
559) this.transitioning = null
560)
561) if (this.options.parent) {
562) this.$parent = this.getParent()
563) } else {
564) this.addAriaAndCollapsedClass(this.$element, this.$trigger)
565) }
566)
567) if (this.options.toggle) this.toggle()
568) }
569)
570) Collapse.VERSION = '3.3.7'
571)
|