bootstrap.js 94.7 KB
Newer Older
XhmikosR's avatar
XhmikosR committed
1
/*!
Mark Otto's avatar
grunt    
Mark Otto committed
2
 * Bootstrap v4.0.0-alpha (http://getbootstrap.com)
Mark Otto's avatar
Mark Otto committed
3
 * Copyright 2011-2015 Twitter, Inc.
XhmikosR's avatar
XhmikosR committed
4
5
6
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
7
8
9
10
11
12
13
14
15
16
if (typeof jQuery === 'undefined') {
  throw new Error('Bootstrap\'s JavaScript requires jQuery')
}

+function ($) {
  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);
XhmikosR's avatar
XhmikosR committed
17

Mark Otto's avatar
Mark Otto committed
18

19
+function ($) {
Mark Otto's avatar
Mark Otto committed
20
21

/**
22
23
24
25
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): util.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
26
27
 */

28
'use strict';
Mark Otto's avatar
Mark Otto committed
29

30
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
Mark Otto's avatar
Mark Otto committed
31

32
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
Mark Otto's avatar
Mark Otto committed
33

34
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
Mark Otto's avatar
Mark Otto committed
35

36
var Util = (function ($) {
Mark Otto's avatar
Mark Otto committed
37

38
39
40
41
42
  /**
   * ------------------------------------------------------------------------
   * Private TransitionEnd Helpers
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
43

44
  var transition = false;
Mark Otto's avatar
Mark Otto committed
45

46
47
48
49
50
51
  var TransitionEndEvent = {
    WebkitTransition: 'webkitTransitionEnd',
    MozTransition: 'transitionend',
    OTransition: 'oTransitionEnd otransitionend',
    transition: 'transitionend'
  };
Mark Otto's avatar
Mark Otto committed
52

53
54
55
  // shoutout AngusCroll (https://goo.gl/pxwQGp)
  function toType(obj) {
    return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
Mark Otto's avatar
Mark Otto committed
56
57
  }

58
59
60
  function isElement(obj) {
    return (obj[0] || obj).nodeType;
  }
Mark Otto's avatar
Mark Otto committed
61

62
63
64
65
66
67
68
69
70
71
72
  function getSpecialTransitionEndEvent() {
    return {
      bindType: transition.end,
      delegateType: transition.end,
      handle: function handle(event) {
        if ($(event.target).is(this)) {
          return event.handleObj.handler.apply(this, arguments);
        }
      }
    };
  }
Mark Otto's avatar
Mark Otto committed
73

74
75
76
77
  function transitionEndTest() {
    if (window.QUnit) {
      return false;
    }
Mark Otto's avatar
Mark Otto committed
78

79
    var el = document.createElement('bootstrap');
Mark Otto's avatar
Mark Otto committed
80

81
82
83
84
85
86
87
    for (var name in TransitionEndEvent) {
      if (el.style[name] !== undefined) {
        return { end: TransitionEndEvent[name] };
      }
    }

    return false;
Mark Otto's avatar
Mark Otto committed
88
89
  }

90
91
  function transitionEndEmulator(duration) {
    var _this = this;
Mark Otto's avatar
Mark Otto committed
92

93
    var called = false;
Mark Otto's avatar
Mark Otto committed
94

95
96
97
    $(this).one(Util.TRANSITION_END, function () {
      called = true;
    });
Mark Otto's avatar
Mark Otto committed
98

99
100
101
102
103
    setTimeout(function () {
      if (!called) {
        Util.triggerTransitionEnd(_this);
      }
    }, duration);
Mark Otto's avatar
Mark Otto committed
104

105
    return this;
Mark Otto's avatar
Mark Otto committed
106
107
  }

108
109
  function setTransitionEndSupport() {
    transition = transitionEndTest();
Mark Otto's avatar
Mark Otto committed
110

111
    $.fn.emulateTransitionEnd = transitionEndEmulator;
Mark Otto's avatar
Mark Otto committed
112

113
114
    if (Util.supportsTransitionEnd()) {
      $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
Mark Otto's avatar
Mark Otto committed
115
    }
116
  }
Mark Otto's avatar
Mark Otto committed
117

118
119
120
121
122
  /**
   * --------------------------------------------------------------------------
   * Public Util Api
   * --------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
123

124
  var Util = {
Mark Otto's avatar
Mark Otto committed
125

126
    TRANSITION_END: 'bsTransitionEnd',
Mark Otto's avatar
Mark Otto committed
127

128
129
130
131
    getUID: function getUID(prefix) {
      do prefix += ~ ~(Math.random() * 1000000); while (document.getElementById(prefix));
      return prefix;
    },
Mark Otto's avatar
Mark Otto committed
132

133
134
    getSelectorFromElement: function getSelectorFromElement(element) {
      var selector = element.getAttribute('data-target');
Mark Otto's avatar
Mark Otto committed
135

136
137
138
139
      if (!selector) {
        selector = element.getAttribute('href') || '';
        selector = /^#[a-z]/i.test(selector) ? selector : null;
      }
Mark Otto's avatar
Mark Otto committed
140

141
142
      return selector;
    },
Mark Otto's avatar
Mark Otto committed
143

144
145
146
    reflow: function reflow(element) {
      new Function('bs', 'return bs')(element.offsetHeight);
    },
Mark Otto's avatar
Mark Otto committed
147

148
149
150
    triggerTransitionEnd: function triggerTransitionEnd(element) {
      $(element).trigger(transition.end);
    },
Mark Otto's avatar
Mark Otto committed
151

152
153
154
    supportsTransitionEnd: function supportsTransitionEnd() {
      return !!transition;
    },
Mark Otto's avatar
Mark Otto committed
155

156
    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
Mark Otto's avatar
Mark Otto committed
157

158
159
160
161
      for (var property in configTypes) {
        var expectedTypes = configTypes[property];
        var value = config[property];
        var valueType = undefined;
Mark Otto's avatar
Mark Otto committed
162

163
        if (value && isElement(value)) valueType = 'element';else valueType = toType(value);
Mark Otto's avatar
Mark Otto committed
164

165
166
167
168
169
        if (!new RegExp(expectedTypes).test(valueType)) {
          throw new Error('' + componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".'));
        }
      }
    }
Mark Otto's avatar
Mark Otto committed
170

171
  };
Mark Otto's avatar
Mark Otto committed
172

173
  setTransitionEndSupport();
Mark Otto's avatar
Mark Otto committed
174

175
176
  return Util;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
177
178

/**
179
180
181
182
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): alert.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
183
184
 */

185
var Alert = (function ($) {
Mark Otto's avatar
Mark Otto committed
186

187
188
189
190
191
  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
192

193
194
195
196
197
198
199
  var NAME = 'alert';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.alert';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 150;
Mark Otto's avatar
Mark Otto committed
200

201
202
203
  var Selector = {
    DISMISS: '[data-dismiss="alert"]'
  };
Mark Otto's avatar
Mark Otto committed
204

205
206
207
208
209
  var Event = {
    CLOSE: 'close' + EVENT_KEY,
    CLOSED: 'closed' + EVENT_KEY,
    CLICK_DATA_API: 'click' + EVENT_KEY + '' + DATA_API_KEY
  };
Mark Otto's avatar
Mark Otto committed
210

211
212
213
214
215
  var ClassName = {
    ALERT: 'alert',
    FADE: 'fade',
    IN: 'in'
  };
Mark Otto's avatar
Mark Otto committed
216

217
218
219
220
221
  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
222

223
224
225
  var Alert = (function () {
    function Alert(element) {
      _classCallCheck(this, Alert);
Mark Otto's avatar
Mark Otto committed
226

227
228
      this._element = element;
    }
Mark Otto's avatar
Mark Otto committed
229

230
231
    _createClass(Alert, [{
      key: 'close',
Mark Otto's avatar
Mark Otto committed
232

233
      // public
Mark Otto's avatar
Mark Otto committed
234

235
236
      value: function close(element) {
        element = element || this._element;
Mark Otto's avatar
Mark Otto committed
237

238
239
        var rootElement = this._getRootElement(element);
        var customEvent = this._triggerCloseEvent(rootElement);
Mark Otto's avatar
Mark Otto committed
240

241
242
243
        if (customEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
244

245
246
247
248
249
250
251
252
253
254
        this._removeElement(rootElement);
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);
        this._element = null;
      }
    }, {
      key: '_getRootElement',
Mark Otto's avatar
Mark Otto committed
255

256
      // private
Mark Otto's avatar
Mark Otto committed
257

258
259
260
      value: function _getRootElement(element) {
        var parent = false;
        var selector = Util.getSelectorFromElement(element);
Mark Otto's avatar
Mark Otto committed
261

262
263
264
        if (selector) {
          parent = $(selector)[0];
        }
Mark Otto's avatar
Mark Otto committed
265

266
267
268
        if (!parent) {
          parent = $(element).closest('.' + ClassName.ALERT)[0];
        }
Mark Otto's avatar
Mark Otto committed
269

270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
        return parent;
      }
    }, {
      key: '_triggerCloseEvent',
      value: function _triggerCloseEvent(element) {
        var closeEvent = $.Event(Event.CLOSE);
        $(element).trigger(closeEvent);
        return closeEvent;
      }
    }, {
      key: '_removeElement',
      value: function _removeElement(element) {
        $(element).removeClass(ClassName.IN);

        if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
          this._destroyElement(element);
          return;
        }
Mark Otto's avatar
Mark Otto committed
288

289
290
291
292
293
294
295
296
297
        $(element).one(Util.TRANSITION_END, this._destroyElement.bind(this, element)).emulateTransitionEnd(TRANSITION_DURATION);
      }
    }, {
      key: '_destroyElement',
      value: function _destroyElement(element) {
        $(element).detach().trigger(Event.CLOSED).remove();
      }
    }], [{
      key: 'VERSION',
Mark Otto's avatar
Mark Otto committed
298

299
      // getters
Mark Otto's avatar
Mark Otto committed
300

301
302
303
304
305
      get: function () {
        return VERSION;
      }
    }, {
      key: '_jQueryInterface',
Mark Otto's avatar
Mark Otto committed
306

307
      // static
Mark Otto's avatar
Mark Otto committed
308

309
310
311
312
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var $element = $(this);
          var data = $element.data(DATA_KEY);
Mark Otto's avatar
Mark Otto committed
313

314
315
316
317
          if (!data) {
            data = new Alert(this);
            $element.data(DATA_KEY, data);
          }
Mark Otto's avatar
Mark Otto committed
318

319
320
321
322
323
324
325
326
327
328
329
330
          if (config === 'close') {
            data[config](this);
          }
        });
      }
    }, {
      key: '_handleDismiss',
      value: function _handleDismiss(alertInstance) {
        return function (event) {
          if (event) {
            event.preventDefault();
          }
Mark Otto's avatar
Mark Otto committed
331

332
333
334
335
          alertInstance.close(this);
        };
      }
    }]);
Mark Otto's avatar
Mark Otto committed
336

337
338
    return Alert;
  })();
Mark Otto's avatar
Mark Otto committed
339

340
341
342
343
344
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
345

346
  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
Mark Otto's avatar
Mark Otto committed
347

348
349
350
351
352
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
353

354
355
356
357
358
359
  $.fn[NAME] = Alert._jQueryInterface;
  $.fn[NAME].Constructor = Alert;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Alert._jQueryInterface;
  };
Mark Otto's avatar
Mark Otto committed
360

361
362
  return Alert;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
363
364

