vertx-howtos-jekyll-theme 0.1.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 (164) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +52 -0
  4. data/_layouts/page.html +61 -0
  5. data/_sass/bootstrap/js/dist/alert.js +199 -0
  6. data/_sass/bootstrap/js/dist/alert.js.map +1 -0
  7. data/_sass/bootstrap/js/dist/button.js +187 -0
  8. data/_sass/bootstrap/js/dist/button.js.map +1 -0
  9. data/_sass/bootstrap/js/dist/carousel.js +666 -0
  10. data/_sass/bootstrap/js/dist/carousel.js.map +1 -0
  11. data/_sass/bootstrap/js/dist/collapse.js +428 -0
  12. data/_sass/bootstrap/js/dist/collapse.js.map +1 -0
  13. data/_sass/bootstrap/js/dist/dropdown.js +591 -0
  14. data/_sass/bootstrap/js/dist/dropdown.js.map +1 -0
  15. data/_sass/bootstrap/js/dist/index.js +23 -0
  16. data/_sass/bootstrap/js/dist/index.js.map +1 -0
  17. data/_sass/bootstrap/js/dist/modal.js +644 -0
  18. data/_sass/bootstrap/js/dist/modal.js.map +1 -0
  19. data/_sass/bootstrap/js/dist/popover.js +261 -0
  20. data/_sass/bootstrap/js/dist/popover.js.map +1 -0
  21. data/_sass/bootstrap/js/dist/scrollspy.js +375 -0
  22. data/_sass/bootstrap/js/dist/scrollspy.js.map +1 -0
  23. data/_sass/bootstrap/js/dist/tab.js +266 -0
  24. data/_sass/bootstrap/js/dist/tab.js.map +1 -0
  25. data/_sass/bootstrap/js/dist/toast.js +278 -0
  26. data/_sass/bootstrap/js/dist/toast.js.map +1 -0
  27. data/_sass/bootstrap/js/dist/tooltip.js +745 -0
  28. data/_sass/bootstrap/js/dist/tooltip.js.map +1 -0
  29. data/_sass/bootstrap/js/dist/util.js +168 -0
  30. data/_sass/bootstrap/js/dist/util.js.map +1 -0
  31. data/_sass/bootstrap/js/src/alert.js +179 -0
  32. data/_sass/bootstrap/js/src/button.js +171 -0
  33. data/_sass/bootstrap/js/src/carousel.js +604 -0
  34. data/_sass/bootstrap/js/src/collapse.js +402 -0
  35. data/_sass/bootstrap/js/src/dropdown.js +538 -0
  36. data/_sass/bootstrap/js/src/index.js +52 -0
  37. data/_sass/bootstrap/js/src/modal.js +587 -0
  38. data/_sass/bootstrap/js/src/popover.js +184 -0
  39. data/_sass/bootstrap/js/src/scrollspy.js +326 -0
  40. data/_sass/bootstrap/js/src/tab.js +257 -0
  41. data/_sass/bootstrap/js/src/toast.js +223 -0
  42. data/_sass/bootstrap/js/src/tooltip.js +735 -0
  43. data/_sass/bootstrap/js/src/util.js +173 -0
  44. data/_sass/bootstrap/js/tests/README.md +69 -0
  45. data/_sass/bootstrap/js/tests/browsers.js +82 -0
  46. data/_sass/bootstrap/js/tests/index.html +145 -0
  47. data/_sass/bootstrap/js/tests/integration/bundle.js +8 -0
  48. data/_sass/bootstrap/js/tests/integration/index.html +66 -0
  49. data/_sass/bootstrap/js/tests/integration/rollup.bundle.js +20 -0
  50. data/_sass/bootstrap/js/tests/karma.conf.js +145 -0
  51. data/_sass/bootstrap/js/tests/unit/.eslintrc.json +40 -0
  52. data/_sass/bootstrap/js/tests/unit/alert.js +123 -0
  53. data/_sass/bootstrap/js/tests/unit/button.js +222 -0
  54. data/_sass/bootstrap/js/tests/unit/carousel.js +1273 -0
  55. data/_sass/bootstrap/js/tests/unit/collapse.js +892 -0
  56. data/_sass/bootstrap/js/tests/unit/dropdown.js +1364 -0
  57. data/_sass/bootstrap/js/tests/unit/modal.js +796 -0
  58. data/_sass/bootstrap/js/tests/unit/popover.js +471 -0
  59. data/_sass/bootstrap/js/tests/unit/scrollspy.js +728 -0
  60. data/_sass/bootstrap/js/tests/unit/tab.js +462 -0
  61. data/_sass/bootstrap/js/tests/unit/toast.js +239 -0
  62. data/_sass/bootstrap/js/tests/unit/tooltip.js +1072 -0
  63. data/_sass/bootstrap/js/tests/unit/util.js +164 -0
  64. data/_sass/bootstrap/js/tests/visual/alert.html +58 -0
  65. data/_sass/bootstrap/js/tests/visual/button.html +51 -0
  66. data/_sass/bootstrap/js/tests/visual/carousel.html +66 -0
  67. data/_sass/bootstrap/js/tests/visual/collapse.html +78 -0
  68. data/_sass/bootstrap/js/tests/visual/dropdown.html +212 -0
  69. data/_sass/bootstrap/js/tests/visual/modal.html +268 -0
  70. data/_sass/bootstrap/js/tests/visual/popover.html +46 -0
  71. data/_sass/bootstrap/js/tests/visual/scrollspy.html +95 -0
  72. data/_sass/bootstrap/js/tests/visual/tab.html +234 -0
  73. data/_sass/bootstrap/js/tests/visual/toast.html +72 -0
  74. data/_sass/bootstrap/js/tests/visual/tooltip.html +106 -0
  75. data/_sass/bootstrap/scss/_alert.scss +51 -0
  76. data/_sass/bootstrap/scss/_badge.scss +53 -0
  77. data/_sass/bootstrap/scss/_breadcrumb.scss +41 -0
  78. data/_sass/bootstrap/scss/_button-group.scss +163 -0
  79. data/_sass/bootstrap/scss/_buttons.scss +140 -0
  80. data/_sass/bootstrap/scss/_card.scss +310 -0
  81. data/_sass/bootstrap/scss/_carousel.scss +198 -0
  82. data/_sass/bootstrap/scss/_close.scss +44 -0
  83. data/_sass/bootstrap/scss/_code.scss +48 -0
  84. data/_sass/bootstrap/scss/_custom-forms.scss +507 -0
  85. data/_sass/bootstrap/scss/_dropdown.scss +191 -0
  86. data/_sass/bootstrap/scss/_forms.scss +334 -0
  87. data/_sass/bootstrap/scss/_functions.scss +86 -0
  88. data/_sass/bootstrap/scss/_grid.scss +52 -0
  89. data/_sass/bootstrap/scss/_images.scss +42 -0
  90. data/_sass/bootstrap/scss/_input-group.scss +193 -0
  91. data/_sass/bootstrap/scss/_jumbotron.scss +16 -0
  92. data/_sass/bootstrap/scss/_list-group.scss +121 -0
  93. data/_sass/bootstrap/scss/_media.scss +8 -0
  94. data/_sass/bootstrap/scss/_mixins.scss +41 -0
  95. data/_sass/bootstrap/scss/_modal.scss +186 -0
  96. data/_sass/bootstrap/scss/_nav.scss +120 -0
  97. data/_sass/bootstrap/scss/_navbar.scss +299 -0
  98. data/_sass/bootstrap/scss/_pagination.scss +78 -0
  99. data/_sass/bootstrap/scss/_popover.scss +183 -0
  100. data/_sass/bootstrap/scss/_print.scss +141 -0
  101. data/_sass/bootstrap/scss/_progress.scss +34 -0
  102. data/_sass/bootstrap/scss/_reboot.scss +462 -0
  103. data/_sass/bootstrap/scss/_root.scss +19 -0
  104. data/_sass/bootstrap/scss/_spinners.scss +53 -0
  105. data/_sass/bootstrap/scss/_tables.scss +187 -0
  106. data/_sass/bootstrap/scss/_toasts.scss +43 -0
  107. data/_sass/bootstrap/scss/_tooltip.scss +115 -0
  108. data/_sass/bootstrap/scss/_transitions.scss +22 -0
  109. data/_sass/bootstrap/scss/_type.scss +125 -0
  110. data/_sass/bootstrap/scss/_utilities.scss +16 -0
  111. data/_sass/bootstrap/scss/_variables.scss +1091 -0
  112. data/_sass/bootstrap/scss/bootstrap-grid.scss +29 -0
  113. data/_sass/bootstrap/scss/bootstrap-reboot.scss +12 -0
  114. data/_sass/bootstrap/scss/bootstrap.scss +44 -0
  115. data/_sass/bootstrap/scss/mixins/_alert.scss +13 -0
  116. data/_sass/bootstrap/scss/mixins/_background-variant.scss +21 -0
  117. data/_sass/bootstrap/scss/mixins/_badge.scss +11 -0
  118. data/_sass/bootstrap/scss/mixins/_border-radius.scss +35 -0
  119. data/_sass/bootstrap/scss/mixins/_box-shadow.scss +5 -0
  120. data/_sass/bootstrap/scss/mixins/_breakpoints.scss +123 -0
  121. data/_sass/bootstrap/scss/mixins/_buttons.scss +111 -0
  122. data/_sass/bootstrap/scss/mixins/_caret.scss +62 -0
  123. data/_sass/bootstrap/scss/mixins/_clearfix.scss +7 -0
  124. data/_sass/bootstrap/scss/mixins/_float.scss +11 -0
  125. data/_sass/bootstrap/scss/mixins/_forms.scss +198 -0
  126. data/_sass/bootstrap/scss/mixins/_gradients.scss +45 -0
  127. data/_sass/bootstrap/scss/mixins/_grid-framework.scss +66 -0
  128. data/_sass/bootstrap/scss/mixins/_grid.scss +51 -0
  129. data/_sass/bootstrap/scss/mixins/_hover.scss +37 -0
  130. data/_sass/bootstrap/scss/mixins/_image.scss +36 -0
  131. data/_sass/bootstrap/scss/mixins/_list-group.scss +21 -0
  132. data/_sass/bootstrap/scss/mixins/_lists.scss +7 -0
  133. data/_sass/bootstrap/scss/mixins/_nav-divider.scss +10 -0
  134. data/_sass/bootstrap/scss/mixins/_pagination.scss +22 -0
  135. data/_sass/bootstrap/scss/mixins/_reset-text.scss +17 -0
  136. data/_sass/bootstrap/scss/mixins/_resize.scss +6 -0
  137. data/_sass/bootstrap/scss/mixins/_screen-reader.scss +33 -0
  138. data/_sass/bootstrap/scss/mixins/_size.scss +6 -0
  139. data/_sass/bootstrap/scss/mixins/_table-row.scss +39 -0
  140. data/_sass/bootstrap/scss/mixins/_text-emphasis.scss +14 -0
  141. data/_sass/bootstrap/scss/mixins/_text-hide.scss +13 -0
  142. data/_sass/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  143. data/_sass/bootstrap/scss/mixins/_transition.scss +16 -0
  144. data/_sass/bootstrap/scss/mixins/_visibility.scss +7 -0
  145. data/_sass/bootstrap/scss/utilities/_align.scss +8 -0
  146. data/_sass/bootstrap/scss/utilities/_background.scss +19 -0
  147. data/_sass/bootstrap/scss/utilities/_borders.scss +63 -0
  148. data/_sass/bootstrap/scss/utilities/_clearfix.scss +3 -0
  149. data/_sass/bootstrap/scss/utilities/_display.scss +38 -0
  150. data/_sass/bootstrap/scss/utilities/_embed.scss +39 -0
  151. data/_sass/bootstrap/scss/utilities/_flex.scss +51 -0
  152. data/_sass/bootstrap/scss/utilities/_float.scss +9 -0
  153. data/_sass/bootstrap/scss/utilities/_overflow.scss +5 -0
  154. data/_sass/bootstrap/scss/utilities/_position.scss +32 -0
  155. data/_sass/bootstrap/scss/utilities/_screenreaders.scss +11 -0
  156. data/_sass/bootstrap/scss/utilities/_shadows.scss +6 -0
  157. data/_sass/bootstrap/scss/utilities/_sizing.scss +20 -0
  158. data/_sass/bootstrap/scss/utilities/_spacing.scss +73 -0
  159. data/_sass/bootstrap/scss/utilities/_text.scss +67 -0
  160. data/_sass/bootstrap/scss/utilities/_visibility.scss +11 -0
  161. data/_sass/custom.scss +1 -0
  162. data/assets/css/style.scss +65 -0
  163. data/assets/images/vertx-square.svg +1 -0
  164. metadata +248 -0
