3de512bf7b4c6a4f1b6378ab8817ddb583a07f8d
Benjamin Renard 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) 
Benjamin Renard Disable transition effects

Benjamin Renard authored 7 years ago

572)   Collapse.TRANSITION_DURATION = 0