/**
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): button.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Button = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'button';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.button';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 150;

  var ClassName = {
    ACTIVE: 'active',
    BUTTON: 'btn',
    FOCUS: 'focus'
  };

  var Selector = {
    DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
    DATA_TOGGLE: '[data-toggle="buttons"]',
    INPUT: 'input',
    ACTIVE: '.active',
    BUTTON: '.btn'
  };

  var Event = {
    CLICK_DATA_API: 'click' + EVENT_KEY + '' + DATA_API_KEY,
    FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + '' + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + '' + DATA_API_KEY)
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Button = (function () {
    function Button(element) {
      _classCallCheck(this, Button);

      this._element = element;
    }

    _createClass(Button, [{
      key: 'toggle',

      // public

      value: function toggle() {
        var triggerChangeEvent = true;
        var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];

        if (rootElement) {
          var input = $(this._element).find(Selector.INPUT)[0];

          if (input) {
            if (input.type === 'radio') {
              if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
                triggerChangeEvent = false;
              } else {
                var activeElement = $(rootElement).find(Selector.ACTIVE)[0];

                if (activeElement) {
                  $(activeElement).removeClass(ClassName.ACTIVE);
                }
              }
            }

            if (triggerChangeEvent) {
              input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
              $(this._element).trigger('change');
            }
          }
        } else {
          this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
        }
Mark Otto's avatar
Mark Otto committed
452

453
454
455
456
457
458
459
460
461
462
463
464
        if (triggerChangeEvent) {
          $(this._element).toggleClass(ClassName.ACTIVE);
        }
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);
        this._element = null;
      }
    }], [{
      key: 'VERSION',
Mark Otto's avatar
Mark Otto committed
465

466
      // getters
Mark Otto's avatar
Mark Otto committed
467

468
469
470
471
472
      get: function () {
        return VERSION;
      }
    }, {
      key: '_jQueryInterface',
Mark Otto's avatar
Mark Otto committed
473

474
      // static
Mark Otto's avatar
Mark Otto committed
475

476
477
478
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
Mark Otto's avatar
Mark Otto committed
479

480
481
482
483
          if (!data) {
            data = new Button(this);
            $(this).data(DATA_KEY, data);
          }
Mark Otto's avatar
Mark Otto committed
484

485
486
487
488
489
490
          if (config === 'toggle') {
            data[config]();
          }
        });
      }
    }]);
Mark Otto's avatar
Mark Otto committed
491

492
493
    return Button;
  })();
Mark Otto's avatar
Mark Otto committed
494

495
496
497
498
499
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
500

501
502
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
    event.preventDefault();
Mark Otto's avatar
Mark Otto committed
503

504
    var button = event.target;
Mark Otto's avatar
Mark Otto committed
505

506
507
508
    if (!$(button).hasClass(ClassName.BUTTON)) {
      button = $(button).closest(Selector.BUTTON);
    }
Mark Otto's avatar
Mark Otto committed
509

510
511
512
513
514
    Button._jQueryInterface.call($(button), 'toggle');
  }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
    var button = $(event.target).closest(Selector.BUTTON)[0];
    $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
  });
Mark Otto's avatar
Mark Otto committed
515

516
517
518
519
520
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
521

522
523
524
525
526
527
  $.fn[NAME] = Button._jQueryInterface;
  $.fn[NAME].Constructor = Button;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Button._jQueryInterface;
  };
Mark Otto's avatar
Mark Otto committed
528

529
530
  return Button;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
531
532

/**
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): carousel.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Carousel = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'carousel';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.carousel';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 600;

  var Default = {
    interval: 5000,
    keyboard: true,
    slide: false,
    pause: 'hover',
    wrap: true
  };

  var DefaultType = {
    interval: '(number|boolean)',
    keyboard: 'boolean',
    slide: '(boolean|string)',
    pause: '(string|boolean)',
    wrap: 'boolean'
  };

  var Direction = {
    NEXT: 'next',
    PREVIOUS: 'prev'
  };

  var Event = {
    SLIDE: 'slide' + EVENT_KEY,
    SLID: 'slid' + EVENT_KEY,
    KEYDOWN: 'keydown' + EVENT_KEY,
    MOUSEENTER: 'mouseenter' + EVENT_KEY,
    MOUSELEAVE: 'mouseleave' + EVENT_KEY,
    LOAD_DATA_API: 'load' + EVENT_KEY + '' + DATA_API_KEY,
    CLICK_DATA_API: 'click' + EVENT_KEY + '' + DATA_API_KEY
  };

  var ClassName = {
    CAROUSEL: 'carousel',
    ACTIVE: 'active',
    SLIDE: 'slide',
    RIGHT: 'right',
    LEFT: 'left',
    ITEM: 'carousel-item'
  };

  var Selector = {
    ACTIVE: '.active',
    ACTIVE_ITEM: '.active.carousel-item',
    ITEM: '.carousel-item',
    NEXT_PREV: '.next, .prev',
    INDICATORS: '.carousel-indicators',
    DATA_SLIDE: '[data-slide], [data-slide-to]',
    DATA_RIDE: '[data-ride="carousel"]'
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Carousel = (function () {
    function Carousel(element, config) {
      _classCallCheck(this, Carousel);

      this._items = null;
      this._interval = null;
      this._activeElement = null;

      this._isPaused = false;
      this._isSliding = false;

      this._config = this._getConfig(config);
      this._element = $(element)[0];
      this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0];

      this._addEventListeners();
    }

    _createClass(Carousel, [{
      key: 'next',

      // public

      value: function next() {
        if (!this._isSliding) {
          this._slide(Direction.NEXT);
        }
      }
    }, {
      key: 'prev',
      value: function prev() {
        if (!this._isSliding) {
          this._slide(Direction.PREVIOUS);
        }
      }
    }, {
      key: 'pause',
      value: function pause(event) {
        if (!event) {
          this._isPaused = true;
        }
Mark Otto's avatar
Mark Otto committed
652

653
654
655
656
        if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) {
          Util.triggerTransitionEnd(this._element);
          this.cycle(true);
        }
Mark Otto's avatar
Mark Otto committed
657

658
659
660
661
662
663
664
665
666
        clearInterval(this._interval);
        this._interval = null;
      }
    }, {
      key: 'cycle',
      value: function cycle(event) {
        if (!event) {
          this._isPaused = false;
        }
Mark Otto's avatar
Mark Otto committed
667

668
669
670
671
        if (this._interval) {
          clearInterval(this._interval);
          this._interval = null;
        }
Mark Otto's avatar
Mark Otto committed
672

673
674
675
676
677
678
679
680
        if (this._config.interval && !this._isPaused) {
          this._interval = setInterval($.proxy(this.next, this), this._config.interval);
        }
      }
    }, {
      key: 'to',
      value: function to(index) {
        var _this2 = this;
Mark Otto's avatar
Mark Otto committed
681

682
        this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
Mark Otto's avatar
Mark Otto committed
683

684
        var activeIndex = this._getItemIndex(this._activeElement);
Mark Otto's avatar
Mark Otto committed
685

686
687
688
        if (index > this._items.length - 1 || index < 0) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
689

690
691
692
693
694
695
        if (this._isSliding) {
          $(this._element).one(Event.SLID, function () {
            return _this2.to(index);
          });
          return;
        }
Mark Otto's avatar
Mark Otto committed
696

697
698
699
700
701
        if (activeIndex == index) {
          this.pause();
          this.cycle();
          return;
        }
Mark Otto's avatar
Mark Otto committed
702

703
        var direction = index > activeIndex ? Direction.NEXT : Direction.PREVIOUS;
Mark Otto's avatar
Mark Otto committed
704

705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
        this._slide(direction, this._items[index]);
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $(this._element).off(EVENT_KEY);
        $.removeData(this._element, DATA_KEY);

        this._items = null;
        this._config = null;
        this._element = null;
        this._interval = null;
        this._isPaused = null;
        this._isSliding = null;
        this._activeElement = null;
        this._indicatorsElement = null;
      }
    }, {
      key: '_getConfig',
Mark Otto's avatar
Mark Otto committed
724

725
      // private
Mark Otto's avatar
Mark Otto committed
726

727
728
729
730
731
732
733
734
735
736
737
      value: function _getConfig(config) {
        config = $.extend({}, Default, config);
        Util.typeCheckConfig(NAME, config, DefaultType);
        return config;
      }
    }, {
      key: '_addEventListeners',
      value: function _addEventListeners() {
        if (this._config.keyboard) {
          $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this));
        }
Mark Otto's avatar
Mark Otto committed
738

739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
        if (this._config.pause == 'hover' && !('ontouchstart' in document.documentElement)) {
          $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this));
        }
      }
    }, {
      key: '_keydown',
      value: function _keydown(event) {
        event.preventDefault();

        if (/input|textarea/i.test(event.target.tagName)) return;

        switch (event.which) {
          case 37:
            this.prev();break;
          case 39:
            this.next();break;
          default:
            return;
Mark Otto's avatar
Mark Otto committed
757
758
        }
      }
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
    }, {
      key: '_getItemIndex',
      value: function _getItemIndex(element) {
        this._items = $.makeArray($(element).parent().find(Selector.ITEM));
        return this._items.indexOf(element);
      }
    }, {
      key: '_getItemByDirection',
      value: function _getItemByDirection(direction, activeElement) {
        var isNextDirection = direction === Direction.NEXT;
        var isPrevDirection = direction === Direction.PREVIOUS;
        var activeIndex = this._getItemIndex(activeElement);
        var lastItemIndex = this._items.length - 1;
        var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex == lastItemIndex;

        if (isGoingToWrap && !this._config.wrap) {
          return activeElement;
        }

        var delta = direction == Direction.PREVIOUS ? -1 : 1;
        var itemIndex = (activeIndex + delta) % this._items.length;
Mark Otto's avatar
Mark Otto committed
780

781
        return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
Mark Otto's avatar
Mark Otto committed
782
      }
783
784
785
786
787
788
789
    }, {
      key: '_triggerSlideEvent',
      value: function _triggerSlideEvent(relatedTarget, directionalClassname) {
        var slideEvent = $.Event(Event.SLIDE, {
          relatedTarget: relatedTarget,
          direction: directionalClassname
        });
Mark Otto's avatar
Mark Otto committed
790

791
        $(this._element).trigger(slideEvent);
Mark Otto's avatar
Mark Otto committed
792

793
794
795
796
797
798
799
        return slideEvent;
      }
    }, {
      key: '_setActiveIndicatorElement',
      value: function _setActiveIndicatorElement(element) {
        if (this._indicatorsElement) {
          $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
Mark Otto's avatar
Mark Otto committed
800

801
          var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
Mark Otto's avatar
Mark Otto committed
802

803
804
805
806
807
808
809
810
811
          if (nextIndicator) {
            $(nextIndicator).addClass(ClassName.ACTIVE);
          }
        }
      }
    }, {
      key: '_slide',
      value: function _slide(direction, element) {
        var _this3 = this;
Mark Otto's avatar
Mark Otto committed
812

813
814
        var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
        var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
Mark Otto's avatar
Mark Otto committed
815

816
        var isCycling = !!this._interval;
Mark Otto's avatar
Mark Otto committed
817

818
        var directionalClassName = direction == Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT;
Mark Otto's avatar
Mark Otto committed
819

820
821
822
823
        if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {
          this._isSliding = false;
          return;
        }
Mark Otto's avatar
Mark Otto committed
824

825
826
827
828
        var slideEvent = this._triggerSlideEvent(nextElement, directionalClassName);
        if (slideEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
829

830
831
832
833
        if (!activeElement || !nextElement) {
          // some weirdness is happening, so we bail
          return;
        }
Mark Otto's avatar
Mark Otto committed
834

835
        this._isSliding = true;
Mark Otto's avatar
Mark Otto committed
836

837
838
839
        if (isCycling) {
          this.pause();
        }
Mark Otto's avatar
Mark Otto committed
840

841
        this._setActiveIndicatorElement(nextElement);
Mark Otto's avatar
Mark Otto committed
842

843
844
845
846
        var slidEvent = $.Event(Event.SLID, {
          relatedTarget: nextElement,
          direction: directionalClassName
        });
Mark Otto's avatar
Mark Otto committed
847

848
        if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) {
Mark Otto's avatar
Mark Otto committed
849

850
          $(nextElement).addClass(direction);
Mark Otto's avatar
Mark Otto committed
851

852
          Util.reflow(nextElement);
Mark Otto's avatar
Mark Otto committed
853

854
855
          $(activeElement).addClass(directionalClassName);
          $(nextElement).addClass(directionalClassName);
Mark Otto's avatar
Mark Otto committed
856

857
858
          $(activeElement).one(Util.TRANSITION_END, function () {
            $(nextElement).removeClass(directionalClassName).removeClass(direction);
Mark Otto's avatar
Mark Otto committed
859

860
            $(nextElement).addClass(ClassName.ACTIVE);
Mark Otto's avatar
Mark Otto committed
861

862
            $(activeElement).removeClass(ClassName.ACTIVE).removeClass(direction).removeClass(directionalClassName);
Mark Otto's avatar
Mark Otto committed
863

864
            _this3._isSliding = false;
Mark Otto's avatar
Mark Otto committed
865

866
867
868
869
870
871
872
            setTimeout(function () {
              return $(_this3._element).trigger(slidEvent);
            }, 0);
          }).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          $(activeElement).removeClass(ClassName.ACTIVE);
          $(nextElement).addClass(ClassName.ACTIVE);
Mark Otto's avatar
Mark Otto committed
873

874
875
876
          this._isSliding = false;
          $(this._element).trigger(slidEvent);
        }
Mark Otto's avatar
Mark Otto committed
877

878
879
880
881
882
883
        if (isCycling) {
          this.cycle();
        }
      }
    }], [{
      key: 'VERSION',
Mark Otto's avatar
Mark Otto committed
884

885
      // getters
Mark Otto's avatar
Mark Otto committed
886

887
888
889
890
891
892
893
894
895
896
      get: function () {
        return VERSION;
      }
    }, {
      key: 'Default',
      get: function () {
        return Default;
      }
    }, {
      key: '_jQueryInterface',
Mark Otto's avatar
Mark Otto committed
897

898
      // static
Mark Otto's avatar
Mark Otto committed
899

900
901
902
903
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
          var _config = $.extend({}, Default, $(this).data());
Mark Otto's avatar
Mark Otto committed
904

905
906
907
          if (typeof config === 'object') {
            $.extend(_config, config);
          }
Mark Otto's avatar
Mark Otto committed
908

909
          var action = typeof config === 'string' ? config : _config.slide;
Mark Otto's avatar
Mark Otto committed
910

911
912
913
914
          if (!data) {
            data = new Carousel(this, _config);
            $(this).data(DATA_KEY, data);
          }
Mark Otto's avatar
Mark Otto committed
915

916
917
918
919
920
921
922
923
924
925
926
927
928
929
          if (typeof config == 'number') {
            data.to(config);
          } else if (action) {
            data[action]();
          } else if (_config.interval) {
            data.pause();
            data.cycle();
          }
        });
      }
    }, {
      key: '_dataApiClickHandler',
      value: function _dataApiClickHandler(event) {
        var selector = Util.getSelectorFromElement(this);
Mark Otto's avatar
Mark Otto committed
930

931
932
933
        if (!selector) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
934

935
        var target = $(selector)[0];
Mark Otto's avatar
Mark Otto committed
936

937
938
939
        if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
940

941
        var config = $.extend({}, $(target).data(), $(this).data());
Mark Otto's avatar
Mark Otto committed
942

943
944
945
946
        var slideIndex = this.getAttribute('data-slide-to');
        if (slideIndex) {
          config.interval = false;
        }
Mark Otto's avatar
Mark Otto committed
947

948
        Carousel._jQueryInterface.call($(target), config);
Mark Otto's avatar
Mark Otto committed
949

950
951
952
        if (slideIndex) {
          $(target).data(DATA_KEY).to(slideIndex);
        }
Mark Otto's avatar
Mark Otto committed
953

954
955
956
        event.preventDefault();
      }
    }]);
Mark Otto's avatar
Mark Otto committed
957

958
959
    return Carousel;
  })();
Mark Otto's avatar
Mark Otto committed
960

961
962
963
964
965
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
966

967
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);
Mark Otto's avatar
Mark Otto committed
968

969
970
971
972
973
974
  $(window).on(Event.LOAD_DATA_API, function () {
    $(Selector.DATA_RIDE).each(function () {
      var $carousel = $(this);
      Carousel._jQueryInterface.call($carousel, $carousel.data());
    });
  });
Mark Otto's avatar
Mark Otto committed
975

976
977
978
979
980
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
981

982
983
984
985
986
987
  $.fn[NAME] = Carousel._jQueryInterface;
  $.fn[NAME].Constructor = Carousel;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Carousel._jQueryInterface;
  };
Mark Otto's avatar
Mark Otto committed
988

989
990
  return Carousel;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
991
992

/**
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): collapse.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Collapse = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'collapse';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.collapse';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 600;

  var Default = {
    toggle: true,
    parent: ''
  };

  var DefaultType = {
    toggle: 'boolean',
    parent: 'string'
  };

  var Event = {
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    CLICK_DATA_API: 'click' + EVENT_KEY + '' + DATA_API_KEY
  };

  var ClassName = {
    IN: 'in',
    COLLAPSE: 'collapse',
    COLLAPSING: 'collapsing',
    COLLAPSED: 'collapsed'
  };

  var Dimension = {
    WIDTH: 'width',
    HEIGHT: 'height'
  };

  var Selector = {
    ACTIVES: '.panel > .in, .panel > .collapsing',
    DATA_TOGGLE: '[data-toggle="collapse"]'
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Collapse = (function () {
    function Collapse(element, config) {
      _classCallCheck(this, Collapse);

      this._isTransitioning = false;
      this._element = element;
      this._config = this._getConfig(config);
      this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]')));

      this._parent = this._config.parent ? this._getParent() : null;

      if (!this._config.parent) {
        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
      }
Mark Otto's avatar
Mark Otto committed
1070

1071
1072
1073
      if (this._config.toggle) {
        this.toggle();
      }
Mark Otto's avatar
Mark Otto committed
1074
1075
    }

1076
1077
    _createClass(Collapse, [{
      key: 'toggle',
Mark Otto's avatar
Mark Otto committed
1078

1079
      // public
Mark Otto's avatar
Mark Otto committed
1080

1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
      value: function toggle() {
        if ($(this._element).hasClass(ClassName.IN)) {
          this.hide();
        } else {
          this.show();
        }
      }
    }, {
      key: 'show',
      value: function show() {
        var _this4 = this;

        if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1096

1097
1098
        var actives = undefined;
        var activesData = undefined;
Mark Otto's avatar
Mark Otto committed
1099

1100
1101
1102
1103
1104
1105
        if (this._parent) {
          actives = $.makeArray($(Selector.ACTIVES));
          if (!actives.length) {
            actives = null;
          }
        }
Mark Otto's avatar
Mark Otto committed
1106

1107
1108
1109
1110
1111
1112
        if (actives) {
          activesData = $(actives).data(DATA_KEY);
          if (activesData && activesData._isTransitioning) {
            return;
          }
        }
Mark Otto's avatar
Mark Otto committed
1113

1114
1115
1116
1117
1118
        var startEvent = $.Event(Event.SHOW);
        $(this._element).trigger(startEvent);
        if (startEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1119

1120
1121
1122
1123
1124
1125
        if (actives) {
          Collapse._jQueryInterface.call($(actives), 'hide');
          if (!activesData) {
            $(actives).data(DATA_KEY, null);
          }
        }
Mark Otto's avatar
Mark Otto committed
1126

1127
        var dimension = this._getDimension();
Mark Otto's avatar
Mark Otto committed
1128

1129
        $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
Mark Otto's avatar
Mark Otto committed
1130

1131
1132
        this._element.style[dimension] = 0;
        this._element.setAttribute('aria-expanded', true);
Mark Otto's avatar
Mark Otto committed
1133

1134
1135
1136
        if (this._triggerArray.length) {
          $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
        }
Mark Otto's avatar
Mark Otto committed
1137

1138
        this.setTransitioning(true);
Mark Otto's avatar
Mark Otto committed
1139

1140
1141
        var complete = function complete() {
          $(_this4._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
1142

1143
          _this4._element.style[dimension] = '';
Mark Otto's avatar
Mark Otto committed
1144

1145
          _this4.setTransitioning(false);
Mark Otto's avatar
Mark Otto committed
1146

1147
1148
          $(_this4._element).trigger(Event.SHOWN);
        };
Mark Otto's avatar
Mark Otto committed
1149

1150
1151
1152
1153
        if (!Util.supportsTransitionEnd()) {
          complete();
          return;
        }
Mark Otto's avatar
Mark Otto committed
1154

1155
        var scrollSize = 'scroll' + (dimension[0].toUpperCase() + dimension.slice(1));
Mark Otto's avatar
Mark Otto committed
1156

1157
        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
Mark Otto's avatar
Mark Otto committed
1158

1159
1160
1161
1162
1163
1164
        this._element.style[dimension] = this._element[scrollSize] + 'px';
      }
    }, {
      key: 'hide',
      value: function hide() {
        var _this5 = this;
Mark Otto's avatar
Mark Otto committed
1165

1166
1167
1168
        if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1169

1170
1171
1172
1173
1174
        var startEvent = $.Event(Event.HIDE);
        $(this._element).trigger(startEvent);
        if (startEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1175

1176
1177
        var dimension = this._getDimension();
        var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight';
Mark Otto's avatar
Mark Otto committed
1178

1179
        this._element.style[dimension] = this._element[offsetDimension] + 'px';
Mark Otto's avatar
Mark Otto committed
1180

1181
        Util.reflow(this._element);
Mark Otto's avatar
Mark Otto committed
1182

1183
        $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
1184

1185
        this._element.setAttribute('aria-expanded', false);
Mark Otto's avatar
Mark Otto committed
1186

1187
1188
1189
        if (this._triggerArray.length) {
          $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
        }
Mark Otto's avatar
Mark Otto committed
1190

1191
        this.setTransitioning(true);
Mark Otto's avatar
Mark Otto committed
1192

1193
1194
1195
1196
        var complete = function complete() {
          _this5.setTransitioning(false);
          $(_this5._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
        };
Mark Otto's avatar
Mark Otto committed
1197

1198
        this._element.style[dimension] = 0;
Mark Otto's avatar
Mark Otto committed
1199

1200
1201
1202
        if (!Util.supportsTransitionEnd()) {
          return complete();
        }
Mark Otto's avatar
Mark Otto committed
1203

1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
      }
    }, {
      key: 'setTransitioning',
      value: function setTransitioning(isTransitioning) {
        this._isTransitioning = isTransitioning;
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);

        this._config = null;
        this._parent = null;
        this._element = null;
        this._triggerArray = null;
        this._isTransitioning = null;
      }
    }, {
      key: '_getConfig',
Mark Otto's avatar
Mark Otto committed
1224

1225
      // private
Mark Otto's avatar
Mark Otto committed
1226

1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
      value: function _getConfig(config) {
        config = $.extend({}, Default, config);
        config.toggle = !!config.toggle; // coerce string values
        Util.typeCheckConfig(NAME, config, DefaultType);
        return config;
      }
    }, {
      key: '_getDimension',
      value: function _getDimension() {
        var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
        return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
      }
    }, {
      key: '_getParent',
      value: function _getParent() {
        var _this6 = this;
Mark Otto's avatar
Mark Otto committed
1243

1244
1245
        var parent = $(this._config.parent)[0];
        var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
Mark Otto's avatar
Mark Otto committed
1246

1247
1248
1249
        $(parent).find(selector).each(function (i, element) {
          _this6._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
        });
Mark Otto's avatar
Mark Otto committed
1250

1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
        return parent;
      }
    }, {
      key: '_addAriaAndCollapsedClass',
      value: function _addAriaAndCollapsedClass(element, triggerArray) {
        if (element) {
          var isOpen = $(element).hasClass(ClassName.IN);
          element.setAttribute('aria-expanded', isOpen);

          if (triggerArray.length) {
            $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
          }
        }
      }
    }], [{
      key: 'VERSION',
Mark Otto's avatar
Mark Otto committed
1267

1268
      // getters
Mark Otto's avatar
Mark Otto committed
1269

1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
      get: function () {
        return VERSION;
      }
    }, {
      key: 'Default',
      get: function () {
        return Default;
      }
    }, {
      key: '_getTargetFromElement',
Mark Otto's avatar
Mark Otto committed
1280

1281
      // static
Mark Otto's avatar
Mark Otto committed
1282

1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
      value: function _getTargetFromElement(element) {
        var selector = Util.getSelectorFromElement(element);
        return selector ? $(selector)[0] : null;
      }
    }, {
      key: '_jQueryInterface',
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var $this = $(this);
          var data = $this.data(DATA_KEY);
          var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config);

          if (!data && _config.toggle && /show|hide/.test(config)) {
            _config.toggle = false;
          }
Mark Otto's avatar
Mark Otto committed
1298

1299
1300
1301
1302
          if (!data) {
            data = new Collapse(this, _config);
            $this.data(DATA_KEY, data);
          }
Mark Otto's avatar
Mark Otto committed
1303

1304
1305
1306
1307
1308
1309
          if (typeof config === 'string') {
            data[config]();
          }
        });
      }
    }]);
Mark Otto's avatar
Mark Otto committed
1310

1311
1312
    return Collapse;
  })();
Mark Otto's avatar
Mark Otto committed
1313

1314
1315
1316
1317
1318
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
1319

1320
1321
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
    event.preventDefault();
Mark Otto's avatar
Mark Otto committed
1322

1323
    var target = Collapse._getTargetFromElement(this);
Mark Otto's avatar
Mark Otto committed
1324

1325
1326
    var data = $(target).data(DATA_KEY);
    var config = data ? 'toggle' : $(this).data();
Mark Otto's avatar
Mark Otto committed
1327

1328
1329
    Collapse._jQueryInterface.call($(target), config);
  });
Mark Otto's avatar
Mark Otto committed
1330

1331
1332
1333
1334
1335
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
1336

1337
1338
1339
1340
1341
1342
  $.fn[NAME] = Collapse._jQueryInterface;
  $.fn[NAME].Constructor = Collapse;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Collapse._jQueryInterface;
  };
Mark Otto's avatar
Mark Otto committed
1343

1344
1345
  return Collapse;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
1346
1347

/**
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): dropdown.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Dropdown = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'dropdown';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.dropdown';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];

  var Event = {
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    CLICK: 'click' + EVENT_KEY,
    CLICK_DATA_API: 'click' + EVENT_KEY + '' + DATA_API_KEY,
    KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + '' + DATA_API_KEY
  };

  var ClassName = {
    BACKDROP: 'dropdown-backdrop',
    DISABLED: 'disabled',
    OPEN: 'open'
  };

  var Selector = {
    BACKDROP: '.dropdown-backdrop',
    DATA_TOGGLE: '[data-toggle="dropdown"]',
    FORM_CHILD: '.dropdown form',
    ROLE_MENU: '[role="menu"]',
    ROLE_LISTBOX: '[role="listbox"]',
    NAVBAR_NAV: '.navbar-nav',
    VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a'
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Dropdown = (function () {
    function Dropdown(element) {
      _classCallCheck(this, Dropdown);

      this._element = element;

      this._addEventListeners();
    }

    _createClass(Dropdown, [{
      key: 'toggle',

      // public

      value: function toggle() {
        if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1419

1420
1421
        var parent = Dropdown._getParentFromElement(this);
        var isActive = $(parent).hasClass(ClassName.OPEN);
Mark Otto's avatar
Mark Otto committed
1422

1423
        Dropdown._clearMenus();
Mark Otto's avatar
Mark Otto committed
1424

1425
1426
1427
        if (isActive) {
          return false;
        }
Mark Otto's avatar
Mark Otto committed
1428

1429
        if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) {
Mark Otto's avatar
Mark Otto committed
1430

1431
1432
1433
1434
1435
1436
          // if mobile we use a backdrop because click events don't delegate
          var dropdown = document.createElement('div');
          dropdown.className = ClassName.BACKDROP;
          $(dropdown).insertBefore(this);
          $(dropdown).on('click', Dropdown._clearMenus);
        }
Mark Otto's avatar
Mark Otto committed
1437

1438
1439
        var relatedTarget = { relatedTarget: this };
        var showEvent = $.Event(Event.SHOW, relatedTarget);
Mark Otto's avatar
Mark Otto committed
1440

1441
        $(parent).trigger(showEvent);
Mark Otto's avatar
Mark Otto committed
1442

1443
1444
1445
        if (showEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1446

1447
1448
        this.focus();
        this.setAttribute('aria-expanded', 'true');
Mark Otto's avatar
Mark Otto committed
1449

1450
1451
        $(parent).toggleClass(ClassName.OPEN);
        $(parent).trigger(Event.SHOWN, relatedTarget);
Mark Otto's avatar
Mark Otto committed
1452

1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
        return false;
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);
        $(this._element).off(EVENT_KEY);
        this._element = null;
      }
    }, {
      key: '_addEventListeners',
Mark Otto's avatar
Mark Otto committed
1464

1465
      // private
Mark Otto's avatar
Mark Otto committed
1466

1467
1468
1469
1470
1471
      value: function _addEventListeners() {
        $(this._element).on(Event.CLICK, this.toggle);
      }
    }], [{
      key: 'VERSION',
Mark Otto's avatar
Mark Otto committed
1472

1473
      // getters
Mark Otto's avatar
Mark Otto committed
1474

1475
1476
1477
1478
1479
      get: function () {
        return VERSION;
      }
    }, {
      key: '_jQueryInterface',
Mark Otto's avatar
Mark Otto committed
1480

1481
      // static
Mark Otto's avatar
Mark Otto committed
1482

1483
1484
1485
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
Mark Otto's avatar
Mark Otto committed
1486

1487
1488
1489
          if (!data) {
            $(this).data(DATA_KEY, data = new Dropdown(this));
          }
Mark Otto's avatar
Mark Otto committed
1490

1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
          if (typeof config === 'string') {
            data[config].call(this);
          }
        });
      }
    }, {
      key: '_clearMenus',
      value: function _clearMenus(event) {
        if (event && event.which === 3) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1502

1503
1504
1505
1506
        var backdrop = $(Selector.BACKDROP)[0];
        if (backdrop) {
          backdrop.parentNode.removeChild(backdrop);
        }
Mark Otto's avatar
Mark Otto committed
1507

1508
        var toggles = $.makeArray($(Selector.DATA_TOGGLE));
Mark Otto's avatar
Mark Otto committed
1509

1510
1511
1512
        for (var i = 0; i < toggles.length; i++) {
          var _parent = Dropdown._getParentFromElement(toggles[i]);
          var relatedTarget = { relatedTarget: toggles[i] };
Mark Otto's avatar
Mark Otto committed
1513

1514
1515
1516
          if (!$(_parent).hasClass(ClassName.OPEN)) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1517

1518
1519
1520
          if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1521

1522
1523
1524
1525
1526
          var hideEvent = $.Event(Event.HIDE, relatedTarget);
          $(_parent).trigger(hideEvent);
          if (hideEvent.isDefaultPrevented()) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1527

1528
          toggles[i].setAttribute('aria-expanded', 'false');
Mark Otto's avatar
Mark Otto committed
1529

1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
          $(_parent).removeClass(ClassName.OPEN).trigger(Event.HIDDEN, relatedTarget);
        }
      }
    }, {
      key: '_getParentFromElement',
      value: function _getParentFromElement(element) {
        var parent = undefined;
        var selector = Util.getSelectorFromElement(element);

        if (selector) {
          parent = $(selector)[0];
        }
Mark Otto's avatar
Mark Otto committed
1542

1543
1544
1545
1546
1547
1548
1549
1550
        return parent || element.parentNode;
      }
    }, {
      key: '_dataApiKeydownHandler',
      value: function _dataApiKeydownHandler(event) {
        if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1551

1552
1553
        event.preventDefault();
        event.stopPropagation();
Mark Otto's avatar
Mark Otto committed
1554

1555
1556
1557
        if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1558

1559
1560
        var parent = Dropdown._getParentFromElement(this);
        var isActive = $(parent).hasClass(ClassName.OPEN);
Mark Otto's avatar
Mark Otto committed
1561

1562
        if (!isActive && event.which !== 27 || isActive && event.which === 27) {
Mark Otto's avatar
Mark Otto committed
1563

1564
1565
1566
1567
          if (event.which === 27) {
            var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
            $(toggle).trigger('focus');
          }
Mark Otto's avatar
Mark Otto committed
1568

1569
1570
1571
          $(this).trigger('click');
          return;
        }
Mark Otto's avatar
Mark Otto committed
1572

1573
        var items = $.makeArray($(Selector.VISIBLE_ITEMS));
Mark Otto's avatar
Mark Otto committed
1574

1575
1576
1577
        items = items.filter(function (item) {
          return item.offsetWidth || item.offsetHeight;
        });
Mark Otto's avatar
Mark Otto committed
1578

1579
1580
1581
        if (!items.length) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1582

1583
        var index = items.indexOf(event.target);
Mark Otto's avatar
Mark Otto committed
1584

1585
1586
1587
        if (event.which === 38 && index > 0) index--; // up
        if (event.which === 40 && index < items.length - 1) index++; // down
        if (! ~index) index = 0;
Mark Otto's avatar
Mark Otto committed
1588

1589
1590
1591
        items[index].focus();
      }
    }]);
Mark Otto's avatar
Mark Otto committed
1592

1593
1594
    return Dropdown;
  })();
Mark Otto's avatar
Mark Otto committed
1595

1596
1597
1598
1599
1600
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
1601

1602
1603
1604
  $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
    e.stopPropagation();
  });
Mark Otto's avatar
Mark Otto committed
1605

1606
1607
1608
1609
1610
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
1611

1612
1613
1614
1615
1616
1617
  $.fn[NAME] = Dropdown._jQueryInterface;
  $.fn[NAME].Constructor = Dropdown;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Dropdown._jQueryInterface;
  };
Mark Otto's avatar
Mark Otto committed
1618

1619
1620
  return Dropdown;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
1621
1622

/**
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): modal.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Modal = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'modal';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.modal';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 300;
  var BACKDROP_TRANSITION_DURATION = 150;

  var Default = {
    backdrop: true,
    keyboard: true,
    focus: true,
    show: true
  };

  var DefaultType = {
    backdrop: '(boolean|string)',
    keyboard: 'boolean',
    focus: 'boolean',
    show: 'boolean'
  };

  var Event = {
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    FOCUSIN: 'focusin' + EVENT_KEY,
    RESIZE: 'resize' + EVENT_KEY,
    CLICK_DISMISS: 'click.dismiss' + EVENT_KEY,
    KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY,
    MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY,
    MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY,
    CLICK_DATA_API: 'click' + EVENT_KEY + '' + DATA_API_KEY
  };

  var ClassName = {
    BACKDROP: 'modal-backdrop',
    OPEN: 'modal-open',
    FADE: 'fade',
    IN: 'in'
  };

  var Selector = {
    DIALOG: '.modal-dialog',
    DATA_TOGGLE: '[data-toggle="modal"]',
    DATA_DISMISS: '[data-dismiss="modal"]',
    SCROLLBAR_MEASURER: 'modal-scrollbar-measure'
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Modal = (function () {
    function Modal(element, config) {
      _classCallCheck(this, Modal);

      this._config = this._getConfig(config);
      this._element = element;
      this._dialog = $(element).find(Selector.DIALOG)[0];
      this._backdrop = null;
      this._isShown = false;
      this._isBodyOverflowing = false;
      this._ignoreBackdropClick = false;
      this._originalBodyPadding = 0;
      this._scrollbarWidth = 0;
    }

    _createClass(Modal, [{
      key: 'toggle',

      // public

      value: function toggle(relatedTarget) {
        return this._isShown ? this.hide() : this.show(relatedTarget);
      }
    }, {
      key: 'show',
      value: function show(relatedTarget) {
        var _this7 = this;
Mark Otto's avatar
Mark Otto committed
1721

1722
1723
1724
        var showEvent = $.Event(Event.SHOW, {
          relatedTarget: relatedTarget
        });
Mark Otto's avatar
Mark Otto committed
1725

1726
        $(this._element).trigger(showEvent);
Mark Otto's avatar
Mark Otto committed
1727

1728
1729
1730
        if (this._isShown || showEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1731

1732
        this._isShown = true;
Mark Otto's avatar
Mark Otto committed
1733

1734
1735
        this._checkScrollbar();
        this._setScrollbar();
Mark Otto's avatar
Mark Otto committed
1736

1737
        $(document.body).addClass(ClassName.OPEN);
Mark Otto's avatar
Mark Otto committed
1738

1739
1740
        this._setEscapeEvent();
        this._setResizeEvent();
Mark Otto's avatar
Mark Otto committed
1741

1742
        $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this));
Mark Otto's avatar
Mark Otto committed
1743

1744
1745
1746
1747
1748
1749
1750
        $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
          $(_this7._element).one(Event.MOUSEUP_DISMISS, function (event) {
            if ($(event.target).is(_this7._element)) {
              that._ignoreBackdropClick = true;
            }
          });
        });
Mark Otto's avatar
Mark Otto committed
1751

1752
1753
1754
1755
1756
1757
1758
1759
        this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
      }
    }, {
      key: 'hide',
      value: function hide(event) {
        if (event) {
          event.preventDefault();
        }
Mark Otto's avatar
Mark Otto committed
1760

1761
        var hideEvent = $.Event(Event.HIDE);
Mark Otto's avatar
Mark Otto committed
1762

1763
        $(this._element).trigger(hideEvent);
Mark Otto's avatar
Mark Otto committed
1764

1765
1766
1767
        if (!this._isShown || hideEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1768

1769
        this._isShown = false;
Mark Otto's avatar
Mark Otto committed
1770

1771
1772
        this._setEscapeEvent();
        this._setResizeEvent();
Mark Otto's avatar
Mark Otto committed
1773

1774
        $(document).off(Event.FOCUSIN);
Mark Otto's avatar
Mark Otto committed
1775

1776
        $(this._element).removeClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
1777

1778
1779
        $(this._element).off(Event.CLICK_DISMISS);
        $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
Mark Otto's avatar
Mark Otto committed
1780

1781
        if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
Mark Otto's avatar
Mark Otto committed
1782

1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
          $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          this._hideModal();
        }
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);

        $(window).off(EVENT_KEY);
        $(document).off(EVENT_KEY);
        $(this._element).off(EVENT_KEY);
        $(this._backdrop).off(EVENT_KEY);

        this._config = null;
        this._element = null;
        this._dialog = null;
        this._backdrop = null;
        this._isShown = null;
        this._isBodyOverflowing = null;
        this._ignoreBackdropClick = null;
        this._originalBodyPadding = null;
        this._scrollbarWidth = null;
      }
    }, {
      key: '_getConfig',
Mark Otto's avatar
Mark Otto committed
1810

1811
      // private
Mark Otto's avatar
Mark Otto committed
1812

1813
1814
1815
1816
1817
1818
1819
1820
1821
      value: function _getConfig(config) {
        config = $.extend({}, Default, config);
        Util.typeCheckConfig(NAME, config, DefaultType);
        return config;
      }
    }, {
      key: '_showElement',
      value: function _showElement(relatedTarget) {
        var _this8 = this;
Mark Otto's avatar
Mark Otto committed
1822

1823
        var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
Mark Otto's avatar
Mark Otto committed
1824

1825
1826
1827
1828
        if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
          // don't move modals dom position
          document.body.appendChild(this._element);
        }
XhmikosR's avatar
XhmikosR committed
1829

1830
1831
        this._element.style.display = 'block';
        this._element.scrollTop = 0;
XhmikosR's avatar
XhmikosR committed
1832

1833
1834
1835
        if (transition) {
          Util.reflow(this._element);
        }
XhmikosR's avatar
XhmikosR committed
1836

1837
        $(this._element).addClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
1838

1839
        if (this._config.focus) this._enforceFocus();
XhmikosR's avatar
XhmikosR committed
1840

1841
1842
1843
        var shownEvent = $.Event(Event.SHOWN, {
          relatedTarget: relatedTarget
        });
XhmikosR's avatar
XhmikosR committed
1844

1845
1846
1847
1848
        var transitionComplete = function transitionComplete() {
          if (_this8._config.focus) _this8._element.focus();
          $(_this8._element).trigger(shownEvent);
        };
XhmikosR's avatar
XhmikosR committed
1849

1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
        if (transition) {
          $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          transitionComplete();
        }
      }
    }, {
      key: '_enforceFocus',
      value: function _enforceFocus() {
        var _this9 = this;

        $(document).off(Event.FOCUSIN) // guard against infinite focus loop
        .on(Event.FOCUSIN, function (event) {
          if (_this9._element !== event.target && !$(_this9._element).has(event.target).length) {
            _this9._element.focus();
          }
        });
      }
    }, {
      key: '_setEscapeEvent',
      value: function _setEscapeEvent() {
        var _this10 = this;

        if (this._isShown && this._config.keyboard) {
          $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
            if (event.which === 27) {
              _this10.hide();
            }
          });
        } else if (!this._isShown) {
          $(this._element).off(Event.KEYDOWN_DISMISS);
        }
      }
    }, {
      key: '_setResizeEvent',
      value: function _setResizeEvent() {
        if (this._isShown) {
          $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this));
        } else {
          $(window).off(Event.RESIZE);
        }
      }
    }, {
      key: '_hideModal',
      value: function _hideModal() {
        var _this11 = this;

        this._element.style.display = 'none';
        this._showBackdrop(function () {
          $(document.body).removeClass(ClassName.OPEN);
          _this11._resetAdjustments();
          _this11._resetScrollbar();
          $(_this11._element).trigger(Event.HIDDEN);
        });
      }
    }, {
      key: '_removeBackdrop',
      value: function _removeBackdrop() {
        if (this._backdrop) {
          $(this._backdrop).remove();
          this._backdrop = null;
        }
      }
    }, {
      key: '_showBackdrop',
      value: function _showBackdrop(callback) {
        var _this12 = this;
XhmikosR's avatar
XhmikosR committed
1917

1918
        var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
XhmikosR's avatar
XhmikosR committed
1919

1920
1921
        if (this._isShown && this._config.backdrop) {
          var doAnimate = Util.supportsTransitionEnd() && animate;
XhmikosR's avatar
XhmikosR committed
1922

1923
1924
          this._backdrop = document.createElement('div');
          this._backdrop.className = ClassName.BACKDROP;
XhmikosR's avatar
XhmikosR committed
1925

1926
1927
1928
          if (animate) {
            $(this._backdrop).addClass(animate);
          }
XhmikosR's avatar
XhmikosR committed
1929

1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
          $(this._backdrop).appendTo(this.$body);

          $(this._element).on(Event.CLICK_DISMISS, function (event) {
            if (_this12._ignoreBackdropClick) {
              _this12._ignoreBackdropClick = false;
              return;
            }
            if (event.target !== event.currentTarget) {
              return;
            }
            if (_this12._config.backdrop === 'static') {
              _this12._element.focus();
            } else {
              _this12.hide();
            }
          });

          if (doAnimate) {
            Util.reflow(this._backdrop);
          }
XhmikosR's avatar
XhmikosR committed
1950

1951
          $(this._backdrop).addClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
1952

1953
1954
1955
          if (!callback) {
            return;
          }
XhmikosR's avatar
XhmikosR committed
1956

1957
1958
1959
1960
          if (!doAnimate) {
            callback();
            return;
          }
Mark Otto's avatar
Mark Otto committed
1961

1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
          $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
        } else if (!this._isShown && this._backdrop) {
          $(this._backdrop).removeClass(ClassName.IN);

          var callbackRemove = function callbackRemove() {
            _this12._removeBackdrop();
            if (callback) {
              callback();
            }
          };

          if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
            $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
          } else {
            callbackRemove();
          }
        } else if (callback) {
          callback();
        }
      }
    }, {
      key: '_handleUpdate',
XhmikosR's avatar
XhmikosR committed
1984

1985
1986
1987
1988
      // ----------------------------------------------------------------------
      // the following methods are used to handle overflowing modals
      // todo (fat): these should probably be refactored out of modal.js
      // ----------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
1989

1990
1991
1992
1993
1994
1995
1996
      value: function _handleUpdate() {
        this._adjustDialog();
      }
    }, {
      key: '_adjustDialog',
      value: function _adjustDialog() {
        var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
XhmikosR's avatar
XhmikosR committed
1997

1998
1999
2000
        if (!this._isBodyOverflowing && isModalOverflowing) {
          this._element.style.paddingLeft = this._scrollbarWidth + 'px';
        }
XhmikosR's avatar
XhmikosR committed
2001

2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
        if (this._isBodyOverflowing && !isModalOverflowing) {
          this._element.style.paddingRight = this._scrollbarWidth + 'px';
        }
      }
    }, {
      key: '_resetAdjustments',
      value: function _resetAdjustments() {
        this._element.style.paddingLeft = '';
        this._element.style.paddingRight = '';
      }
    }, {
      key: '_checkScrollbar',
      value: function _checkScrollbar() {
        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._isBodyOverflowing = document.body.clientWidth < fullWindowWidth;
        this._scrollbarWidth = this._getScrollbarWidth();
      }
    }, {
      key: '_setScrollbar',
      value: function _setScrollbar() {
        var bodyPadding = parseInt($(document.body).css('padding-right') || 0, 10);
XhmikosR's avatar
XhmikosR committed
2028

2029
        this._originalBodyPadding = document.body.style.paddingRight || '';
XhmikosR's avatar
XhmikosR committed
2030

2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
        if (this._isBodyOverflowing) {
          document.body.style.paddingRight = bodyPadding + this._scrollbarWidth + 'px';
        }
      }
    }, {
      key: '_resetScrollbar',
      value: function _resetScrollbar() {
        document.body.style.paddingRight = this._originalBodyPadding;
      }
    }, {
      key: '_getScrollbarWidth',
      value: function _getScrollbarWidth() {
        // thx d.walsh
        var scrollDiv = document.createElement('div');
        scrollDiv.className = Selector.SCROLLBAR_MEASURER;
        document.body.appendChild(scrollDiv);
        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
        document.body.removeChild(scrollDiv);
        return scrollbarWidth;
      }
    }], [{
      key: 'VERSION',
XhmikosR's avatar
XhmikosR committed
2053

2054
      // getters
XhmikosR's avatar
XhmikosR committed
2055

2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
      get: function () {
        return VERSION;
      }
    }, {
      key: 'Default',
      get: function () {
        return Default;
      }
    }, {
      key: '_jQueryInterface',
XhmikosR's avatar
XhmikosR committed
2066

2067
      // static
XhmikosR's avatar
XhmikosR committed
2068

2069
2070
2071
2072
      value: function _jQueryInterface(config, relatedTarget) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
          var _config = $.extend({}, Modal.Default, $(this).data(), typeof config === 'object' && config);
XhmikosR's avatar
XhmikosR committed
2073

2074
2075
2076
2077
          if (!data) {
            data = new Modal(this, _config);
            $(this).data(DATA_KEY, data);
          }
XhmikosR's avatar
XhmikosR committed
2078

2079
2080
2081
2082
2083
2084
2085
2086
          if (typeof config === 'string') {
            data[config](relatedTarget);
          } else if (_config.show) {
            data.show(relatedTarget);
          }
        });
      }
    }]);
XhmikosR's avatar
XhmikosR committed
2087

2088
2089
    return Modal;
  })();
XhmikosR's avatar
XhmikosR committed
2090

2091
2092
2093
2094
2095
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
XhmikosR committed
2096

2097
2098
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
    var _this13 = this;
XhmikosR's avatar
XhmikosR committed
2099

2100
2101
    var target = undefined;
    var selector = Util.getSelectorFromElement(this);
XhmikosR's avatar
XhmikosR committed
2102

2103
2104
2105
    if (selector) {
      target = $(selector)[0];
    }
Mark Otto's avatar
Mark Otto committed
2106

2107
    var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());
XhmikosR's avatar
XhmikosR committed
2108

2109
2110
2111
    if (this.tagName === 'A') {
      event.preventDefault();
    }
Mark Otto's avatar
Mark Otto committed
2112

2113
2114
2115
2116
2117
    var $target = $(target).one(Event.SHOW, function (showEvent) {
      if (showEvent.isDefaultPrevented()) {
        // only register focus restorer if modal will actually get shown
        return;
      }
XhmikosR's avatar
XhmikosR committed
2118

2119
2120
2121
2122
2123
2124
      $target.one(Event.HIDDEN, function () {
        if ($(_this13).is(':visible')) {
          _this13.focus();
        }
      });
    });
XhmikosR's avatar
XhmikosR committed
2125

2126
2127
    Modal._jQueryInterface.call($(target), config, this);
  });
Mark Otto's avatar
Mark Otto committed
2128

2129
2130
2131
2132
2133
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
2134

2135
2136
2137
2138
2139
2140
  $.fn[NAME] = Modal._jQueryInterface;
  $.fn[NAME].Constructor = Modal;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Modal._jQueryInterface;
  };
XhmikosR's avatar
XhmikosR committed
2141

2142
2143
  return Modal;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
2144

Mark Otto's avatar
Mark Otto committed
2145
/**
2146
2147
2148
2149
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): scrollspy.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
2150
2151
 */

