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,604 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v4.2.1): carousel.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 = 'carousel'
18
+ const VERSION = '4.2.1'
19
+ const DATA_KEY = 'bs.carousel'
20
+ const EVENT_KEY = `.${DATA_KEY}`
21
+ const DATA_API_KEY = '.data-api'
22
+ const JQUERY_NO_CONFLICT = $.fn[NAME]
23
+ const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key
24
+ const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key
25
+ const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch
26
+ const SWIPE_THRESHOLD = 40
27
+
28
+ const Default = {
29
+ interval : 5000,
30
+ keyboard : true,
31
+ slide : false,
32
+ pause : 'hover',
33
+ wrap : true,
34
+ touch : true
35
+ }
36
+
37
+ const DefaultType = {
38
+ interval : '(number|boolean)',
39
+ keyboard : 'boolean',
40
+ slide : '(boolean|string)',
41
+ pause : '(string|boolean)',
42
+ wrap : 'boolean',
43
+ touch : 'boolean'
44
+ }
45
+
46
+ const Direction = {
47
+ NEXT : 'next',
48
+ PREV : 'prev',
49
+ LEFT : 'left',
50
+ RIGHT : 'right'
51
+ }
52
+
53
+ const Event = {
54
+ SLIDE : `slide${EVENT_KEY}`,
55
+ SLID : `slid${EVENT_KEY}`,
56
+ KEYDOWN : `keydown${EVENT_KEY}`,
57
+ MOUSEENTER : `mouseenter${EVENT_KEY}`,
58
+ MOUSELEAVE : `mouseleave${EVENT_KEY}`,
59
+ TOUCHSTART : `touchstart${EVENT_KEY}`,
60
+ TOUCHMOVE : `touchmove${EVENT_KEY}`,
61
+ TOUCHEND : `touchend${EVENT_KEY}`,
62
+ POINTERDOWN : `pointerdown${EVENT_KEY}`,
63
+ POINTERUP : `pointerup${EVENT_KEY}`,
64
+ DRAG_START : `dragstart${EVENT_KEY}`,
65
+ LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,
66
+ CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`
67
+ }
68
+
69
+ const ClassName = {
70
+ CAROUSEL : 'carousel',
71
+ ACTIVE : 'active',
72
+ SLIDE : 'slide',
73
+ RIGHT : 'carousel-item-right',
74
+ LEFT : 'carousel-item-left',
75
+ NEXT : 'carousel-item-next',
76
+ PREV : 'carousel-item-prev',
77
+ ITEM : 'carousel-item',
78
+ POINTER_EVENT : 'pointer-event'
79
+ }
80
+
81
+ const Selector = {
82
+ ACTIVE : '.active',
83
+ ACTIVE_ITEM : '.active.carousel-item',
84
+ ITEM : '.carousel-item',
85
+ ITEM_IMG : '.carousel-item img',
86
+ NEXT_PREV : '.carousel-item-next, .carousel-item-prev',
87
+ INDICATORS : '.carousel-indicators',
88
+ DATA_SLIDE : '[data-slide], [data-slide-to]',
89
+ DATA_RIDE : '[data-ride="carousel"]'
90
+ }
91
+
92
+ const PointerType = {
93
+ TOUCH : 'touch',
94
+ PEN : 'pen'
95
+ }
96
+
97
+ /**
98
+ * ------------------------------------------------------------------------
99
+ * Class Definition
100
+ * ------------------------------------------------------------------------
101
+ */
102
+ class Carousel {
103
+ constructor(element, config) {
104
+ this._items = null
105
+ this._interval = null
106
+ this._activeElement = null
107
+ this._isPaused = false
108
+ this._isSliding = false
109
+ this.touchTimeout = null
110
+ this.touchStartX = 0
111
+ this.touchDeltaX = 0
112
+
113
+ this._config = this._getConfig(config)
114
+ this._element = element
115
+ this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)
116
+ this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
117
+ this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)
118
+
119
+ this._addEventListeners()
120
+ }
121
+
122
+ // Getters
123
+
124
+ static get VERSION() {
125
+ return VERSION
126
+ }
127
+
128
+ static get Default() {
129
+ return Default
130
+ }
131
+
132
+ // Public
133
+
134
+ next() {
135
+ if (!this._isSliding) {
136
+ this._slide(Direction.NEXT)
137
+ }
138
+ }
139
+
140
+ nextWhenVisible() {
141
+ // Don't call next when the page isn't visible
142
+ // or the carousel or its parent isn't visible
143
+ if (!document.hidden &&
144
+ ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {
145
+ this.next()
146
+ }
147
+ }
148
+
149
+ prev() {
150
+ if (!this._isSliding) {
151
+ this._slide(Direction.PREV)
152
+ }
153
+ }
154
+
155
+ pause(event) {
156
+ if (!event) {
157
+ this._isPaused = true
158
+ }
159
+
160
+ if (this._element.querySelector(Selector.NEXT_PREV)) {
161
+ Util.triggerTransitionEnd(this._element)
162
+ this.cycle(true)
163
+ }
164
+
165
+ clearInterval(this._interval)
166
+ this._interval = null
167
+ }
168
+
169
+ cycle(event) {
170
+ if (!event) {
171
+ this._isPaused = false
172
+ }
173
+
174
+ if (this._interval) {
175
+ clearInterval(this._interval)
176
+ this._interval = null
177
+ }
178
+
179
+ if (this._config.interval && !this._isPaused) {
180
+ this._interval = setInterval(
181
+ (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),
182
+ this._config.interval
183
+ )
184
+ }
185
+ }
186
+
187
+ to(index) {
188
+ this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)
189
+
190
+ const activeIndex = this._getItemIndex(this._activeElement)
191
+
192
+ if (index > this._items.length - 1 || index < 0) {
193
+ return
194
+ }
195
+
196
+ if (this._isSliding) {
197
+ $(this._element).one(Event.SLID, () => this.to(index))
198
+ return
199
+ }
200
+
201
+ if (activeIndex === index) {
202
+ this.pause()
203
+ this.cycle()
204
+ return
205
+ }
206
+
207
+ const direction = index > activeIndex
208
+ ? Direction.NEXT
209
+ : Direction.PREV
210
+
211
+ this._slide(direction, this._items[index])
212
+ }
213
+
214
+ dispose() {
215
+ $(this._element).off(EVENT_KEY)
216
+ $.removeData(this._element, DATA_KEY)
217
+
218
+ this._items = null
219
+ this._config = null
220
+ this._element = null
221
+ this._interval = null
222
+ this._isPaused = null
223
+ this._isSliding = null
224
+ this._activeElement = null
225
+ this._indicatorsElement = null
226
+ }
227
+
228
+ // Private
229
+
230
+ _getConfig(config) {
231
+ config = {
232
+ ...Default,
233
+ ...config
234
+ }
235
+ Util.typeCheckConfig(NAME, config, DefaultType)
236
+ return config
237
+ }
238
+
239
+ _handleSwipe() {
240
+ const absDeltax = Math.abs(this.touchDeltaX)
241
+
242
+ if (absDeltax <= SWIPE_THRESHOLD) {
243
+ return
244
+ }
245
+
246
+ const direction = absDeltax / this.touchDeltaX
247
+
248
+ // swipe left
249
+ if (direction > 0) {
250
+ this.prev()
251
+ }
252
+
253
+ // swipe right
254
+ if (direction < 0) {
255
+ this.next()
256
+ }
257
+ }
258
+
259
+ _addEventListeners() {
260
+ if (this._config.keyboard) {
261
+ $(this._element)
262
+ .on(Event.KEYDOWN, (event) => this._keydown(event))
263
+ }
264
+
265
+ if (this._config.pause === 'hover') {
266
+ $(this._element)
267
+ .on(Event.MOUSEENTER, (event) => this.pause(event))
268
+ .on(Event.MOUSELEAVE, (event) => this.cycle(event))
269
+ }
270
+
271
+ this._addTouchEventListeners()
272
+ }
273
+
274
+ _addTouchEventListeners() {
275
+ if (!this._touchSupported) {
276
+ return
277
+ }
278
+
279
+ const start = (event) => {
280
+ if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
281
+ this.touchStartX = event.originalEvent.clientX
282
+ } else if (!this._pointerEvent) {
283
+ this.touchStartX = event.originalEvent.touches[0].clientX
284
+ }
285
+ }
286
+
287
+ const move = (event) => {
288
+ // ensure swiping with one touch and not pinching
289
+ if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
290
+ this.touchDeltaX = 0
291
+ } else {
292
+ this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX
293
+ }
294
+ }
295
+
296
+ const end = (event) => {
297
+ if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
298
+ this.touchDeltaX = event.originalEvent.clientX - this.touchStartX
299
+ }
300
+
301
+ this._handleSwipe()
302
+ if (this._config.pause === 'hover') {
303
+ // If it's a touch-enabled device, mouseenter/leave are fired as
304
+ // part of the mouse compatibility events on first tap - the carousel
305
+ // would stop cycling until user tapped out of it;
306
+ // here, we listen for touchend, explicitly pause the carousel
307
+ // (as if it's the second time we tap on it, mouseenter compat event
308
+ // is NOT fired) and after a timeout (to allow for mouse compatibility
309
+ // events to fire) we explicitly restart cycling
310
+
311
+ this.pause()
312
+ if (this.touchTimeout) {
313
+ clearTimeout(this.touchTimeout)
314
+ }
315
+ this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)
316
+ }
317
+ }
318
+
319
+ $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())
320
+ if (this._pointerEvent) {
321
+ $(this._element).on(Event.POINTERDOWN, (event) => start(event))
322
+ $(this._element).on(Event.POINTERUP, (event) => end(event))
323
+
324
+ this._element.classList.add(ClassName.POINTER_EVENT)
325
+ } else {
326
+ $(this._element).on(Event.TOUCHSTART, (event) => start(event))
327
+ $(this._element).on(Event.TOUCHMOVE, (event) => move(event))
328
+ $(this._element).on(Event.TOUCHEND, (event) => end(event))
329
+ }
330
+ }
331
+
332
+ _keydown(event) {
333
+ if (/input|textarea/i.test(event.target.tagName)) {
334
+ return
335
+ }
336
+
337
+ switch (event.which) {
338
+ case ARROW_LEFT_KEYCODE:
339
+ event.preventDefault()
340
+ this.prev()
341
+ break
342
+ case ARROW_RIGHT_KEYCODE:
343
+ event.preventDefault()
344
+ this.next()
345
+ break
346
+ default:
347
+ }
348
+ }
349
+
350
+ _getItemIndex(element) {
351
+ this._items = element && element.parentNode
352
+ ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))
353
+ : []
354
+ return this._items.indexOf(element)
355
+ }
356
+
357
+ _getItemByDirection(direction, activeElement) {
358
+ const isNextDirection = direction === Direction.NEXT
359
+ const isPrevDirection = direction === Direction.PREV
360
+ const activeIndex = this._getItemIndex(activeElement)
361
+ const lastItemIndex = this._items.length - 1
362
+ const isGoingToWrap = isPrevDirection && activeIndex === 0 ||
363
+ isNextDirection && activeIndex === lastItemIndex
364
+
365
+ if (isGoingToWrap && !this._config.wrap) {
366
+ return activeElement
367
+ }
368
+
369
+ const delta = direction === Direction.PREV ? -1 : 1
370
+ const itemIndex = (activeIndex + delta) % this._items.length
371
+
372
+ return itemIndex === -1
373
+ ? this._items[this._items.length - 1] : this._items[itemIndex]
374
+ }
375
+
376
+ _triggerSlideEvent(relatedTarget, eventDirectionName) {
377
+ const targetIndex = this._getItemIndex(relatedTarget)
378
+ const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))
379
+ const slideEvent = $.Event(Event.SLIDE, {
380
+ relatedTarget,
381
+ direction: eventDirectionName,
382
+ from: fromIndex,
383
+ to: targetIndex
384
+ })
385
+
386
+ $(this._element).trigger(slideEvent)
387
+
388
+ return slideEvent
389
+ }
390
+
391
+ _setActiveIndicatorElement(element) {
392
+ if (this._indicatorsElement) {
393
+ const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))
394
+ $(indicators)
395
+ .removeClass(ClassName.ACTIVE)
396
+
397
+ const nextIndicator = this._indicatorsElement.children[
398
+ this._getItemIndex(element)
399
+ ]
400
+
401
+ if (nextIndicator) {
402
+ $(nextIndicator).addClass(ClassName.ACTIVE)
403
+ }
404
+ }
405
+ }
406
+
407
+ _slide(direction, element) {
408
+ const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)
409
+ const activeElementIndex = this._getItemIndex(activeElement)
410
+ const nextElement = element || activeElement &&
411
+ this._getItemByDirection(direction, activeElement)
412
+ const nextElementIndex = this._getItemIndex(nextElement)
413
+ const isCycling = Boolean(this._interval)
414
+
415
+ let directionalClassName
416
+ let orderClassName
417
+ let eventDirectionName
418
+
419
+ if (direction === Direction.NEXT) {
420
+ directionalClassName = ClassName.LEFT
421
+ orderClassName = ClassName.NEXT
422
+ eventDirectionName = Direction.LEFT
423
+ } else {
424
+ directionalClassName = ClassName.RIGHT
425
+ orderClassName = ClassName.PREV
426
+ eventDirectionName = Direction.RIGHT
427
+ }
428
+
429
+ if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {
430
+ this._isSliding = false
431
+ return
432
+ }
433
+
434
+ const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)
435
+ if (slideEvent.isDefaultPrevented()) {
436
+ return
437
+ }
438
+
439
+ if (!activeElement || !nextElement) {
440
+ // Some weirdness is happening, so we bail
441
+ return
442
+ }
443
+
444
+ this._isSliding = true
445
+
446
+ if (isCycling) {
447
+ this.pause()
448
+ }
449
+
450
+ this._setActiveIndicatorElement(nextElement)
451
+
452
+ const slidEvent = $.Event(Event.SLID, {
453
+ relatedTarget: nextElement,
454
+ direction: eventDirectionName,
455
+ from: activeElementIndex,
456
+ to: nextElementIndex
457
+ })
458
+
459
+ if ($(this._element).hasClass(ClassName.SLIDE)) {
460
+ $(nextElement).addClass(orderClassName)
461
+
462
+ Util.reflow(nextElement)
463
+
464
+ $(activeElement).addClass(directionalClassName)
465
+ $(nextElement).addClass(directionalClassName)
466
+
467
+ const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)
468
+ if (nextElementInterval) {
469
+ this._config.defaultInterval = this._config.defaultInterval || this._config.interval
470
+ this._config.interval = nextElementInterval
471
+ } else {
472
+ this._config.interval = this._config.defaultInterval || this._config.interval
473
+ }
474
+
475
+ const transitionDuration = Util.getTransitionDurationFromElement(activeElement)
476
+
477
+ $(activeElement)
478
+ .one(Util.TRANSITION_END, () => {
479
+ $(nextElement)
480
+ .removeClass(`${directionalClassName} ${orderClassName}`)
481
+ .addClass(ClassName.ACTIVE)
482
+
483
+ $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)
484
+
485
+ this._isSliding = false
486
+
487
+ setTimeout(() => $(this._element).trigger(slidEvent), 0)
488
+ })
489
+ .emulateTransitionEnd(transitionDuration)
490
+ } else {
491
+ $(activeElement).removeClass(ClassName.ACTIVE)
492
+ $(nextElement).addClass(ClassName.ACTIVE)
493
+
494
+ this._isSliding = false
495
+ $(this._element).trigger(slidEvent)
496
+ }
497
+
498
+ if (isCycling) {
499
+ this.cycle()
500
+ }
501
+ }
502
+
503
+ // Static
504
+
505
+ static _jQueryInterface(config) {
506
+ return this.each(function () {
507
+ let data = $(this).data(DATA_KEY)
508
+ let _config = {
509
+ ...Default,
510
+ ...$(this).data()
511
+ }
512
+
513
+ if (typeof config === 'object') {
514
+ _config = {
515
+ ..._config,
516
+ ...config
517
+ }
518
+ }
519
+
520
+ const action = typeof config === 'string' ? config : _config.slide
521
+
522
+ if (!data) {
523
+ data = new Carousel(this, _config)
524
+ $(this).data(DATA_KEY, data)
525
+ }
526
+
527
+ if (typeof config === 'number') {
528
+ data.to(config)
529
+ } else if (typeof action === 'string') {
530
+ if (typeof data[action] === 'undefined') {
531
+ throw new TypeError(`No method named "${action}"`)
532
+ }
533
+ data[action]()
534
+ } else if (_config.interval) {
535
+ data.pause()
536
+ data.cycle()
537
+ }
538
+ })
539
+ }
540
+
541
+ static _dataApiClickHandler(event) {
542
+ const selector = Util.getSelectorFromElement(this)
543
+
544
+ if (!selector) {
545
+ return
546
+ }
547
+
548
+ const target = $(selector)[0]
549
+
550
+ if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {
551
+ return
552
+ }
553
+
554
+ const config = {
555
+ ...$(target).data(),
556
+ ...$(this).data()
557
+ }
558
+ const slideIndex = this.getAttribute('data-slide-to')
559
+
560
+ if (slideIndex) {
561
+ config.interval = false
562
+ }
563
+
564
+ Carousel._jQueryInterface.call($(target), config)
565
+
566
+ if (slideIndex) {
567
+ $(target).data(DATA_KEY).to(slideIndex)
568
+ }
569
+
570
+ event.preventDefault()
571
+ }
572
+ }
573
+
574
+ /**
575
+ * ------------------------------------------------------------------------
576
+ * Data Api implementation
577
+ * ------------------------------------------------------------------------
578
+ */
579
+
580
+ $(document)
581
+ .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)
582
+
583
+ $(window).on(Event.LOAD_DATA_API, () => {
584
+ const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))
585
+ for (let i = 0, len = carousels.length; i < len; i++) {
586
+ const $carousel = $(carousels[i])
587
+ Carousel._jQueryInterface.call($carousel, $carousel.data())
588
+ }
589
+ })
590
+
591
+ /**
592
+ * ------------------------------------------------------------------------
593
+ * jQuery
594
+ * ------------------------------------------------------------------------
595
+ */
596
+
597
+ $.fn[NAME] = Carousel._jQueryInterface
598
+ $.fn[NAME].Constructor = Carousel
599
+ $.fn[NAME].noConflict = () => {
600
+ $.fn[NAME] = JQUERY_NO_CONFLICT
601
+ return Carousel._jQueryInterface
602
+ }
603
+
604
+ export default Carousel