udongo 2.0.4 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/backend/application.js +1 -0
  3. data/app/assets/javascripts/backend/bootstrap.js +3 -3569
  4. data/app/assets/javascripts/backend/tree.js +106 -65
  5. data/app/assets/stylesheets/backend/application.scss +2 -0
  6. data/app/assets/stylesheets/backend/bootstrap.scss +29 -51
  7. data/app/assets/stylesheets/backend/components/_page_tree.scss +9 -0
  8. data/app/assets/stylesheets/backend/custom.scss +0 -0
  9. data/app/assets/stylesheets/backend/font-awesome.scss +644 -1977
  10. data/app/assets/stylesheets/backend/udongo.scss +1 -0
  11. data/app/controllers/backend/admins_controller.rb +2 -2
  12. data/app/controllers/{backend_controller.rb → backend/base_controller.rb} +13 -5
  13. data/app/controllers/backend/content/rows/columns_controller.rb +1 -1
  14. data/app/controllers/backend/content/rows/images_controller.rb +1 -1
  15. data/app/controllers/backend/content/rows/texts_controller.rb +1 -1
  16. data/app/controllers/backend/content/rows_controller.rb +1 -1
  17. data/app/controllers/backend/dashboard_controller.rb +1 -1
  18. data/app/controllers/backend/email_templates_controller.rb +12 -12
  19. data/app/controllers/backend/emails_controller.rb +1 -1
  20. data/app/controllers/backend/navigation/items_controller.rb +9 -11
  21. data/app/controllers/backend/navigations_controller.rb +1 -1
  22. data/app/controllers/backend/pages_controller.rb +17 -39
  23. data/app/controllers/backend/redirects_controller.rb +1 -1
  24. data/app/controllers/backend/seo_controller.rb +1 -1
  25. data/app/controllers/backend/sessions_controller.rb +1 -1
  26. data/app/controllers/backend/snippets_controller.rb +14 -13
  27. data/app/controllers/backend/tagbox_controller.rb +1 -1
  28. data/app/controllers/catch_all_controller.rb +1 -1
  29. data/app/controllers/concerns/backend/content_type_controller.rb +3 -1
  30. data/app/controllers/redirects_controller.rb +1 -1
  31. data/app/decorators/page_decorator.rb +1 -4
  32. data/app/forms/backend/email_template_translation_form.rb +1 -23
  33. data/app/forms/backend/navigation_item_translation_form.rb +1 -23
  34. data/app/forms/backend/page_translation_form.rb +13 -18
  35. data/app/forms/backend/snippet_translation_form.rb +1 -23
  36. data/app/forms/backend/translation_form.rb +22 -0
  37. data/app/helpers/udongo_helper.rb +0 -4
  38. data/app/mailers/general_mailer.rb +14 -4
  39. data/app/models/admin.rb +2 -2
  40. data/app/models/comment.rb +1 -2
  41. data/app/models/concerns/addressable.rb +40 -0
  42. data/app/models/concerns/addressable/config.rb +33 -0
  43. data/app/models/concerns/cacheable.rb +1 -1
  44. data/app/models/email.rb +2 -2
  45. data/app/models/email_template.rb +2 -1
  46. data/app/views/backend/_general_form_error.html.erb +6 -0
  47. data/app/views/backend/admins/_form.html.erb +3 -0
  48. data/app/views/backend/content/rows/columns/_dimension_fields.html.erb +3 -0
  49. data/app/views/backend/content/rows/columns/edit.html.erb +3 -5
  50. data/app/views/backend/content/rows/columns/new.html.erb +3 -5
  51. data/app/views/backend/content/rows/images/edit.html.erb +2 -0
  52. data/app/views/backend/dashboard/show.html.erb +1 -1
  53. data/app/views/backend/email_templates/_form.html.erb +29 -7
  54. data/app/views/backend/email_templates/_tabs.html.erb +1 -1
  55. data/app/views/backend/email_templates/edit_translation.html.erb +1 -0
  56. data/app/views/backend/navigation/items/_form.html.erb +4 -2
  57. data/app/views/backend/navigation/items/_tabs.html.erb +1 -1
  58. data/app/views/backend/navigation/items/edit_translation.html.erb +1 -0
  59. data/app/views/backend/pages/_form.html.erb +4 -2
  60. data/app/views/backend/pages/_tabs.html.erb +1 -1
  61. data/app/views/backend/pages/edit_translation.html.erb +1 -0
  62. data/app/views/backend/redirects/_form.html.erb +2 -0
  63. data/app/views/backend/snippets/_form.html.erb +3 -1
  64. data/app/views/backend/snippets/_tabs.html.erb +1 -1
  65. data/app/views/backend/snippets/edit.html.erb +1 -1
  66. data/app/views/backend/snippets/edit_translation.html.erb +1 -0
  67. data/app/views/backend/snippets/new.html.erb +1 -1
  68. data/app/views/layouts/backend/_top_navigation.html.erb +1 -2
  69. data/changelog.md +38 -0
  70. data/config/initializers/simple_form_bootstrap.rb +13 -9
  71. data/config/locales/en_backend.yml +1 -4
  72. data/config/locales/en_forms.yml +3 -0
  73. data/config/locales/nl_backend.yml +3 -4
  74. data/config/locales/nl_forms.yml +3 -0
  75. data/config/routes.rb +5 -7
  76. data/db/migrate/20160815100903_remove_form_models.rb +9 -0
  77. data/db/migrate/20161014135637_add_category_to_admin.rb +5 -0
  78. data/db/migrate/20161029124558_add_locale_to_admin.rb +6 -0
  79. data/db/migrate/20161029130557_add_bcc_and_cc_to_email_templates.rb +6 -0
  80. data/db/migrate/20161029171056_add_ccc_and_bcc_to_email.rb +6 -0
  81. data/lib/udongo/configs/flexible_content.rb +7 -0
  82. data/lib/udongo/configs/i18n.rb +5 -3
  83. data/lib/udongo/configs/i18ns/app.rb +12 -0
  84. data/lib/udongo/configs/i18ns/cms.rb +12 -0
  85. data/lib/udongo/flexible_content/column_width_calculator.rb +4 -2
  86. data/lib/udongo/pages/tree.rb +15 -0
  87. data/lib/udongo/pages/tree_node.rb +43 -0
  88. data/lib/udongo/version.rb +1 -1
  89. data/readme.md +103 -43
  90. data/vendor/assets/javascripts/backend/select2.min.js +3 -0
  91. data/vendor/assets/stylesheets/backend/jstree/default/style.scss +3 -3
  92. data/vendor/assets/stylesheets/backend/select2.min.scss +1 -0
  93. metadata +22 -30
  94. data/app/controllers/backend/forms/base_controller.rb +0 -14
  95. data/app/controllers/backend/forms/submissions_controller.rb +0 -8
  96. data/app/controllers/backend/forms_controller.rb +0 -7
  97. data/app/controllers/backend/webserver_controller.rb +0 -6
  98. data/app/decorators/form_decorator.rb +0 -16
  99. data/app/decorators/form_submission_decorator.rb +0 -3
  100. data/app/forms/backend/email_template_form.rb +0 -38
  101. data/app/forms/backend/navigation_item_form.rb +0 -23
  102. data/app/forms/backend/page_form.rb +0 -26
  103. data/app/forms/backend/snippet_form.rb +0 -35
  104. data/app/models/form.rb +0 -10
  105. data/app/models/form_field.rb +0 -15
  106. data/app/models/form_field_validation.rb +0 -11
  107. data/app/models/form_submission.rb +0 -15
  108. data/app/models/form_submission_data.rb +0 -5
  109. data/app/views/backend/_form_errors.html.erb +0 -15
  110. data/app/views/backend/forms/index.html.erb +0 -27
  111. data/app/views/backend/forms/submissions/_filter.html.erb +0 -16
  112. data/app/views/backend/forms/submissions/index.html.erb +0 -34
  113. data/lib/generators/udongo/form/form_generator.rb +0 -62
  114. data/lib/generators/udongo/form/templates/form.rb +0 -18
  115. data/lib/udongo/configs/forms.rb +0 -18
  116. data/lib/udongo/configs/routes.rb +0 -13
  117. data/lib/udongo/email_vars/form_submission.rb +0 -18
  118. data/lib/udongo/forms/submission_datagrid.rb +0 -27
  119. data/lib/udongo/forms/submission_filter.rb +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 25a84b81f782d47d9598ed004fe5e5f757ccf0fc
4
- data.tar.gz: e2fcdba7a22ad4b64cee1d457c2a33eeb94ed165
3
+ metadata.gz: 564894abf43269f506001373a3cdc9de4abfd9d1
4
+ data.tar.gz: ff827b9591c732706c3b5f19302bc333e059be6d
5
5
  SHA512:
6
- metadata.gz: af7afe61a64cfda000eb05e952ce646fe462b479fc9dffe9d81077b425de63d073514712a9b2bab360c610360c672936d07894887f04a9de2edabc37a9954d36
7
- data.tar.gz: 56d8c852869ce4d9d61af13e9e5613613f6dd94b41e90559048888f5e49285f5faa9c4156456ddefcd0d5285d39771c5d847bc31cf54f1447bfc978d9ede1c3b
6
+ metadata.gz: 5628ca7034fb5091138b1f9646d64ea2dc2c312a6e28714046227ba676e1506b1e04a4c46caf5b6d9975c8451ebf0d3c6e95eb3727e04e63f098355f5e15a454
7
+ data.tar.gz: be04a30e21475a52088f149a7bd3316ba15be895070626687f4e8fc2b98bbf8323888d1d9a4e59b3e6a1401cb0998aeddbcc4bacf3bd92e0dd23ea11038b365e
@@ -20,3 +20,4 @@
20
20
  //= require backend/general
21
21
  //= require backend/bootstrap-datepicker.min
22
22
  //= require backend/datepickers
23
+ //= require backend/select2.min
@@ -1,3573 +1,7 @@
1
1
  /*!
2
- * Bootstrap v4.0.0-alpha.3 (http://getbootstrap.com)
2
+ * Bootstrap v4.0.0-alpha.4 (http://getbootstrap.com)
3
3
  * Copyright 2011-2016 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
5
  */