2152
var ScrollSpy = (function ($) {
XhmikosR's avatar
XhmikosR committed
2153

2154
2155
2156
2157
2158
  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
XhmikosR committed
2159

2160
2161
2162
2163
2164
2165
  var NAME = 'scrollspy';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.scrollspy';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
XhmikosR's avatar
XhmikosR committed
2166

2167
2168
2169
2170
2171
  var Default = {
    offset: 10,
    method: 'auto',
    target: ''
  };
XhmikosR's avatar
XhmikosR committed
2172

2173
2174
2175
2176
2177
  var DefaultType = {
    offset: 'number',
    method: 'string',
    target: '(string|element)'
  };
Mark Otto's avatar
Mark Otto committed
2178

2179
2180
2181
2182
2183
  var Event = {
    ACTIVATE: 'activate' + EVENT_KEY,
    SCROLL: 'scroll' + EVENT_KEY,
    LOAD_DATA_API: 'load' + EVENT_KEY + '' + DATA_API_KEY
  };
Mark Otto's avatar
Mark Otto committed
2184

2185
2186
2187
2188
  var ClassName = {
    DROPDOWN_MENU: 'dropdown-menu',
    ACTIVE: 'active'
  };
Mark Otto's avatar
Mark Otto committed
2189

2190
2191
2192
2193
2194
2195
2196
  var Selector = {
    DATA_SPY: '[data-spy="scroll"]',
    ACTIVE: '.active',
    LI: 'li',
    LI_DROPDOWN: 'li.dropdown',
    NAV_ANCHORS: '.nav li > a'
  };
Mark Otto's avatar
Mark Otto committed
2197

2198
2199
2200
2201
  var OffsetMethod = {
    OFFSET: 'offset',
    POSITION: 'position'
  };
Mark Otto's avatar
Mark Otto committed
2202

2203
2204
2205
2206
2207
  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
2208

2209
2210
2211
  var ScrollSpy = (function () {
    function ScrollSpy(element, config) {
      _classCallCheck(this, ScrollSpy);
Mark Otto's avatar
Mark Otto committed
2212

2213
2214
2215
2216
2217
2218
2219
2220
      this._element = element;
      this._scrollElement = element.tagName === 'BODY' ? window : element;
      this._config = this._getConfig(config);
      this._selector = '' + this._config.target + ' ' + Selector.NAV_ANCHORS;
      this._offsets = [];
      this._targets = [];
      this._activeTarget = null;
      this._scrollHeight = 0;
Mark Otto's avatar
Mark Otto committed
2221

2222
      $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this));
Mark Otto's avatar
Mark Otto committed
2223

2224
2225
2226
      this.refresh();
      this._process();
    }
Mark Otto's avatar
Mark Otto committed
2227

2228
2229
    _createClass(ScrollSpy, [{
      key: 'refresh',
Mark Otto's avatar
Mark Otto committed
2230

2231
      // public
Mark Otto's avatar
Mark Otto committed
2232

2233
2234
      value: function refresh() {
        var _this14 = this;
XhmikosR's avatar
XhmikosR committed
2235

2236
        var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
XhmikosR's avatar
XhmikosR committed
2237

2238
        var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
XhmikosR's avatar
XhmikosR committed
2239

2240
        var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
Mark Otto's avatar
Mark Otto committed
2241

2242
2243
        this._offsets = [];
        this._targets = [];
Mark Otto's avatar
Mark Otto committed
2244

2245
        this._scrollHeight = this._getScrollHeight();
Mark Otto's avatar
Mark Otto committed
2246

2247
        var targets = $.makeArray($(this._selector));
Mark Otto's avatar
Mark Otto committed
2248

2249
2250
2251
        targets.map(function (element) {
          var target = undefined;
          var targetSelector = Util.getSelectorFromElement(element);
Mark Otto's avatar
Mark Otto committed
2252

2253
2254
2255
          if (targetSelector) {
            target = $(targetSelector)[0];
          }
Mark Otto's avatar
Mark Otto committed
2256

2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
          if (target && (target.offsetWidth || target.offsetHeight)) {
            // todo (fat): remove sketch reliance on jQuery position/offset
            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
          }
        }).filter(function (item) {
          return item;
        }).sort(function (a, b) {
          return a[0] - b[0];
        }).forEach(function (item) {
          _this14._offsets.push(item[0]);
          _this14._targets.push(item[1]);
        });
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);
        $(this._scrollElement).off(EVENT_KEY);

        this._element = null;
        this._scrollElement = null;
        this._config = null;
        this._selector = null;
        this._offsets = null;
        this._targets = null;
        this._activeTarget = null;
        this._scrollHeight = null;
      }
    }, {
      key: '_getConfig',
Mark Otto's avatar
Mark Otto committed
2287

2288
      // private
Mark Otto's avatar
Mark Otto committed
2289

2290
2291
      value: function _getConfig(config) {
        config = $.extend({}, Default, config);
Mark Otto's avatar
Mark Otto committed
2292

2293
2294
2295
2296
2297
2298
2299
2300
        if (typeof config.target !== 'string') {
          var id = $(config.target).attr('id');
          if (!id) {
            id = Util.getUID(NAME);
            $(config.target).attr('id', id);
          }
          config.target = '#' + id;
        }
Mark Otto's avatar
Mark Otto committed
2301

2302
        Util.typeCheckConfig(NAME, config, DefaultType);
Mark Otto's avatar
Mark Otto committed
2303

2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
        return config;
      }
    }, {
      key: '_getScrollTop',
      value: function _getScrollTop() {
        return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop;
      }
    }, {
      key: '_getScrollHeight',
      value: function _getScrollHeight() {
        return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
      }
    }, {
      key: '_process',
      value: function _process() {
        var scrollTop = this._getScrollTop() + this._config.offset;
        var scrollHeight = this._getScrollHeight();
        var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight;

        if (this._scrollHeight !== scrollHeight) {
          this.refresh();
        }
Mark Otto's avatar
Mark Otto committed
2326

2327
2328
        if (scrollTop >= maxScroll) {
          var target = this._targets[this._targets.length - 1];
Mark Otto's avatar
Mark Otto committed
2329

2330
2331
2332
2333
          if (this._activeTarget !== target) {
            this._activate(target);
          }
        }
Mark Otto's avatar
Mark Otto committed
2334

2335
2336
2337
2338
2339
        if (this._activeTarget && scrollTop < this._offsets[0]) {
          this._activeTarget = null;
          this._clear();
          return;
        }
Mark Otto's avatar
Mark Otto committed
2340

2341
2342
        for (var i = this._offsets.length; i--;) {
          var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]);
Mark Otto's avatar
Mark Otto committed
2343

2344
2345
2346
2347
2348
2349
2350
2351
2352
          if (isActiveTarget) {
            this._activate(this._targets[i]);
          }
        }
      }
    }, {
      key: '_activate',
      value: function _activate(target) {
        this._activeTarget = target;
Mark Otto's avatar
Mark Otto committed
2353

2354
        this._clear();
Mark Otto's avatar
Mark Otto committed
2355

2356
        var selector = '' + this._selector + '[data-target="' + target + '"],' + ('' + this._selector + '[href="' + target + '"]');
Mark Otto's avatar
Mark Otto committed
2357

2358
2359
        // todo (fat): getting all the raw li's up the tree is not great.
        var parentListItems = $(selector).parents(Selector.LI);
Mark Otto's avatar
Mark Otto committed
2360

2361
2362
        for (var i = parentListItems.length; i--;) {
          $(parentListItems[i]).addClass(ClassName.ACTIVE);
Mark Otto's avatar
Mark Otto committed
2363

2364
          var itemParent = parentListItems[i].parentNode;
Mark Otto's avatar
Mark Otto committed
2365

2366
2367
2368
2369
2370
          if (itemParent && $(itemParent).hasClass(ClassName.DROPDOWN_MENU)) {
            var closestDropdown = $(itemParent).closest(Selector.LI_DROPDOWN)[0];
            $(closestDropdown).addClass(ClassName.ACTIVE);
          }
        }
XhmikosR's avatar
XhmikosR committed
2371

2372
2373
2374
2375
2376
2377
2378
2379
        $(this._scrollElement).trigger(Event.ACTIVATE, {
          relatedTarget: target
        });
      }
    }, {
      key: '_clear',
      value: function _clear() {
        var activeParents = $(this._selector).parentsUntil(this._config.target, Selector.ACTIVE);
Mark Otto's avatar
Mark Otto committed
2380

2381
2382
2383
2384
2385
2386
        for (var i = activeParents.length; i--;) {
          $(activeParents[i]).removeClass(ClassName.ACTIVE);
        }
      }
    }], [{
      key: 'VERSION',
Mark Otto's avatar
Mark Otto committed
2387

2388
      // getters
Mark Otto's avatar
Mark Otto committed
2389

2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
      get: function () {
        return VERSION;
      }
    }, {
      key: 'Default',
      get: function () {
        return Default;
      }
    }, {
      key: '_jQueryInterface',
Mark Otto's avatar
Mark Otto committed
2400

2401
      // static
Mark Otto's avatar
Mark Otto committed
2402

2403
2404
2405
2406
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
          var _config = typeof config === 'object' && config || null;
XhmikosR's avatar
XhmikosR committed
2407

2408
2409
2410
2411
          if (!data) {
            data = new ScrollSpy(this, _config);
            $(this).data(DATA_KEY, data);
          }
XhmikosR's avatar
XhmikosR committed
2412

2413
2414
2415
2416
2417
2418
          if (typeof config === 'string') {
            data[config]();
          }
        });
      }
    }]);