@@ -0,0 +1,402 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v4.2.1): collapse.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import $ from 'jquery'
9
+ import Util from './util'
10
+
11
+ /**
12
+ * ------------------------------------------------------------------------
13
+ * Constants
14
+ * ------------------------------------------------------------------------
15
+ */
16
+
17
+ const NAME = 'collapse'
18
+ const VERSION = '4.2.1'
19
+ const DATA_KEY = 'bs.collapse'
20
+ const EVENT_KEY = `.${DATA_KEY}`
21
+ const DATA_API_KEY = '.data-api'
22
+ const JQUERY_NO_CONFLICT = $.fn[NAME]
23
+
24
+ const Default = {
25
+ toggle : true,
26
+ parent : ''
27
+ }
28
+
29
+ const DefaultType = {
30
+ toggle : 'boolean',
31
+ parent : '(string|element)'
32
+ }
33
+
34
+ const Event = {
35
+ SHOW : `show${EVENT_KEY}`,
36
+ SHOWN : `shown${EVENT_KEY}`,
37
+ HIDE : `hide${EVENT_KEY}`,
38
+ HIDDEN : `hidden${EVENT_KEY}`,
39
+ CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`
40
+ }
41
+
42
+ const ClassName = {
43
+ SHOW : 'show',
44
+ COLLAPSE : 'collapse',
45
+ COLLAPSING : 'collapsing',
46
+ COLLAPSED : 'collapsed'
47
+ }
48
+
49
+ const Dimension = {
50
+ WIDTH : 'width',
51
+ HEIGHT : 'height'
52
+ }
53
+
54
+ const Selector = {
55
+ ACTIVES : '.show, .collapsing',
56
+ DATA_TOGGLE : '[data-toggle="collapse"]'
57
+ }
58
+
59
+ /**
60
+ * ------------------------------------------------------------------------
61
+ * Class Definition
62
+ * ------------------------------------------------------------------------
63
+ */
64
+
65
+ class Collapse {
66
+ constructor(element, config) {
67
+ this._isTransitioning = false
68
+ this._element = element
69
+ this._config = this._getConfig(config)
70
+ this._triggerArray = [].slice.call(document.querySelectorAll(
71
+ `[data-toggle="collapse"][href="#${element.id}"],` +
72
+ `[data-toggle="collapse"][data-target="#${element.id}"]`
73
+ ))
74
+
75
+ const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))
76
+ for (let i = 0, len = toggleList.length; i < len; i++) {
77
+ const elem = toggleList[i]
78
+ const selector = Util.getSelectorFromElement(elem)
79
+ const filterElement = [].slice.call(document.querySelectorAll(selector))
80
+ .filter((foundElem) => foundElem === element)
81
+
82
+ if (selector !== null && filterElement.length > 0) {
83
+ this._selector = selector
84
+ this._triggerArray.push(elem)
85
+ }
86
+ }
87
+
88
+ this._parent = this._config.parent ? this._getParent() : null
89
+
90
+ if (!this._config.parent) {
91
+ this._addAriaAndCollapsedClass(this._element, this._triggerArray)
92
+ }
93
+
94
+ if (this._config.toggle) {
95
+ this.toggle()
96
+ }
97
+ }
98
+
99
+ // Getters
100
+
101
+ static get VERSION() {
102
+ return VERSION
103
+ }
104
+
105
+ static get Default() {
106
+ return Default
107
+ }
108
+
109
+ // Public
110
+
111
+ toggle() {
112
+ if ($(this._element).hasClass(ClassName.SHOW)) {
113
+ this.hide()
114
+ } else {
115
+ this.show()
116
+ }
117
+ }
118
+
119
+ show() {
120
+ if (this._isTransitioning ||
121
+ $(this._element).hasClass(ClassName.SHOW)) {
122
+ return
123
+ }
124
+
125
+ let actives
126
+ let activesData
127
+
128
+ if (this._parent) {
129
+ actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))
130
+ .filter((elem) => {
131
+ if (typeof this._config.parent === 'string') {
132
+ return elem.getAttribute('data-parent') === this._config.parent
133
+ }
134
+
135
+ return elem.classList.contains(ClassName.COLLAPSE)
136
+ })
137
+
138
+ if (actives.length === 0) {
139
+ actives = null
140
+ }
141
+ }
142
+
143
+ if (actives) {
144
+ activesData = $(actives).not(this._selector).data(DATA_KEY)
145
+ if (activesData && activesData._isTransitioning) {
146
+ return
147
+ }
148
+ }
149
+
150
+ const startEvent = $.Event(Event.SHOW)
151
+ $(this._element).trigger(startEvent)
152
+ if (startEvent.isDefaultPrevented()) {
153
+ return
154
+ }
155
+
156
+ if (actives) {
157
+ Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')
158
+ if (!activesData) {
159
+ $(actives).data(DATA_KEY, null)
160
+ }
161
+ }
162
+
163
+ const dimension = this._getDimension()
164
+
165
+ $(this._element)
166
+ .removeClass(ClassName.COLLAPSE)
167
+ .addClass(ClassName.COLLAPSING)
168
+
169
+ this._element.style[dimension] = 0
170
+
171
+ if (this._triggerArray.length) {
172
+ $(this._triggerArray)
173
+ .removeClass(ClassName.COLLAPSED)
174
+ .attr('aria-expanded', true)
175
+ }
176
+
177
+ this.setTransitioning(true)
178
+
179
+ const complete = () => {
180
+ $(this._element)
181
+ .removeClass(ClassName.COLLAPSING)
182
+ .addClass(ClassName.COLLAPSE)
183
+ .addClass(ClassName.SHOW)
184
+
185
+ this._element.style[dimension] = ''
186
+
187
+ this.setTransitioning(false)
188
+
189
+ $(this._element).trigger(Event.SHOWN)
190
+ }
191
+
192
+ const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)
193
+ const scrollSize = `scroll${capitalizedDimension}`
194
+ const transitionDuration = Util.getTransitionDurationFromElement(this._element)
195
+
196
+ $(this._element)
197
+ .one(Util.TRANSITION_END, complete)
198
+ .emulateTransitionEnd(transitionDuration)
199
+
200
+ this._element.style[dimension] = `${this._element[scrollSize]}px`
201
+ }
202
+
203
+ hide() {
204
+ if (this._isTransitioning ||
205
+ !$(this._element).hasClass(ClassName.SHOW)) {
206
+ return
207
+ }
208
+
209
+ const startEvent = $.Event(Event.HIDE)
210
+ $(this._element).trigger(startEvent)
211
+ if (startEvent.isDefaultPrevented()) {
212
+ return
213
+ }
214
+
215
+ const dimension = this._getDimension()
216
+
217
+ this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`
218
+
219
+ Util.reflow(this._element)
220
+
221
+ $(this._element)
222
+ .addClass(ClassName.COLLAPSING)
223
+ .removeClass(ClassName.COLLAPSE)
224
+ .removeClass(ClassName.SHOW)
225
+
226
+ const triggerArrayLength = this._triggerArray.length
227
+ if (triggerArrayLength > 0) {
228
+ for (let i = 0; i < triggerArrayLength; i++) {
229
+ const trigger = this._triggerArray[i]
230
+ const selector = Util.getSelectorFromElement(trigger)
231
+
232
+ if (selector !== null) {
233
+ const $elem = $([].slice.call(document.querySelectorAll(selector)))
234
+ if (!$elem.hasClass(ClassName.SHOW)) {
235
+ $(trigger).addClass(ClassName.COLLAPSED)
236
+ .attr('aria-expanded', false)
237
+ }
238
+ }
239
+ }
240
+ }
241
+
242
+ this.setTransitioning(true)
243
+
244
+ const complete = () => {
245
+ this.setTransitioning(false)
246
+ $(this._element)
247
+ .removeClass(ClassName.COLLAPSING)
248
+ .addClass(ClassName.COLLAPSE)
249
+ .trigger(Event.HIDDEN)
250
+ }
251
+
252
+ this._element.style[dimension] = ''
253
+ const transitionDuration = Util.getTransitionDurationFromElement(this._element)
254
+
255
+ $(this._element)
256
+ .one(Util.TRANSITION_END, complete)
257
+ .emulateTransitionEnd(transitionDuration)
258
+ }
259
+
260
+ setTransitioning(isTransitioning) {
261
+ this._isTransitioning = isTransitioning
262
+ }
263
+
264
+ dispose() {
265
+ $.removeData(this._element, DATA_KEY)
266
+
267
+ this._config = null
268
+ this._parent = null
269
+ this._element = null
270
+ this._triggerArray = null
271
+ this._isTransitioning = null
272
+ }
273
+
274
+ // Private
275
+
276
+ _getConfig(config) {
277
+ config = {
278
+ ...Default,
279
+ ...config
280
+ }
281
+ config.toggle = Boolean(config.toggle) // Coerce string values
282
+ Util.typeCheckConfig(NAME, config, DefaultType)
283
+ return config
284
+ }
285
+
286
+ _getDimension() {
287
+ const hasWidth = $(this._element).hasClass(Dimension.WIDTH)
288
+ return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT
289
+ }
290
+
291
+ _getParent() {
292
+ let parent
293
+
294
+ if (Util.isElement(this._config.parent)) {
295
+ parent = this._config.parent
296
+
297
+ // It's a jQuery object
298
+ if (typeof this._config.parent.jquery !== 'undefined') {
299
+ parent = this._config.parent[0]
300
+ }
301
+ } else {
302
+ parent = document.querySelector(this._config.parent)
303
+ }
304
+
305
+ const selector =
306
+ `[data-toggle="collapse"][data-parent="${this._config.parent}"]`
307
+
308
+ const children = [].slice.call(parent.querySelectorAll(selector))
309
+ $(children).each((i, element) => {
310
+ this._addAriaAndCollapsedClass(
311
+ Collapse._getTargetFromElement(element),
312
+ [element]
313
+ )
314
+ })
315
+
316
+ return parent
317
+ }
318
+
319
+ _addAriaAndCollapsedClass(element, triggerArray) {
320
+ const isOpen = $(element).hasClass(ClassName.SHOW)
321
+
322
+ if (triggerArray.length) {
323
+ $(triggerArray)
324
+ .toggleClass(ClassName.COLLAPSED, !isOpen)
325
+ .attr('aria-expanded', isOpen)
326
+ }
327
+ }
328
+
329
+ // Static
330
+
331
+ static _getTargetFromElement(element) {
332
+ const selector = Util.getSelectorFromElement(element)
333
+ return selector ? document.querySelector(selector) : null
334
+ }
335
+
336
+ static _jQueryInterface(config) {
337
+ return this.each(function () {
338
+ const $this = $(this)
339
+ let data = $this.data(DATA_KEY)
340
+ const _config = {
341
+ ...Default,
342
+ ...$this.data(),
343
+ ...typeof config === 'object' && config ? config : {}
344
+ }
345
+
346
+ if (!data && _config.toggle && /show|hide/.test(config)) {
347
+ _config.toggle = false
348
+ }
349
+
350
+ if (!data) {
351
+ data = new Collapse(this, _config)
352
+ $this.data(DATA_KEY, data)
353
+ }
354
+
355
+ if (typeof config === 'string') {
356
+ if (typeof data[config] === 'undefined') {
357
+ throw new TypeError(`No method named "${config}"`)
358
+ }
359
+ data[config]()
360
+ }
361
+ })
362
+ }
363
+ }
364
+
365
+ /**
366
+ * ------------------------------------------------------------------------
367
+ * Data Api implementation
368
+ * ------------------------------------------------------------------------
369
+ */
370
+
371
+ $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
372
+ // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
373
+ if (event.currentTarget.tagName === 'A') {
374
+ event.preventDefault()
375
+ }
376
+
377
+ const $trigger = $(this)
378
+ const selector = Util.getSelectorFromElement(this)
379
+ const selectors = [].slice.call(document.querySelectorAll(selector))
380
+
381
+ $(selectors).each(function () {
382
+ const $target = $(this)
383
+ const data = $target.data(DATA_KEY)
384
+ const config = data ? 'toggle' : $trigger.data()
385
+ Collapse._jQueryInterface.call($target, config)
386
+ })
387
+ })
388
+
389
+ /**
390
+ * ------------------------------------------------------------------------
391
+ * jQuery
392
+ * ------------------------------------------------------------------------
393
+ */
394
+
395
+ $.fn[NAME] = Collapse._jQueryInterface
396
+ $.fn[NAME].Constructor = Collapse
397
+ $.fn[NAME].noConflict = () => {
398
+ $.fn[NAME] = JQUERY_NO_CONFLICT
399
+ return Collapse._jQueryInterface
400
+ }
401
+
402
+ export default Collapse
@@ -0,0 +1,538 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v4.2.1): dropdown.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import $ from 'jquery'
9
+ import Popper from 'popper.js'
10
+ import Util from './util'
11
+
12
+ /**
13
+ * ------------------------------------------------------------------------
14
+ * Constants
15
+ * ------------------------------------------------------------------------
16
+ */
17
+
18
+ const NAME = 'dropdown'
19
+ const VERSION = '4.2.1'
20
+ const DATA_KEY = 'bs.dropdown'
21
+ const EVENT_KEY = `.${DATA_KEY}`
22
+ const DATA_API_KEY = '.data-api'
23
+ const JQUERY_NO_CONFLICT = $.fn[NAME]
24
+ const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key
25
+ const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key
26
+ const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key
27
+ const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key
28
+ const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key
29
+ const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)
30
+ const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)
31
+
32
+ const Event = {
33
+ HIDE : `hide${EVENT_KEY}`,
34
+ HIDDEN : `hidden${EVENT_KEY}`,
35
+ SHOW : `show${EVENT_KEY}`,
36
+ SHOWN : `shown${EVENT_KEY}`,
37
+ CLICK : `click${EVENT_KEY}`,
38
+ CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,
39
+ KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,
40
+ KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`
41
+ }
42
+
43
+ const ClassName = {
44
+ DISABLED : 'disabled',
45
+ SHOW : 'show',
46
+ DROPUP : 'dropup',
47
+ DROPRIGHT : 'dropright',
48
+ DROPLEFT : 'dropleft',
49
+ MENURIGHT : 'dropdown-menu-right',
50
+ MENULEFT : 'dropdown-menu-left',
51
+ POSITION_STATIC : 'position-static'
52
+ }
53
+
54
+ const Selector = {
55
+ DATA_TOGGLE : '[data-toggle="dropdown"]',
56
+ FORM_CHILD : '.dropdown form',
57
+ MENU : '.dropdown-menu',
58
+ NAVBAR_NAV : '.navbar-nav',
59
+ VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
60
+ }
61
+
62
+ const AttachmentMap = {
63
+ TOP : 'top-start',
64
+ TOPEND : 'top-end',
65
+ BOTTOM : 'bottom-start',
66
+ BOTTOMEND : 'bottom-end',
67
+ RIGHT : 'right-start',
68
+ RIGHTEND : 'right-end',
69
+ LEFT : 'left-start',
70
+ LEFTEND : 'left-end'
71
+ }
72
+
73
+ const Default = {
74
+ offset : 0,
75
+ flip : true,
76
+ boundary : 'scrollParent',
77
+ reference : 'toggle',
78
+ display : 'dynamic'
79
+ }
80
+
81
+ const DefaultType = {
82
+ offset : '(number|string|function)',
83
+ flip : 'boolean',
84
+ boundary : '(string|element)',
85
+ reference : '(string|element)',
86
+ display : 'string'
87
+ }
88
+
89
+ /**
90
+ * ------------------------------------------------------------------------
91
+ * Class Definition
92
+ * ------------------------------------------------------------------------
93
+ */
94
+
95
+ class Dropdown {
96
+ constructor(element, config) {
97
+ this._element = element
98
+ this._popper = null
99
+ this._config = this._getConfig(config)
100
+ this._menu = this._getMenuElement()
101
+ this._inNavbar = this._detectNavbar()
102
+
103
+ this._addEventListeners()
104
+ }
105
+
106
+ // Getters
107
+
108
+ static get VERSION() {
109
+ return VERSION
110
+ }
111
+
112
+ static get Default() {
113
+ return Default
114
+ }
115
+
116
+ static get DefaultType() {
117
+ return DefaultType
118
+ }
119
+
120
+ // Public
121
+
122
+ toggle() {
123
+ if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {
124
+ return
125
+ }
126
+
127
+ const parent = Dropdown._getParentFromElement(this._element)
128
+ const isActive = $(this._menu).hasClass(ClassName.SHOW)
129
+
130
+ Dropdown._clearMenus()
131
+
132
+ if (isActive) {
133
+ return
134
+ }
135
+
136
+ const relatedTarget = {
137
+ relatedTarget: this._element
138
+ }
139
+ const showEvent = $.Event(Event.SHOW, relatedTarget)
140
+
141
+ $(parent).trigger(showEvent)
142
+
143
+ if (showEvent.isDefaultPrevented()) {
144
+ return
145
+ }
146
+
147
+ // Disable totally Popper.js for Dropdown in Navbar
148
+ if (!this._inNavbar) {
149
+ /**
150
+ * Check for Popper dependency
151
+ * Popper - https://popper.js.org
152
+ */
153
+ if (typeof Popper === 'undefined') {
154
+ throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)')
155
+ }
156
+
157
+ let referenceElement = this._element
158
+
159
+ if (this._config.reference === 'parent') {
160
+ referenceElement = parent
161
+ } else if (Util.isElement(this._config.reference)) {
162
+ referenceElement = this._config.reference
163
+
164
+ // Check if it's jQuery element
165
+ if (typeof this._config.reference.jquery !== 'undefined') {
166
+ referenceElement = this._config.reference[0]
167
+ }
168
+ }
169
+
170
+ // If boundary is not `scrollParent`, then set position to `static`
171
+ // to allow the menu to "escape" the scroll parent's boundaries
172
+ // https://github.com/twbs/bootstrap/issues/24251
173
+ if (this._config.boundary !== 'scrollParent') {
174
+ $(parent).addClass(ClassName.POSITION_STATIC)
175
+ }
176
+ this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())
177
+ }
178
+
179
+ // If this is a touch-enabled device we add extra
180
+ // empty mouseover listeners to the body's immediate children;
181
+ // only needed because of broken event delegation on iOS
182
+ // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
183
+ if ('ontouchstart' in document.documentElement &&
184
+ $(parent).closest(Selector.NAVBAR_NAV).length === 0) {
185
+ $(document.body).children().on('mouseover', null, $.noop)
186
+ }
187
+
188
+ this._element.focus()
189
+ this._element.setAttribute('aria-expanded', true)
190
+
191
+ $(this._menu).toggleClass(ClassName.SHOW)
192
+ $(parent)
193
+ .toggleClass(ClassName.SHOW)
194
+ .trigger($.Event(Event.SHOWN, relatedTarget))
195
+ }
196
+
197
+ show() {
198
+ if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {
199
+ return
200
+ }
201
+
202
+ const relatedTarget = {
203
+ relatedTarget: this._element
204
+ }
205
+ const showEvent = $.Event(Event.SHOW, relatedTarget)
206
+ const parent = Dropdown._getParentFromElement(this._element)
207
+
208
+ $(parent).trigger(showEvent)
209
+
210
+ if (showEvent.isDefaultPrevented()) {
211
+ return
212
+ }
213
+
214
+ $(this._menu).toggleClass(ClassName.SHOW)
215
+ $(parent)
216
+ .toggleClass(ClassName.SHOW)
217
+ .trigger($.Event(Event.SHOWN, relatedTarget))
218
+ }
219
+
220
+ hide() {
221
+ if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {
222
+ return
223
+ }
224
+
225
+ const relatedTarget = {
226
+ relatedTarget: this._element
227
+ }
228
+ const hideEvent = $.Event(Event.HIDE, relatedTarget)
229
+ const parent = Dropdown._getParentFromElement(this._element)
230
+
231
+ $(parent).trigger(hideEvent)
232
+
233
+ if (hideEvent.isDefaultPrevented()) {
234
+ return
235
+ }
236
+
237
+ $(this._menu).toggleClass(ClassName.SHOW)
238
+ $(parent)
239
+ .toggleClass(ClassName.SHOW)
240
+ .trigger($.Event(Event.HIDDEN, relatedTarget))
241
+ }
242
+
243
+ dispose() {
244
+ $.removeData(this._element, DATA_KEY)
245
+ $(this._element).off(EVENT_KEY)
246
+ this._element = null
247
+ this._menu = null
248
+ if (this._popper !== null) {
249
+ this._popper.destroy()
250
+ this._popper = null
251
+ }
252
+ }
253
+
254
+ update() {
255
+ this._inNavbar = this._detectNavbar()
256
+ if (this._popper !== null) {
257
+ this._popper.scheduleUpdate()
258
+ }
259
+ }
260
+
261
+ // Private
262
+
263
+ _addEventListeners() {
264
+ $(this._element).on(Event.CLICK, (event) => {
265
+ event.preventDefault()
266
+ event.stopPropagation()
267
+ this.toggle()
268
+ })
269
+ }
270
+
271
+ _getConfig(config) {
272
+ config = {
273
+ ...this.constructor.Default,
274
+ ...$(this._element).data(),
275
+ ...config
276
+ }
277
+
278
+ Util.typeCheckConfig(
279
+ NAME,
280
+ config,
281
+ this.constructor.DefaultType
282
+ )
283
+
284
+ return config
285
+ }
286
+
287
+ _getMenuElement() {
288
+ if (!this._menu) {
289
+ const parent = Dropdown._getParentFromElement(this._element)
290
+
291
+ if (parent) {
292
+ this._menu = parent.querySelector(Selector.MENU)
293
+ }
294
+ }
295
+ return this._menu
296
+ }
297
+
298
+ _getPlacement() {
299
+ const $parentDropdown = $(this._element.parentNode)
300
+ let placement = AttachmentMap.BOTTOM
301
+
302
+ // Handle dropup
303
+ if ($parentDropdown.hasClass(ClassName.DROPUP)) {
304
+ placement = AttachmentMap.TOP
305
+ if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
306
+ placement = AttachmentMap.TOPEND
307
+ }
308
+ } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
309
+ placement = AttachmentMap.RIGHT
310
+ } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
311
+ placement = AttachmentMap.LEFT
312
+ } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
313
+ placement = AttachmentMap.BOTTOMEND
314
+ }
315
+ return placement
316
+ }
317
+
318
+ _detectNavbar() {
319
+ return $(this._element).closest('.navbar').length > 0
320
+ }
321
+
322
+ _getPopperConfig() {
323
+ const offsetConf = {}
324
+ if (typeof this._config.offset === 'function') {
325
+ offsetConf.fn = (data) => {
326
+ data.offsets = {
327
+ ...data.offsets,
328
+ ...this._config.offset(data.offsets) || {}
329
+ }
330
+ return data
331
+ }
332
+ } else {
333
+ offsetConf.offset = this._config.offset
334
+ }
335
+
336
+ const popperConfig = {
337
+ placement: this._getPlacement(),
338
+ modifiers: {
339
+ offset: offsetConf,
340
+ flip: {
341
+ enabled: this._config.flip
342
+ },
343
+ preventOverflow: {
344
+ boundariesElement: this._config.boundary
345
+ }
346
+ }
347
+ }
348
+
349
+ // Disable Popper.js if we have a static display
350
+ if (this._config.display === 'static') {
351
+ popperConfig.modifiers.applyStyle = {
352
+ enabled: false
353
+ }
354
+ }
355
+ return popperConfig
356
+ }
357
+
358
+ // Static
359
+
360
+ static _jQueryInterface(config) {
361
+ return this.each(function () {
362
+ let data = $(this).data(DATA_KEY)
363
+ const _config = typeof config === 'object' ? config : null
364
+
365
+ if (!data) {
366
+ data = new Dropdown(this, _config)
367
+ $(this).data(DATA_KEY, data)
368
+ }
369
+
370
+ if (typeof config === 'string') {
371
+ if (typeof data[config] === 'undefined') {
372
+ throw new TypeError(`No method named "${config}"`)
373
+ }
374
+ data[config]()
375
+ }
376
+ })
377
+ }
378
+
379
+ static _clearMenus(event) {
380
+ if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||
381
+ event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
382
+ return
383
+ }
384
+
385
+ const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))
386
+
387
+ for (let i = 0, len = toggles.length; i < len; i++) {
388
+ const parent = Dropdown._getParentFromElement(toggles[i])
389
+ const context = $(toggles[i]).data(DATA_KEY)
390
+ const relatedTarget = {
391
+ relatedTarget: toggles[i]
392
+ }
393
+
394
+ if (event && event.type === 'click') {
395
+ relatedTarget.clickEvent = event
396
+ }
397
+
398
+ if (!context) {
399
+ continue
400
+ }
401
+
402
+ const dropdownMenu = context._menu
403
+ if (!$(parent).hasClass(ClassName.SHOW)) {
404
+ continue
405
+ }
406
+
407
+ if (event && (event.type === 'click' &&
408
+ /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&
409
+ $.contains(parent, event.target)) {
410
+ continue
411
+ }
412
+
413
+ const hideEvent = $.Event(Event.HIDE, relatedTarget)
414
+ $(parent).trigger(hideEvent)
415
+ if (hideEvent.isDefaultPrevented()) {
416
+ continue
417
+ }
418
+
419
+ // If this is a touch-enabled device we remove the extra
420
+ // empty mouseover listeners we added for iOS support
421
+ if ('ontouchstart' in document.documentElement) {
422
+ $(document.body).children().off('mouseover', null, $.noop)
423
+ }
424
+
425
+ toggles[i].setAttribute('aria-expanded', 'false')
426
+
427
+ $(dropdownMenu).removeClass(ClassName.SHOW)
428
+ $(parent)
429
+ .removeClass(ClassName.SHOW)
430
+ .trigger($.Event(Event.HIDDEN, relatedTarget))
431
+ }
432
+ }
433
+
434
+ static _getParentFromElement(element) {
435
+ let parent
436
+ const selector = Util.getSelectorFromElement(element)
437
+
438
+ if (selector) {
439
+ parent = document.querySelector(selector)
440
+ }
441
+
442
+ return parent || element.parentNode
443
+ }
444
+
445
+ // eslint-disable-next-line complexity
446
+ static _dataApiKeydownHandler(event) {
447
+ // If not input/textarea:
448
+ // - And not a key in REGEXP_KEYDOWN => not a dropdown command
449
+ // If input/textarea:
450
+ // - If space key => not a dropdown command
451
+ // - If key is other than escape
452
+ // - If key is not up or down => not a dropdown command
453
+ // - If trigger inside the menu => not a dropdown command
454
+ if (/input|textarea/i.test(event.target.tagName)
455
+ ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&
456
+ (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||
457
+ $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
458
+ return
459
+ }
460
+
461
+ event.preventDefault()
462
+ event.stopPropagation()
463
+
464
+ if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
465
+ return
466
+ }
467
+
468
+ const parent = Dropdown._getParentFromElement(this)
469
+ const isActive = $(parent).hasClass(ClassName.SHOW)
470
+
471
+ if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
472
+ if (event.which === ESCAPE_KEYCODE) {
473
+ const toggle = parent.querySelector(Selector.DATA_TOGGLE)
474
+ $(toggle).trigger('focus')
475
+ }
476
+
477
+ $(this).trigger('click')
478
+ return
479
+ }
480
+
481
+ const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))
482
+
483
+ if (items.length === 0) {
484
+ return
485
+ }
486
+
487
+ let index = items.indexOf(event.target)
488
+
489
+ if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up
490
+ index--
491
+ }
492
+
493
+ if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down
494
+ index++
495
+ }
496
+
497
+ if (index < 0) {
498
+ index = 0
499
+ }
500
+
501
+ items[index].focus()
502
+ }
503
+ }
504
+
505
+ /**
506
+ * ------------------------------------------------------------------------
507
+ * Data Api implementation
508
+ * ------------------------------------------------------------------------
509
+ */
510
+
511
+ $(document)
512
+ .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)
513
+ .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)
514
+ .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)
515
+ .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
516
+ event.preventDefault()
517
+ event.stopPropagation()
518
+ Dropdown._jQueryInterface.call($(this), 'toggle')
519
+ })
520
+ .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {
521
+ e.stopPropagation()
522
+ })
523
+
524
+ /**
525
+ * ------------------------------------------------------------------------
526
+ * jQuery
527
+ * ------------------------------------------------------------------------
528
+ */
529
+
530
+ $.fn[NAME] = Dropdown._jQueryInterface
531
+ $.fn[NAME].Constructor = Dropdown
532
+ $.fn[NAME].noConflict = () => {
533
+ $.fn[NAME] = JQUERY_NO_CONFLICT
534
+ return Dropdown._jQueryInterface
535
+ }
536
+
537
+
538
+ export default Dropdown