udongo 2.0.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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);