6
-
7
- if (typeof jQuery === 'undefined') {
8
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
9
- }
10
-
11
- +function ($) {
12
- var version = $.fn.jquery.split(' ')[0].split('.')
13
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] >= 4)) {
14
- throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')
15
- }
16
- }(jQuery);
17
-
18
-
19
- +function ($) {
20
-
21
- /**
22
- * --------------------------------------------------------------------------
23
- * Bootstrap (v4.0.0-alpha.3): util.js
24
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25
- * --------------------------------------------------------------------------
26
- */
27
-
28
- 'use strict';
29
-
30
- var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
31
-
32
- 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; }; })();
33
-
34
- 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) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
35
-
36
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
37
-
38
- var Util = (function ($) {
39
-
40
- /**
41
- * ------------------------------------------------------------------------
42
- * Private TransitionEnd Helpers
43
- * ------------------------------------------------------------------------
44
- */
45
-
46
- var transition = false;
47
-
48
- var MAX_UID = 1000000;
49
-
50
- var TransitionEndEvent = {
51
- WebkitTransition: 'webkitTransitionEnd',
52
- MozTransition: 'transitionend',
53
- OTransition: 'oTransitionEnd otransitionend',
54
- transition: 'transitionend'
55
- };
56
-
57
- // shoutout AngusCroll (https://goo.gl/pxwQGp)
58
- function toType(obj) {
59
- return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
60
- }
61
-
62
- function isElement(obj) {
63
- return (obj[0] || obj).nodeType;
64
- }
65
-
66
- function getSpecialTransitionEndEvent() {
67
- return {
68
- bindType: transition.end,
69
- delegateType: transition.end,
70
- handle: function handle(event) {
71
- if ($(event.target).is(this)) {
72
- return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
73
- }
74
- return undefined;
75
- }
76
- };
77
- }
78
-
79
- function transitionEndTest() {
80
- if (window.QUnit) {
81
- return false;
82
- }
83
-
84
- var el = document.createElement('bootstrap');
85
-
86
- for (var _name in TransitionEndEvent) {
87
- if (el.style[_name] !== undefined) {
88
- return { end: TransitionEndEvent[_name] };
89
- }
90
- }
91
-
92
- return false;
93
- }
94
-
95
- function transitionEndEmulator(duration) {
96
- var _this = this;
97
-
98
- var called = false;
99
-
100
- $(this).one(Util.TRANSITION_END, function () {
101
- called = true;
102
- });
103
-
104
- setTimeout(function () {
105
- if (!called) {
106
- Util.triggerTransitionEnd(_this);
107
- }
108
- }, duration);
109
-
110
- return this;
111
- }
112
-
113
- function setTransitionEndSupport() {
114
- transition = transitionEndTest();
115
-
116
- $.fn.emulateTransitionEnd = transitionEndEmulator;
117
-
118
- if (Util.supportsTransitionEnd()) {
119
- $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
120
- }
121
- }
122
-
123
- /**
124
- * --------------------------------------------------------------------------
125
- * Public Util Api
126
- * --------------------------------------------------------------------------
127
- */
128
-
129
- var Util = {
130
-
131
- TRANSITION_END: 'bsTransitionEnd',
132
-
133
- getUID: function getUID(prefix) {
134
- do {
135
- /* eslint-disable no-bitwise */
136
- prefix += ~ ~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
137
- /* eslint-enable no-bitwise */
138
- } while (document.getElementById(prefix));
139
- return prefix;
140
- },
141
-
142
- getSelectorFromElement: function getSelectorFromElement(element) {
143
- var selector = element.getAttribute('data-target');
144
-
145
- if (!selector) {
146
- selector = element.getAttribute('href') || '';
147
- selector = /^#[a-z]/i.test(selector) ? selector : null;
148
- }
149
-
150
- return selector;
151
- },
152
-
153
- reflow: function reflow(element) {
154
- new Function('bs', 'return bs')(element.offsetHeight);
155
- },
156
-
157
- triggerTransitionEnd: function triggerTransitionEnd(element) {
158
- $(element).trigger(transition.end);
159
- },
160
-
161
- supportsTransitionEnd: function supportsTransitionEnd() {
162
- return Boolean(transition);
163
- },
164
-
165
- typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
166
- for (var property in configTypes) {
167
- if (configTypes.hasOwnProperty(property)) {
168
- var expectedTypes = configTypes[property];
169
- var value = config[property];
170
- var valueType = undefined;
171
-
172
- if (value && isElement(value)) {
173
- valueType = 'element';
174
- } else {
175
- valueType = toType(value);
176
- }
177
-
178
- if (!new RegExp(expectedTypes).test(valueType)) {
179
- throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".'));
180
- }
181
- }
182
- }
183
- }
184
- };
185
-
186
- setTransitionEndSupport();
187
-
188
- return Util;
189
- })(jQuery);
190
-
191
- /**
192
- * --------------------------------------------------------------------------
193
- * Bootstrap (v4.0.0-alpha.3): alert.js
194
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
195
- * --------------------------------------------------------------------------
196
- */
197
-
198
- var Alert = (function ($) {
199
-
200
- /**
201
- * ------------------------------------------------------------------------
202
- * Constants
203
- * ------------------------------------------------------------------------
204
- */
205
-
206
- var NAME = 'alert';
207
- var VERSION = '4.0.0-alpha.3';
208
- var DATA_KEY = 'bs.alert';
209
- var EVENT_KEY = '.' + DATA_KEY;
210
- var DATA_API_KEY = '.data-api';
211
- var JQUERY_NO_CONFLICT = $.fn[NAME];
212
- var TRANSITION_DURATION = 150;
213
-
214
- var Selector = {
215
- DISMISS: '[data-dismiss="alert"]'
216
- };
217
-
218
- var Event = {
219
- CLOSE: 'close' + EVENT_KEY,
220
- CLOSED: 'closed' + EVENT_KEY,
221
- CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
222
- };
223
-
224
- var ClassName = {
225
- ALERT: 'alert',
226
- FADE: 'fade',
227
- IN: 'in'
228
- };
229
-
230
- /**
231
- * ------------------------------------------------------------------------
232
- * Class Definition
233
- * ------------------------------------------------------------------------
234
- */
235
-
236
- var Alert = (function () {
237
- function Alert(element) {
238
- _classCallCheck(this, Alert);
239
-
240
- this._element = element;
241
- }
242
-
243
- /**
244
- * ------------------------------------------------------------------------
245
- * Data Api implementation
246
- * ------------------------------------------------------------------------
247
- */
248
-
249
- // getters
250
-
251
- _createClass(Alert, [{
252
- key: 'close',
253
-
254
- // public
255
-
256
- value: function close(element) {
257
- element = element || this._element;
258
-
259
- var rootElement = this._getRootElement(element);
260
- var customEvent = this._triggerCloseEvent(rootElement);
261
-
262
- if (customEvent.isDefaultPrevented()) {
263
- return;
264
- }
265
-
266
- this._removeElement(rootElement);
267
- }
268
- }, {
269
- key: 'dispose',
270
- value: function dispose() {
271
- $.removeData(this._element, DATA_KEY);
272
- this._element = null;
273
- }
274
-
275
- // private
276
-
277
- }, {
278
- key: '_getRootElement',
279
- value: function _getRootElement(element) {
280
- var selector = Util.getSelectorFromElement(element);
281
- var parent = false;
282
-
283
- if (selector) {
284
- parent = $(selector)[0];
285
- }
286
-
287
- if (!parent) {
288
- parent = $(element).closest('.' + ClassName.ALERT)[0];
289
- }
290
-
291
- return parent;
292
- }
293
- }, {
294
- key: '_triggerCloseEvent',
295
- value: function _triggerCloseEvent(element) {
296
- var closeEvent = $.Event(Event.CLOSE);
297
-
298
- $(element).trigger(closeEvent);
299
- return closeEvent;
300
- }
301
- }, {
302
- key: '_removeElement',
303
- value: function _removeElement(element) {
304
- $(element).removeClass(ClassName.IN);
305
-
306
- if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
307
- this._destroyElement(element);
308
- return;
309
- }
310
-
311
- $(element).one(Util.TRANSITION_END, $.proxy(this._destroyElement, this, element)).emulateTransitionEnd(TRANSITION_DURATION);
312
- }
313
- }, {
314
- key: '_destroyElement',
315
- value: function _destroyElement(element) {
316
- $(element).detach().trigger(Event.CLOSED).remove();
317
- }
318
-
319
- // static
320
-
321
- }], [{
322
- key: '_jQueryInterface',
323
- value: function _jQueryInterface(config) {
324
- return this.each(function () {
325
- var $element = $(this);
326
- var data = $element.data(DATA_KEY);
327
-
328
- if (!data) {
329
- data = new Alert(this);
330
- $element.data(DATA_KEY, data);
331
- }
332
-
333
- if (config === 'close') {
334
- data[config](this);
335
- }
336
- });
337
- }
338
- }, {
339
- key: '_handleDismiss',
340
- value: function _handleDismiss(alertInstance) {
341
- return function (event) {
342
- if (event) {
343
- event.preventDefault();
344
- }
345
-
346
- alertInstance.close(this);
347
- };
348
- }
349
- }, {
350
- key: 'VERSION',
351
- get: function get() {
352
- return VERSION;
353
- }
354
- }]);
355
-
356
- return Alert;
357
- })();
358
-
359
- $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
360
-
361
- /**
362
- * ------------------------------------------------------------------------
363
- * jQuery
364
- * ------------------------------------------------------------------------
365
- */
366
-
367
- $.fn[NAME] = Alert._jQueryInterface;
368
- $.fn[NAME].Constructor = Alert;
369
- $.fn[NAME].noConflict = function () {
370
- $.fn[NAME] = JQUERY_NO_CONFLICT;
371
- return Alert._jQueryInterface;
372
- };
373
-
374
- return Alert;
375
- })(jQuery);
376
-
377
- /**
378
- * --------------------------------------------------------------------------
379
- * Bootstrap (v4.0.0-alpha.3): button.js
380
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
381
- * --------------------------------------------------------------------------
382
- */
383
-
384
- var Button = (function ($) {
385
-
386
- /**
387
- * ------------------------------------------------------------------------
388
- * Constants
389
- * ------------------------------------------------------------------------
390
- */
391
-
392
- var NAME = 'button';
393
- var VERSION = '4.0.0-alpha.3';
394
- var DATA_KEY = 'bs.button';
395
- var EVENT_KEY = '.' + DATA_KEY;
396
- var DATA_API_KEY = '.data-api';
397
- var JQUERY_NO_CONFLICT = $.fn[NAME];
398
-
399
- var ClassName = {
400
- ACTIVE: 'active',
401
- BUTTON: 'btn',
402
- FOCUS: 'focus'
403
- };
404
-
405
- var Selector = {
406
- DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
407
- DATA_TOGGLE: '[data-toggle="buttons"]',
408
- INPUT: 'input',
409
- ACTIVE: '.active',
410
- BUTTON: '.btn'
411
- };
412
-
413
- var Event = {
414
- CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
415
- FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY)
416
- };
417
-
418
- /**
419
- * ------------------------------------------------------------------------
420
- * Class Definition
421
- * ------------------------------------------------------------------------
422
- */
423
-
424
- var Button = (function () {
425
- function Button(element) {
426
- _classCallCheck(this, Button);
427
-
428
- this._element = element;
429
- }
430
-
431
- /**
432
- * ------------------------------------------------------------------------
433
- * Data Api implementation
434
- * ------------------------------------------------------------------------
435
- */
436
-
437
- // getters
438
-
439
- _createClass(Button, [{
440
- key: 'toggle',
441
-
442
- // public
443
-
444
- value: function toggle() {
445
- var triggerChangeEvent = true;
446
- var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
447
-
448
- if (rootElement) {
449
- var input = $(this._element).find(Selector.INPUT)[0];
450
-
451
- if (input) {
452
- if (input.type === 'radio') {
453
- if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
454
- triggerChangeEvent = false;
455
- } else {
456
- var activeElement = $(rootElement).find(Selector.ACTIVE)[0];
457
-
458
- if (activeElement) {
459
- $(activeElement).removeClass(ClassName.ACTIVE);
460
- }
461
- }
462
- }
463
-
464
- if (triggerChangeEvent) {
465
- input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
466
- $(this._element).trigger('change');
467
- }
468
-
469
- input.focus();
470
- }
471
- } else {
472
- this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
473
- }
474
-
475
- if (triggerChangeEvent) {
476
- $(this._element).toggleClass(ClassName.ACTIVE);
477
- }
478
- }
479
- }, {
480
- key: 'dispose',
481
- value: function dispose() {
482
- $.removeData(this._element, DATA_KEY);
483
- this._element = null;
484
- }
485
-
486
- // static
487
-
488
- }], [{
489
- key: '_jQueryInterface',
490
- value: function _jQueryInterface(config) {
491
- return this.each(function () {
492
- var data = $(this).data(DATA_KEY);
493
-
494
- if (!data) {
495
- data = new Button(this);
496
- $(this).data(DATA_KEY, data);
497
- }
498
-
499
- if (config === 'toggle') {
500
- data[config]();
501
- }
502
- });
503
- }
504
- }, {
505
- key: 'VERSION',
506
- get: function get() {
507
- return VERSION;
508
- }
509
- }]);
510
-
511
- return Button;
512
- })();
513
-
514
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
515
- event.preventDefault();
516
-
517
- var button = event.target;
518
-
519
- if (!$(button).hasClass(ClassName.BUTTON)) {
520
- button = $(button).closest(Selector.BUTTON);
521
- }
522
-
523
- Button._jQueryInterface.call($(button), 'toggle');
524
- }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
525
- var button = $(event.target).closest(Selector.BUTTON)[0];
526
- $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
527
- });
528
-
529
- /**
530
- * ------------------------------------------------------------------------
531
- * jQuery
532
- * ------------------------------------------------------------------------
533
- */
534
-
535
- $.fn[NAME] = Button._jQueryInterface;
536
- $.fn[NAME].Constructor = Button;
537
- $.fn[NAME].noConflict = function () {
538
- $.fn[NAME] = JQUERY_NO_CONFLICT;
539
- return Button._jQueryInterface;
540
- };
541
-
542
- return Button;
543
- })(jQuery);
544
-
545
- /**
546
- * --------------------------------------------------------------------------
547
- * Bootstrap (v4.0.0-alpha.3): carousel.js
548
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
549
- * --------------------------------------------------------------------------
550
- */
551
-
552
- var Carousel = (function ($) {
553
-
554
- /**
555
- * ------------------------------------------------------------------------
556
- * Constants
557
- * ------------------------------------------------------------------------
558
- */
559
-
560
- var NAME = 'carousel';
561
- var VERSION = '4.0.0-alpha.3';
562
- var DATA_KEY = 'bs.carousel';
563
- var EVENT_KEY = '.' + DATA_KEY;
564
- var DATA_API_KEY = '.data-api';
565
- var JQUERY_NO_CONFLICT = $.fn[NAME];
566
- var TRANSITION_DURATION = 600;
567
- var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
568
- var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
569
-
570
- var Default = {
571
- interval: 5000,
572
- keyboard: true,
573
- slide: false,
574
- pause: 'hover',
575
- wrap: true
576
- };
577
-
578
- var DefaultType = {
579
- interval: '(number|boolean)',
580
- keyboard: 'boolean',
581
- slide: '(boolean|string)',
582
- pause: '(string|boolean)',
583
- wrap: 'boolean'
584
- };
585
-
586
- var Direction = {
587
- NEXT: 'next',
588
- PREVIOUS: 'prev'
589
- };
590
-
591
- var Event = {
592
- SLIDE: 'slide' + EVENT_KEY,
593
- SLID: 'slid' + EVENT_KEY,
594
- KEYDOWN: 'keydown' + EVENT_KEY,
595
- MOUSEENTER: 'mouseenter' + EVENT_KEY,
596
- MOUSELEAVE: 'mouseleave' + EVENT_KEY,
597
- LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY,
598
- CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
599
- };
600
-
601
- var ClassName = {
602
- CAROUSEL: 'carousel',
603
- ACTIVE: 'active',
604
- SLIDE: 'slide',
605
- RIGHT: 'right',
606
- LEFT: 'left',
607
- ITEM: 'carousel-item'
608
- };
609
-
610
- var Selector = {
611
- ACTIVE: '.active',
612
- ACTIVE_ITEM: '.active.carousel-item',
613
- ITEM: '.carousel-item',
614
- NEXT_PREV: '.next, .prev',
615
- INDICATORS: '.carousel-indicators',
616
- DATA_SLIDE: '[data-slide], [data-slide-to]',
617
- DATA_RIDE: '[data-ride="carousel"]'
618
- };
619
-
620
- /**
621
- * ------------------------------------------------------------------------
622
- * Class Definition
623
- * ------------------------------------------------------------------------
624
- */
625
-
626
- var Carousel = (function () {
627
- function Carousel(element, config) {
628
- _classCallCheck(this, Carousel);
629
-
630
- this._items = null;
631
- this._interval = null;
632
- this._activeElement = null;
633
-
634
- this._isPaused = false;
635
- this._isSliding = false;
636
-
637
- this._config = this._getConfig(config);
638
- this._element = $(element)[0];
639
- this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0];
640
-
641
- this._addEventListeners();
642
- }
643
-
644
- /**
645
- * ------------------------------------------------------------------------
646
- * Data Api implementation
647
- * ------------------------------------------------------------------------
648
- */
649
-
650
- // getters
651
-
652
- _createClass(Carousel, [{
653
- key: 'next',
654
-
655
- // public
656
-
657
- value: function next() {
658
- if (!this._isSliding) {
659
- this._slide(Direction.NEXT);
660
- }
661
- }
662
- }, {
663
- key: 'nextWhenVisible',
664
- value: function nextWhenVisible() {
665
- // Don't call next when the page isn't visible
666
- if (!document.hidden) {
667
- this.next();
668
- }
669
- }
670
- }, {
671
- key: 'prev',
672
- value: function prev() {
673
- if (!this._isSliding) {
674
- this._slide(Direction.PREVIOUS);
675
- }
676
- }
677
- }, {
678
- key: 'pause',
679
- value: function pause(event) {
680
- if (!event) {
681
- this._isPaused = true;
682
- }
683
-
684
- if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) {
685
- Util.triggerTransitionEnd(this._element);
686
- this.cycle(true);
687
- }
688
-
689
- clearInterval(this._interval);
690
- this._interval = null;
691
- }
692
- }, {
693
- key: 'cycle',
694
- value: function cycle(event) {
695
- if (!event) {
696
- this._isPaused = false;
697
- }
698
-
699
- if (this._interval) {
700
- clearInterval(this._interval);
701
- this._interval = null;
702
- }
703
-
704
- if (this._config.interval && !this._isPaused) {
705
- this._interval = setInterval($.proxy(document.visibilityState ? this.nextWhenVisible : this.next, this), this._config.interval);
706
- }
707
- }
708
- }, {
709
- key: 'to',
710
- value: function to(index) {
711
- var _this2 = this;
712
-
713
- this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
714
-
715
- var activeIndex = this._getItemIndex(this._activeElement);
716
-
717
- if (index > this._items.length - 1 || index < 0) {
718
- return;
719
- }
720
-
721
- if (this._isSliding) {
722
- $(this._element).one(Event.SLID, function () {
723
- return _this2.to(index);
724
- });
725
- return;
726
- }
727
-
728
- if (activeIndex === index) {
729
- this.pause();
730
- this.cycle();
731
- return;
732
- }
733
-
734
- var direction = index > activeIndex ? Direction.NEXT : Direction.PREVIOUS;
735
-
736
- this._slide(direction, this._items[index]);
737
- }
738
- }, {
739
- key: 'dispose',
740
- value: function dispose() {
741
- $(this._element).off(EVENT_KEY);
742
- $.removeData(this._element, DATA_KEY);
743
-
744
- this._items = null;
745
- this._config = null;
746
- this._element = null;
747
- this._interval = null;
748
- this._isPaused = null;
749
- this._isSliding = null;
750
- this._activeElement = null;
751
- this._indicatorsElement = null;
752
- }
753
-
754
- // private
755
-
756
- }, {
757
- key: '_getConfig',
758
- value: function _getConfig(config) {
759
- config = $.extend({}, Default, config);
760
- Util.typeCheckConfig(NAME, config, DefaultType);
761
- return config;
762
- }
763
- }, {
764
- key: '_addEventListeners',
765
- value: function _addEventListeners() {
766
- if (this._config.keyboard) {
767
- $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this));
768
- }
769
-
770
- if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) {
771
- $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this));
772
- }
773
- }
774
- }, {
775
- key: '_keydown',
776
- value: function _keydown(event) {
777
- event.preventDefault();
778
-
779
- if (/input|textarea/i.test(event.target.tagName)) {
780
- return;
781
- }
782
-
783
- switch (event.which) {
784
- case ARROW_LEFT_KEYCODE:
785
- this.prev();
786
- break;
787
- case ARROW_RIGHT_KEYCODE:
788
- this.next();
789
- break;
790
- default:
791
- return;
792
- }
793
- }
794
- }, {
795
- key: '_getItemIndex',
796
- value: function _getItemIndex(element) {
797
- this._items = $.makeArray($(element).parent().find(Selector.ITEM));
798
- return this._items.indexOf(element);
799
- }
800
- }, {
801
- key: '_getItemByDirection',
802
- value: function _getItemByDirection(direction, activeElement) {
803
- var isNextDirection = direction === Direction.NEXT;
804
- var isPrevDirection = direction === Direction.PREVIOUS;
805
- var activeIndex = this._getItemIndex(activeElement);
806
- var lastItemIndex = this._items.length - 1;
807
- var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
808
-
809
- if (isGoingToWrap && !this._config.wrap) {
810
- return activeElement;
811
- }
812
-
813
- var delta = direction === Direction.PREVIOUS ? -1 : 1;
814
- var itemIndex = (activeIndex + delta) % this._items.length;
815
-
816
- return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
817
- }
818
- }, {
819
- key: '_triggerSlideEvent',
820
- value: function _triggerSlideEvent(relatedTarget, directionalClassname) {
821
- var slideEvent = $.Event(Event.SLIDE, {
822
- relatedTarget: relatedTarget,
823
- direction: directionalClassname
824
- });
825
-
826
- $(this._element).trigger(slideEvent);
827
-
828
- return slideEvent;
829
- }
830
- }, {
831
- key: '_setActiveIndicatorElement',
832
- value: function _setActiveIndicatorElement(element) {
833
- if (this._indicatorsElement) {
834
- $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
835
-
836
- var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
837
-
838
- if (nextIndicator) {
839
- $(nextIndicator).addClass(ClassName.ACTIVE);
840
- }
841
- }
842
- }
843
- }, {
844
- key: '_slide',
845
- value: function _slide(direction, element) {
846
- var _this3 = this;
847
-
848
- var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
849
- var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
850
-
851
- var isCycling = Boolean(this._interval);
852
-
853
- var directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT;
854
-
855
- if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {
856
- this._isSliding = false;
857
- return;
858
- }
859
-
860
- var slideEvent = this._triggerSlideEvent(nextElement, directionalClassName);
861
- if (slideEvent.isDefaultPrevented()) {
862
- return;
863
- }
864
-
865
- if (!activeElement || !nextElement) {
866
- // some weirdness is happening, so we bail
867
- return;
868
- }
869
-
870
- this._isSliding = true;
871
-
872
- if (isCycling) {
873
- this.pause();
874
- }
875
-
876
- this._setActiveIndicatorElement(nextElement);
877
-
878
- var slidEvent = $.Event(Event.SLID, {
879
- relatedTarget: nextElement,
880
- direction: directionalClassName
881
- });
882
-
883
- if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) {
884
-
885
- $(nextElement).addClass(direction);
886
-
887
- Util.reflow(nextElement);
888
-
889
- $(activeElement).addClass(directionalClassName);
890
- $(nextElement).addClass(directionalClassName);
891
-
892
- $(activeElement).one(Util.TRANSITION_END, function () {
893
- $(nextElement).removeClass(directionalClassName).removeClass(direction);
894
-
895
- $(nextElement).addClass(ClassName.ACTIVE);
896
-
897
- $(activeElement).removeClass(ClassName.ACTIVE).removeClass(direction).removeClass(directionalClassName);
898
-
899
- _this3._isSliding = false;
900
-
901
- setTimeout(function () {
902
- return $(_this3._element).trigger(slidEvent);
903
- }, 0);
904
- }).emulateTransitionEnd(TRANSITION_DURATION);
905
- } else {
906
- $(activeElement).removeClass(ClassName.ACTIVE);
907
- $(nextElement).addClass(ClassName.ACTIVE);
908
-
909
- this._isSliding = false;
910
- $(this._element).trigger(slidEvent);
911
- }
912
-
913
- if (isCycling) {
914
- this.cycle();
915
- }
916
- }
917
-
918
- // static
919
-
920
- }], [{
921
- key: '_jQueryInterface',
922
- value: function _jQueryInterface(config) {
923
- return this.each(function () {
924
- var data = $(this).data(DATA_KEY);
925
- var _config = $.extend({}, Default, $(this).data());
926
-
927
- if (typeof config === 'object') {
928
- $.extend(_config, config);
929
- }
930
-
931
- var action = typeof config === 'string' ? config : _config.slide;
932
-
933
- if (!data) {
934
- data = new Carousel(this, _config);
935
- $(this).data(DATA_KEY, data);
936
- }
937
-
938
- if (typeof config === 'number') {
939
- data.to(config);
940
- } else if (typeof action === 'string') {
941
- if (data[action] === undefined) {
942
- throw new Error('No method named "' + action + '"');
943
- }
944
- data[action]();
945
- } else if (_config.interval) {
946
- data.pause();
947
- data.cycle();
948
- }
949
- });
950
- }
951
- }, {
952
- key: '_dataApiClickHandler',
953
- value: function _dataApiClickHandler(event) {
954
- var selector = Util.getSelectorFromElement(this);
955
-
956
- if (!selector) {
957
- return;
958
- }
959
-
960
- var target = $(selector)[0];
961
-
962
- if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {
963
- return;
964
- }
965
-
966
- var config = $.extend({}, $(target).data(), $(this).data());
967
- var slideIndex = this.getAttribute('data-slide-to');
968
-
969
- if (slideIndex) {
970
- config.interval = false;
971
- }
972
-
973
- Carousel._jQueryInterface.call($(target), config);
974
-
975
- if (slideIndex) {
976
- $(target).data(DATA_KEY).to(slideIndex);
977
- }
978
-
979
- event.preventDefault();
980
- }
981
- }, {
982
- key: 'VERSION',
983
- get: function get() {
984
- return VERSION;
985
- }
986
- }, {
987
- key: 'Default',
988
- get: function get() {
989
- return Default;
990
- }
991
- }]);
992
-
993
- return Carousel;
994
- })();
995
-
996
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);
997
-
998
- $(window).on(Event.LOAD_DATA_API, function () {
999
- $(Selector.DATA_RIDE).each(function () {
1000
- var $carousel = $(this);
1001
- Carousel._jQueryInterface.call($carousel, $carousel.data());
1002
- });
1003
- });
1004
-
1005
- /**
1006
- * ------------------------------------------------------------------------
1007
- * jQuery
1008
- * ------------------------------------------------------------------------
1009
- */
1010
-
1011
- $.fn[NAME] = Carousel._jQueryInterface;
1012
- $.fn[NAME].Constructor = Carousel;
1013
- $.fn[NAME].noConflict = function () {
1014
- $.fn[NAME] = JQUERY_NO_CONFLICT;
1015
- return Carousel._jQueryInterface;
1016
- };
1017
-
1018
- return Carousel;
1019
- })(jQuery);
1020
-
1021
- /**
1022
- * --------------------------------------------------------------------------
1023
- * Bootstrap (v4.0.0-alpha.3): collapse.js
1024
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1025
- * --------------------------------------------------------------------------
1026
- */
1027
-
1028
- var Collapse = (function ($) {
1029
-
1030
- /**
1031
- * ------------------------------------------------------------------------
1032
- * Constants
1033
- * ------------------------------------------------------------------------
1034
- */
1035
-
1036
- var NAME = 'collapse';
1037
- var VERSION = '4.0.0-alpha.3';
1038
- var DATA_KEY = 'bs.collapse';
1039
- var EVENT_KEY = '.' + DATA_KEY;
1040
- var DATA_API_KEY = '.data-api';
1041
- var JQUERY_NO_CONFLICT = $.fn[NAME];
1042
- var TRANSITION_DURATION = 600;
1043
-
1044
- var Default = {
1045
- toggle: true,
1046
- parent: ''
1047
- };
1048
-
1049
- var DefaultType = {
1050
- toggle: 'boolean',
1051
- parent: 'string'
1052
- };
1053
-
1054
- var Event = {
1055
- SHOW: 'show' + EVENT_KEY,
1056
- SHOWN: 'shown' + EVENT_KEY,
1057
- HIDE: 'hide' + EVENT_KEY,
1058
- HIDDEN: 'hidden' + EVENT_KEY,
1059
- CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
1060
- };
1061
-
1062
- var ClassName = {
1063
- IN: 'in',
1064
- COLLAPSE: 'collapse',
1065
- COLLAPSING: 'collapsing',
1066
- COLLAPSED: 'collapsed'
1067
- };
1068
-
1069
- var Dimension = {
1070
- WIDTH: 'width',
1071
- HEIGHT: 'height'
1072
- };
1073
-
1074
- var Selector = {
1075
- ACTIVES: '.panel > .in, .panel > .collapsing',
1076
- DATA_TOGGLE: '[data-toggle="collapse"]'
1077
- };
1078
-
1079
- /**
1080
- * ------------------------------------------------------------------------
1081
- * Class Definition
1082
- * ------------------------------------------------------------------------
1083
- */
1084
-
1085
- var Collapse = (function () {
1086
- function Collapse(element, config) {
1087
- _classCallCheck(this, Collapse);
1088
-
1089
- this._isTransitioning = false;
1090
- this._element = element;
1091
- this._config = this._getConfig(config);
1092
- this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]')));
1093
-
1094
- this._parent = this._config.parent ? this._getParent() : null;
1095
-
1096
- if (!this._config.parent) {
1097
- this._addAriaAndCollapsedClass(this._element, this._triggerArray);
1098
- }
1099
-
1100
- if (this._config.toggle) {
1101
- this.toggle();
1102
- }
1103
- }
1104
-
1105
- /**
1106
- * ------------------------------------------------------------------------
1107
- * Data Api implementation
1108
- * ------------------------------------------------------------------------
1109
- */
1110
-
1111
- // getters
1112
-
1113
- _createClass(Collapse, [{
1114
- key: 'toggle',
1115
-
1116
- // public
1117
-
1118
- value: function toggle() {
1119
- if ($(this._element).hasClass(ClassName.IN)) {
1120
- this.hide();
1121
- } else {
1122
- this.show();
1123
- }
1124
- }
1125
- }, {
1126
- key: 'show',
1127
- value: function show() {
1128
- var _this4 = this;
1129
-
1130
- if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) {
1131
- return;
1132
- }
1133
-
1134
- var actives = undefined;
1135
- var activesData = undefined;
1136
-
1137
- if (this._parent) {
1138
- actives = $.makeArray($(Selector.ACTIVES));
1139
- if (!actives.length) {
1140
- actives = null;
1141
- }
1142
- }
1143
-
1144
- if (actives) {
1145
- activesData = $(actives).data(DATA_KEY);
1146
- if (activesData && activesData._isTransitioning) {
1147
- return;
1148
- }
1149
- }
1150
-
1151
- var startEvent = $.Event(Event.SHOW);
1152
- $(this._element).trigger(startEvent);
1153
- if (startEvent.isDefaultPrevented()) {
1154
- return;
1155
- }
1156
-
1157
- if (actives) {
1158
- Collapse._jQueryInterface.call($(actives), 'hide');
1159
- if (!activesData) {
1160
- $(actives).data(DATA_KEY, null);
1161
- }
1162
- }
1163
-
1164
- var dimension = this._getDimension();
1165
-
1166
- $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
1167
-
1168
- this._element.style[dimension] = 0;
1169
- this._element.setAttribute('aria-expanded', true);
1170
-
1171
- if (this._triggerArray.length) {
1172
- $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
1173
- }
1174
-
1175
- this.setTransitioning(true);
1176
-
1177
- var complete = function complete() {
1178
- $(_this4._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN);
1179
-
1180
- _this4._element.style[dimension] = '';
1181
-
1182
- _this4.setTransitioning(false);
1183
-
1184
- $(_this4._element).trigger(Event.SHOWN);
1185
- };
1186
-
1187
- if (!Util.supportsTransitionEnd()) {
1188
- complete();
1189
- return;
1190
- }
1191
-
1192
- var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1193
- var scrollSize = 'scroll' + capitalizedDimension;
1194
-
1195
- $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
1196
-
1197
- this._element.style[dimension] = this._element[scrollSize] + 'px';
1198
- }
1199
- }, {
1200
- key: 'hide',
1201
- value: function hide() {
1202
- var _this5 = this;
1203
-
1204
- if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) {
1205
- return;
1206
- }
1207
-
1208
- var startEvent = $.Event(Event.HIDE);
1209
- $(this._element).trigger(startEvent);
1210
- if (startEvent.isDefaultPrevented()) {
1211
- return;
1212
- }
1213
-
1214
- var dimension = this._getDimension();
1215
- var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight';
1216
-
1217
- this._element.style[dimension] = this._element[offsetDimension] + 'px';
1218
-
1219
- Util.reflow(this._element);
1220
-
1221
- $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN);
1222
-
1223
- this._element.setAttribute('aria-expanded', false);
1224
-
1225
- if (this._triggerArray.length) {
1226
- $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
1227
- }
1228
-
1229
- this.setTransitioning(true);
1230
-
1231
- var complete = function complete() {
1232
- _this5.setTransitioning(false);
1233
- $(_this5._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
1234
- };
1235
-
1236
- this._element.style[dimension] = 0;
1237
-
1238
- if (!Util.supportsTransitionEnd()) {
1239
- complete();
1240
- return;
1241
- }
1242
-
1243
- $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
1244
- }
1245
- }, {
1246
- key: 'setTransitioning',
1247
- value: function setTransitioning(isTransitioning) {
1248
- this._isTransitioning = isTransitioning;
1249
- }
1250
- }, {
1251
- key: 'dispose',
1252
- value: function dispose() {
1253
- $.removeData(this._element, DATA_KEY);
1254
-
1255
- this._config = null;
1256
- this._parent = null;
1257
- this._element = null;
1258
- this._triggerArray = null;
1259
- this._isTransitioning = null;
1260
- }
1261
-
1262
- // private
1263
-
1264
- }, {
1265
- key: '_getConfig',
1266
- value: function _getConfig(config) {
1267
- config = $.extend({}, Default, config);
1268
- config.toggle = Boolean(config.toggle); // coerce string values
1269
- Util.typeCheckConfig(NAME, config, DefaultType);
1270
- return config;
1271
- }
1272
- }, {
1273
- key: '_getDimension',
1274
- value: function _getDimension() {
1275
- var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
1276
- return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
1277
- }
1278
- }, {
1279
- key: '_getParent',
1280
- value: function _getParent() {
1281
- var _this6 = this;
1282
-
1283
- var parent = $(this._config.parent)[0];
1284
- var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
1285
-
1286
- $(parent).find(selector).each(function (i, element) {
1287
- _this6._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
1288
- });
1289
-
1290
- return parent;
1291
- }
1292
- }, {
1293
- key: '_addAriaAndCollapsedClass',
1294
- value: function _addAriaAndCollapsedClass(element, triggerArray) {
1295
- if (element) {
1296
- var isOpen = $(element).hasClass(ClassName.IN);
1297
- element.setAttribute('aria-expanded', isOpen);
1298
-
1299
- if (triggerArray.length) {
1300
- $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1301
- }
1302
- }
1303
- }
1304
-
1305
- // static
1306
-
1307
- }], [{
1308
- key: '_getTargetFromElement',
1309
- value: function _getTargetFromElement(element) {
1310
- var selector = Util.getSelectorFromElement(element);
1311
- return selector ? $(selector)[0] : null;
1312
- }
1313
- }, {
1314
- key: '_jQueryInterface',
1315
- value: function _jQueryInterface(config) {
1316
- return this.each(function () {
1317
- var $this = $(this);
1318
- var data = $this.data(DATA_KEY);
1319
- var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config);
1320
-
1321
- if (!data && _config.toggle && /show|hide/.test(config)) {
1322
- _config.toggle = false;
1323
- }
1324
-
1325
- if (!data) {
1326
- data = new Collapse(this, _config);
1327
- $this.data(DATA_KEY, data);
1328
- }
1329
-
1330
- if (typeof config === 'string') {
1331
- if (data[config] === undefined) {
1332
- throw new Error('No method named "' + config + '"');
1333
- }
1334
- data[config]();
1335
- }
1336
- });
1337
- }
1338
- }, {
1339
- key: 'VERSION',
1340
- get: function get() {
1341
- return VERSION;
1342
- }
1343
- }, {
1344
- key: 'Default',
1345
- get: function get() {
1346
- return Default;
1347
- }
1348
- }]);
1349
-
1350
- return Collapse;
1351
- })();
1352
-
1353
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
1354
- event.preventDefault();
1355
-
1356
- var target = Collapse._getTargetFromElement(this);
1357
- var data = $(target).data(DATA_KEY);
1358
- var config = data ? 'toggle' : $(this).data();
1359
-
1360
- Collapse._jQueryInterface.call($(target), config);
1361
- });
1362
-
1363
- /**
1364
- * ------------------------------------------------------------------------
1365
- * jQuery
1366
- * ------------------------------------------------------------------------
1367
- */
1368
-
1369
- $.fn[NAME] = Collapse._jQueryInterface;
1370
- $.fn[NAME].Constructor = Collapse;
1371
- $.fn[NAME].noConflict = function () {
1372
- $.fn[NAME] = JQUERY_NO_CONFLICT;
1373
- return Collapse._jQueryInterface;
1374
- };
1375
-
1376
- return Collapse;
1377
- })(jQuery);
1378
-
1379
- /**
1380
- * --------------------------------------------------------------------------
1381
- * Bootstrap (v4.0.0-alpha.3): dropdown.js
1382
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1383
- * --------------------------------------------------------------------------
1384
- */
1385
-
1386
- var Dropdown = (function ($) {
1387
-
1388
- /**
1389
- * ------------------------------------------------------------------------
1390
- * Constants
1391
- * ------------------------------------------------------------------------
1392
- */
1393
-
1394
- var NAME = 'dropdown';
1395
- var VERSION = '4.0.0-alpha.3';
1396
- var DATA_KEY = 'bs.dropdown';
1397
- var EVENT_KEY = '.' + DATA_KEY;
1398
- var DATA_API_KEY = '.data-api';
1399
- var JQUERY_NO_CONFLICT = $.fn[NAME];
1400
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
1401
- var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
1402
- var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
1403
- var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
1404
-
1405
- var Event = {
1406
- HIDE: 'hide' + EVENT_KEY,
1407
- HIDDEN: 'hidden' + EVENT_KEY,
1408
- SHOW: 'show' + EVENT_KEY,
1409
- SHOWN: 'shown' + EVENT_KEY,
1410
- CLICK: 'click' + EVENT_KEY,
1411
- CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
1412
- KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY
1413
- };
1414
-
1415
- var ClassName = {
1416
- BACKDROP: 'dropdown-backdrop',
1417
- DISABLED: 'disabled',
1418
- OPEN: 'open'
1419
- };
1420
-
1421
- var Selector = {
1422
- BACKDROP: '.dropdown-backdrop',
1423
- DATA_TOGGLE: '[data-toggle="dropdown"]',
1424
- FORM_CHILD: '.dropdown form',
1425
- ROLE_MENU: '[role="menu"]',
1426
- ROLE_LISTBOX: '[role="listbox"]',
1427
- NAVBAR_NAV: '.navbar-nav',
1428
- VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a'
1429
- };
1430
-
1431
- /**
1432
- * ------------------------------------------------------------------------
1433
- * Class Definition
1434
- * ------------------------------------------------------------------------
1435
- */
1436
-
1437
- var Dropdown = (function () {
1438
- function Dropdown(element) {
1439
- _classCallCheck(this, Dropdown);
1440
-
1441
- this._element = element;
1442
-
1443
- this._addEventListeners();
1444
- }
1445
-
1446
- /**
1447
- * ------------------------------------------------------------------------
1448
- * Data Api implementation
1449
- * ------------------------------------------------------------------------
1450
- */
1451
-
1452
- // getters
1453
-
1454
- _createClass(Dropdown, [{
1455
- key: 'toggle',
1456
-
1457
- // public
1458
-
1459
- value: function toggle() {
1460
- if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
1461
- return false;
1462
- }
1463
-
1464
- var parent = Dropdown._getParentFromElement(this);
1465
- var isActive = $(parent).hasClass(ClassName.OPEN);
1466
-
1467
- Dropdown._clearMenus();
1468
-
1469
- if (isActive) {
1470
- return false;
1471
- }
1472
-
1473
- if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) {
1474
-
1475
- // if mobile we use a backdrop because click events don't delegate
1476
- var dropdown = document.createElement('div');
1477
- dropdown.className = ClassName.BACKDROP;
1478
- $(dropdown).insertBefore(this);
1479
- $(dropdown).on('click', Dropdown._clearMenus);
1480
- }
1481
-
1482
- var relatedTarget = { relatedTarget: this };
1483
- var showEvent = $.Event(Event.SHOW, relatedTarget);
1484
-
1485
- $(parent).trigger(showEvent);
1486
-
1487
- if (showEvent.isDefaultPrevented()) {
1488
- return false;
1489
- }
1490
-
1491
- this.focus();
1492
- this.setAttribute('aria-expanded', 'true');
1493
-
1494
- $(parent).toggleClass(ClassName.OPEN);
1495
- $(parent).trigger($.Event(Event.SHOWN, relatedTarget));
1496
-
1497
- return false;
1498
- }
1499
- }, {
1500
- key: 'dispose',
1501
- value: function dispose() {
1502
- $.removeData(this._element, DATA_KEY);
1503
- $(this._element).off(EVENT_KEY);
1504
- this._element = null;
1505
- }
1506
-
1507
- // private
1508
-
1509
- }, {
1510
- key: '_addEventListeners',
1511
- value: function _addEventListeners() {
1512
- $(this._element).on(Event.CLICK, this.toggle);
1513
- }
1514
-
1515
- // static
1516
-
1517
- }], [{
1518
- key: '_jQueryInterface',
1519
- value: function _jQueryInterface(config) {
1520
- return this.each(function () {
1521
- var data = $(this).data(DATA_KEY);
1522
-
1523
- if (!data) {
1524
- $(this).data(DATA_KEY, data = new Dropdown(this));
1525
- }
1526
-
1527
- if (typeof config === 'string') {
1528
- if (data[config] === undefined) {
1529
- throw new Error('No method named "' + config + '"');
1530
- }
1531
- data[config].call(this);
1532
- }
1533
- });
1534
- }
1535
- }, {
1536
- key: '_clearMenus',
1537
- value: function _clearMenus(event) {
1538
- if (event && event.which === RIGHT_MOUSE_BUTTON_WHICH) {
1539
- return;
1540
- }
1541
-
1542
- var backdrop = $(Selector.BACKDROP)[0];
1543
- if (backdrop) {
1544
- backdrop.parentNode.removeChild(backdrop);
1545
- }
1546
-
1547
- var toggles = $.makeArray($(Selector.DATA_TOGGLE));
1548
-
1549
- for (var i = 0; i < toggles.length; i++) {
1550
- var _parent = Dropdown._getParentFromElement(toggles[i]);
1551
- var relatedTarget = { relatedTarget: toggles[i] };
1552
-
1553
- if (!$(_parent).hasClass(ClassName.OPEN)) {
1554
- continue;
1555
- }
1556
-
1557
- if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) {
1558
- continue;
1559
- }
1560
-
1561
- var hideEvent = $.Event(Event.HIDE, relatedTarget);
1562
- $(_parent).trigger(hideEvent);
1563
- if (hideEvent.isDefaultPrevented()) {
1564
- continue;
1565
- }
1566
-
1567
- toggles[i].setAttribute('aria-expanded', 'false');
1568
-
1569
- $(_parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget));
1570
- }
1571
- }
1572
- }, {
1573
- key: '_getParentFromElement',
1574
- value: function _getParentFromElement(element) {
1575
- var parent = undefined;
1576
- var selector = Util.getSelectorFromElement(element);
1577
-
1578
- if (selector) {
1579
- parent = $(selector)[0];
1580
- }
1581
-
1582
- return parent || element.parentNode;
1583
- }
1584
- }, {
1585
- key: '_dataApiKeydownHandler',
1586
- value: function _dataApiKeydownHandler(event) {
1587
- if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) {
1588
- return;
1589
- }
1590
-
1591
- event.preventDefault();
1592
- event.stopPropagation();
1593
-
1594
- if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
1595
- return;
1596
- }
1597
-
1598
- var parent = Dropdown._getParentFromElement(this);
1599
- var isActive = $(parent).hasClass(ClassName.OPEN);
1600
-
1601
- if (!isActive && event.which !== ESCAPE_KEYCODE || isActive && event.which === ESCAPE_KEYCODE) {
1602
-
1603
- if (event.which === ESCAPE_KEYCODE) {
1604
- var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
1605
- $(toggle).trigger('focus');
1606
- }
1607
-
1608
- $(this).trigger('click');
1609
- return;
1610
- }
1611
-
1612
- var items = $.makeArray($(Selector.VISIBLE_ITEMS));
1613
-
1614
- items = items.filter(function (item) {
1615
- return item.offsetWidth || item.offsetHeight;
1616
- });
1617
-
1618
- if (!items.length) {
1619
- return;
1620
- }
1621
-
1622
- var index = items.indexOf(event.target);
1623
-
1624
- if (event.which === ARROW_UP_KEYCODE && index > 0) {
1625
- // up
1626
- index--;
1627
- }
1628
-
1629
- if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
1630
- // down
1631
- index++;
1632
- }
1633
-
1634
- if (index < 0) {
1635
- index = 0;
1636
- }
1637
-
1638
- items[index].focus();
1639
- }
1640
- }, {
1641
- key: 'VERSION',
1642
- get: function get() {
1643
- return VERSION;
1644
- }
1645
- }]);
1646
-
1647
- return Dropdown;
1648
- })();
1649
-
1650
- $(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) {
1651
- e.stopPropagation();
1652
- });
1653
-
1654
- /**
1655
- * ------------------------------------------------------------------------
1656
- * jQuery
1657
- * ------------------------------------------------------------------------
1658
- */
1659
-
1660
- $.fn[NAME] = Dropdown._jQueryInterface;
1661
- $.fn[NAME].Constructor = Dropdown;
1662
- $.fn[NAME].noConflict = function () {
1663
- $.fn[NAME] = JQUERY_NO_CONFLICT;
1664
- return Dropdown._jQueryInterface;
1665
- };
1666
-
1667
- return Dropdown;
1668
- })(jQuery);
1669
-
1670
- /**
1671
- * --------------------------------------------------------------------------
1672
- * Bootstrap (v4.0.0-alpha.3): modal.js
1673
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1674
- * --------------------------------------------------------------------------
1675
- */
1676
-
1677
- var Modal = (function ($) {
1678
-
1679
- /**
1680
- * ------------------------------------------------------------------------
1681
- * Constants
1682
- * ------------------------------------------------------------------------
1683
- */
1684
-
1685
- var NAME = 'modal';
1686
- var VERSION = '4.0.0-alpha.3';
1687
- var DATA_KEY = 'bs.modal';
1688
- var EVENT_KEY = '.' + DATA_KEY;
1689
- var DATA_API_KEY = '.data-api';
1690
- var JQUERY_NO_CONFLICT = $.fn[NAME];
1691
- var TRANSITION_DURATION = 300;
1692
- var BACKDROP_TRANSITION_DURATION = 150;
1693
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
1694
-
1695
- var Default = {
1696
- backdrop: true,
1697
- keyboard: true,
1698
- focus: true,
1699
- show: true
1700
- };
1701
-
1702
- var DefaultType = {
1703
- backdrop: '(boolean|string)',
1704
- keyboard: 'boolean',
1705
- focus: 'boolean',
1706
- show: 'boolean'
1707
- };
1708
-
1709
- var Event = {
1710
- HIDE: 'hide' + EVENT_KEY,
1711
- HIDDEN: 'hidden' + EVENT_KEY,
1712
- SHOW: 'show' + EVENT_KEY,
1713
- SHOWN: 'shown' + EVENT_KEY,
1714
- FOCUSIN: 'focusin' + EVENT_KEY,
1715
- RESIZE: 'resize' + EVENT_KEY,
1716
- CLICK_DISMISS: 'click.dismiss' + EVENT_KEY,
1717
- KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY,
1718
- MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY,
1719
- MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY,
1720
- CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
1721
- };
1722
-
1723
- var ClassName = {
1724
- SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
1725
- BACKDROP: 'modal-backdrop',
1726
- OPEN: 'modal-open',
1727
- FADE: 'fade',
1728
- IN: 'in'
1729
- };
1730
-
1731
- var Selector = {
1732
- DIALOG: '.modal-dialog',
1733
- DATA_TOGGLE: '[data-toggle="modal"]',
1734
- DATA_DISMISS: '[data-dismiss="modal"]',
1735
- FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'
1736
- };
1737
-
1738
- /**
1739
- * ------------------------------------------------------------------------
1740
- * Class Definition
1741
- * ------------------------------------------------------------------------
1742
- */
1743
-
1744
- var Modal = (function () {
1745
- function Modal(element, config) {
1746
- _classCallCheck(this, Modal);
1747
-
1748
- this._config = this._getConfig(config);
1749
- this._element = element;
1750
- this._dialog = $(element).find(Selector.DIALOG)[0];
1751
- this._backdrop = null;
1752
- this._isShown = false;
1753
- this._isBodyOverflowing = false;
1754
- this._ignoreBackdropClick = false;
1755
- this._originalBodyPadding = 0;
1756
- this._scrollbarWidth = 0;
1757
- }
1758
-
1759
- /**
1760
- * ------------------------------------------------------------------------
1761
- * Data Api implementation
1762
- * ------------------------------------------------------------------------
1763
- */
1764
-
1765
- // getters
1766
-
1767
- _createClass(Modal, [{
1768
- key: 'toggle',
1769
-
1770
- // public
1771
-
1772
- value: function toggle(relatedTarget) {
1773
- return this._isShown ? this.hide() : this.show(relatedTarget);
1774
- }
1775
- }, {
1776
- key: 'show',
1777
- value: function show(relatedTarget) {
1778
- var _this7 = this;
1779
-
1780
- var showEvent = $.Event(Event.SHOW, {
1781
- relatedTarget: relatedTarget
1782
- });
1783
-
1784
- $(this._element).trigger(showEvent);
1785
-
1786
- if (this._isShown || showEvent.isDefaultPrevented()) {
1787
- return;
1788
- }
1789
-
1790
- this._isShown = true;
1791
-
1792
- this._checkScrollbar();
1793
- this._setScrollbar();
1794
-
1795
- $(document.body).addClass(ClassName.OPEN);
1796
-
1797
- this._setEscapeEvent();
1798
- this._setResizeEvent();
1799
-
1800
- $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this));
1801
-
1802
- $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
1803
- $(_this7._element).one(Event.MOUSEUP_DISMISS, function (event) {
1804
- if ($(event.target).is(_this7._element)) {
1805
- _this7._ignoreBackdropClick = true;
1806
- }
1807
- });
1808
- });
1809
-
1810
- this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
1811
- }
1812
- }, {
1813
- key: 'hide',
1814
- value: function hide(event) {
1815
- if (event) {
1816
- event.preventDefault();
1817
- }
1818
-
1819
- var hideEvent = $.Event(Event.HIDE);
1820
-
1821
- $(this._element).trigger(hideEvent);
1822
-
1823
- if (!this._isShown || hideEvent.isDefaultPrevented()) {
1824
- return;
1825
- }
1826
-
1827
- this._isShown = false;
1828
-
1829
- this._setEscapeEvent();
1830
- this._setResizeEvent();
1831
-
1832
- $(document).off(Event.FOCUSIN);
1833
-
1834
- $(this._element).removeClass(ClassName.IN);
1835
-
1836
- $(this._element).off(Event.CLICK_DISMISS);
1837
- $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
1838
-
1839
- if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
1840
-
1841
- $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION);
1842
- } else {
1843
- this._hideModal();
1844
- }
1845
- }
1846
- }, {
1847
- key: 'dispose',
1848
- value: function dispose() {
1849
- $.removeData(this._element, DATA_KEY);
1850
-
1851
- $(window).off(EVENT_KEY);
1852
- $(document).off(EVENT_KEY);
1853
- $(this._element).off(EVENT_KEY);
1854
- $(this._backdrop).off(EVENT_KEY);
1855
-
1856
- this._config = null;
1857
- this._element = null;
1858
- this._dialog = null;
1859
- this._backdrop = null;
1860
- this._isShown = null;
1861
- this._isBodyOverflowing = null;
1862
- this._ignoreBackdropClick = null;
1863
- this._originalBodyPadding = null;
1864
- this._scrollbarWidth = null;
1865
- }
1866
-
1867
- // private
1868
-
1869
- }, {
1870
- key: '_getConfig',
1871
- value: function _getConfig(config) {
1872
- config = $.extend({}, Default, config);
1873
- Util.typeCheckConfig(NAME, config, DefaultType);
1874
- return config;
1875
- }
1876
- }, {
1877
- key: '_showElement',
1878
- value: function _showElement(relatedTarget) {
1879
- var _this8 = this;
1880
-
1881
- var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
1882
-
1883
- if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
1884
- // don't move modals dom position
1885
- document.body.appendChild(this._element);
1886
- }
1887
-
1888
- this._element.style.display = 'block';
1889
- this._element.removeAttribute('aria-hidden');
1890
- this._element.scrollTop = 0;
1891
-
1892
- if (transition) {
1893
- Util.reflow(this._element);
1894
- }
1895
-
1896
- $(this._element).addClass(ClassName.IN);
1897
-
1898
- if (this._config.focus) {
1899
- this._enforceFocus();
1900
- }
1901
-
1902
- var shownEvent = $.Event(Event.SHOWN, {
1903
- relatedTarget: relatedTarget
1904
- });
1905
-
1906
- var transitionComplete = function transitionComplete() {
1907
- if (_this8._config.focus) {
1908
- _this8._element.focus();
1909
- }
1910
- $(_this8._element).trigger(shownEvent);
1911
- };
1912
-
1913
- if (transition) {
1914
- $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);
1915
- } else {
1916
- transitionComplete();
1917
- }
1918
- }
1919
- }, {
1920
- key: '_enforceFocus',
1921
- value: function _enforceFocus() {
1922
- var _this9 = this;
1923
-
1924
- $(document).off(Event.FOCUSIN) // guard against infinite focus loop
1925
- .on(Event.FOCUSIN, function (event) {
1926
- if (document !== event.target && _this9._element !== event.target && !$(_this9._element).has(event.target).length) {
1927
- _this9._element.focus();
1928
- }
1929
- });
1930
- }
1931
- }, {
1932
- key: '_setEscapeEvent',
1933
- value: function _setEscapeEvent() {
1934
- var _this10 = this;
1935
-
1936
- if (this._isShown && this._config.keyboard) {
1937
- $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
1938
- if (event.which === ESCAPE_KEYCODE) {
1939
- _this10.hide();
1940
- }
1941
- });
1942
- } else if (!this._isShown) {
1943
- $(this._element).off(Event.KEYDOWN_DISMISS);
1944
- }
1945
- }
1946
- }, {
1947
- key: '_setResizeEvent',
1948
- value: function _setResizeEvent() {
1949
- if (this._isShown) {
1950
- $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this));
1951
- } else {
1952
- $(window).off(Event.RESIZE);
1953
- }
1954
- }
1955
- }, {
1956
- key: '_hideModal',
1957
- value: function _hideModal() {
1958
- var _this11 = this;
1959
-
1960
- this._element.style.display = 'none';
1961
- this._element.setAttribute('aria-hidden', 'true');
1962
- this._showBackdrop(function () {
1963
- $(document.body).removeClass(ClassName.OPEN);
1964
- _this11._resetAdjustments();
1965
- _this11._resetScrollbar();
1966
- $(_this11._element).trigger(Event.HIDDEN);
1967
- });
1968
- }
1969
- }, {
1970
- key: '_removeBackdrop',
1971
- value: function _removeBackdrop() {
1972
- if (this._backdrop) {
1973
- $(this._backdrop).remove();
1974
- this._backdrop = null;
1975
- }
1976
- }
1977
- }, {
1978
- key: '_showBackdrop',
1979
- value: function _showBackdrop(callback) {
1980
- var _this12 = this;
1981
-
1982
- var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
1983
-
1984
- if (this._isShown && this._config.backdrop) {
1985
- var doAnimate = Util.supportsTransitionEnd() && animate;
1986
-
1987
- this._backdrop = document.createElement('div');
1988
- this._backdrop.className = ClassName.BACKDROP;
1989
-
1990
- if (animate) {
1991
- $(this._backdrop).addClass(animate);
1992
- }
1993
-
1994
- $(this._backdrop).appendTo(document.body);
1995
-
1996
- $(this._element).on(Event.CLICK_DISMISS, function (event) {
1997
- if (_this12._ignoreBackdropClick) {
1998
- _this12._ignoreBackdropClick = false;
1999
- return;
2000
- }
2001
- if (event.target !== event.currentTarget) {
2002
- return;
2003
- }
2004
- if (_this12._config.backdrop === 'static') {
2005
- _this12._element.focus();
2006
- } else {
2007
- _this12.hide();
2008
- }
2009
- });
2010
-
2011
- if (doAnimate) {
2012
- Util.reflow(this._backdrop);
2013
- }
2014
-
2015
- $(this._backdrop).addClass(ClassName.IN);
2016
-
2017
- if (!callback) {
2018
- return;
2019
- }
2020
-
2021
- if (!doAnimate) {
2022
- callback();
2023
- return;
2024
- }
2025
-
2026
- $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
2027
- } else if (!this._isShown && this._backdrop) {
2028
- $(this._backdrop).removeClass(ClassName.IN);
2029
-
2030
- var callbackRemove = function callbackRemove() {
2031
- _this12._removeBackdrop();
2032
- if (callback) {
2033
- callback();
2034
- }
2035
- };
2036
-
2037
- if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
2038
- $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
2039
- } else {
2040
- callbackRemove();
2041
- }
2042
- } else if (callback) {
2043
- callback();
2044
- }
2045
- }
2046
-
2047
- // ----------------------------------------------------------------------
2048
- // the following methods are used to handle overflowing modals
2049
- // todo (fat): these should probably be refactored out of modal.js
2050
- // ----------------------------------------------------------------------
2051
-
2052
- }, {
2053
- key: '_handleUpdate',
2054
- value: function _handleUpdate() {
2055
- this._adjustDialog();
2056
- }
2057
- }, {
2058
- key: '_adjustDialog',
2059
- value: function _adjustDialog() {
2060
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
2061
-
2062
- if (!this._isBodyOverflowing && isModalOverflowing) {
2063
- this._element.style.paddingLeft = this._scrollbarWidth + 'px';
2064
- }
2065
-
2066
- if (this._isBodyOverflowing && !isModalOverflowing) {
2067
- this._element.style.paddingRight = this._scrollbarWidth + 'px';
2068
- }
2069
- }
2070
- }, {
2071
- key: '_resetAdjustments',
2072
- value: function _resetAdjustments() {
2073
- this._element.style.paddingLeft = '';
2074
- this._element.style.paddingRight = '';
2075
- }
2076
- }, {
2077
- key: '_checkScrollbar',
2078
- value: function _checkScrollbar() {
2079
- this._isBodyOverflowing = document.body.clientWidth < window.innerWidth;
2080
- this._scrollbarWidth = this._getScrollbarWidth();
2081
- }
2082
- }, {
2083
- key: '_setScrollbar',
2084
- value: function _setScrollbar() {
2085
- var bodyPadding = parseInt($(Selector.FIXED_CONTENT).css('padding-right') || 0, 10);
2086
-
2087
- this._originalBodyPadding = document.body.style.paddingRight || '';
2088
-
2089
- if (this._isBodyOverflowing) {
2090
- document.body.style.paddingRight = bodyPadding + this._scrollbarWidth + 'px';
2091
- }
2092
- }
2093
- }, {
2094
- key: '_resetScrollbar',
2095
- value: function _resetScrollbar() {
2096
- document.body.style.paddingRight = this._originalBodyPadding;
2097
- }
2098
- }, {
2099
- key: '_getScrollbarWidth',
2100
- value: function _getScrollbarWidth() {
2101
- // thx d.walsh
2102
- var scrollDiv = document.createElement('div');
2103
- scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
2104
- document.body.appendChild(scrollDiv);
2105
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
2106
- document.body.removeChild(scrollDiv);
2107
- return scrollbarWidth;
2108
- }
2109
-
2110
- // static
2111
-
2112
- }], [{
2113
- key: '_jQueryInterface',
2114
- value: function _jQueryInterface(config, relatedTarget) {
2115
- return this.each(function () {
2116
- var data = $(this).data(DATA_KEY);
2117
- var _config = $.extend({}, Modal.Default, $(this).data(), typeof config === 'object' && config);
2118
-
2119
- if (!data) {
2120
- data = new Modal(this, _config);
2121
- $(this).data(DATA_KEY, data);
2122
- }
2123
-
2124
- if (typeof config === 'string') {
2125
- if (data[config] === undefined) {
2126
- throw new Error('No method named "' + config + '"');
2127
- }
2128
- data[config](relatedTarget);
2129
- } else if (_config.show) {
2130
- data.show(relatedTarget);
2131
- }
2132
- });
2133
- }
2134
- }, {
2135
- key: 'VERSION',
2136
- get: function get() {
2137
- return VERSION;
2138
- }
2139
- }, {
2140
- key: 'Default',
2141
- get: function get() {
2142
- return Default;
2143
- }
2144
- }]);
2145
-
2146
- return Modal;
2147
- })();
2148
-
2149
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
2150
- var _this13 = this;
2151
-
2152
- var target = undefined;
2153
- var selector = Util.getSelectorFromElement(this);
2154
-
2155
- if (selector) {
2156
- target = $(selector)[0];
2157
- }
2158
-
2159
- var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());
2160
-
2161
- if (this.tagName === 'A') {
2162
- event.preventDefault();
2163
- }
2164
-
2165
- var $target = $(target).one(Event.SHOW, function (showEvent) {
2166
- if (showEvent.isDefaultPrevented()) {
2167
- // only register focus restorer if modal will actually get shown
2168
- return;
2169
- }
2170
-
2171
- $target.one(Event.HIDDEN, function () {
2172
- if ($(_this13).is(':visible')) {
2173
- _this13.focus();
2174
- }
2175
- });
2176
- });
2177
-
2178
- Modal._jQueryInterface.call($(target), config, this);
2179
- });
2180
-
2181
- /**
2182
- * ------------------------------------------------------------------------
2183
- * jQuery
2184
- * ------------------------------------------------------------------------
2185
- */
2186
-
2187
- $.fn[NAME] = Modal._jQueryInterface;
2188
- $.fn[NAME].Constructor = Modal;
2189
- $.fn[NAME].noConflict = function () {
2190
- $.fn[NAME] = JQUERY_NO_CONFLICT;
2191
- return Modal._jQueryInterface;
2192
- };
2193
-
2194
- return Modal;
2195
- })(jQuery);
2196
-
2197
- /**
2198
- * --------------------------------------------------------------------------
2199
- * Bootstrap (v4.0.0-alpha.3): scrollspy.js
2200
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2201
- * --------------------------------------------------------------------------
2202
- */
2203
-
2204
- var ScrollSpy = (function ($) {
2205
-
2206
- /**
2207
- * ------------------------------------------------------------------------
2208
- * Constants
2209
- * ------------------------------------------------------------------------
2210
- */
2211
-
2212
- var NAME = 'scrollspy';
2213
- var VERSION = '4.0.0-alpha.3';
2214
- var DATA_KEY = 'bs.scrollspy';
2215
- var EVENT_KEY = '.' + DATA_KEY;
2216
- var DATA_API_KEY = '.data-api';
2217
- var JQUERY_NO_CONFLICT = $.fn[NAME];
2218
-
2219
- var Default = {
2220
- offset: 10,
2221
- method: 'auto',
2222
- target: ''
2223
- };
2224
-
2225
- var DefaultType = {
2226
- offset: 'number',
2227
- method: 'string',
2228
- target: '(string|element)'
2229
- };
2230
-
2231
- var Event = {
2232
- ACTIVATE: 'activate' + EVENT_KEY,
2233
- SCROLL: 'scroll' + EVENT_KEY,
2234
- LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY
2235
- };
2236
-
2237
- var ClassName = {
2238
- DROPDOWN_ITEM: 'dropdown-item',
2239
- DROPDOWN_MENU: 'dropdown-menu',
2240
- NAV_LINK: 'nav-link',
2241
- NAV: 'nav',
2242
- ACTIVE: 'active'
2243
- };
2244
-
2245
- var Selector = {
2246
- DATA_SPY: '[data-spy="scroll"]',
2247
- ACTIVE: '.active',
2248
- LIST_ITEM: '.list-item',
2249
- LI: 'li',
2250
- LI_DROPDOWN: 'li.dropdown',
2251
- NAV_LINKS: '.nav-link',
2252
- DROPDOWN: '.dropdown',
2253
- DROPDOWN_ITEMS: '.dropdown-item',
2254
- DROPDOWN_TOGGLE: '.dropdown-toggle'
2255
- };
2256
-
2257
- var OffsetMethod = {
2258
- OFFSET: 'offset',
2259
- POSITION: 'position'
2260
- };
2261
-
2262
- /**
2263
- * ------------------------------------------------------------------------
2264
- * Class Definition
2265
- * ------------------------------------------------------------------------
2266
- */
2267
-
2268
- var ScrollSpy = (function () {
2269
- function ScrollSpy(element, config) {
2270
- _classCallCheck(this, ScrollSpy);
2271
-
2272
- this._element = element;
2273
- this._scrollElement = element.tagName === 'BODY' ? window : element;
2274
- this._config = this._getConfig(config);
2275
- this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS);
2276
- this._offsets = [];
2277
- this._targets = [];
2278
- this._activeTarget = null;
2279
- this._scrollHeight = 0;
2280
-
2281
- $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this));
2282
-
2283
- this.refresh();
2284
- this._process();
2285
- }
2286
-
2287
- /**
2288
- * ------------------------------------------------------------------------
2289
- * Data Api implementation
2290
- * ------------------------------------------------------------------------
2291
- */
2292
-
2293
- // getters
2294
-
2295
- _createClass(ScrollSpy, [{
2296
- key: 'refresh',
2297
-
2298
- // public
2299
-
2300
- value: function refresh() {
2301
- var _this14 = this;
2302
-
2303
- var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
2304
-
2305
- var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
2306
-
2307
- var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
2308
-
2309
- this._offsets = [];
2310
- this._targets = [];
2311
-
2312
- this._scrollHeight = this._getScrollHeight();
2313
-
2314
- var targets = $.makeArray($(this._selector));
2315
-
2316
- targets.map(function (element) {
2317
- var target = undefined;
2318
- var targetSelector = Util.getSelectorFromElement(element);
2319
-
2320
- if (targetSelector) {
2321
- target = $(targetSelector)[0];
2322
- }
2323
-
2324
- if (target && (target.offsetWidth || target.offsetHeight)) {
2325
- // todo (fat): remove sketch reliance on jQuery position/offset
2326
- return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
2327
- }
2328
- return null;
2329
- }).filter(function (item) {
2330
- return item;
2331
- }).sort(function (a, b) {
2332
- return a[0] - b[0];
2333
- }).forEach(function (item) {
2334
- _this14._offsets.push(item[0]);
2335
- _this14._targets.push(item[1]);
2336
- });
2337
- }
2338
- }, {
2339
- key: 'dispose',
2340
- value: function dispose() {
2341
- $.removeData(this._element, DATA_KEY);
2342
- $(this._scrollElement).off(EVENT_KEY);
2343
-
2344
- this._element = null;
2345
- this._scrollElement = null;
2346
- this._config = null;
2347
- this._selector = null;
2348
- this._offsets = null;
2349
- this._targets = null;
2350
- this._activeTarget = null;
2351
- this._scrollHeight = null;
2352
- }
2353
-
2354
- // private
2355
-
2356
- }, {
2357
- key: '_getConfig',
2358
- value: function _getConfig(config) {
2359
- config = $.extend({}, Default, config);
2360
-
2361
- if (typeof config.target !== 'string') {
2362
- var id = $(config.target).attr('id');
2363
- if (!id) {
2364
- id = Util.getUID(NAME);
2365
- $(config.target).attr('id', id);
2366
- }
2367
- config.target = '#' + id;
2368
- }
2369
-
2370
- Util.typeCheckConfig(NAME, config, DefaultType);
2371
-
2372
- return config;
2373
- }
2374
- }, {
2375
- key: '_getScrollTop',
2376
- value: function _getScrollTop() {
2377
- return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop;
2378
- }
2379
- }, {
2380
- key: '_getScrollHeight',
2381
- value: function _getScrollHeight() {
2382
- return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
2383
- }
2384
- }, {
2385
- key: '_process',
2386
- value: function _process() {
2387
- var scrollTop = this._getScrollTop() + this._config.offset;
2388
- var scrollHeight = this._getScrollHeight();
2389
- var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight;
2390
-
2391
- if (this._scrollHeight !== scrollHeight) {
2392
- this.refresh();
2393
- }
2394
-
2395
- if (scrollTop >= maxScroll) {
2396
- var target = this._targets[this._targets.length - 1];
2397
-
2398
- if (this._activeTarget !== target) {
2399
- this._activate(target);
2400
- }
2401
- }
2402
-
2403
- if (this._activeTarget && scrollTop < this._offsets[0]) {
2404
- this._activeTarget = null;
2405
- this._clear();
2406
- return;
2407
- }
2408
-
2409
- for (var i = this._offsets.length; i--;) {
2410
- var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]);
2411
-
2412
- if (isActiveTarget) {
2413
- this._activate(this._targets[i]);
2414
- }
2415
- }
2416
- }
2417
- }, {
2418
- key: '_activate',
2419
- value: function _activate(target) {
2420
- this._activeTarget = target;
2421
-
2422
- this._clear();
2423
-
2424
- var queries = this._selector.split(',');
2425
- queries = queries.map(function (selector) {
2426
- return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]');
2427
- });
2428
-
2429
- var $link = $(queries.join(','));
2430
-
2431
- if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
2432
- $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
2433
- $link.addClass(ClassName.ACTIVE);
2434
- } else {
2435
- // todo (fat) this is kinda sus...
2436
- // recursively add actives to tested nav-links
2437
- $link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
2438
- }
2439
-
2440
- $(this._scrollElement).trigger(Event.ACTIVATE, {
2441
- relatedTarget: target
2442
- });
2443
- }
2444
- }, {
2445
- key: '_clear',
2446
- value: function _clear() {
2447
- $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
2448
- }
2449
-
2450
- // static
2451
-
2452
- }], [{
2453
- key: '_jQueryInterface',
2454
- value: function _jQueryInterface(config) {
2455
- return this.each(function () {
2456
- var data = $(this).data(DATA_KEY);
2457
- var _config = typeof config === 'object' && config || null;
2458
-
2459
- if (!data) {
2460
- data = new ScrollSpy(this, _config);
2461
- $(this).data(DATA_KEY, data);
2462
- }
2463
-
2464
- if (typeof config === 'string') {
2465
- if (data[config] === undefined) {
2466
- throw new Error('No method named "' + config + '"');
2467
- }
2468
- data[config]();
2469
- }
2470
- });
2471
- }
2472
- }, {
2473
- key: 'VERSION',
2474
- get: function get() {
2475
- return VERSION;
2476
- }
2477
- }, {
2478
- key: 'Default',
2479
- get: function get() {
2480
- return Default;
2481
- }
2482
- }]);
2483
-
2484
- return ScrollSpy;
2485
- })();
2486
-
2487
- $(window).on(Event.LOAD_DATA_API, function () {
2488
- var scrollSpys = $.makeArray($(Selector.DATA_SPY));
2489
-
2490
- for (var i = scrollSpys.length; i--;) {
2491
- var $spy = $(scrollSpys[i]);
2492
- ScrollSpy._jQueryInterface.call($spy, $spy.data());
2493
- }
2494
- });
2495
-
2496
- /**
2497
- * ------------------------------------------------------------------------
2498
- * jQuery
2499
- * ------------------------------------------------------------------------
2500
- */
2501
-
2502
- $.fn[NAME] = ScrollSpy._jQueryInterface;
2503
- $.fn[NAME].Constructor = ScrollSpy;
2504
- $.fn[NAME].noConflict = function () {
2505
- $.fn[NAME] = JQUERY_NO_CONFLICT;
2506
- return ScrollSpy._jQueryInterface;
2507
- };
2508
-
2509
- return ScrollSpy;
2510
- })(jQuery);
2511
-
2512
- /**
2513
- * --------------------------------------------------------------------------
2514
- * Bootstrap (v4.0.0-alpha.3): tab.js
2515
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2516
- * --------------------------------------------------------------------------
2517
- */
2518
-
2519
- var Tab = (function ($) {
2520
-
2521
- /**
2522
- * ------------------------------------------------------------------------
2523
- * Constants
2524
- * ------------------------------------------------------------------------
2525
- */
2526
-
2527
- var NAME = 'tab';
2528
- var VERSION = '4.0.0-alpha.3';
2529
- var DATA_KEY = 'bs.tab';
2530
- var EVENT_KEY = '.' + DATA_KEY;
2531
- var DATA_API_KEY = '.data-api';
2532
- var JQUERY_NO_CONFLICT = $.fn[NAME];
2533
- var TRANSITION_DURATION = 150;
2534
-
2535
- var Event = {
2536
- HIDE: 'hide' + EVENT_KEY,
2537
- HIDDEN: 'hidden' + EVENT_KEY,
2538
- SHOW: 'show' + EVENT_KEY,
2539
- SHOWN: 'shown' + EVENT_KEY,
2540
- CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
2541
- };
2542
-
2543
- var ClassName = {
2544
- DROPDOWN_MENU: 'dropdown-menu',
2545
- ACTIVE: 'active',
2546
- FADE: 'fade',
2547
- IN: 'in'
2548
- };
2549
-
2550
- var Selector = {
2551
- A: 'a',
2552
- LI: 'li',
2553
- DROPDOWN: '.dropdown',
2554
- UL: 'ul:not(.dropdown-menu)',
2555
- FADE_CHILD: '> .nav-item .fade, > .fade',
2556
- ACTIVE: '.active',
2557
- ACTIVE_CHILD: '> .nav-item > .active, > .active',
2558
- DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]',
2559
- DROPDOWN_TOGGLE: '.dropdown-toggle',
2560
- DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
2561
- };
2562
-
2563
- /**
2564
- * ------------------------------------------------------------------------
2565
- * Class Definition
2566
- * ------------------------------------------------------------------------
2567
- */
2568
-
2569
- var Tab = (function () {
2570
- function Tab(element) {
2571
- _classCallCheck(this, Tab);
2572
-
2573
- this._element = element;
2574
- }
2575
-
2576
- /**
2577
- * ------------------------------------------------------------------------
2578
- * Data Api implementation
2579
- * ------------------------------------------------------------------------
2580
- */
2581
-
2582
- // getters
2583
-
2584
- _createClass(Tab, [{
2585
- key: 'show',
2586
-
2587
- // public
2588
-
2589
- value: function show() {
2590
- var _this15 = this;
2591
-
2592
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) {
2593
- return;
2594
- }
2595
-
2596
- var target = undefined;
2597
- var previous = undefined;
2598
- var ulElement = $(this._element).closest(Selector.UL)[0];
2599
- var selector = Util.getSelectorFromElement(this._element);
2600
-
2601
- if (ulElement) {
2602
- previous = $.makeArray($(ulElement).find(Selector.ACTIVE));
2603
- previous = previous[previous.length - 1];
2604
- }
2605
-
2606
- var hideEvent = $.Event(Event.HIDE, {
2607
- relatedTarget: this._element
2608
- });
2609
-
2610
- var showEvent = $.Event(Event.SHOW, {
2611
- relatedTarget: previous
2612
- });
2613
-
2614
- if (previous) {
2615
- $(previous).trigger(hideEvent);
2616
- }
2617
-
2618
- $(this._element).trigger(showEvent);
2619
-
2620
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
2621
- return;
2622
- }
2623
-
2624
- if (selector) {
2625
- target = $(selector)[0];
2626
- }
2627
-
2628
- this._activate(this._element, ulElement);
2629
-
2630
- var complete = function complete() {
2631
- var hiddenEvent = $.Event(Event.HIDDEN, {
2632
- relatedTarget: _this15._element
2633
- });
2634
-
2635
- var shownEvent = $.Event(Event.SHOWN, {
2636
- relatedTarget: previous
2637
- });
2638
-
2639
- $(previous).trigger(hiddenEvent);
2640
- $(_this15._element).trigger(shownEvent);
2641
- };
2642
-
2643
- if (target) {
2644
- this._activate(target, target.parentNode, complete);
2645
- } else {
2646
- complete();
2647
- }
2648
- }
2649
- }, {
2650
- key: 'dispose',
2651
- value: function dispose() {
2652
- $.removeClass(this._element, DATA_KEY);
2653
- this._element = null;
2654
- }
2655
-
2656
- // private
2657
-
2658
- }, {
2659
- key: '_activate',
2660
- value: function _activate(element, container, callback) {
2661
- var active = $(container).find(Selector.ACTIVE_CHILD)[0];
2662
- var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0]));
2663
-
2664
- var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback);
2665
-
2666
- if (active && isTransitioning) {
2667
- $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
2668
- } else {
2669
- complete();
2670
- }
2671
-
2672
- if (active) {
2673
- $(active).removeClass(ClassName.IN);
2674
- }
2675
- }
2676
- }, {
2677
- key: '_transitionComplete',
2678
- value: function _transitionComplete(element, active, isTransitioning, callback) {
2679
- if (active) {
2680
- $(active).removeClass(ClassName.ACTIVE);
2681
-
2682
- var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
2683
-
2684
- if (dropdownChild) {
2685
- $(dropdownChild).removeClass(ClassName.ACTIVE);
2686
- }
2687
-
2688
- active.setAttribute('aria-expanded', false);
2689
- }
2690
-
2691
- $(element).addClass(ClassName.ACTIVE);
2692
- element.setAttribute('aria-expanded', true);
2693
-
2694
- if (isTransitioning) {
2695
- Util.reflow(element);
2696
- $(element).addClass(ClassName.IN);
2697
- } else {
2698
- $(element).removeClass(ClassName.FADE);
2699
- }
2700
-
2701
- if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
2702
-
2703
- var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
2704
- if (dropdownElement) {
2705
- $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
2706
- }
2707
-
2708
- element.setAttribute('aria-expanded', true);
2709
- }
2710
-
2711
- if (callback) {
2712
- callback();
2713
- }
2714
- }
2715
-
2716
- // static
2717
-
2718
- }], [{
2719
- key: '_jQueryInterface',
2720
- value: function _jQueryInterface(config) {
2721
- return this.each(function () {
2722
- var $this = $(this);
2723
- var data = $this.data(DATA_KEY);
2724
-
2725
- if (!data) {
2726
- data = data = new Tab(this);
2727
- $this.data(DATA_KEY, data);
2728
- }
2729
-
2730
- if (typeof config === 'string') {
2731
- if (data[config] === undefined) {
2732
- throw new Error('No method named "' + config + '"');
2733
- }
2734
- data[config]();
2735
- }
2736
- });
2737
- }
2738
- }, {
2739
- key: 'VERSION',
2740
- get: function get() {
2741
- return VERSION;
2742
- }
2743
- }]);
2744
-
2745
- return Tab;
2746
- })();
2747
-
2748
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
2749
- event.preventDefault();
2750
- Tab._jQueryInterface.call($(this), 'show');
2751
- });
2752
-
2753
- /**
2754
- * ------------------------------------------------------------------------
2755
- * jQuery
2756
- * ------------------------------------------------------------------------
2757
- */
2758
-
2759
- $.fn[NAME] = Tab._jQueryInterface;
2760
- $.fn[NAME].Constructor = Tab;
2761
- $.fn[NAME].noConflict = function () {
2762
- $.fn[NAME] = JQUERY_NO_CONFLICT;
2763
- return Tab._jQueryInterface;
2764
- };
2765
-
2766
- return Tab;
2767
- })(jQuery);
2768
-
2769
- /* global Tether */
2770
-
2771
- /**
2772
- * --------------------------------------------------------------------------
2773
- * Bootstrap (v4.0.0-alpha.3): tooltip.js
2774
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2775
- * --------------------------------------------------------------------------
2776
- */
2777
-
2778
- var Tooltip = (function ($) {
2779
-
2780
- /**
2781
- * Check for Tether dependency
2782
- * Tether - http://github.hubspot.com/tether/
2783
- */
2784
- if (window.Tether === undefined) {
2785
- throw new Error('Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)');
2786
- }
2787
-
2788
- /**
2789
- * ------------------------------------------------------------------------
2790
- * Constants
2791
- * ------------------------------------------------------------------------
2792
- */
2793
-
2794
- var NAME = 'tooltip';
2795
- var VERSION = '4.0.0-alpha.3';
2796
- var DATA_KEY = 'bs.tooltip';
2797
- var EVENT_KEY = '.' + DATA_KEY;
2798
- var JQUERY_NO_CONFLICT = $.fn[NAME];
2799
- var TRANSITION_DURATION = 150;
2800
- var CLASS_PREFIX = 'bs-tether';
2801
-
2802
- var Default = {
2803
- animation: true,
2804
- template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div></div>',
2805
- trigger: 'hover focus',
2806
- title: '',
2807
- delay: 0,
2808
- html: false,
2809
- selector: false,
2810
- placement: 'top',
2811
- offset: '0 0',
2812
- constraints: []
2813
- };
2814
-
2815
- var DefaultType = {
2816
- animation: 'boolean',
2817
- template: 'string',
2818
- title: '(string|element|function)',
2819
- trigger: 'string',
2820
- delay: '(number|object)',
2821
- html: 'boolean',
2822
- selector: '(string|boolean)',
2823
- placement: '(string|function)',
2824
- offset: 'string',
2825
- constraints: 'array'
2826
- };
2827
-
2828
- var AttachmentMap = {
2829
- TOP: 'bottom center',
2830
- RIGHT: 'middle left',
2831
- BOTTOM: 'top center',
2832
- LEFT: 'middle right'
2833
- };
2834
-
2835
- var HoverState = {
2836
- IN: 'in',
2837
- OUT: 'out'
2838
- };
2839
-
2840
- var Event = {
2841
- HIDE: 'hide' + EVENT_KEY,
2842
- HIDDEN: 'hidden' + EVENT_KEY,
2843
- SHOW: 'show' + EVENT_KEY,
2844
- SHOWN: 'shown' + EVENT_KEY,
2845
- INSERTED: 'inserted' + EVENT_KEY,
2846
- CLICK: 'click' + EVENT_KEY,
2847
- FOCUSIN: 'focusin' + EVENT_KEY,
2848
- FOCUSOUT: 'focusout' + EVENT_KEY,
2849
- MOUSEENTER: 'mouseenter' + EVENT_KEY,
2850
- MOUSELEAVE: 'mouseleave' + EVENT_KEY
2851
- };
2852
-
2853
- var ClassName = {
2854
- FADE: 'fade',
2855
- IN: 'in'
2856
- };
2857
-
2858
- var Selector = {
2859
- TOOLTIP: '.tooltip',
2860
- TOOLTIP_INNER: '.tooltip-inner'
2861
- };
2862
-
2863
- var TetherClass = {
2864
- element: false,
2865
- enabled: false
2866
- };
2867
-
2868
- var Trigger = {
2869
- HOVER: 'hover',
2870
- FOCUS: 'focus',
2871
- CLICK: 'click',
2872
- MANUAL: 'manual'
2873
- };
2874
-
2875
- /**
2876
- * ------------------------------------------------------------------------
2877
- * Class Definition
2878
- * ------------------------------------------------------------------------
2879
- */
2880
-
2881
- var Tooltip = (function () {
2882
- function Tooltip(element, config) {
2883
- _classCallCheck(this, Tooltip);
2884
-
2885
- // private
2886
- this._isEnabled = true;
2887
- this._timeout = 0;
2888
- this._hoverState = '';
2889
- this._activeTrigger = {};
2890
- this._tether = null;
2891
-
2892
- // protected
2893
- this.element = element;
2894
- this.config = this._getConfig(config);
2895
- this.tip = null;
2896
-
2897
- this._setListeners();
2898
- }
2899
-
2900
- /**
2901
- * ------------------------------------------------------------------------
2902
- * jQuery
2903
- * ------------------------------------------------------------------------
2904
- */
2905
-
2906
- // getters
2907
-
2908
- _createClass(Tooltip, [{
2909
- key: 'enable',
2910
-
2911
- // public
2912
-
2913
- value: function enable() {
2914
- this._isEnabled = true;
2915
- }
2916
- }, {
2917
- key: 'disable',
2918
- value: function disable() {
2919
- this._isEnabled = false;
2920
- }
2921
- }, {
2922
- key: 'toggleEnabled',
2923
- value: function toggleEnabled() {
2924
- this._isEnabled = !this._isEnabled;
2925
- }
2926
- }, {
2927
- key: 'toggle',
2928
- value: function toggle(event) {
2929
- if (event) {
2930
- var dataKey = this.constructor.DATA_KEY;
2931
- var context = $(event.currentTarget).data(dataKey);
2932
-
2933
- if (!context) {
2934
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
2935
- $(event.currentTarget).data(dataKey, context);
2936
- }
2937
-
2938
- context._activeTrigger.click = !context._activeTrigger.click;
2939
-
2940
- if (context._isWithActiveTrigger()) {
2941
- context._enter(null, context);
2942
- } else {
2943
- context._leave(null, context);
2944
- }
2945
- } else {
2946
-
2947
- if ($(this.getTipElement()).hasClass(ClassName.IN)) {
2948
- this._leave(null, this);
2949
- return;
2950
- }
2951
-
2952
- this._enter(null, this);
2953
- }
2954
- }
2955
- }, {
2956
- key: 'dispose',
2957
- value: function dispose() {
2958
- clearTimeout(this._timeout);
2959
-
2960
- this.cleanupTether();
2961
-
2962
- $.removeData(this.element, this.constructor.DATA_KEY);
2963
-
2964
- $(this.element).off(this.constructor.EVENT_KEY);
2965
-
2966
- if (this.tip) {
2967
- $(this.tip).remove();
2968
- }
2969
-
2970
- this._isEnabled = null;
2971
- this._timeout = null;
2972
- this._hoverState = null;
2973
- this._activeTrigger = null;
2974
- this._tether = null;
2975
-
2976
- this.element = null;
2977
- this.config = null;
2978
- this.tip = null;
2979
- }
2980
- }, {
2981
- key: 'show',
2982
- value: function show() {
2983
- var _this16 = this;
2984
-
2985
- var showEvent = $.Event(this.constructor.Event.SHOW);
2986
-
2987
- if (this.isWithContent() && this._isEnabled) {
2988
- $(this.element).trigger(showEvent);
2989
-
2990
- var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);
2991
-
2992
- if (showEvent.isDefaultPrevented() || !isInTheDom) {
2993
- return;
2994
- }
2995
-
2996
- var tip = this.getTipElement();
2997
- var tipId = Util.getUID(this.constructor.NAME);
2998
-
2999
- tip.setAttribute('id', tipId);
3000
- this.element.setAttribute('aria-describedby', tipId);
3001
-
3002
- this.setContent();
3003
-
3004
- if (this.config.animation) {
3005
- $(tip).addClass(ClassName.FADE);
3006
- }
3007
-
3008
- var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
3009
-
3010
- var attachment = this._getAttachment(placement);
3011
-
3012
- $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body);
3013
-
3014
- $(this.element).trigger(this.constructor.Event.INSERTED);
3015
-
3016
- this._tether = new Tether({
3017
- attachment: attachment,
3018
- element: tip,
3019
- target: this.element,
3020
- classes: TetherClass,
3021
- classPrefix: CLASS_PREFIX,
3022
- offset: this.config.offset,
3023
- constraints: this.config.constraints,
3024
- addTargetClasses: false
3025
- });
3026
-
3027
- Util.reflow(tip);
3028
- this._tether.position();
3029
-
3030
- $(tip).addClass(ClassName.IN);
3031
-
3032
- var complete = function complete() {
3033
- var prevHoverState = _this16._hoverState;
3034
- _this16._hoverState = null;
3035
-
3036
- $(_this16.element).trigger(_this16.constructor.Event.SHOWN);
3037
-
3038
- if (prevHoverState === HoverState.OUT) {
3039
- _this16._leave(null, _this16);
3040
- }
3041
- };
3042
-
3043
- if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
3044
- $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
3045
- return;
3046
- }
3047
-
3048
- complete();
3049
- }
3050
- }
3051
- }, {
3052
- key: 'hide',
3053
- value: function hide(callback) {
3054
- var _this17 = this;
3055
-
3056
- var tip = this.getTipElement();
3057
- var hideEvent = $.Event(this.constructor.Event.HIDE);
3058
- var complete = function complete() {
3059
- if (_this17._hoverState !== HoverState.IN && tip.parentNode) {
3060
- tip.parentNode.removeChild(tip);
3061
- }
3062
-
3063
- _this17.element.removeAttribute('aria-describedby');
3064
- $(_this17.element).trigger(_this17.constructor.Event.HIDDEN);
3065
- _this17.cleanupTether();
3066
-
3067
- if (callback) {
3068
- callback();
3069
- }
3070
- };
3071
-
3072
- $(this.element).trigger(hideEvent);
3073
-
3074
- if (hideEvent.isDefaultPrevented()) {
3075
- return;
3076
- }
3077
-
3078
- $(tip).removeClass(ClassName.IN);
3079
-
3080
- if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
3081
-
3082
- $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
3083
- } else {
3084
- complete();
3085
- }
3086
-
3087
- this._hoverState = '';
3088
- }
3089
-
3090
- // protected
3091
-
3092
- }, {
3093
- key: 'isWithContent',
3094
- value: function isWithContent() {
3095
- return Boolean(this.getTitle());
3096
- }
3097
- }, {
3098
- key: 'getTipElement',
3099
- value: function getTipElement() {
3100
- return this.tip = this.tip || $(this.config.template)[0];
3101
- }
3102
- }, {
3103
- key: 'setContent',
3104
- value: function setContent() {
3105
- var $tip = $(this.getTipElement());
3106
-
3107
- this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());
3108
-
3109
- $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
3110
-
3111
- this.cleanupTether();
3112
- }
3113
- }, {
3114
- key: 'setElementContent',
3115
- value: function setElementContent($element, content) {
3116
- var html = this.config.html;
3117
- if (typeof content === 'object' && (content.nodeType || content.jquery)) {
3118
- // content is a DOM node or a jQuery
3119
- if (html) {
3120
- if (!$(content).parent().is($element)) {
3121
- $element.empty().append(content);
3122
- }
3123
- } else {
3124
- $element.text($(content).text());
3125
- }
3126
- } else {
3127
- $element[html ? 'html' : 'text'](content);
3128
- }
3129
- }
3130
- }, {
3131
- key: 'getTitle',
3132
- value: function getTitle() {
3133
- var title = this.element.getAttribute('data-original-title');
3134
-
3135
- if (!title) {
3136
- title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
3137
- }
3138
-
3139
- return title;
3140
- }
3141
- }, {
3142
- key: 'cleanupTether',
3143
- value: function cleanupTether() {
3144
- if (this._tether) {
3145
- this._tether.destroy();
3146
- }
3147
- }
3148
-
3149
- // private
3150
-
3151
- }, {
3152
- key: '_getAttachment',
3153
- value: function _getAttachment(placement) {
3154
- return AttachmentMap[placement.toUpperCase()];
3155
- }
3156
- }, {
3157
- key: '_setListeners',
3158
- value: function _setListeners() {
3159
- var _this18 = this;
3160
-
3161
- var triggers = this.config.trigger.split(' ');
3162
-
3163
- triggers.forEach(function (trigger) {
3164
- if (trigger === 'click') {
3165
- $(_this18.element).on(_this18.constructor.Event.CLICK, _this18.config.selector, $.proxy(_this18.toggle, _this18));
3166
- } else if (trigger !== Trigger.MANUAL) {
3167
- var eventIn = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN;
3168
- var eventOut = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT;
3169
-
3170
- $(_this18.element).on(eventIn, _this18.config.selector, $.proxy(_this18._enter, _this18)).on(eventOut, _this18.config.selector, $.proxy(_this18._leave, _this18));
3171
- }
3172
- });
3173
-
3174
- if (this.config.selector) {
3175
- this.config = $.extend({}, this.config, {
3176
- trigger: 'manual',
3177
- selector: ''
3178
- });
3179
- } else {
3180
- this._fixTitle();
3181
- }
3182
- }
3183
- }, {
3184
- key: '_fixTitle',
3185
- value: function _fixTitle() {
3186
- var titleType = typeof this.element.getAttribute('data-original-title');
3187
- if (this.element.getAttribute('title') || titleType !== 'string') {
3188
- this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
3189
- this.element.setAttribute('title', '');
3190
- }
3191
- }
3192
- }, {
3193
- key: '_enter',
3194
- value: function _enter(event, context) {
3195
- var dataKey = this.constructor.DATA_KEY;
3196
-
3197
- context = context || $(event.currentTarget).data(dataKey);
3198
-
3199
- if (!context) {
3200
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
3201
- $(event.currentTarget).data(dataKey, context);
3202
- }
3203
-
3204
- if (event) {
3205
- context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
3206
- }
3207
-
3208
- if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) {
3209
- context._hoverState = HoverState.IN;
3210
- return;
3211
- }
3212
-
3213
- clearTimeout(context._timeout);
3214
-
3215
- context._hoverState = HoverState.IN;
3216
-
3217
- if (!context.config.delay || !context.config.delay.show) {
3218
- context.show();
3219
- return;
3220
- }
3221
-
3222
- context._timeout = setTimeout(function () {
3223
- if (context._hoverState === HoverState.IN) {
3224
- context.show();
3225
- }
3226
- }, context.config.delay.show);
3227
- }
3228
- }, {
3229
- key: '_leave',
3230
- value: function _leave(event, context) {
3231
- var dataKey = this.constructor.DATA_KEY;
3232
-
3233
- context = context || $(event.currentTarget).data(dataKey);
3234
-
3235
- if (!context) {
3236
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
3237
- $(event.currentTarget).data(dataKey, context);
3238
- }
3239
-
3240
- if (event) {
3241
- context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
3242
- }
3243
-
3244
- if (context._isWithActiveTrigger()) {
3245
- return;
3246
- }
3247
-
3248
- clearTimeout(context._timeout);
3249
-
3250
- context._hoverState = HoverState.OUT;
3251
-
3252
- if (!context.config.delay || !context.config.delay.hide) {
3253
- context.hide();
3254
- return;
3255
- }
3256
-
3257
- context._timeout = setTimeout(function () {
3258
- if (context._hoverState === HoverState.OUT) {
3259
- context.hide();
3260
- }
3261
- }, context.config.delay.hide);
3262
- }
3263
- }, {
3264
- key: '_isWithActiveTrigger',
3265
- value: function _isWithActiveTrigger() {
3266
- for (var trigger in this._activeTrigger) {
3267
- if (this._activeTrigger[trigger]) {
3268
- return true;
3269
- }
3270
- }
3271
-
3272
- return false;
3273
- }
3274
- }, {
3275
- key: '_getConfig',
3276
- value: function _getConfig(config) {
3277
- config = $.extend({}, this.constructor.Default, $(this.element).data(), config);
3278
-
3279
- if (config.delay && typeof config.delay === 'number') {
3280
- config.delay = {
3281
- show: config.delay,
3282
- hide: config.delay
3283
- };
3284
- }
3285
-
3286
- Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
3287
-
3288
- return config;
3289
- }
3290
- }, {
3291
- key: '_getDelegateConfig',
3292
- value: function _getDelegateConfig() {
3293
- var config = {};
3294
-
3295
- if (this.config) {
3296
- for (var key in this.config) {
3297
- if (this.constructor.Default[key] !== this.config[key]) {
3298
- config[key] = this.config[key];
3299
- }
3300
- }
3301
- }
3302
-
3303
- return config;
3304
- }
3305
-
3306
- // static
3307
-
3308
- }], [{
3309
- key: '_jQueryInterface',
3310
- value: function _jQueryInterface(config) {
3311
- return this.each(function () {
3312
- var data = $(this).data(DATA_KEY);
3313
- var _config = typeof config === 'object' ? config : null;
3314
-
3315
- if (!data && /destroy|hide/.test(config)) {
3316
- return;
3317
- }
3318
-
3319
- if (!data) {
3320
- data = new Tooltip(this, _config);
3321
- $(this).data(DATA_KEY, data);
3322
- }
3323
-
3324
- if (typeof config === 'string') {
3325
- if (data[config] === undefined) {
3326
- throw new Error('No method named "' + config + '"');
3327
- }
3328
- data[config]();
3329
- }
3330
- });
3331
- }
3332
- }, {
3333
- key: 'VERSION',
3334
- get: function get() {
3335
- return VERSION;
3336
- }
3337
- }, {
3338
- key: 'Default',
3339
- get: function get() {
3340
- return Default;
3341
- }
3342
- }, {
3343
- key: 'NAME',
3344
- get: function get() {
3345
- return NAME;
3346
- }
3347
- }, {
3348
- key: 'DATA_KEY',
3349
- get: function get() {
3350
- return DATA_KEY;
3351
- }
3352
- }, {
3353
- key: 'Event',
3354
- get: function get() {
3355
- return Event;
3356
- }
3357
- }, {
3358
- key: 'EVENT_KEY',
3359
- get: function get() {
3360
- return EVENT_KEY;
3361
- }
3362
- }, {
3363
- key: 'DefaultType',
3364
- get: function get() {
3365
- return DefaultType;
3366
- }
3367
- }]);
3368
-
3369
- return Tooltip;
3370
- })();
3371
-
3372
- $.fn[NAME] = Tooltip._jQueryInterface;
3373
- $.fn[NAME].Constructor = Tooltip;
3374
- $.fn[NAME].noConflict = function () {
3375
- $.fn[NAME] = JQUERY_NO_CONFLICT;
3376
- return Tooltip._jQueryInterface;
3377
- };
3378
-
3379
- return Tooltip;
3380
- })(jQuery);
3381
-
3382
- /**
3383
- * --------------------------------------------------------------------------
3384
- * Bootstrap (v4.0.0-alpha.3): popover.js
3385
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3386
- * --------------------------------------------------------------------------
3387
- */
3388
-
3389
- var Popover = (function ($) {
3390
-
3391
- /**
3392
- * ------------------------------------------------------------------------
3393
- * Constants
3394
- * ------------------------------------------------------------------------
3395
- */
3396
-
3397
- var NAME = 'popover';
3398
- var VERSION = '4.0.0-alpha.3';
3399
- var DATA_KEY = 'bs.popover';
3400
- var EVENT_KEY = '.' + DATA_KEY;
3401
- var JQUERY_NO_CONFLICT = $.fn[NAME];
3402
-
3403
- var Default = $.extend({}, Tooltip.Default, {
3404
- placement: 'right',
3405
- trigger: 'click',
3406
- content: '',
3407
- template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>'
3408
- });
3409
-
3410
- var DefaultType = $.extend({}, Tooltip.DefaultType, {
3411
- content: '(string|element|function)'
3412
- });
3413
-
3414
- var ClassName = {
3415
- FADE: 'fade',
3416
- IN: 'in'
3417
- };
3418
-
3419
- var Selector = {
3420
- TITLE: '.popover-title',
3421
- CONTENT: '.popover-content',
3422
- ARROW: '.popover-arrow'
3423
- };
3424
-
3425
- var Event = {
3426
- HIDE: 'hide' + EVENT_KEY,
3427
- HIDDEN: 'hidden' + EVENT_KEY,
3428
- SHOW: 'show' + EVENT_KEY,
3429
- SHOWN: 'shown' + EVENT_KEY,
3430
- INSERTED: 'inserted' + EVENT_KEY,
3431
- CLICK: 'click' + EVENT_KEY,
3432
- FOCUSIN: 'focusin' + EVENT_KEY,
3433
- FOCUSOUT: 'focusout' + EVENT_KEY,
3434
- MOUSEENTER: 'mouseenter' + EVENT_KEY,
3435
- MOUSELEAVE: 'mouseleave' + EVENT_KEY
3436
- };
3437
-
3438
- /**
3439
- * ------------------------------------------------------------------------
3440
- * Class Definition
3441
- * ------------------------------------------------------------------------
3442
- */
3443
-
3444
- var Popover = (function (_Tooltip) {
3445
- _inherits(Popover, _Tooltip);
3446
-
3447
- function Popover() {
3448
- _classCallCheck(this, Popover);
3449
-
3450
- _get(Object.getPrototypeOf(Popover.prototype), 'constructor', this).apply(this, arguments);
3451
- }
3452
-
3453
- /**
3454
- * ------------------------------------------------------------------------
3455
- * jQuery
3456
- * ------------------------------------------------------------------------
3457
- */
3458
-
3459
- _createClass(Popover, [{
3460
- key: 'isWithContent',
3461
-
3462
- // overrides
3463
-
3464
- value: function isWithContent() {
3465
- return this.getTitle() || this._getContent();
3466
- }
3467
- }, {
3468
- key: 'getTipElement',
3469
- value: function getTipElement() {
3470
- return this.tip = this.tip || $(this.config.template)[0];
3471
- }
3472
- }, {
3473
- key: 'setContent',
3474
- value: function setContent() {
3475
- var $tip = $(this.getTipElement());
3476
-
3477
- // we use append for html objects to maintain js events
3478
- this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
3479
- this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
3480
-
3481
- $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
3482
-
3483
- this.cleanupTether();
3484
- }
3485
-
3486
- // private
3487
-
3488
- }, {
3489
- key: '_getContent',
3490
- value: function _getContent() {
3491
- return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content);
3492
- }
3493
-
3494
- // static
3495
-
3496
- }], [{
3497
- key: '_jQueryInterface',
3498
- value: function _jQueryInterface(config) {
3499
- return this.each(function () {
3500
- var data = $(this).data(DATA_KEY);
3501
- var _config = typeof config === 'object' ? config : null;
3502
-
3503
- if (!data && /destroy|hide/.test(config)) {
3504
- return;
3505
- }
3506
-
3507
- if (!data) {
3508
- data = new Popover(this, _config);
3509
- $(this).data(DATA_KEY, data);
3510
- }
3511
-
3512
- if (typeof config === 'string') {
3513
- if (data[config] === undefined) {
3514
- throw new Error('No method named "' + config + '"');
3515
- }
3516
- data[config]();
3517
- }
3518
- });
3519
- }
3520
- }, {
3521
- key: 'VERSION',
3522
-
3523
- // getters
3524
-
3525
- get: function get() {
3526
- return VERSION;
3527
- }
3528
- }, {
3529
- key: 'Default',
3530
- get: function get() {
3531
- return Default;
3532
- }
3533
- }, {
3534
- key: 'NAME',
3535
- get: function get() {
3536
- return NAME;
3537
- }
3538
- }, {
3539
- key: 'DATA_KEY',
3540
- get: function get() {
3541
- return DATA_KEY;
3542
- }
3543
- }, {
3544
- key: 'Event',
3545
- get: function get() {
3546
- return Event;
3547
- }
3548
- }, {
3549
- key: 'EVENT_KEY',
3550
- get: function get() {
3551
- return EVENT_KEY;
3552
- }
3553
- }, {
3554
- key: 'DefaultType',
3555
- get: function get() {
3556
- return DefaultType;
3557
- }
3558
- }]);
3559
-
3560
- return Popover;
3561
- })(Tooltip);
3562
-
3563
- $.fn[NAME] = Popover._jQueryInterface;
3564
- $.fn[NAME].Constructor = Popover;
3565
- $.fn[NAME].noConflict = function () {
3566
- $.fn[NAME] = JQUERY_NO_CONFLICT;
3567
- return Popover._jQueryInterface;
3568
- };
3569
-
3570
- return Popover;
3571
- })(jQuery);
3572
-
3573
- }(jQuery);
6
+ if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(jQuery),+function(a){"use strict";function b(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d=function(a,b,c){for(var d=!0;d;){var e=a,f=b,g=c;d=!1,null===e&&(e=Function.prototype);var h=Object.getOwnPropertyDescriptor(e,f);if(void 0!==h){if("value"in h)return h.value;var i=h.get;if(void 0===i)return;return i.call(g)}var j=Object.getPrototypeOf(e);if(null===j)return;a=j,b=f,c=g,d=!0,h=j=void 0}},e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function(a){function b(a){return{}.toString.call(a).match(/\s([a-zA-Z]+)/)[1].toLowerCase()}function c(a){return(a[0]||a).nodeType}function d(){return{bindType:h.end,delegateType:h.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}}}function e(){if(window.QUnit)return!1;var a=document.createElement("bootstrap");for(var b in j)if(void 0!==a.style[b])return{end:j[b]};return!1}function f(b){var c=this,d=!1;return a(this).one(k.TRANSITION_END,function(){d=!0}),setTimeout(function(){d||k.triggerTransitionEnd(c)},b),this}function g(){h=e(),a.fn.emulateTransitionEnd=f,k.supportsTransitionEnd()&&(a.event.special[k.TRANSITION_END]=d())}var h=!1,i=1e6,j={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},k={TRANSITION_END:"bsTransitionEnd",getUID:function(a){do a+=~~(Math.random()*i);while(document.getElementById(a));return a},getSelectorFromElement:function(a){var b=a.getAttribute("data-target");return b||(b=a.getAttribute("href")||"",b=/^#[a-z]/i.test(b)?b:null),b},reflow:function(a){new Function("bs","return bs")(a.offsetHeight)},triggerTransitionEnd:function(b){a(b).trigger(h.end)},supportsTransitionEnd:function(){return Boolean(h)},typeCheckConfig:function(a,d,e){for(var f in e)if(e.hasOwnProperty(f)){var g=e[f],h=d[f],i=void 0;if(i=h&&c(h)?"element":b(h),!new RegExp(g).test(i))throw new Error(a.toUpperCase()+": "+('Option "'+f+'" provided type "'+i+'" ')+('but expected type "'+g+'".'))}}};return g(),k}(jQuery),g=(function(a){var b="alert",d="4.0.0-alpha.4",g="bs.alert",h="."+g,i=".data-api",j=a.fn[b],k=150,l={DISMISS:'[data-dismiss="alert"]'},m={CLOSE:"close"+h,CLOSED:"closed"+h,CLICK_DATA_API:"click"+h+i},n={ALERT:"alert",FADE:"fade",IN:"in"},o=function(){function b(a){c(this,b),this._element=a}return e(b,[{key:"close",value:function(a){a=a||this._element;var b=this._getRootElement(a),c=this._triggerCloseEvent(b);c.isDefaultPrevented()||this._removeElement(b)}},{key:"dispose",value:function(){a.removeData(this._element,g),this._element=null}},{key:"_getRootElement",value:function(b){var c=f.getSelectorFromElement(b),d=!1;return c&&(d=a(c)[0]),d||(d=a(b).closest("."+n.ALERT)[0]),d}},{key:"_triggerCloseEvent",value:function(b){var c=a.Event(m.CLOSE);return a(b).trigger(c),c}},{key:"_removeElement",value:function(b){return a(b).removeClass(n.IN),f.supportsTransitionEnd()&&a(b).hasClass(n.FADE)?void a(b).one(f.TRANSITION_END,a.proxy(this._destroyElement,this,b)).emulateTransitionEnd(k):void this._destroyElement(b)}},{key:"_destroyElement",value:function(b){a(b).detach().trigger(m.CLOSED).remove()}}],[{key:"_jQueryInterface",value:function(c){return this.each(function(){var d=a(this),e=d.data(g);e||(e=new b(this),d.data(g,e)),"close"===c&&e[c](this)})}},{key:"_handleDismiss",value:function(a){return function(b){b&&b.preventDefault(),a.close(this)}}},{key:"VERSION",get:function(){return d}}]),b}();return a(document).on(m.CLICK_DATA_API,l.DISMISS,o._handleDismiss(new o)),a.fn[b]=o._jQueryInterface,a.fn[b].Constructor=o,a.fn[b].noConflict=function(){return a.fn[b]=j,o._jQueryInterface},o}(jQuery),function(a){var b="button",d="4.0.0-alpha.4",f="bs.button",g="."+f,h=".data-api",i=a.fn[b],j={ACTIVE:"active",BUTTON:"btn",FOCUS:"focus"},k={DATA_TOGGLE_CARROT:'[data-toggle^="button"]',DATA_TOGGLE:'[data-toggle="buttons"]',INPUT:"input",ACTIVE:".active",BUTTON:".btn"},l={CLICK_DATA_API:"click"+g+h,FOCUS_BLUR_DATA_API:"focus"+g+h+" "+("blur"+g+h)},m=function(){function b(a){c(this,b),this._element=a}return e(b,[{key:"toggle",value:function(){var b=!0,c=a(this._element).closest(k.DATA_TOGGLE)[0];if(c){var d=a(this._element).find(k.INPUT)[0];if(d){if("radio"===d.type)if(d.checked&&a(this._element).hasClass(j.ACTIVE))b=!1;else{var e=a(c).find(k.ACTIVE)[0];e&&a(e).removeClass(j.ACTIVE)}b&&(d.checked=!a(this._element).hasClass(j.ACTIVE),a(this._element).trigger("change")),d.focus()}}else this._element.setAttribute("aria-pressed",!a(this._element).hasClass(j.ACTIVE));b&&a(this._element).toggleClass(j.ACTIVE)}},{key:"dispose",value:function(){a.removeData(this._element,f),this._element=null}}],[{key:"_jQueryInterface",value:function(c){return this.each(function(){var d=a(this).data(f);d||(d=new b(this),a(this).data(f,d)),"toggle"===c&&d[c]()})}},{key:"VERSION",get:function(){return d}}]),b}();return a(document).on(l.CLICK_DATA_API,k.DATA_TOGGLE_CARROT,function(b){b.preventDefault();var c=b.target;a(c).hasClass(j.BUTTON)||(c=a(c).closest(k.BUTTON)),m._jQueryInterface.call(a(c),"toggle")}).on(l.FOCUS_BLUR_DATA_API,k.DATA_TOGGLE_CARROT,function(b){var c=a(b.target).closest(k.BUTTON)[0];a(c).toggleClass(j.FOCUS,/^focus(in)?$/.test(b.type))}),a.fn[b]=m._jQueryInterface,a.fn[b].Constructor=m,a.fn[b].noConflict=function(){return a.fn[b]=i,m._jQueryInterface},m}(jQuery),function(a){var b="carousel",d="4.0.0-alpha.4",g="bs.carousel",h="."+g,i=".data-api",j=a.fn[b],k=600,l=37,m=39,n={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0},o={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean"},p={NEXT:"next",PREVIOUS:"prev"},q={SLIDE:"slide"+h,SLID:"slid"+h,KEYDOWN:"keydown"+h,MOUSEENTER:"mouseenter"+h,MOUSELEAVE:"mouseleave"+h,LOAD_DATA_API:"load"+h+i,CLICK_DATA_API:"click"+h+i},r={CAROUSEL:"carousel",ACTIVE:"active",SLIDE:"slide",RIGHT:"right",LEFT:"left",ITEM:"carousel-item"},s={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"]'},t=function(){function i(b,d){c(this,i),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this._config=this._getConfig(d),this._element=a(b)[0],this._indicatorsElement=a(this._element).find(s.INDICATORS)[0],this._addEventListeners()}return e(i,[{key:"next",value:function(){this._isSliding||this._slide(p.NEXT)}},{key:"nextWhenVisible",value:function(){document.hidden||this.next()}},{key:"prev",value:function(){this._isSliding||this._slide(p.PREVIOUS)}},{key:"pause",value:function(b){b||(this._isPaused=!0),a(this._element).find(s.NEXT_PREV)[0]&&f.supportsTransitionEnd()&&(f.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}},{key:"cycle",value:function(b){b||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval(a.proxy(document.visibilityState?this.nextWhenVisible:this.next,this),this._config.interval))}},{key:"to",value:function(b){var c=this;this._activeElement=a(this._element).find(s.ACTIVE_ITEM)[0];var d=this._getItemIndex(this._activeElement);if(!(b>this._items.length-1||b<0)){if(this._isSliding)return void a(this._element).one(q.SLID,function(){return c.to(b)});if(d===b)return this.pause(),void this.cycle();var e=b>d?p.NEXT:p.PREVIOUS;this._slide(e,this._items[b])}}},{key:"dispose",value:function(){a(this._element).off(h),a.removeData(this._element,g),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",value:function(c){return c=a.extend({},n,c),f.typeCheckConfig(b,c,o),c}},{key:"_addEventListeners",value:function(){this._config.keyboard&&a(this._element).on(q.KEYDOWN,a.proxy(this._keydown,this)),"hover"!==this._config.pause||"ontouchstart"in document.documentElement||a(this._element).on(q.MOUSEENTER,a.proxy(this.pause,this)).on(q.MOUSELEAVE,a.proxy(this.cycle,this))}},{key:"_keydown",value:function(a){if(a.preventDefault(),!/input|textarea/i.test(a.target.tagName))switch(a.which){case l:this.prev();break;case m:this.next();break;default:return}}},{key:"_getItemIndex",value:function(b){return this._items=a.makeArray(a(b).parent().find(s.ITEM)),this._items.indexOf(b)}},{key:"_getItemByDirection",value:function(a,b){var c=a===p.NEXT,d=a===p.PREVIOUS,e=this._getItemIndex(b),f=this._items.length-1,g=d&&0===e||c&&e===f;if(g&&!this._config.wrap)return b;var h=a===p.PREVIOUS?-1:1,i=(e+h)%this._items.length;return i===-1?this._items[this._items.length-1]:this._items[i]}},{key:"_triggerSlideEvent",value:function(b,c){var d=a.Event(q.SLIDE,{relatedTarget:b,direction:c});return a(this._element).trigger(d),d}},{key:"_setActiveIndicatorElement",value:function(b){if(this._indicatorsElement){a(this._indicatorsElement).find(s.ACTIVE).removeClass(r.ACTIVE);var c=this._indicatorsElement.children[this._getItemIndex(b)];c&&a(c).addClass(r.ACTIVE)}}},{key:"_slide",value:function(b,c){var d=this,e=a(this._element).find(s.ACTIVE_ITEM)[0],g=c||e&&this._getItemByDirection(b,e),h=Boolean(this._interval),i=b===p.NEXT?r.LEFT:r.RIGHT;if(g&&a(g).hasClass(r.ACTIVE))return void(this._isSliding=!1);var j=this._triggerSlideEvent(g,i);if(!j.isDefaultPrevented()&&e&&g){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(g);var l=a.Event(q.SLID,{relatedTarget:g,direction:i});f.supportsTransitionEnd()&&a(this._element).hasClass(r.SLIDE)?(a(g).addClass(b),f.reflow(g),a(e).addClass(i),a(g).addClass(i),a(e).one(f.TRANSITION_END,function(){a(g).removeClass(i).removeClass(b),a(g).addClass(r.ACTIVE),a(e).removeClass(r.ACTIVE).removeClass(b).removeClass(i),d._isSliding=!1,setTimeout(function(){return a(d._element).trigger(l)},0)}).emulateTransitionEnd(k)):(a(e).removeClass(r.ACTIVE),a(g).addClass(r.ACTIVE),this._isSliding=!1,a(this._element).trigger(l)),h&&this.cycle()}}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d=a.extend({},n,a(this).data());"object"==typeof b&&a.extend(d,b);var e="string"==typeof b?b:d.slide;if(c||(c=new i(this,d),a(this).data(g,c)),"number"==typeof b)c.to(b);else if("string"==typeof e){if(void 0===c[e])throw new Error('No method named "'+e+'"');c[e]()}else d.interval&&(c.pause(),c.cycle())})}},{key:"_dataApiClickHandler",value:function(b){var c=f.getSelectorFromElement(this);if(c){var d=a(c)[0];if(d&&a(d).hasClass(r.CAROUSEL)){var e=a.extend({},a(d).data(),a(this).data()),h=this.getAttribute("data-slide-to");h&&(e.interval=!1),i._jQueryInterface.call(a(d),e),h&&a(d).data(g).to(h),b.preventDefault()}}}},{key:"VERSION",get:function(){return d}},{key:"Default",get:function(){return n}}]),i}();return a(document).on(q.CLICK_DATA_API,s.DATA_SLIDE,t._dataApiClickHandler),a(window).on(q.LOAD_DATA_API,function(){a(s.DATA_RIDE).each(function(){var b=a(this);t._jQueryInterface.call(b,b.data())})}),a.fn[b]=t._jQueryInterface,a.fn[b].Constructor=t,a.fn[b].noConflict=function(){return a.fn[b]=j,t._jQueryInterface},t}(jQuery),function(a){var b="collapse",d="4.0.0-alpha.4",g="bs.collapse",h="."+g,i=".data-api",j=a.fn[b],k=600,l={toggle:!0,parent:""},m={toggle:"boolean",parent:"string"},n={SHOW:"show"+h,SHOWN:"shown"+h,HIDE:"hide"+h,HIDDEN:"hidden"+h,CLICK_DATA_API:"click"+h+i},o={IN:"in",COLLAPSE:"collapse",COLLAPSING:"collapsing",COLLAPSED:"collapsed"},p={WIDTH:"width",HEIGHT:"height"},q={ACTIVES:".panel > .in, .panel > .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},r=function(){function h(b,d){c(this,h),this._isTransitioning=!1,this._element=b,this._config=this._getConfig(d),this._triggerArray=a.makeArray(a('[data-toggle="collapse"][href="#'+b.id+'"],'+('[data-toggle="collapse"][data-target="#'+b.id+'"]'))),this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}return e(h,[{key:"toggle",value:function(){a(this._element).hasClass(o.IN)?this.hide():this.show()}},{key:"show",value:function(){var b=this;if(!this._isTransitioning&&!a(this._element).hasClass(o.IN)){var c=void 0,d=void 0;if(this._parent&&(c=a.makeArray(a(q.ACTIVES)),c.length||(c=null)),!(c&&(d=a(c).data(g),d&&d._isTransitioning))){var e=a.Event(n.SHOW);if(a(this._element).trigger(e),!e.isDefaultPrevented()){c&&(h._jQueryInterface.call(a(c),"hide"),d||a(c).data(g,null));var i=this._getDimension();a(this._element).removeClass(o.COLLAPSE).addClass(o.COLLAPSING),this._element.style[i]=0,this._element.setAttribute("aria-expanded",!0),this._triggerArray.length&&a(this._triggerArray).removeClass(o.COLLAPSED).attr("aria-expanded",!0),this.setTransitioning(!0);var j=function(){a(b._element).removeClass(o.COLLAPSING).addClass(o.COLLAPSE).addClass(o.IN),b._element.style[i]="",b.setTransitioning(!1),a(b._element).trigger(n.SHOWN)};if(!f.supportsTransitionEnd())return void j();var l=i[0].toUpperCase()+i.slice(1),m="scroll"+l;a(this._element).one(f.TRANSITION_END,j).emulateTransitionEnd(k),this._element.style[i]=this._element[m]+"px"}}}}},{key:"hide",value:function(){var b=this;if(!this._isTransitioning&&a(this._element).hasClass(o.IN)){var c=a.Event(n.HIDE);if(a(this._element).trigger(c),!c.isDefaultPrevented()){var d=this._getDimension(),e=d===p.WIDTH?"offsetWidth":"offsetHeight";this._element.style[d]=this._element[e]+"px",f.reflow(this._element),a(this._element).addClass(o.COLLAPSING).removeClass(o.COLLAPSE).removeClass(o.IN),this._element.setAttribute("aria-expanded",!1),this._triggerArray.length&&a(this._triggerArray).addClass(o.COLLAPSED).attr("aria-expanded",!1),this.setTransitioning(!0);var g=function(){b.setTransitioning(!1),a(b._element).removeClass(o.COLLAPSING).addClass(o.COLLAPSE).trigger(n.HIDDEN)};return this._element.style[d]=0,f.supportsTransitionEnd()?void a(this._element).one(f.TRANSITION_END,g).emulateTransitionEnd(k):void g()}}}},{key:"setTransitioning",value:function(a){this._isTransitioning=a}},{key:"dispose",value:function(){a.removeData(this._element,g),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null}},{key:"_getConfig",value:function(c){return c=a.extend({},l,c),c.toggle=Boolean(c.toggle),f.typeCheckConfig(b,c,m),c}},{key:"_getDimension",value:function(){var b=a(this._element).hasClass(p.WIDTH);return b?p.WIDTH:p.HEIGHT}},{key:"_getParent",value:function(){var b=this,c=a(this._config.parent)[0],d='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]';return a(c).find(d).each(function(a,c){b._addAriaAndCollapsedClass(h._getTargetFromElement(c),[c])}),c}},{key:"_addAriaAndCollapsedClass",value:function(b,c){if(b){var d=a(b).hasClass(o.IN);b.setAttribute("aria-expanded",d),c.length&&a(c).toggleClass(o.COLLAPSED,!d).attr("aria-expanded",d)}}}],[{key:"_getTargetFromElement",value:function(b){var c=f.getSelectorFromElement(b);return c?a(c)[0]:null}},{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this),d=c.data(g),e=a.extend({},l,c.data(),"object"==typeof b&&b);if(!d&&e.toggle&&/show|hide/.test(b)&&(e.toggle=!1),d||(d=new h(this,e),c.data(g,d)),"string"==typeof b){if(void 0===d[b])throw new Error('No method named "'+b+'"');d[b]()}})}},{key:"VERSION",get:function(){return d}},{key:"Default",get:function(){return l}}]),h}();return a(document).on(n.CLICK_DATA_API,q.DATA_TOGGLE,function(b){b.preventDefault();var c=r._getTargetFromElement(this),d=a(c).data(g),e=d?"toggle":a(this).data();r._jQueryInterface.call(a(c),e)}),a.fn[b]=r._jQueryInterface,a.fn[b].Constructor=r,a.fn[b].noConflict=function(){return a.fn[b]=j,r._jQueryInterface},r}(jQuery),function(a){var b="dropdown",d="4.0.0-alpha.4",g="bs.dropdown",h="."+g,i=".data-api",j=a.fn[b],k=27,l=38,m=40,n=3,o={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,CLICK:"click"+h,CLICK_DATA_API:"click"+h+i,KEYDOWN_DATA_API:"keydown"+h+i},p={BACKDROP:"dropdown-backdrop",DISABLED:"disabled",OPEN:"open"},q={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'},r=function(){function b(a){c(this,b),this._element=a,this._addEventListeners()}return e(b,[{key:"toggle",value:function(){if(this.disabled||a(this).hasClass(p.DISABLED))return!1;var c=b._getParentFromElement(this),d=a(c).hasClass(p.OPEN);if(b._clearMenus(),d)return!1;if("ontouchstart"in document.documentElement&&!a(c).closest(q.NAVBAR_NAV).length){var e=document.createElement("div");e.className=p.BACKDROP,a(e).insertBefore(this),a(e).on("click",b._clearMenus)}var f={relatedTarget:this},g=a.Event(o.SHOW,f);return a(c).trigger(g),!g.isDefaultPrevented()&&(this.focus(),this.setAttribute("aria-expanded","true"),a(c).toggleClass(p.OPEN),a(c).trigger(a.Event(o.SHOWN,f)),!1)}},{key:"dispose",value:function(){a.removeData(this._element,g),a(this._element).off(h),this._element=null}},{key:"_addEventListeners",value:function(){a(this._element).on(o.CLICK,this.toggle)}}],[{key:"_jQueryInterface",value:function(c){return this.each(function(){var d=a(this).data(g);if(d||a(this).data(g,d=new b(this)),"string"==typeof c){if(void 0===d[c])throw new Error('No method named "'+c+'"');d[c].call(this)}})}},{key:"_clearMenus",value:function(c){if(!c||c.which!==n){var d=a(q.BACKDROP)[0];d&&d.parentNode.removeChild(d);for(var e=a.makeArray(a(q.DATA_TOGGLE)),f=0;f<e.length;f++){var g=b._getParentFromElement(e[f]),h={relatedTarget:e[f]};if(a(g).hasClass(p.OPEN)&&!(c&&"click"===c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(g,c.target))){var i=a.Event(o.HIDE,h);a(g).trigger(i),i.isDefaultPrevented()||(e[f].setAttribute("aria-expanded","false"),a(g).removeClass(p.OPEN).trigger(a.Event(o.HIDDEN,h)))}}}}},{key:"_getParentFromElement",value:function(b){var c=void 0,d=f.getSelectorFromElement(b);return d&&(c=a(d)[0]),c||b.parentNode}},{key:"_dataApiKeydownHandler",value:function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)&&(c.preventDefault(),c.stopPropagation(),!this.disabled&&!a(this).hasClass(p.DISABLED))){var d=b._getParentFromElement(this),e=a(d).hasClass(p.OPEN);if(!e&&c.which!==k||e&&c.which===k){if(c.which===k){var f=a(d).find(q.DATA_TOGGLE)[0];a(f).trigger("focus")}return void a(this).trigger("click")}var g=a.makeArray(a(q.VISIBLE_ITEMS));if(g=g.filter(function(a){return a.offsetWidth||a.offsetHeight}),g.length){var h=g.indexOf(c.target);c.which===l&&h>0&&h--,c.which===m&&h<g.length-1&&h++,h<0&&(h=0),g[h].focus()}}}},{key:"VERSION",get:function(){return d}}]),b}();return a(document).on(o.KEYDOWN_DATA_API,q.DATA_TOGGLE,r._dataApiKeydownHandler).on(o.KEYDOWN_DATA_API,q.ROLE_MENU,r._dataApiKeydownHandler).on(o.KEYDOWN_DATA_API,q.ROLE_LISTBOX,r._dataApiKeydownHandler).on(o.CLICK_DATA_API,r._clearMenus).on(o.CLICK_DATA_API,q.DATA_TOGGLE,r.prototype.toggle).on(o.CLICK_DATA_API,q.FORM_CHILD,function(a){a.stopPropagation()}),a.fn[b]=r._jQueryInterface,a.fn[b].Constructor=r,a.fn[b].noConflict=function(){return a.fn[b]=j,r._jQueryInterface},r}(jQuery),function(a){var b="modal",d="4.0.0-alpha.4",g="bs.modal",h="."+g,i=".data-api",j=a.fn[b],k=300,l=150,m=27,n={backdrop:!0,keyboard:!0,focus:!0,show:!0},o={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},p={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,FOCUSIN:"focusin"+h,RESIZE:"resize"+h,CLICK_DISMISS:"click.dismiss"+h,KEYDOWN_DISMISS:"keydown.dismiss"+h,MOUSEUP_DISMISS:"mouseup.dismiss"+h,MOUSEDOWN_DISMISS:"mousedown.dismiss"+h,CLICK_DATA_API:"click"+h+i},q={SCROLLBAR_MEASURER:"modal-scrollbar-measure",BACKDROP:"modal-backdrop",OPEN:"modal-open",FADE:"fade",IN:"in"},r={DIALOG:".modal-dialog",DATA_TOGGLE:'[data-toggle="modal"]',DATA_DISMISS:'[data-dismiss="modal"]',FIXED_CONTENT:".navbar-fixed-top, .navbar-fixed-bottom, .is-fixed"},s=function(){function i(b,d){c(this,i),this._config=this._getConfig(d),this._element=b,this._dialog=a(b).find(r.DIALOG)[0],this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._originalBodyPadding=0,this._scrollbarWidth=0}return e(i,[{key:"toggle",value:function(a){return this._isShown?this.hide():this.show(a)}},{key:"show",value:function(b){var c=this,d=a.Event(p.SHOW,{relatedTarget:b});a(this._element).trigger(d),this._isShown||d.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),a(document.body).addClass(q.OPEN),this._setEscapeEvent(),this._setResizeEvent(),a(this._element).on(p.CLICK_DISMISS,r.DATA_DISMISS,a.proxy(this.hide,this)),a(this._dialog).on(p.MOUSEDOWN_DISMISS,function(){a(c._element).one(p.MOUSEUP_DISMISS,function(b){a(b.target).is(c._element)&&(c._ignoreBackdropClick=!0)})}),this._showBackdrop(a.proxy(this._showElement,this,b)))}},{key:"hide",value:function(b){b&&b.preventDefault();var c=a.Event(p.HIDE);a(this._element).trigger(c),this._isShown&&!c.isDefaultPrevented()&&(this._isShown=!1,this._setEscapeEvent(),this._setResizeEvent(),a(document).off(p.FOCUSIN),a(this._element).removeClass(q.IN),a(this._element).off(p.CLICK_DISMISS),a(this._dialog).off(p.MOUSEDOWN_DISMISS),f.supportsTransitionEnd()&&a(this._element).hasClass(q.FADE)?a(this._element).one(f.TRANSITION_END,a.proxy(this._hideModal,this)).emulateTransitionEnd(k):this._hideModal())}},{key:"dispose",value:function(){a.removeData(this._element,g),a(window).off(h),a(document).off(h),a(this._element).off(h),a(this._backdrop).off(h),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",value:function(c){return c=a.extend({},n,c),f.typeCheckConfig(b,c,o),c}},{key:"_showElement",value:function(b){var c=this,d=f.supportsTransitionEnd()&&a(this._element).hasClass(q.FADE);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.scrollTop=0,d&&f.reflow(this._element),a(this._element).addClass(q.IN),this._config.focus&&this._enforceFocus();var e=a.Event(p.SHOWN,{relatedTarget:b}),g=function(){c._config.focus&&c._element.focus(),a(c._element).trigger(e)};d?a(this._dialog).one(f.TRANSITION_END,g).emulateTransitionEnd(k):g()}},{key:"_enforceFocus",value:function(){var b=this;a(document).off(p.FOCUSIN).on(p.FOCUSIN,function(c){document===c.target||b._element===c.target||a(b._element).has(c.target).length||b._element.focus()})}},{key:"_setEscapeEvent",value:function(){var b=this;this._isShown&&this._config.keyboard?a(this._element).on(p.KEYDOWN_DISMISS,function(a){a.which===m&&b.hide()}):this._isShown||a(this._element).off(p.KEYDOWN_DISMISS)}},{key:"_setResizeEvent",value:function(){this._isShown?a(window).on(p.RESIZE,a.proxy(this._handleUpdate,this)):a(window).off(p.RESIZE)}},{key:"_hideModal",value:function(){var b=this;this._element.style.display="none",this._element.setAttribute("aria-hidden","true"),this._showBackdrop(function(){a(document.body).removeClass(q.OPEN),b._resetAdjustments(),b._resetScrollbar(),a(b._element).trigger(p.HIDDEN)})}},{key:"_removeBackdrop",value:function(){this._backdrop&&(a(this._backdrop).remove(),this._backdrop=null)}},{key:"_showBackdrop",value:function(b){var c=this,d=a(this._element).hasClass(q.FADE)?q.FADE:"";if(this._isShown&&this._config.backdrop){var e=f.supportsTransitionEnd()&&d;if(this._backdrop=document.createElement("div"),this._backdrop.className=q.BACKDROP,d&&a(this._backdrop).addClass(d),a(this._backdrop).appendTo(document.body),a(this._element).on(p.CLICK_DISMISS,function(a){return c._ignoreBackdropClick?void(c._ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"===c._config.backdrop?c._element.focus():c.hide()))}),e&&f.reflow(this._backdrop),a(this._backdrop).addClass(q.IN),!b)return;if(!e)return void b();a(this._backdrop).one(f.TRANSITION_END,b).emulateTransitionEnd(l)}else if(!this._isShown&&this._backdrop){a(this._backdrop).removeClass(q.IN);var g=function(){c._removeBackdrop(),b&&b()};f.supportsTransitionEnd()&&a(this._element).hasClass(q.FADE)?a(this._backdrop).one(f.TRANSITION_END,g).emulateTransitionEnd(l):g()}else b&&b()}},{key:"_handleUpdate",value:function(){this._adjustDialog()}},{key:"_adjustDialog",value:function(){var a=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&a&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!a&&(this._element.style.paddingRight=this._scrollbarWidth+"px")}},{key:"_resetAdjustments",value:function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}},{key:"_checkScrollbar",value:function(){this._isBodyOverflowing=document.body.clientWidth<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()}},{key:"_setScrollbar",value:function(){var b=parseInt(a(r.FIXED_CONTENT).css("padding-right")||0,10);this._originalBodyPadding=document.body.style.paddingRight||"",this._isBodyOverflowing&&(document.body.style.paddingRight=b+this._scrollbarWidth+"px")}},{key:"_resetScrollbar",value:function(){document.body.style.paddingRight=this._originalBodyPadding}},{key:"_getScrollbarWidth",value:function(){var a=document.createElement("div");a.className=q.SCROLLBAR_MEASURER,document.body.appendChild(a);var b=a.offsetWidth-a.clientWidth;return document.body.removeChild(a),b}}],[{key:"_jQueryInterface",value:function(b,c){return this.each(function(){var d=a(this).data(g),e=a.extend({},i.Default,a(this).data(),"object"==typeof b&&b);if(d||(d=new i(this,e),a(this).data(g,d)),"string"==typeof b){if(void 0===d[b])throw new Error('No method named "'+b+'"');d[b](c)}else e.show&&d.show(c)})}},{key:"VERSION",get:function(){return d}},{key:"Default",get:function(){return n}}]),i}();return a(document).on(p.CLICK_DATA_API,r.DATA_TOGGLE,function(b){var c=this,d=void 0,e=f.getSelectorFromElement(this);e&&(d=a(e)[0]);var h=a(d).data(g)?"toggle":a.extend({},a(d).data(),a(this).data());"A"===this.tagName&&b.preventDefault();var i=a(d).one(p.SHOW,function(b){b.isDefaultPrevented()||i.one(p.HIDDEN,function(){a(c).is(":visible")&&c.focus()})});s._jQueryInterface.call(a(d),h,this)}),a.fn[b]=s._jQueryInterface,a.fn[b].Constructor=s,a.fn[b].noConflict=function(){return a.fn[b]=j,s._jQueryInterface},s}(jQuery),function(a){var b="scrollspy",d="4.0.0-alpha.4",g="bs.scrollspy",h="."+g,i=".data-api",j=a.fn[b],k={offset:10,method:"auto",target:""},l={offset:"number",method:"string",target:"(string|element)"},m={ACTIVATE:"activate"+h,SCROLL:"scroll"+h,LOAD_DATA_API:"load"+h+i},n={DROPDOWN_ITEM:"dropdown-item",DROPDOWN_MENU:"dropdown-menu",NAV_LINK:"nav-link",NAV:"nav",ACTIVE:"active"},o={DATA_SPY:'[data-spy="scroll"]',ACTIVE:".active",LIST_ITEM:".list-item",LI:"li",LI_DROPDOWN:"li.dropdown",NAV_LINKS:".nav-link",DROPDOWN:".dropdown",DROPDOWN_ITEMS:".dropdown-item",DROPDOWN_TOGGLE:".dropdown-toggle"},p={OFFSET:"offset",POSITION:"position"},q=function(){function i(b,d){c(this,i),this._element=b,this._scrollElement="BODY"===b.tagName?window:b,this._config=this._getConfig(d),this._selector=this._config.target+" "+o.NAV_LINKS+","+(this._config.target+" "+o.DROPDOWN_ITEMS),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,a(this._scrollElement).on(m.SCROLL,a.proxy(this._process,this)),this.refresh(),this._process()}return e(i,[{key:"refresh",value:function(){var b=this,c=this._scrollElement!==this._scrollElement.window?p.POSITION:p.OFFSET,d="auto"===this._config.method?c:this._config.method,e=d===p.POSITION?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight();var g=a.makeArray(a(this._selector));g.map(function(b){var c=void 0,g=f.getSelectorFromElement(b);return g&&(c=a(g)[0]),c&&(c.offsetWidth||c.offsetHeight)?[a(c)[d]().top+e,g]:null}).filter(function(a){return a}).sort(function(a,b){return a[0]-b[0]}).forEach(function(a){b._offsets.push(a[0]),b._targets.push(a[1])})}},{key:"dispose",value:function(){a.removeData(this._element,g),a(this._scrollElement).off(h),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",value:function(c){if(c=a.extend({},k,c),"string"!=typeof c.target){var d=a(c.target).attr("id");d||(d=f.getUID(b),a(c.target).attr("id",d)),c.target="#"+d}return f.typeCheckConfig(b,c,l),c}},{key:"_getScrollTop",value:function(){return this._scrollElement===window?this._scrollElement.scrollY:this._scrollElement.scrollTop}},{key:"_getScrollHeight",value:function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}},{key:"_process",value:function(){var a=this._getScrollTop()+this._config.offset,b=this._getScrollHeight(),c=this._config.offset+b-this._scrollElement.offsetHeight;if(this._scrollHeight!==b&&this.refresh(),a>=c){var d=this._targets[this._targets.length-1];this._activeTarget!==d&&this._activate(d)}if(this._activeTarget&&a<this._offsets[0])return this._activeTarget=null,void this._clear();for(var e=this._offsets.length;e--;){var f=this._activeTarget!==this._targets[e]&&a>=this._offsets[e]&&(void 0===this._offsets[e+1]||a<this._offsets[e+1]);f&&this._activate(this._targets[e])}}},{key:"_activate",value:function(b){this._activeTarget=b,this._clear();var c=this._selector.split(",");c=c.map(function(a){return a+'[data-target="'+b+'"],'+(a+'[href="'+b+'"]')});var d=a(c.join(","));d.hasClass(n.DROPDOWN_ITEM)?(d.closest(o.DROPDOWN).find(o.DROPDOWN_TOGGLE).addClass(n.ACTIVE),d.addClass(n.ACTIVE)):d.parents(o.LI).find(o.NAV_LINKS).addClass(n.ACTIVE),a(this._scrollElement).trigger(m.ACTIVATE,{relatedTarget:b})}},{key:"_clear",value:function(){a(this._selector).filter(o.ACTIVE).removeClass(n.ACTIVE)}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d="object"==typeof b&&b||null;if(c||(c=new i(this,d),a(this).data(g,c)),"string"==typeof b){if(void 0===c[b])throw new Error('No method named "'+b+'"');c[b]()}})}},{key:"VERSION",get:function(){return d}},{key:"Default",get:function(){return k}}]),i}();return a(window).on(m.LOAD_DATA_API,function(){for(var b=a.makeArray(a(o.DATA_SPY)),c=b.length;c--;){var d=a(b[c]);q._jQueryInterface.call(d,d.data())}}),a.fn[b]=q._jQueryInterface,a.fn[b].Constructor=q,a.fn[b].noConflict=function(){return a.fn[b]=j,q._jQueryInterface},q}(jQuery),function(a){var b="tab",d="4.0.0-alpha.4",g="bs.tab",h="."+g,i=".data-api",j=a.fn[b],k=150,l={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,CLICK_DATA_API:"click"+h+i},m={DROPDOWN_MENU:"dropdown-menu",ACTIVE:"active",FADE:"fade",IN:"in"},n={A:"a",LI:"li",DROPDOWN:".dropdown",UL:"ul:not(.dropdown-menu)",FADE_CHILD:"> .nav-item .fade, > .fade",
7
+ ACTIVE:".active",ACTIVE_CHILD:"> .nav-item > .active, > .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"]',DROPDOWN_TOGGLE:".dropdown-toggle",DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu .active"},o=function(){function b(a){c(this,b),this._element=a}return e(b,[{key:"show",value:function(){var b=this;if(!this._element.parentNode||this._element.parentNode.nodeType!==Node.ELEMENT_NODE||!a(this._element).hasClass(m.ACTIVE)){var c=void 0,d=void 0,e=a(this._element).closest(n.UL)[0],g=f.getSelectorFromElement(this._element);e&&(d=a.makeArray(a(e).find(n.ACTIVE)),d=d[d.length-1]);var h=a.Event(l.HIDE,{relatedTarget:this._element}),i=a.Event(l.SHOW,{relatedTarget:d});if(d&&a(d).trigger(h),a(this._element).trigger(i),!i.isDefaultPrevented()&&!h.isDefaultPrevented()){g&&(c=a(g)[0]),this._activate(this._element,e);var j=function(){var c=a.Event(l.HIDDEN,{relatedTarget:b._element}),e=a.Event(l.SHOWN,{relatedTarget:d});a(d).trigger(c),a(b._element).trigger(e)};c?this._activate(c,c.parentNode,j):j()}}}},{key:"dispose",value:function(){a.removeClass(this._element,g),this._element=null}},{key:"_activate",value:function(b,c,d){var e=a(c).find(n.ACTIVE_CHILD)[0],g=d&&f.supportsTransitionEnd()&&(e&&a(e).hasClass(m.FADE)||Boolean(a(c).find(n.FADE_CHILD)[0])),h=a.proxy(this._transitionComplete,this,b,e,g,d);e&&g?a(e).one(f.TRANSITION_END,h).emulateTransitionEnd(k):h(),e&&a(e).removeClass(m.IN)}},{key:"_transitionComplete",value:function(b,c,d,e){if(c){a(c).removeClass(m.ACTIVE);var g=a(c).find(n.DROPDOWN_ACTIVE_CHILD)[0];g&&a(g).removeClass(m.ACTIVE),c.setAttribute("aria-expanded",!1)}if(a(b).addClass(m.ACTIVE),b.setAttribute("aria-expanded",!0),d?(f.reflow(b),a(b).addClass(m.IN)):a(b).removeClass(m.FADE),b.parentNode&&a(b.parentNode).hasClass(m.DROPDOWN_MENU)){var h=a(b).closest(n.DROPDOWN)[0];h&&a(h).find(n.DROPDOWN_TOGGLE).addClass(m.ACTIVE),b.setAttribute("aria-expanded",!0)}e&&e()}}],[{key:"_jQueryInterface",value:function(c){return this.each(function(){var d=a(this),e=d.data(g);if(e||(e=e=new b(this),d.data(g,e)),"string"==typeof c){if(void 0===e[c])throw new Error('No method named "'+c+'"');e[c]()}})}},{key:"VERSION",get:function(){return d}}]),b}();return a(document).on(l.CLICK_DATA_API,n.DATA_TOGGLE,function(b){b.preventDefault(),o._jQueryInterface.call(a(this),"show")}),a.fn[b]=o._jQueryInterface,a.fn[b].Constructor=o,a.fn[b].noConflict=function(){return a.fn[b]=j,o._jQueryInterface},o}(jQuery),function(a){if(void 0===window.Tether)throw new Error("Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)");var b="tooltip",d="4.0.0-alpha.4",g="bs.tooltip",h="."+g,i=a.fn[b],j=150,k="bs-tether",l={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:"0 0",constraints:[]},m={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"string",constraints:"array"},n={TOP:"bottom center",RIGHT:"middle left",BOTTOM:"top center",LEFT:"middle right"},o={IN:"in",OUT:"out"},p={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,INSERTED:"inserted"+h,CLICK:"click"+h,FOCUSIN:"focusin"+h,FOCUSOUT:"focusout"+h,MOUSEENTER:"mouseenter"+h,MOUSELEAVE:"mouseleave"+h},q={FADE:"fade",IN:"in"},r={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner"},s={element:!1,enabled:!1},t={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},u=function(){function i(a,b){c(this,i),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._tether=null,this.element=a,this.config=this._getConfig(b),this.tip=null,this._setListeners()}return e(i,[{key:"enable",value:function(){this._isEnabled=!0}},{key:"disable",value:function(){this._isEnabled=!1}},{key:"toggleEnabled",value:function(){this._isEnabled=!this._isEnabled}},{key:"toggle",value:function(b){if(b){var c=this.constructor.DATA_KEY,d=a(b.currentTarget).data(c);d||(d=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(c,d)),d._activeTrigger.click=!d._activeTrigger.click,d._isWithActiveTrigger()?d._enter(null,d):d._leave(null,d)}else{if(a(this.getTipElement()).hasClass(q.IN))return void this._leave(null,this);this._enter(null,this)}}},{key:"dispose",value:function(){clearTimeout(this._timeout),this.cleanupTether(),a.removeData(this.element,this.constructor.DATA_KEY),a(this.element).off(this.constructor.EVENT_KEY),this.tip&&a(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._tether=null,this.element=null,this.config=null,this.tip=null}},{key:"show",value:function(){var b=this,c=a.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){a(this.element).trigger(c);var d=a.contains(this.element.ownerDocument.documentElement,this.element);if(c.isDefaultPrevented()||!d)return;var e=this.getTipElement(),g=f.getUID(this.constructor.NAME);e.setAttribute("id",g),this.element.setAttribute("aria-describedby",g),this.setContent(),this.config.animation&&a(e).addClass(q.FADE);var h="function"==typeof this.config.placement?this.config.placement.call(this,e,this.element):this.config.placement,j=this._getAttachment(h);a(e).data(this.constructor.DATA_KEY,this).appendTo(document.body),a(this.element).trigger(this.constructor.Event.INSERTED),this._tether=new Tether({attachment:j,element:e,target:this.element,classes:s,classPrefix:k,offset:this.config.offset,constraints:this.config.constraints,addTargetClasses:!1}),f.reflow(e),this._tether.position(),a(e).addClass(q.IN);var l=function(){var c=b._hoverState;b._hoverState=null,a(b.element).trigger(b.constructor.Event.SHOWN),c===o.OUT&&b._leave(null,b)};if(f.supportsTransitionEnd()&&a(this.tip).hasClass(q.FADE))return void a(this.tip).one(f.TRANSITION_END,l).emulateTransitionEnd(i._TRANSITION_DURATION);l()}}},{key:"hide",value:function(b){var c=this,d=this.getTipElement(),e=a.Event(this.constructor.Event.HIDE),g=function(){c._hoverState!==o.IN&&d.parentNode&&d.parentNode.removeChild(d),c.element.removeAttribute("aria-describedby"),a(c.element).trigger(c.constructor.Event.HIDDEN),c.cleanupTether(),b&&b()};a(this.element).trigger(e),e.isDefaultPrevented()||(a(d).removeClass(q.IN),f.supportsTransitionEnd()&&a(this.tip).hasClass(q.FADE)?a(d).one(f.TRANSITION_END,g).emulateTransitionEnd(j):g(),this._hoverState="")}},{key:"isWithContent",value:function(){return Boolean(this.getTitle())}},{key:"getTipElement",value:function(){return this.tip=this.tip||a(this.config.template)[0]}},{key:"setContent",value:function(){var b=a(this.getTipElement());this.setElementContent(b.find(r.TOOLTIP_INNER),this.getTitle()),b.removeClass(q.FADE).removeClass(q.IN),this.cleanupTether()}},{key:"setElementContent",value:function(b,c){var d=this.config.html;"object"==typeof c&&(c.nodeType||c.jquery)?d?a(c).parent().is(b)||b.empty().append(c):b.text(a(c).text()):b[d?"html":"text"](c)}},{key:"getTitle",value:function(){var a=this.element.getAttribute("data-original-title");return a||(a="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),a}},{key:"cleanupTether",value:function(){this._tether&&this._tether.destroy()}},{key:"_getAttachment",value:function(a){return n[a.toUpperCase()]}},{key:"_setListeners",value:function(){var b=this,c=this.config.trigger.split(" ");c.forEach(function(c){if("click"===c)a(b.element).on(b.constructor.Event.CLICK,b.config.selector,a.proxy(b.toggle,b));else if(c!==t.MANUAL){var d=c===t.HOVER?b.constructor.Event.MOUSEENTER:b.constructor.Event.FOCUSIN,e=c===t.HOVER?b.constructor.Event.MOUSELEAVE:b.constructor.Event.FOCUSOUT;a(b.element).on(d,b.config.selector,a.proxy(b._enter,b)).on(e,b.config.selector,a.proxy(b._leave,b))}}),this.config.selector?this.config=a.extend({},this.config,{trigger:"manual",selector:""}):this._fixTitle()}},{key:"_fixTitle",value:function(){var a=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==a)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))}},{key:"_enter",value:function(b,c){var d=this.constructor.DATA_KEY;return c=c||a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),b&&(c._activeTrigger["focusin"===b.type?t.FOCUS:t.HOVER]=!0),a(c.getTipElement()).hasClass(q.IN)||c._hoverState===o.IN?void(c._hoverState=o.IN):(clearTimeout(c._timeout),c._hoverState=o.IN,c.config.delay&&c.config.delay.show?void(c._timeout=setTimeout(function(){c._hoverState===o.IN&&c.show()},c.config.delay.show)):void c.show())}},{key:"_leave",value:function(b,c){var d=this.constructor.DATA_KEY;if(c=c||a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),b&&(c._activeTrigger["focusout"===b.type?t.FOCUS:t.HOVER]=!1),!c._isWithActiveTrigger())return clearTimeout(c._timeout),c._hoverState=o.OUT,c.config.delay&&c.config.delay.hide?void(c._timeout=setTimeout(function(){c._hoverState===o.OUT&&c.hide()},c.config.delay.hide)):void c.hide()}},{key:"_isWithActiveTrigger",value:function(){for(var a in this._activeTrigger)if(this._activeTrigger[a])return!0;return!1}},{key:"_getConfig",value:function(c){return c=a.extend({},this.constructor.Default,a(this.element).data(),c),c.delay&&"number"==typeof c.delay&&(c.delay={show:c.delay,hide:c.delay}),f.typeCheckConfig(b,c,this.constructor.DefaultType),c}},{key:"_getDelegateConfig",value:function(){var a={};if(this.config)for(var b in this.config)this.constructor.Default[b]!==this.config[b]&&(a[b]=this.config[b]);return a}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d="object"==typeof b?b:null;if((c||!/destroy|hide/.test(b))&&(c||(c=new i(this,d),a(this).data(g,c)),"string"==typeof b)){if(void 0===c[b])throw new Error('No method named "'+b+'"');c[b]()}})}},{key:"VERSION",get:function(){return d}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return b}},{key:"DATA_KEY",get:function(){return g}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return h}},{key:"DefaultType",get:function(){return m}}]),i}();return a.fn[b]=u._jQueryInterface,a.fn[b].Constructor=u,a.fn[b].noConflict=function(){return a.fn[b]=i,u._jQueryInterface},u}(jQuery));(function(a){var f="popover",h="4.0.0-alpha.4",i="bs.popover",j="."+i,k=a.fn[f],l=a.extend({},g.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>'}),m=a.extend({},g.DefaultType,{content:"(string|element|function)"}),n={FADE:"fade",IN:"in"},o={TITLE:".popover-title",CONTENT:".popover-content",ARROW:".popover-arrow"},p={HIDE:"hide"+j,HIDDEN:"hidden"+j,SHOW:"show"+j,SHOWN:"shown"+j,INSERTED:"inserted"+j,CLICK:"click"+j,FOCUSIN:"focusin"+j,FOCUSOUT:"focusout"+j,MOUSEENTER:"mouseenter"+j,MOUSELEAVE:"mouseleave"+j},q=function(g){function k(){c(this,k),d(Object.getPrototypeOf(k.prototype),"constructor",this).apply(this,arguments)}return b(k,g),e(k,[{key:"isWithContent",value:function(){return this.getTitle()||this._getContent()}},{key:"getTipElement",value:function(){return this.tip=this.tip||a(this.config.template)[0]}},{key:"setContent",value:function(){var b=a(this.getTipElement());this.setElementContent(b.find(o.TITLE),this.getTitle()),this.setElementContent(b.find(o.CONTENT),this._getContent()),b.removeClass(n.FADE).removeClass(n.IN),this.cleanupTether()}},{key:"_getContent",value:function(){return this.element.getAttribute("data-content")||("function"==typeof this.config.content?this.config.content.call(this.element):this.config.content)}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(i),d="object"==typeof b?b:null;if((c||!/destroy|hide/.test(b))&&(c||(c=new k(this,d),a(this).data(i,c)),"string"==typeof b)){if(void 0===c[b])throw new Error('No method named "'+b+'"');c[b]()}})}},{key:"VERSION",get:function(){return h}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return f}},{key:"DATA_KEY",get:function(){return i}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return j}},{key:"DefaultType",get:function(){return m}}]),k}(g);return a.fn[f]=q._jQueryInterface,a.fn[f].Constructor=q,a.fn[f].noConflict=function(){return a.fn[f]=k,q._jQueryInterface},q})(jQuery)}(jQuery);