XhmikosR's avatar
XhmikosR committed
2419

2420
2421
    return ScrollSpy;
  })();
XhmikosR's avatar
XhmikosR committed
2422

2423
2424
2425
2426
2427
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
XhmikosR committed
2428

2429
2430
  $(window).on(Event.LOAD_DATA_API, function () {
    var scrollSpys = $.makeArray($(Selector.DATA_SPY));
XhmikosR's avatar
XhmikosR committed
2431

2432
2433
2434
2435
2436
    for (var i = scrollSpys.length; i--;) {
      var $spy = $(scrollSpys[i]);
      ScrollSpy._jQueryInterface.call($spy, $spy.data());
    }
  });
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
2437

2438
2439
2440
2441
2442
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
XhmikosR committed
2443

2444
2445
2446
2447
2448
2449
  $.fn[NAME] = ScrollSpy._jQueryInterface;
  $.fn[NAME].Constructor = ScrollSpy;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return ScrollSpy._jQueryInterface;
  };
XhmikosR's avatar
XhmikosR committed
2450

2451
2452
  return ScrollSpy;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
2453

2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
/**
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): tab.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Tab = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'tab';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.tab';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 150;

  var Event = {
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    CLICK_DATA_API: 'click' + EVENT_KEY + '' + DATA_API_KEY
  };

  var ClassName = {
    DROPDOWN_MENU: 'dropdown-menu',
    ACTIVE: 'active',
    FADE: 'fade',
    IN: 'in'
  };

  var Selector = {
    A: 'a',
    LI: 'li',
    LI_DROPDOWN: 'li.dropdown',
    UL: 'ul:not(.dropdown-menu)',
    FADE_CHILD: '> .fade',
    ACTIVE: '.active',
    ACTIVE_CHILD: '> .active',
    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]',
    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu > .active'
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Tab = (function () {
    function Tab(element) {
      _classCallCheck(this, Tab);

      this._element = element;
    }

    _createClass(Tab, [{
      key: 'show',

      // public

      value: function show() {
        var _this15 = this;

        if (this._element.parentNode && this._element.parentNode.nodeType == Node.ELEMENT_NODE && $(this._element).parent().hasClass(ClassName.ACTIVE)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
2528

2529
2530
2531
2532
        var target = undefined;
        var previous = undefined;
        var ulElement = $(this._element).closest(Selector.UL)[0];
        var selector = Util.getSelectorFromElement(this._element);
Mark Otto's avatar
Mark Otto committed
2533

2534
2535
2536
        if (ulElement) {
          previous = $.makeArray($(ulElement).find(Selector.ACTIVE));
          previous = previous[previous.length - 1];
XhmikosR's avatar
XhmikosR committed
2537

2538
2539
2540
2541
          if (previous) {
            previous = $(previous).find(Selector.A)[0];
          }
        }
XhmikosR's avatar
XhmikosR committed
2542

2543
2544
2545
        var hideEvent = $.Event(Event.HIDE, {
          relatedTarget: this._element
        });
XhmikosR's avatar
XhmikosR committed
2546

2547
2548
2549
        var showEvent = $.Event(Event.SHOW, {
          relatedTarget: previous
        });
XhmikosR's avatar
XhmikosR committed
2550

2551
2552
2553
        if (previous) {
          $(previous).trigger(hideEvent);
        }
XhmikosR's avatar
XhmikosR committed
2554

2555
        $(this._element).trigger(showEvent);
XhmikosR's avatar
XhmikosR committed
2556

2557
2558
2559
        if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
2560

2561
2562
2563
        if (selector) {
          target = $(selector)[0];
        }
Mark Otto's avatar
Mark Otto committed
2564

2565
        this._activate($(this._element).closest(Selector.LI)[0], ulElement);
XhmikosR's avatar
XhmikosR committed
2566

2567
2568
2569
2570
        var complete = function complete() {
          var hiddenEvent = $.Event(Event.HIDDEN, {
            relatedTarget: _this15._element
          });
XhmikosR's avatar
XhmikosR committed
2571

2572
2573
2574
          var shownEvent = $.Event(Event.SHOWN, {
            relatedTarget: previous
          });
XhmikosR's avatar
XhmikosR committed
2575

2576
2577
2578
          $(previous).trigger(hiddenEvent);
          $(_this15._element).trigger(shownEvent);
        };
XhmikosR's avatar
XhmikosR committed
2579

2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
        if (target) {
          this._activate(target, target.parentNode, complete);
        } else {
          complete();
        }
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeClass(this._element, DATA_KEY);
        this._element = null;
      }
    }, {
      key: '_activate',
XhmikosR's avatar
XhmikosR committed
2594

2595
      // private
XhmikosR's avatar
XhmikosR committed
2596

2597
2598
2599
      value: function _activate(element, container, callback) {
        var active = $(container).find(Selector.ACTIVE_CHILD)[0];
        var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || !!$(container).find(Selector.FADE_CHILD)[0]);
XhmikosR's avatar
XhmikosR committed
2600

2601
        var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback);
XhmikosR's avatar
XhmikosR committed
2602

2603
2604
2605
2606
2607
        if (active && isTransitioning) {
          $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          complete();
        }
XhmikosR's avatar
XhmikosR committed
2608

2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
        if (active) {
          $(active).removeClass(ClassName.IN);
        }
      }
    }, {
      key: '_transitionComplete',
      value: function _transitionComplete(element, active, isTransitioning, callback) {
        if (active) {
          $(active).removeClass(ClassName.ACTIVE);

          var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
          if (dropdownChild) {
            $(dropdownChild).removeClass(ClassName.ACTIVE);
          }
Mark Otto's avatar
Mark Otto committed
2623

2624
2625
2626
2627
2628
          var activeToggle = $(active).find(Selector.DATA_TOGGLE)[0];
          if (activeToggle) {
            activeToggle.setAttribute('aria-expanded', false);
          }
        }
Mark Otto's avatar
Mark Otto committed
2629

2630
        $(element).addClass(ClassName.ACTIVE);
Mark Otto's avatar
Mark Otto committed
2631

2632
2633
2634
2635
        var elementToggle = $(element).find(Selector.DATA_TOGGLE)[0];
        if (elementToggle) {
          elementToggle.setAttribute('aria-expanded', true);
        }
Mark Otto's avatar
Mark Otto committed
2636

2637
2638
2639
2640
2641
2642
        if (isTransitioning) {
          Util.reflow(element);
          $(element).addClass(ClassName.IN);
        } else {
          $(element).removeClass(ClassName.FADE);
        }
Mark Otto's avatar
Mark Otto committed
2643

2644
        if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
Mark Otto's avatar
Mark Otto committed
2645

2646
2647
2648
2649
          var dropdownElement = $(element).closest(Selector.LI_DROPDOWN)[0];
          if (dropdownElement) {
            $(dropdownElement).addClass(ClassName.ACTIVE);
          }
Mark Otto's avatar
Mark Otto committed
2650

2651
2652
2653
2654
2655
          elementToggle = $(element).find(Selector.DATA_TOGGLE)[0];
          if (elementToggle) {
            elementToggle.setAttribute('aria-expanded', true);
          }
        }
Mark Otto's avatar
Mark Otto committed
2656

2657
2658
2659
2660
2661
2662
        if (callback) {
          callback();
        }
      }
    }], [{
      key: 'VERSION',
Mark Otto's avatar
Mark Otto committed
2663

2664
      // getters
XhmikosR's avatar
XhmikosR committed
2665

2666
2667
2668
2669
2670
      get: function () {
        return VERSION;
      }
    }, {
      key: '_jQueryInterface',
XhmikosR's avatar
XhmikosR committed
2671

2672
      // static
XhmikosR's avatar
XhmikosR committed
2673

2674
2675
2676
2677
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var $this = $(this);
          var data = $this.data(DATA_KEY);
XhmikosR's avatar
XhmikosR committed
2678

2679
2680
2681
2682
          if (!data) {
            data = data = new Tab(this);
            $this.data(DATA_KEY, data);
          }
XhmikosR's avatar
XhmikosR committed
2683

2684
2685
2686
2687
2688
2689
          if (typeof config === 'string') {
            data[config]();
          }
        });
      }
    }]);
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
2690

2691
2692
    return Tab;
  })();
XhmikosR's avatar
XhmikosR committed
2693

2694
2695
2696
2697
2698
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
XhmikosR committed
2699

2700
2701
2702
2703
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
    event.preventDefault();
    Tab._jQueryInterface.call($(this), 'show');
  });
2704

2705
2706
2707
2708
2709
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
XhmikosR committed
2710

2711
2712
2713
2714
2715
2716
  $.fn[NAME] = Tab._jQueryInterface;
  $.fn[NAME].Constructor = Tab;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Tab._jQueryInterface;
  };
XhmikosR's avatar
XhmikosR committed
2717

2718
2719
  return Tab;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
2720

Mark Otto's avatar
Mark Otto committed
2721
/**
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): tooltip.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Tooltip = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'tooltip';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.tooltip';
  var EVENT_KEY = '.' + DATA_KEY;
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 150;
  var CLASS_PREFIX = 'bs-tether';

  var Default = {
    animation: true,
    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,
    selector: false,
    placement: 'top',
    offset: '0 0',
    constraints: []
  };

  var DefaultType = {
    animation: 'boolean',
    template: 'string',
    title: '(string|function)',
    trigger: 'string',
    delay: '(number|object)',
    html: 'boolean',
    selector: '(string|boolean)',
    placement: '(string|function)',
    offset: 'string',
    constraints: 'array'
  };

  var AttachmentMap = {
    TOP: 'bottom center',
    RIGHT: 'middle left',
    BOTTOM: 'top center',
    LEFT: 'middle right'
  };

  var HoverState = {
    IN: 'in',
    OUT: 'out'
  };

  var Event = {
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    INSERTED: 'inserted' + EVENT_KEY,
    CLICK: 'click' + EVENT_KEY,
    FOCUSIN: 'focusin' + EVENT_KEY,
    FOCUSOUT: 'focusout' + EVENT_KEY,
    MOUSEENTER: 'mouseenter' + EVENT_KEY,
    MOUSELEAVE: 'mouseleave' + EVENT_KEY
  };

  var ClassName = {
    FADE: 'fade',
    IN: 'in'
  };

  var Selector = {
    TOOLTIP: '.tooltip',
    TOOLTIP_INNER: '.tooltip-inner'
  };

  var TetherClass = {
    element: false,
    enabled: false
  };

  var Trigger = {
    HOVER: 'hover',
    FOCUS: 'focus',
    CLICK: 'click',
    MANUAL: 'manual'
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Tooltip = (function () {
    function Tooltip(element, config) {
      _classCallCheck(this, Tooltip);

      // private
      this._isEnabled = true;
      this._timeout = 0;
      this._hoverState = '';
      this._activeTrigger = {};
      this._tether = null;

      // protected
      this.element = element;
      this.config = this._getConfig(config);
      this.tip = null;

      this._setListeners();
    }

    _createClass(Tooltip, [{
      key: 'enable',

      // public

      value: function enable() {
        this._isEnabled = true;
      }
    }, {
      key: 'disable',
      value: function disable() {
        this._isEnabled = false;
      }
    }, {
      key: 'toggleEnabled',
      value: function toggleEnabled() {
        this._isEnabled = !this._isEnabled;
      }
    }, {
      key: 'toggle',
      value: function toggle(event) {
        var context = this;
        var dataKey = this.constructor.DATA_KEY;

        if (event) {
          context = $(event.currentTarget).data(dataKey);

          if (!context) {
            context = new this.constructor(event.currentTarget, this._getDelegateConfig());
            $(event.currentTarget).data(dataKey, context);
          }
XhmikosR's avatar
XhmikosR committed
2873

2874
          context._activeTrigger.click = !context._activeTrigger.click;
XhmikosR's avatar
XhmikosR committed
2875

2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
          if (context._isWithActiveTrigger()) {
            context._enter(null, context);
          } else {
            context._leave(null, context);
          }
        } else {
          $(context.getTipElement()).hasClass(ClassName.IN) ? context._leave(null, context) : context._enter(null, context);
        }
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        clearTimeout(this._timeout);
XhmikosR's avatar
XhmikosR committed
2889

2890
        this.cleanupTether();
XhmikosR's avatar
XhmikosR committed
2891

2892
        $.removeData(this.element, this.constructor.DATA_KEY);
XhmikosR's avatar
XhmikosR committed
2893

2894
        $(this.element).off(this.constructor.EVENT_KEY);
XhmikosR's avatar
XhmikosR committed
2895

2896
2897
2898
        if (this.tip) {
          $(this.tip).remove();
        }
XhmikosR's avatar
XhmikosR committed
2899

2900
2901
2902
2903
2904
        this._isEnabled = null;
        this._timeout = null;
        this._hoverState = null;
        this._activeTrigger = null;
        this._tether = null;
XhmikosR's avatar
XhmikosR committed
2905

2906
2907
2908
2909
2910
2911
2912
2913
        this.element = null;
        this.config = null;
        this.tip = null;
      }
    }, {
      key: 'show',
      value: function show() {
        var _this16 = this;
XhmikosR's avatar
XhmikosR committed
2914

2915
        var showEvent = $.Event(this.constructor.Event.SHOW);
XhmikosR's avatar
XhmikosR committed
2916

2917
2918
        if (this.isWithContent() && this._isEnabled) {
          $(this.element).trigger(showEvent);
XhmikosR's avatar
XhmikosR committed
2919

2920
          var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);
XhmikosR's avatar
XhmikosR committed
2921

2922
2923
2924
          if (showEvent.isDefaultPrevented() || !isInTheDom) {
            return;
          }
XhmikosR's avatar
XhmikosR committed
2925

2926
2927
          var tip = this.getTipElement();
          var tipId = Util.getUID(this.constructor.NAME);
XhmikosR's avatar
XhmikosR committed
2928

2929
2930
          tip.setAttribute('id', tipId);
          this.element.setAttribute('aria-describedby', tipId);
XhmikosR's avatar
XhmikosR committed
2931

2932
          this.setContent();
XhmikosR's avatar
XhmikosR committed
2933

2934
2935
2936
          if (this.config.animation) {
            $(tip).addClass(ClassName.FADE);
          }
XhmikosR's avatar
XhmikosR committed
2937

2938
          var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
XhmikosR's avatar
XhmikosR committed
2939

2940
          var attachment = this._getAttachment(placement);
Mark Otto's avatar
Mark Otto committed
2941

2942
          $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body);
Mark Otto's avatar
Mark Otto committed
2943

2944
          $(this.element).trigger(this.constructor.Event.INSERTED);
Mark Otto's avatar
Mark Otto committed
2945

2946
2947
2948
2949
2950
2951
2952
2953
2954
          this._tether = new Tether({
            element: tip,
            target: this.element,
            attachment: attachment,
            classes: TetherClass,
            classPrefix: CLASS_PREFIX,
            offset: this.config.offset,
            constraints: this.config.constraints
          });
Mark Otto's avatar
Mark Otto committed
2955

2956
2957
          Util.reflow(tip);
          this._tether.position();
Mark Otto's avatar
Mark Otto committed
2958

2959
          $(tip).addClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
2960

2961
2962
2963
          var complete = function complete() {
            var prevHoverState = _this16._hoverState;
            _this16._hoverState = null;
Mark Otto's avatar
Mark Otto committed
2964

2965
            $(_this16.element).trigger(_this16.constructor.Event.SHOWN);
Mark Otto's avatar
Mark Otto committed
2966

2967
2968
2969
2970
            if (prevHoverState === HoverState.OUT) {
              _this16._leave(null, _this16);
            }
          };
XhmikosR's avatar
XhmikosR committed
2971

2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
          Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE) ? $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION) : complete();
        }
      }
    }, {
      key: 'hide',
      value: function hide(callback) {
        var _this17 = this;

        var tip = this.getTipElement();
        var hideEvent = $.Event(this.constructor.Event.HIDE);
        var complete = function complete() {
          if (_this17._hoverState !== HoverState.IN && tip.parentNode) {
            tip.parentNode.removeChild(tip);
          }
Mark Otto's avatar
Mark Otto committed
2986

2987
2988
2989
          _this17.element.removeAttribute('aria-describedby');
          $(_this17.element).trigger(_this17.constructor.Event.HIDDEN);
          _this17.cleanupTether();
XhmikosR's avatar
XhmikosR committed
2990

2991
2992
2993
2994
          if (callback) {
            callback();
          }
        };
XhmikosR's avatar
XhmikosR committed
2995

2996
        $(this.element).trigger(hideEvent);
XhmikosR's avatar
XhmikosR committed
2997

2998
2999
3000
        if (hideEvent.isDefaultPrevented()) {
          return;
        }
XhmikosR's avatar
XhmikosR committed
3001

3002
        $(tip).removeClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
3003

3004
        if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
Mark Otto's avatar
Mark Otto committed
3005

3006
3007
3008
3009
          $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          complete();
        }
Mark Otto's avatar
Mark Otto committed
3010

3011
3012
3013
3014
        this._hoverState = '';
      }
    }, {
      key: 'isWithContent',
Mark Otto's avatar
Mark Otto committed
3015

3016
      // protected
Mark Otto's avatar
Mark Otto committed
3017

3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
      value: function isWithContent() {
        return !!this.getTitle();
      }
    }, {
      key: 'getTipElement',
      value: function getTipElement() {
        return this.tip = this.tip || $(this.config.template)[0];
      }
    }, {
      key: 'setContent',
      value: function setContent() {
        var tip = this.getTipElement();
        var title = this.getTitle();
        var method = this.config.html ? 'innerHTML' : 'innerText';
Mark Otto's avatar
Mark Otto committed
3032

3033
        $(tip).find(Selector.TOOLTIP_INNER)[0][method] = title;
Mark Otto's avatar
Mark Otto committed
3034

3035
        $(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
3036

3037
3038
3039
3040
3041
3042
        this.cleanupTether();
      }
    }, {
      key: 'getTitle',
      value: function getTitle() {
        var title = this.element.getAttribute('data-original-title');
XhmikosR's avatar
XhmikosR committed
3043

3044
3045
3046
        if (!title) {
          title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
        }
Mark Otto's avatar
Mark Otto committed
3047

3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
        return title;
      }
    }, {
      key: 'cleanupTether',
      value: function cleanupTether() {
        if (this._tether) {
          this._tether.destroy();

          // clean up after tether's junk classes
          // remove after they fix issue
          // (https://github.com/HubSpot/tether/issues/36)
          $(this.element).removeClass(this._removeTetherClasses);
          $(this.tip).removeClass(this._removeTetherClasses);
        }
      }
    }, {
      key: '_getAttachment',
XhmikosR's avatar
XhmikosR committed
3065

3066
      // private
XhmikosR's avatar
XhmikosR committed
3067

3068
3069
3070
3071
3072
3073
3074
      value: function _getAttachment(placement) {
        return AttachmentMap[placement.toUpperCase()];
      }
    }, {
      key: '_setListeners',
      value: function _setListeners() {
        var _this18 = this;
XhmikosR's avatar
XhmikosR committed
3075

3076
        var triggers = this.config.trigger.split(' ');
XhmikosR's avatar
XhmikosR committed
3077

3078
3079
3080
3081
3082
3083
        triggers.forEach(function (trigger) {
          if (trigger === 'click') {
            $(_this18.element).on(_this18.constructor.Event.CLICK, _this18.config.selector, $.proxy(_this18.toggle, _this18));
          } else if (trigger !== Trigger.MANUAL) {
            var eventIn = trigger == Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN;
            var eventOut = trigger == Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT;
XhmikosR's avatar
XhmikosR committed
3084

3085
3086
3087
            $(_this18.element).on(eventIn, _this18.config.selector, $.proxy(_this18._enter, _this18)).on(eventOut, _this18.config.selector, $.proxy(_this18._leave, _this18));
          }
        });
XhmikosR's avatar
XhmikosR committed
3088

3089
3090
3091
3092
3093
3094
3095
3096
        if (this.config.selector) {
          this.config = $.extend({}, this.config, {
            trigger: 'manual',
            selector: ''
          });
        } else {
          this._fixTitle();
        }
Mark Otto's avatar
Mark Otto committed
3097
      }
3098
3099
3100
3101
    }, {
      key: '_removeTetherClasses',
      value: function _removeTetherClasses(i, css) {
        return ((css.baseVal || css).match(new RegExp('(^|\\s)' + CLASS_PREFIX + '-\\S+', 'g')) || []).join(' ');
Mark Otto's avatar
Mark Otto committed
3102
      }
3103
3104
3105
3106
3107
3108
3109
3110
    }, {
      key: '_fixTitle',
      value: function _fixTitle() {
        var titleType = typeof this.element.getAttribute('data-original-title');
        if (this.element.getAttribute('title') || titleType !== 'string') {
          this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
          this.element.setAttribute('title', '');
        }
Mark Otto's avatar
Mark Otto committed
3111
      }
3112
3113
3114
3115
    }, {
      key: '_enter',
      value: function _enter(event, context) {
        var dataKey = this.constructor.DATA_KEY;
XhmikosR's avatar
XhmikosR committed
3116

3117
        context = context || $(event.currentTarget).data(dataKey);
XhmikosR's avatar
XhmikosR committed
3118

3119
3120
3121
3122
        if (!context) {
          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
          $(event.currentTarget).data(dataKey, context);
        }
XhmikosR's avatar
XhmikosR committed
3123

3124
3125
3126
        if (event) {
          context._activeTrigger[event.type == 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
        }
XhmikosR's avatar
XhmikosR committed
3127

3128
3129
3130
3131
        if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) {
          context._hoverState = HoverState.IN;
          return;
        }
XhmikosR's avatar
XhmikosR committed
3132

3133
        clearTimeout(context._timeout);
XhmikosR's avatar
XhmikosR committed
3134

3135
        context._hoverState = HoverState.IN;
XhmikosR's avatar
XhmikosR committed
3136

3137
3138
3139
3140
        if (!context.config.delay || !context.config.delay.show) {
          context.show();
          return;
        }
XhmikosR's avatar
XhmikosR committed
3141

3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
        context._timeout = setTimeout(function () {
          if (context._hoverState === HoverState.IN) {
            context.show();
          }
        }, context.config.delay.show);
      }
    }, {
      key: '_leave',
      value: function _leave(event, context) {
        var dataKey = this.constructor.DATA_KEY;
XhmikosR's avatar
XhmikosR committed
3152

3153
        context = context || $(event.currentTarget).data(dataKey);
XhmikosR's avatar
XhmikosR committed
3154

3155
3156
3157
3158
        if (!context) {
          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
          $(event.currentTarget).data(dataKey, context);
        }
XhmikosR's avatar
XhmikosR committed
3159

3160
3161
3162
        if (event) {
          context._activeTrigger[event.type == 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
        }
XhmikosR's avatar
XhmikosR committed
3163

3164
3165
3166
        if (context._isWithActiveTrigger()) {
          return;
        }
XhmikosR's avatar
XhmikosR committed
3167

3168
        clearTimeout(context._timeout);
XhmikosR's avatar
XhmikosR committed
3169

3170
        context._hoverState = HoverState.OUT;
XhmikosR's avatar
XhmikosR committed
3171

3172
3173
3174
3175
        if (!context.config.delay || !context.config.delay.hide) {
          context.hide();
          return;
        }
XhmikosR's avatar
XhmikosR committed
3176

3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
        context._timeout = setTimeout(function () {
          if (context._hoverState === HoverState.OUT) {
            context.hide();
          }
        }, context.config.delay.hide);
      }
    }, {
      key: '_isWithActiveTrigger',
      value: function _isWithActiveTrigger() {
        for (var trigger in this._activeTrigger) {
          if (this._activeTrigger[trigger]) {
            return true;
          }
        }
XhmikosR's avatar
XhmikosR committed
3191

3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
        return false;
      }
    }, {
      key: '_getConfig',
      value: function _getConfig(config) {
        config = $.extend({}, this.constructor.Default, $(this.element).data(), config);

        if (config.delay && typeof config.delay === 'number') {
          config.delay = {
            show: config.delay,
            hide: config.delay
          };
        }
XhmikosR's avatar
XhmikosR committed
3205

3206
        Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
XhmikosR's avatar
XhmikosR committed
3207

3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
        return config;
      }
    }, {
      key: '_getDelegateConfig',
      value: function _getDelegateConfig() {
        var config = {};

        if (this.config) {
          for (var key in this.config) {
            var value = this.config[key];
            if (this.constructor.Default[key] !== value) {
              config[key] = value;
            }
          }
        }
3223

3224
3225
3226
3227
        return config;
      }
    }], [{
      key: 'VERSION',
3228

3229
      // getters
3230

3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
      get: function () {
        return VERSION;
      }
    }, {
      key: 'Default',
      get: function () {
        return Default;
      }
    }, {
      key: 'NAME',
      get: function () {
        return NAME;
      }
    }, {
      key: 'DATA_KEY',
      get: function () {
        return DATA_KEY;
      }
    }, {
      key: 'Event',
      get: function () {
        return Event;
      }
    }, {
      key: 'EVENT_KEY',
      get: function () {
        return EVENT_KEY;
      }
    }, {
      key: 'DefaultType',
      get: function () {
        return DefaultType;
      }
    }, {
      key: '_jQueryInterface',
3266

3267
      // static
XhmikosR's avatar
XhmikosR committed
3268

3269
3270
3271
3272
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
          var _config = typeof config === 'object' ? config : null;
XhmikosR's avatar
XhmikosR committed
3273

3274
3275
3276
          if (!data && /destroy|hide/.test(config)) {
            return;
          }
XhmikosR's avatar
XhmikosR committed
3277

3278
3279
3280
3281
          if (!data) {
            data = new Tooltip(this, _config);
            $(this).data(DATA_KEY, data);
          }
XhmikosR's avatar
XhmikosR committed
3282

3283
3284
3285
3286
3287
3288
          if (typeof config === 'string') {
            data[config]();
          }
        });
      }
    }]);
XhmikosR's avatar
XhmikosR committed
3289

3290
3291
    return Tooltip;
  })();
XhmikosR's avatar
XhmikosR committed
3292

3293
3294
3295
3296
3297
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
XhmikosR committed
3298

3299
3300
3301
3302
3303
3304
  $.fn[NAME] = Tooltip._jQueryInterface;
  $.fn[NAME].Constructor = Tooltip;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Tooltip._jQueryInterface;
  };
XhmikosR's avatar
XhmikosR committed
3305

3306
3307
  return Tooltip;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
3308

Mark Otto's avatar
Mark Otto committed
3309
/**
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): popover.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Popover = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'popover';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.popover';
  var EVENT_KEY = '.' + DATA_KEY;
  var JQUERY_NO_CONFLICT = $.fn[NAME];

  var Default = $.extend({}, Tooltip.Default, {
    placement: 'right',
    trigger: 'click',
    content: '',
    template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>'
  });

  var DefaultType = $.extend({}, Tooltip.DefaultType, {
    content: '(string|function)'
  });

  var ClassName = {
    FADE: 'fade',
    IN: 'in'
  };

  var Selector = {
    TITLE: '.popover-title',
    CONTENT: '.popover-content',
    ARROW: '.popover-arrow'
  };

  var Event = {
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    INSERTED: 'inserted' + EVENT_KEY,
    CLICK: 'click' + EVENT_KEY,
    FOCUSIN: 'focusin' + EVENT_KEY,
    FOCUSOUT: 'focusout' + EVENT_KEY,
    MOUSEENTER: 'mouseenter' + EVENT_KEY,
    MOUSELEAVE: 'mouseleave' + EVENT_KEY
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Popover = (function (_Tooltip) {
    function Popover() {
      _classCallCheck(this, Popover);

      if (_Tooltip != null) {
        _Tooltip.apply(this, arguments);
      }
Mark Otto's avatar
Mark Otto committed
3378
    }
XhmikosR's avatar
XhmikosR committed
3379

3380
    _inherits(Popover, _Tooltip);
XhmikosR's avatar
XhmikosR committed
3381

3382
3383
    _createClass(Popover, [{
      key: 'isWithContent',
XhmikosR's avatar
XhmikosR committed
3384

3385
      // overrides
XhmikosR's avatar
XhmikosR committed
3386

3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
      value: function isWithContent() {
        return this.getTitle() || this._getContent();
      }
    }, {
      key: 'getTipElement',
      value: function getTipElement() {
        return this.tip = this.tip || $(this.config.template)[0];
      }
    }, {
      key: 'setContent',
      value: function setContent() {
        var tip = this.getTipElement();
        var title = this.getTitle();
        var content = this._getContent();
        var titleElement = $(tip).find(Selector.TITLE)[0];

        if (titleElement) {
          titleElement[this.config.html ? 'innerHTML' : 'innerText'] = title;
        }
XhmikosR's avatar
XhmikosR committed
3406

3407
3408
        // we use append for html objects to maintain js events
        $(tip).find(Selector.CONTENT).children().detach().end()[this.config.html ? typeof content === 'string' ? 'html' : 'append' : 'text'](content);
XhmikosR's avatar
XhmikosR committed
3409

3410
        $(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
3411

3412
        this.cleanupTether();
Mark Otto's avatar
Mark Otto committed
3413
      }
3414
3415
    }, {
      key: '_getContent',
XhmikosR's avatar
XhmikosR committed
3416

3417
      // private
XhmikosR's avatar
XhmikosR committed
3418

3419
3420
3421
3422
3423
      value: function _getContent() {
        return this.element.getAttribute('data-content') || (typeof this.config.content == 'function' ? this.config.content.call(this.element) : this.config.content);
      }
    }], [{
      key: 'VERSION',
XhmikosR's avatar
XhmikosR committed
3424

3425
      // getters
XhmikosR's avatar
XhmikosR committed
3426

3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
      get: function () {
        return VERSION;
      }
    }, {
      key: 'Default',
      get: function () {
        return Default;
      }
    }, {
      key: 'NAME',
      get: function () {
        return NAME;
      }
    }, {
      key: 'DATA_KEY',
      get: function () {
        return DATA_KEY;
      }
    }, {
      key: 'Event',
      get: function () {
        return Event;
      }
    }, {
      key: 'EVENT_KEY',
      get: function () {
        return EVENT_KEY;
      }
    }, {
      key: 'DefaultType',
      get: function () {
        return DefaultType;
      }
    }, {
      key: '_jQueryInterface',
XhmikosR's avatar
XhmikosR committed
3462

3463
      // static
XhmikosR's avatar
XhmikosR committed
3464

3465
3466
3467
3468
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
          var _config = typeof config === 'object' ? config : null;
3469

3470
3471
3472
          if (!data && /destroy|hide/.test(config)) {
            return;
          }
XhmikosR's avatar
XhmikosR committed
3473

3474
3475
3476
3477
          if (!data) {
            data = new Popover(this, _config);
            $(this).data(DATA_KEY, data);
          }
XhmikosR's avatar
XhmikosR committed
3478

3479
3480
3481
3482
3483
3484
          if (typeof config === 'string') {
            data[config]();
          }
        });
      }
    }]);
XhmikosR's avatar
XhmikosR committed
3485

3486
3487
    return Popover;
  })(Tooltip);
XhmikosR's avatar
XhmikosR committed
3488

3489
3490
3491
3492
3493
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
XhmikosR committed
3494

3495
3496
3497
3498
3499
3500
  $.fn[NAME] = Popover._jQueryInterface;
  $.fn[NAME].Constructor = Popover;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Popover._jQueryInterface;
  };
XhmikosR's avatar
XhmikosR committed
3501

3502
3503
  return Popover;
})(jQuery);
XhmikosR's avatar
XhmikosR committed
3504

3505
}(jQuery);