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,52 @@
1
+ import $ from 'jquery'
2
+ import Alert from './alert'
3
+ import Button from './button'
4
+ import Carousel from './carousel'
5
+ import Collapse from './collapse'
6
+ import Dropdown from './dropdown'
7
+ import Modal from './modal'
8
+ import Popover from './popover'
9
+ import Scrollspy from './scrollspy'
10
+ import Tab from './tab'
11
+ import Toast from './toast'
12
+ import Tooltip from './tooltip'
13
+ import Util from './util'
14
+
15
+ /**
16
+ * --------------------------------------------------------------------------
17
+ * Bootstrap (v4.2.1): index.js
18
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
19
+ * --------------------------------------------------------------------------
20
+ */
21
+
22
+ (() => {
23
+ if (typeof $ === 'undefined') {
24
+ throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.')
25
+ }
26
+
27
+ const version = $.fn.jquery.split(' ')[0].split('.')
28
+ const minMajor = 1
29
+ const ltMajor = 2
30
+ const minMinor = 9
31
+ const minPatch = 1
32
+ const maxMajor = 4
33
+
34
+ if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
35
+ throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')
36
+ }
37
+ })()
38
+
39
+ export {
40
+ Util,
41
+ Alert,
42
+ Button,
43
+ Carousel,
44
+ Collapse,
45
+ Dropdown,
46
+ Modal,
47
+ Popover,
48
+ Scrollspy,
49
+ Tab,
50
+ Toast,
51
+ Tooltip
52
+ }
@@ -0,0 +1,587 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v4.2.1): modal.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 = 'modal'
18
+ const VERSION = '4.2.1'
19
+ const DATA_KEY = 'bs.modal'
20
+ const EVENT_KEY = `.${DATA_KEY}`
21
+ const DATA_API_KEY = '.data-api'
22
+ const JQUERY_NO_CONFLICT = $.fn[NAME]
23
+ const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key
24
+
25
+ const Default = {
26
+ backdrop : true,
27
+ keyboard : true,
28
+ focus : true,
29
+ show : true
30
+ }
31
+
32
+ const DefaultType = {
33
+ backdrop : '(boolean|string)',
34
+ keyboard : 'boolean',
35
+ focus : 'boolean',
36
+ show : 'boolean'
37
+ }
38
+
39
+ const Event = {
40
+ HIDE : `hide${EVENT_KEY}`,
41
+ HIDDEN : `hidden${EVENT_KEY}`,
42
+ SHOW : `show${EVENT_KEY}`,
43
+ SHOWN : `shown${EVENT_KEY}`,
44
+ FOCUSIN : `focusin${EVENT_KEY}`,
45
+ RESIZE : `resize${EVENT_KEY}`,
46
+ CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,
47
+ KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,
48
+ MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,
49
+ MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,
50
+ CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`
51
+ }
52
+
53
+ const ClassName = {
54
+ SCROLLBAR_MEASURER : 'modal-scrollbar-measure',
55
+ BACKDROP : 'modal-backdrop',
56
+ OPEN : 'modal-open',
57
+ FADE : 'fade',
58
+ SHOW : 'show'
59
+ }
60
+
61
+ const Selector = {
62
+ DIALOG : '.modal-dialog',
63
+ DATA_TOGGLE : '[data-toggle="modal"]',
64
+ DATA_DISMISS : '[data-dismiss="modal"]',
65
+ FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
66
+ STICKY_CONTENT : '.sticky-top'
67
+ }
68
+
69
+ /**
70
+ * ------------------------------------------------------------------------
71
+ * Class Definition
72
+ * ------------------------------------------------------------------------
73
+ */
74
+
75
+ class Modal {
76
+ constructor(element, config) {
77
+ this._config = this._getConfig(config)
78
+ this._element = element
79
+ this._dialog = element.querySelector(Selector.DIALOG)
80
+ this._backdrop = null
81
+ this._isShown = false
82
+ this._isBodyOverflowing = false
83
+ this._ignoreBackdropClick = false
84
+ this._isTransitioning = false
85
+ this._scrollbarWidth = 0
86
+ }
87
+
88
+ // Getters
89
+
90
+ static get VERSION() {
91
+ return VERSION
92
+ }
93
+
94
+ static get Default() {
95
+ return Default
96
+ }
97
+
98
+ // Public
99
+
100
+ toggle(relatedTarget) {
101
+ return this._isShown ? this.hide() : this.show(relatedTarget)
102
+ }
103
+
104
+ show(relatedTarget) {
105
+ if (this._isShown || this._isTransitioning) {
106
+ return
107
+ }
108
+
109
+ if ($(this._element).hasClass(ClassName.FADE)) {
110
+ this._isTransitioning = true
111
+ }
112
+
113
+ const showEvent = $.Event(Event.SHOW, {
114
+ relatedTarget
115
+ })
116
+
117
+ $(this._element).trigger(showEvent)
118
+
119
+ if (this._isShown || showEvent.isDefaultPrevented()) {
120
+ return
121
+ }
122
+
123
+ this._isShown = true
124
+
125
+ this._checkScrollbar()
126
+ this._setScrollbar()
127
+
128
+ this._adjustDialog()
129
+
130
+ this._setEscapeEvent()
131
+ this._setResizeEvent()
132
+
133
+ $(this._element).on(
134
+ Event.CLICK_DISMISS,
135
+ Selector.DATA_DISMISS,
136
+ (event) => this.hide(event)
137
+ )
138
+
139
+ $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {
140
+ $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {
141
+ if ($(event.target).is(this._element)) {
142
+ this._ignoreBackdropClick = true
143
+ }
144
+ })
145
+ })
146
+
147
+ this._showBackdrop(() => this._showElement(relatedTarget))
148
+ }
149
+
150
+ hide(event) {
151
+ if (event) {
152
+ event.preventDefault()
153
+ }
154
+
155
+ if (!this._isShown || this._isTransitioning) {
156
+ return
157
+ }
158
+
159
+ const hideEvent = $.Event(Event.HIDE)
160
+
161
+ $(this._element).trigger(hideEvent)
162
+
163
+ if (!this._isShown || hideEvent.isDefaultPrevented()) {
164
+ return
165
+ }
166
+
167
+ this._isShown = false
168
+ const transition = $(this._element).hasClass(ClassName.FADE)
169
+
170
+ if (transition) {
171
+ this._isTransitioning = true
172
+ }
173
+
174
+ this._setEscapeEvent()
175
+ this._setResizeEvent()
176
+
177
+ $(document).off(Event.FOCUSIN)
178
+
179
+ $(this._element).removeClass(ClassName.SHOW)
180
+
181
+ $(this._element).off(Event.CLICK_DISMISS)
182
+ $(this._dialog).off(Event.MOUSEDOWN_DISMISS)
183
+
184
+
185
+ if (transition) {
186
+ const transitionDuration = Util.getTransitionDurationFromElement(this._element)
187
+
188
+ $(this._element)
189
+ .one(Util.TRANSITION_END, (event) => this._hideModal(event))
190
+ .emulateTransitionEnd(transitionDuration)
191
+ } else {
192
+ this._hideModal()
193
+ }
194
+ }
195
+
196
+ dispose() {
197
+ [window, this._element, this._dialog]
198
+ .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))
199
+
200
+ /**
201
+ * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
202
+ * Do not move `document` in `htmlElements` array
203
+ * It will remove `Event.CLICK_DATA_API` event that should remain
204
+ */
205
+ $(document).off(Event.FOCUSIN)
206
+
207
+ $.removeData(this._element, DATA_KEY)
208
+
209
+ this._config = null
210
+ this._element = null
211
+ this._dialog = null
212
+ this._backdrop = null
213
+ this._isShown = null
214
+ this._isBodyOverflowing = null
215
+ this._ignoreBackdropClick = null
216
+ this._isTransitioning = null
217
+ this._scrollbarWidth = null
218
+ }
219
+
220
+ handleUpdate() {
221
+ this._adjustDialog()
222
+ }
223
+
224
+ // Private
225
+
226
+ _getConfig(config) {
227
+ config = {
228
+ ...Default,
229
+ ...config
230
+ }
231
+ Util.typeCheckConfig(NAME, config, DefaultType)
232
+ return config
233
+ }
234
+
235
+ _showElement(relatedTarget) {
236
+ const transition = $(this._element).hasClass(ClassName.FADE)
237
+
238
+ if (!this._element.parentNode ||
239
+ this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
240
+ // Don't move modal's DOM position
241
+ document.body.appendChild(this._element)
242
+ }
243
+
244
+ this._element.style.display = 'block'
245
+ this._element.removeAttribute('aria-hidden')
246
+ this._element.setAttribute('aria-modal', true)
247
+ this._element.scrollTop = 0
248
+
249
+ if (transition) {
250
+ Util.reflow(this._element)
251
+ }
252
+
253
+ $(this._element).addClass(ClassName.SHOW)
254
+
255
+ if (this._config.focus) {
256
+ this._enforceFocus()
257
+ }
258
+
259
+ const shownEvent = $.Event(Event.SHOWN, {
260
+ relatedTarget
261
+ })
262
+
263
+ const transitionComplete = () => {
264
+ if (this._config.focus) {
265
+ this._element.focus()
266
+ }
267
+ this._isTransitioning = false
268
+ $(this._element).trigger(shownEvent)
269
+ }
270
+
271
+ if (transition) {
272
+ const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)
273
+
274
+ $(this._dialog)
275
+ .one(Util.TRANSITION_END, transitionComplete)
276
+ .emulateTransitionEnd(transitionDuration)
277
+ } else {
278
+ transitionComplete()
279
+ }
280
+ }
281
+
282
+ _enforceFocus() {
283
+ $(document)
284
+ .off(Event.FOCUSIN) // Guard against infinite focus loop
285
+ .on(Event.FOCUSIN, (event) => {
286
+ if (document !== event.target &&
287
+ this._element !== event.target &&
288
+ $(this._element).has(event.target).length === 0) {
289
+ this._element.focus()
290
+ }
291
+ })
292
+ }
293
+
294
+ _setEscapeEvent() {
295
+ if (this._isShown && this._config.keyboard) {
296
+ $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {
297
+ if (event.which === ESCAPE_KEYCODE) {
298
+ event.preventDefault()
299
+ this.hide()
300
+ }
301
+ })
302
+ } else if (!this._isShown) {
303
+ $(this._element).off(Event.KEYDOWN_DISMISS)
304
+ }
305
+ }
306
+
307
+ _setResizeEvent() {
308
+ if (this._isShown) {
309
+ $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))
310
+ } else {
311
+ $(window).off(Event.RESIZE)
312
+ }
313
+ }
314
+
315
+ _hideModal() {
316
+ this._element.style.display = 'none'
317
+ this._element.setAttribute('aria-hidden', true)
318
+ this._element.removeAttribute('aria-modal')
319
+ this._isTransitioning = false
320
+ this._showBackdrop(() => {
321
+ $(document.body).removeClass(ClassName.OPEN)
322
+ this._resetAdjustments()
323
+ this._resetScrollbar()
324
+ $(this._element).trigger(Event.HIDDEN)
325
+ })
326
+ }
327
+
328
+ _removeBackdrop() {
329
+ if (this._backdrop) {
330
+ $(this._backdrop).remove()
331
+ this._backdrop = null
332
+ }
333
+ }
334
+
335
+ _showBackdrop(callback) {
336
+ const animate = $(this._element).hasClass(ClassName.FADE)
337
+ ? ClassName.FADE : ''
338
+
339
+ if (this._isShown && this._config.backdrop) {
340
+ this._backdrop = document.createElement('div')
341
+ this._backdrop.className = ClassName.BACKDROP
342
+
343
+ if (animate) {
344
+ this._backdrop.classList.add(animate)
345
+ }
346
+
347
+ $(this._backdrop).appendTo(document.body)
348
+
349
+ $(this._element).on(Event.CLICK_DISMISS, (event) => {
350
+ if (this._ignoreBackdropClick) {
351
+ this._ignoreBackdropClick = false
352
+ return
353
+ }
354
+ if (event.target !== event.currentTarget) {
355
+ return
356
+ }
357
+ if (this._config.backdrop === 'static') {
358
+ this._element.focus()
359
+ } else {
360
+ this.hide()
361
+ }
362
+ })
363
+
364
+ if (animate) {
365
+ Util.reflow(this._backdrop)
366
+ }
367
+
368
+ $(this._backdrop).addClass(ClassName.SHOW)
369
+
370
+ if (!callback) {
371
+ return
372
+ }
373
+
374
+ if (!animate) {
375
+ callback()
376
+ return
377
+ }
378
+
379
+ const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)
380
+
381
+ $(this._backdrop)
382
+ .one(Util.TRANSITION_END, callback)
383
+ .emulateTransitionEnd(backdropTransitionDuration)
384
+ } else if (!this._isShown && this._backdrop) {
385
+ $(this._backdrop).removeClass(ClassName.SHOW)
386
+
387
+ const callbackRemove = () => {
388
+ this._removeBackdrop()
389
+ if (callback) {
390
+ callback()
391
+ }
392
+ }
393
+
394
+ if ($(this._element).hasClass(ClassName.FADE)) {
395
+ const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)
396
+
397
+ $(this._backdrop)
398
+ .one(Util.TRANSITION_END, callbackRemove)
399
+ .emulateTransitionEnd(backdropTransitionDuration)
400
+ } else {
401
+ callbackRemove()
402
+ }
403
+ } else if (callback) {
404
+ callback()
405
+ }
406
+ }
407
+
408
+ // ----------------------------------------------------------------------
409
+ // the following methods are used to handle overflowing modals
410
+ // todo (fat): these should probably be refactored out of modal.js
411
+ // ----------------------------------------------------------------------
412
+
413
+ _adjustDialog() {
414
+ const isModalOverflowing =
415
+ this._element.scrollHeight > document.documentElement.clientHeight
416
+
417
+ if (!this._isBodyOverflowing && isModalOverflowing) {
418
+ this._element.style.paddingLeft = `${this._scrollbarWidth}px`
419
+ }
420
+
421
+ if (this._isBodyOverflowing && !isModalOverflowing) {
422
+ this._element.style.paddingRight = `${this._scrollbarWidth}px`
423
+ }
424
+ }
425
+
426
+ _resetAdjustments() {
427
+ this._element.style.paddingLeft = ''
428
+ this._element.style.paddingRight = ''
429
+ }
430
+
431
+ _checkScrollbar() {
432
+ const rect = document.body.getBoundingClientRect()
433
+ this._isBodyOverflowing = rect.left + rect.right < window.innerWidth
434
+ this._scrollbarWidth = this._getScrollbarWidth()
435
+ }
436
+
437
+ _setScrollbar() {
438
+ if (this._isBodyOverflowing) {
439
+ // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
440
+ // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
441
+ const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))
442
+ const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))
443
+
444
+ // Adjust fixed content padding
445
+ $(fixedContent).each((index, element) => {
446
+ const actualPadding = element.style.paddingRight
447
+ const calculatedPadding = $(element).css('padding-right')
448
+ $(element)
449
+ .data('padding-right', actualPadding)
450
+ .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)
451
+ })
452
+
453
+ // Adjust sticky content margin
454
+ $(stickyContent).each((index, element) => {
455
+ const actualMargin = element.style.marginRight
456
+ const calculatedMargin = $(element).css('margin-right')
457
+ $(element)
458
+ .data('margin-right', actualMargin)
459
+ .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)
460
+ })
461
+
462
+ // Adjust body padding
463
+ const actualPadding = document.body.style.paddingRight
464
+ const calculatedPadding = $(document.body).css('padding-right')
465
+ $(document.body)
466
+ .data('padding-right', actualPadding)
467
+ .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)
468
+ }
469
+
470
+ $(document.body).addClass(ClassName.OPEN)
471
+ }
472
+
473
+ _resetScrollbar() {
474
+ // Restore fixed content padding
475
+ const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))
476
+ $(fixedContent).each((index, element) => {
477
+ const padding = $(element).data('padding-right')
478
+ $(element).removeData('padding-right')
479
+ element.style.paddingRight = padding ? padding : ''
480
+ })
481
+
482
+ // Restore sticky content
483
+ const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))
484
+ $(elements).each((index, element) => {
485
+ const margin = $(element).data('margin-right')
486
+ if (typeof margin !== 'undefined') {
487
+ $(element).css('margin-right', margin).removeData('margin-right')
488
+ }
489
+ })
490
+
491
+ // Restore body padding
492
+ const padding = $(document.body).data('padding-right')
493
+ $(document.body).removeData('padding-right')
494
+ document.body.style.paddingRight = padding ? padding : ''
495
+ }
496
+
497
+ _getScrollbarWidth() { // thx d.walsh
498
+ const scrollDiv = document.createElement('div')
499
+ scrollDiv.className = ClassName.SCROLLBAR_MEASURER
500
+ document.body.appendChild(scrollDiv)
501
+ const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth
502
+ document.body.removeChild(scrollDiv)
503
+ return scrollbarWidth
504
+ }
505
+
506
+ // Static
507
+
508
+ static _jQueryInterface(config, relatedTarget) {
509
+ return this.each(function () {
510
+ let data = $(this).data(DATA_KEY)
511
+ const _config = {
512
+ ...Default,
513
+ ...$(this).data(),
514
+ ...typeof config === 'object' && config ? config : {}
515
+ }
516
+
517
+ if (!data) {
518
+ data = new Modal(this, _config)
519
+ $(this).data(DATA_KEY, data)
520
+ }
521
+
522
+ if (typeof config === 'string') {
523
+ if (typeof data[config] === 'undefined') {
524
+ throw new TypeError(`No method named "${config}"`)
525
+ }
526
+ data[config](relatedTarget)
527
+ } else if (_config.show) {
528
+ data.show(relatedTarget)
529
+ }
530
+ })
531
+ }
532
+ }
533
+
534
+ /**
535
+ * ------------------------------------------------------------------------
536
+ * Data Api implementation
537
+ * ------------------------------------------------------------------------
538
+ */
539
+
540
+ $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
541
+ let target
542
+ const selector = Util.getSelectorFromElement(this)
543
+
544
+ if (selector) {
545
+ target = document.querySelector(selector)
546
+ }
547
+
548
+ const config = $(target).data(DATA_KEY)
549
+ ? 'toggle' : {
550
+ ...$(target).data(),
551
+ ...$(this).data()
552
+ }
553
+
554
+ if (this.tagName === 'A' || this.tagName === 'AREA') {
555
+ event.preventDefault()
556
+ }
557
+
558
+ const $target = $(target).one(Event.SHOW, (showEvent) => {
559
+ if (showEvent.isDefaultPrevented()) {
560
+ // Only register focus restorer if modal will actually get shown
561
+ return
562
+ }
563
+
564
+ $target.one(Event.HIDDEN, () => {
565
+ if ($(this).is(':visible')) {
566
+ this.focus()
567
+ }
568
+ })
569
+ })
570
+
571
+ Modal._jQueryInterface.call($(target), config, this)
572
+ })
573
+
574
+ /**
575
+ * ------------------------------------------------------------------------
576
+ * jQuery
577
+ * ------------------------------------------------------------------------
578
+ */
579
+
580
+ $.fn[NAME] = Modal._jQueryInterface
581
+ $.fn[NAME].Constructor = Modal
582
+ $.fn[NAME].noConflict = () => {
583
+ $.fn[NAME] = JQUERY_NO_CONFLICT
584
+ return Modal._jQueryInterface
585
+ }
586
+
587
+ export default Modal