inkstream 0.1.0 → 0.1.2

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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +21 -0
  3. data/README.md +95 -0
  4. data/_config.yml +131 -0
  5. data/_includes/button.html +4 -0
  6. data/_includes/icon.html +1 -0
  7. data/_includes/nav-default.html +23 -0
  8. data/_includes/nav-header.html +25 -0
  9. data/_includes/post-list.html +59 -0
  10. data/_includes/post-meta.html +0 -0
  11. data/_includes/post-pagination.html +29 -0
  12. data/_includes/promo-section.html +12 -0
  13. data/_includes/site-before-end.html +1 -0
  14. data/_includes/site-before-start.html +1 -0
  15. data/_includes/site-favicons.html +12 -0
  16. data/_includes/site-fonts.html +13 -0
  17. data/_includes/site-footer-default.html +17 -0
  18. data/_includes/site-footer.html +23 -0
  19. data/_includes/site-header.html +66 -0
  20. data/_includes/site-styles.html +6 -0
  21. data/_layouts/blog.html +24 -0
  22. data/_layouts/default.html +62 -0
  23. data/_layouts/page.html +35 -0
  24. data/_layouts/post.html +201 -0
  25. data/assets/css/styles.css +11167 -0
  26. data/assets/favicon/android-chrome-192x192.png +0 -0
  27. data/assets/favicon/android-chrome-512x512.png +0 -0
  28. data/assets/favicon/apple-touch-icon.png +0 -0
  29. data/assets/favicon/browserconfig.xml +9 -0
  30. data/assets/favicon/favicon-16x16.png +0 -0
  31. data/assets/favicon/favicon-32x32.png +0 -0
  32. data/assets/favicon/favicon.ico +0 -0
  33. data/assets/favicon/favicon.svg +1 -0
  34. data/assets/favicon/mstile-150x150.png +0 -0
  35. data/assets/favicon/safari-pinned-tab.svg +88 -0
  36. data/assets/favicon/site.webmanifest +19 -0
  37. data/assets/images/about-me.jpg +0 -0
  38. data/assets/images/posts/default-post-img.jpg +0 -0
  39. data/assets/images/posts/text-syntax.jpg +0 -0
  40. data/assets/images/posts/welcome.jpg +0 -0
  41. data/assets/images/profile.png +0 -0
  42. data/assets/images/promo-banner.jpg +0 -0
  43. data/assets/js/blog.js +9 -0
  44. data/assets/js/demo/style-switcher.js +45 -0
  45. data/assets/logo/logo.jpg +0 -0
  46. data/assets/logo/logo.svg +1 -0
  47. data/assets/plugins/bootstrap/js/bootstrap.min.js +7 -0
  48. data/assets/plugins/jquery-3.3.1.min.js +2 -0
  49. data/assets/plugins/popper.min.js +5 -0
  50. data/assets/resume/resume.pdf +0 -0
  51. data/assets/scss/bootstrap/js/dist/alert.js +199 -0
  52. data/assets/scss/bootstrap/js/dist/alert.js.map +1 -0
  53. data/assets/scss/bootstrap/js/dist/button.js +187 -0
  54. data/assets/scss/bootstrap/js/dist/button.js.map +1 -0
  55. data/assets/scss/bootstrap/js/dist/carousel.js +668 -0
  56. data/assets/scss/bootstrap/js/dist/carousel.js.map +1 -0
  57. data/assets/scss/bootstrap/js/dist/collapse.js +428 -0
  58. data/assets/scss/bootstrap/js/dist/collapse.js.map +1 -0
  59. data/assets/scss/bootstrap/js/dist/dropdown.js +595 -0
  60. data/assets/scss/bootstrap/js/dist/dropdown.js.map +1 -0
  61. data/assets/scss/bootstrap/js/dist/index.js +23 -0
  62. data/assets/scss/bootstrap/js/dist/index.js.map +1 -0
  63. data/assets/scss/bootstrap/js/dist/modal.js +650 -0
  64. data/assets/scss/bootstrap/js/dist/modal.js.map +1 -0
  65. data/assets/scss/bootstrap/js/dist/popover.js +261 -0
  66. data/assets/scss/bootstrap/js/dist/popover.js.map +1 -0
  67. data/assets/scss/bootstrap/js/dist/scrollspy.js +375 -0
  68. data/assets/scss/bootstrap/js/dist/scrollspy.js.map +1 -0
  69. data/assets/scss/bootstrap/js/dist/tab.js +269 -0
  70. data/assets/scss/bootstrap/js/dist/tab.js.map +1 -0
  71. data/assets/scss/bootstrap/js/dist/toast.js +283 -0
  72. data/assets/scss/bootstrap/js/dist/toast.js.map +1 -0
  73. data/assets/scss/bootstrap/js/dist/tooltip.js +760 -0
  74. data/assets/scss/bootstrap/js/dist/tooltip.js.map +1 -0
  75. data/assets/scss/bootstrap/js/dist/util.js +172 -0
  76. data/assets/scss/bootstrap/js/dist/util.js.map +1 -0
  77. data/assets/scss/bootstrap/js/src/alert.js +179 -0
  78. data/assets/scss/bootstrap/js/src/button.js +171 -0
  79. data/assets/scss/bootstrap/js/src/carousel.js +606 -0
  80. data/assets/scss/bootstrap/js/src/collapse.js +402 -0
  81. data/assets/scss/bootstrap/js/src/dropdown.js +545 -0
  82. data/assets/scss/bootstrap/js/src/index.js +52 -0
  83. data/assets/scss/bootstrap/js/src/modal.js +594 -0
  84. data/assets/scss/bootstrap/js/src/popover.js +184 -0
  85. data/assets/scss/bootstrap/js/src/scrollspy.js +326 -0
  86. data/assets/scss/bootstrap/js/src/tab.js +260 -0
  87. data/assets/scss/bootstrap/js/src/toast.js +227 -0
  88. data/assets/scss/bootstrap/js/src/tooltip.js +752 -0
  89. data/assets/scss/bootstrap/js/src/util.js +177 -0
  90. data/assets/scss/bootstrap/js/tests/README.md +69 -0
  91. data/assets/scss/bootstrap/js/tests/browsers.js +82 -0
  92. data/assets/scss/bootstrap/js/tests/index.html +133 -0
  93. data/assets/scss/bootstrap/js/tests/integration/bundle.js +8 -0
  94. data/assets/scss/bootstrap/js/tests/integration/index.html +66 -0
  95. data/assets/scss/bootstrap/js/tests/integration/rollup.bundle.js +20 -0
  96. data/assets/scss/bootstrap/js/tests/karma.conf.js +143 -0
  97. data/assets/scss/bootstrap/js/tests/unit/.eslintrc.json +40 -0
  98. data/assets/scss/bootstrap/js/tests/unit/alert.js +123 -0
  99. data/assets/scss/bootstrap/js/tests/unit/button.js +222 -0
  100. data/assets/scss/bootstrap/js/tests/unit/carousel.js +1333 -0
  101. data/assets/scss/bootstrap/js/tests/unit/collapse.js +892 -0
  102. data/assets/scss/bootstrap/js/tests/unit/dropdown.js +1419 -0
  103. data/assets/scss/bootstrap/js/tests/unit/modal.js +815 -0
  104. data/assets/scss/bootstrap/js/tests/unit/popover.js +471 -0
  105. data/assets/scss/bootstrap/js/tests/unit/scrollspy.js +728 -0
  106. data/assets/scss/bootstrap/js/tests/unit/tab.js +518 -0
  107. data/assets/scss/bootstrap/js/tests/unit/toast.js +259 -0
  108. data/assets/scss/bootstrap/js/tests/unit/tooltip.js +1109 -0
  109. data/assets/scss/bootstrap/js/tests/unit/util.js +163 -0
  110. data/assets/scss/bootstrap/js/tests/visual/alert.html +58 -0
  111. data/assets/scss/bootstrap/js/tests/visual/button.html +51 -0
  112. data/assets/scss/bootstrap/js/tests/visual/carousel.html +66 -0
  113. data/assets/scss/bootstrap/js/tests/visual/collapse.html +78 -0
  114. data/assets/scss/bootstrap/js/tests/visual/dropdown.html +212 -0
  115. data/assets/scss/bootstrap/js/tests/visual/modal.html +268 -0
  116. data/assets/scss/bootstrap/js/tests/visual/popover.html +46 -0
  117. data/assets/scss/bootstrap/js/tests/visual/scrollspy.html +95 -0
  118. data/assets/scss/bootstrap/js/tests/visual/tab.html +234 -0
  119. data/assets/scss/bootstrap/js/tests/visual/toast.html +72 -0
  120. data/assets/scss/bootstrap/js/tests/visual/tooltip.html +106 -0
  121. data/assets/scss/bootstrap/scss/_alert.scss +51 -0
  122. data/assets/scss/bootstrap/scss/_badge.scss +54 -0
  123. data/assets/scss/bootstrap/scss/_breadcrumb.scss +41 -0
  124. data/assets/scss/bootstrap/scss/_button-group.scss +163 -0
  125. data/assets/scss/bootstrap/scss/_buttons.scss +137 -0
  126. data/assets/scss/bootstrap/scss/_card.scss +289 -0
  127. data/assets/scss/bootstrap/scss/_carousel.scss +197 -0
  128. data/assets/scss/bootstrap/scss/_close.scss +41 -0
  129. data/assets/scss/bootstrap/scss/_code.scss +48 -0
  130. data/assets/scss/bootstrap/scss/_custom-forms.scss +507 -0
  131. data/assets/scss/bootstrap/scss/_dropdown.scss +191 -0
  132. data/assets/scss/bootstrap/scss/_forms.scss +330 -0
  133. data/assets/scss/bootstrap/scss/_functions.scss +86 -0
  134. data/assets/scss/bootstrap/scss/_grid.scss +52 -0
  135. data/assets/scss/bootstrap/scss/_images.scss +42 -0
  136. data/assets/scss/bootstrap/scss/_input-group.scss +193 -0
  137. data/assets/scss/bootstrap/scss/_jumbotron.scss +17 -0
  138. data/assets/scss/bootstrap/scss/_list-group.scss +149 -0
  139. data/assets/scss/bootstrap/scss/_media.scss +8 -0
  140. data/assets/scss/bootstrap/scss/_mixins.scss +47 -0
  141. data/assets/scss/bootstrap/scss/_modal.scss +229 -0
  142. data/assets/scss/bootstrap/scss/_nav.scss +120 -0
  143. data/assets/scss/bootstrap/scss/_navbar.scss +294 -0
  144. data/assets/scss/bootstrap/scss/_pagination.scss +73 -0
  145. data/assets/scss/bootstrap/scss/_popover.scss +171 -0
  146. data/assets/scss/bootstrap/scss/_print.scss +141 -0
  147. data/assets/scss/bootstrap/scss/_progress.scss +43 -0
  148. data/assets/scss/bootstrap/scss/_reboot.scss +483 -0
  149. data/assets/scss/bootstrap/scss/_root.scss +19 -0
  150. data/assets/scss/bootstrap/scss/_spinners.scss +55 -0
  151. data/assets/scss/bootstrap/scss/_tables.scss +185 -0
  152. data/assets/scss/bootstrap/scss/_toasts.scss +44 -0
  153. data/assets/scss/bootstrap/scss/_tooltip.scss +115 -0
  154. data/assets/scss/bootstrap/scss/_transitions.scss +20 -0
  155. data/assets/scss/bootstrap/scss/_type.scss +125 -0
  156. data/assets/scss/bootstrap/scss/_utilities.scss +17 -0
  157. data/assets/scss/bootstrap/scss/_variables.scss +1123 -0
  158. data/assets/scss/bootstrap/scss/bootstrap-grid.scss +29 -0
  159. data/assets/scss/bootstrap/scss/bootstrap-reboot.scss +12 -0
  160. data/assets/scss/bootstrap/scss/bootstrap.scss +44 -0
  161. data/assets/scss/bootstrap/scss/mixins/_alert.scss +13 -0
  162. data/assets/scss/bootstrap/scss/mixins/_background-variant.scss +21 -0
  163. data/assets/scss/bootstrap/scss/mixins/_badge.scss +17 -0
  164. data/assets/scss/bootstrap/scss/mixins/_border-radius.scss +63 -0
  165. data/assets/scss/bootstrap/scss/mixins/_box-shadow.scss +20 -0
  166. data/assets/scss/bootstrap/scss/mixins/_breakpoints.scss +123 -0
  167. data/assets/scss/bootstrap/scss/mixins/_buttons.scss +107 -0
  168. data/assets/scss/bootstrap/scss/mixins/_caret.scss +62 -0
  169. data/assets/scss/bootstrap/scss/mixins/_clearfix.scss +7 -0
  170. data/assets/scss/bootstrap/scss/mixins/_deprecate.scss +10 -0
  171. data/assets/scss/bootstrap/scss/mixins/_float.scss +14 -0
  172. data/assets/scss/bootstrap/scss/mixins/_forms.scss +192 -0
  173. data/assets/scss/bootstrap/scss/mixins/_gradients.scss +45 -0
  174. data/assets/scss/bootstrap/scss/mixins/_grid-framework.scss +66 -0
  175. data/assets/scss/bootstrap/scss/mixins/_grid.scss +51 -0
  176. data/assets/scss/bootstrap/scss/mixins/_hover.scss +37 -0
  177. data/assets/scss/bootstrap/scss/mixins/_image.scss +36 -0
  178. data/assets/scss/bootstrap/scss/mixins/_list-group.scss +21 -0
  179. data/assets/scss/bootstrap/scss/mixins/_lists.scss +7 -0
  180. data/assets/scss/bootstrap/scss/mixins/_nav-divider.scss +10 -0
  181. data/assets/scss/bootstrap/scss/mixins/_pagination.scss +22 -0
  182. data/assets/scss/bootstrap/scss/mixins/_reset-text.scss +17 -0
  183. data/assets/scss/bootstrap/scss/mixins/_resize.scss +6 -0
  184. data/assets/scss/bootstrap/scss/mixins/_screen-reader.scss +33 -0
  185. data/assets/scss/bootstrap/scss/mixins/_size.scss +7 -0
  186. data/assets/scss/bootstrap/scss/mixins/_table-row.scss +39 -0
  187. data/assets/scss/bootstrap/scss/mixins/_text-emphasis.scss +16 -0
  188. data/assets/scss/bootstrap/scss/mixins/_text-hide.scss +11 -0
  189. data/assets/scss/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  190. data/assets/scss/bootstrap/scss/mixins/_transition.scss +16 -0
  191. data/assets/scss/bootstrap/scss/mixins/_visibility.scss +8 -0
  192. data/assets/scss/bootstrap/scss/utilities/_align.scss +8 -0
  193. data/assets/scss/bootstrap/scss/utilities/_background.scss +19 -0
  194. data/assets/scss/bootstrap/scss/utilities/_borders.scss +75 -0
  195. data/assets/scss/bootstrap/scss/utilities/_clearfix.scss +3 -0
  196. data/assets/scss/bootstrap/scss/utilities/_display.scss +26 -0
  197. data/assets/scss/bootstrap/scss/utilities/_embed.scss +39 -0
  198. data/assets/scss/bootstrap/scss/utilities/_flex.scss +51 -0
  199. data/assets/scss/bootstrap/scss/utilities/_float.scss +11 -0
  200. data/assets/scss/bootstrap/scss/utilities/_overflow.scss +5 -0
  201. data/assets/scss/bootstrap/scss/utilities/_position.scss +32 -0
  202. data/assets/scss/bootstrap/scss/utilities/_screenreaders.scss +11 -0
  203. data/assets/scss/bootstrap/scss/utilities/_shadows.scss +6 -0
  204. data/assets/scss/bootstrap/scss/utilities/_sizing.scss +20 -0
  205. data/assets/scss/bootstrap/scss/utilities/_spacing.scss +73 -0
  206. data/assets/scss/bootstrap/scss/utilities/_stretched-link.scss +19 -0
  207. data/assets/scss/bootstrap/scss/utilities/_text.scss +72 -0
  208. data/assets/scss/bootstrap/scss/utilities/_visibility.scss +13 -0
  209. data/assets/scss/bootstrap/scss/vendor/_rfs.scss +212 -0
  210. data/assets/scss/theme/_about.scss +28 -0
  211. data/assets/scss/theme/_base.scss +207 -0
  212. data/assets/scss/theme/_blog.scss +140 -0
  213. data/assets/scss/theme/_demo.scss +153 -0
  214. data/assets/scss/theme/_mixins.scss +34 -0
  215. data/assets/scss/theme/_responsive.scss +88 -0
  216. data/assets/scss/theme/styles.scss +14 -0
  217. data/assets/scss/theme-8.scss +41 -0
  218. data/assets/styles.scss +6 -0
  219. metadata +221 -4
@@ -0,0 +1,545 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v4.3.0): 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.3.0'
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
+ _getOffset() {
323
+ const offset = {}
324
+
325
+ if (typeof this._config.offset === 'function') {
326
+ offset.fn = (data) => {
327
+ data.offsets = {
328
+ ...data.offsets,
329
+ ...this._config.offset(data.offsets, this._element) || {}
330
+ }
331
+
332
+ return data
333
+ }
334
+ } else {
335
+ offset.offset = this._config.offset
336
+ }
337
+
338
+ return offset
339
+ }
340
+
341
+ _getPopperConfig() {
342
+ const popperConfig = {
343
+ placement: this._getPlacement(),
344
+ modifiers: {
345
+ offset: this._getOffset(),
346
+ flip: {
347
+ enabled: this._config.flip
348
+ },
349
+ preventOverflow: {
350
+ boundariesElement: this._config.boundary
351
+ }
352
+ }
353
+ }
354
+
355
+ // Disable Popper.js if we have a static display
356
+ if (this._config.display === 'static') {
357
+ popperConfig.modifiers.applyStyle = {
358
+ enabled: false
359
+ }
360
+ }
361
+
362
+ return popperConfig
363
+ }
364
+
365
+ // Static
366
+
367
+ static _jQueryInterface(config) {
368
+ return this.each(function () {
369
+ let data = $(this).data(DATA_KEY)
370
+ const _config = typeof config === 'object' ? config : null
371
+
372
+ if (!data) {
373
+ data = new Dropdown(this, _config)
374
+ $(this).data(DATA_KEY, data)
375
+ }
376
+
377
+ if (typeof config === 'string') {
378
+ if (typeof data[config] === 'undefined') {
379
+ throw new TypeError(`No method named "${config}"`)
380
+ }
381
+ data[config]()
382
+ }
383
+ })
384
+ }
385
+
386
+ static _clearMenus(event) {
387
+ if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||
388
+ event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
389
+ return
390
+ }
391
+
392
+ const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))
393
+
394
+ for (let i = 0, len = toggles.length; i < len; i++) {
395
+ const parent = Dropdown._getParentFromElement(toggles[i])
396
+ const context = $(toggles[i]).data(DATA_KEY)
397
+ const relatedTarget = {
398
+ relatedTarget: toggles[i]
399
+ }
400
+
401
+ if (event && event.type === 'click') {
402
+ relatedTarget.clickEvent = event
403
+ }
404
+
405
+ if (!context) {
406
+ continue
407
+ }
408
+
409
+ const dropdownMenu = context._menu
410
+ if (!$(parent).hasClass(ClassName.SHOW)) {
411
+ continue
412
+ }
413
+
414
+ if (event && (event.type === 'click' &&
415
+ /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&
416
+ $.contains(parent, event.target)) {
417
+ continue
418
+ }
419
+
420
+ const hideEvent = $.Event(Event.HIDE, relatedTarget)
421
+ $(parent).trigger(hideEvent)
422
+ if (hideEvent.isDefaultPrevented()) {
423
+ continue
424
+ }
425
+
426
+ // If this is a touch-enabled device we remove the extra
427
+ // empty mouseover listeners we added for iOS support
428
+ if ('ontouchstart' in document.documentElement) {
429
+ $(document.body).children().off('mouseover', null, $.noop)
430
+ }
431
+
432
+ toggles[i].setAttribute('aria-expanded', 'false')
433
+
434
+ $(dropdownMenu).removeClass(ClassName.SHOW)
435
+ $(parent)
436
+ .removeClass(ClassName.SHOW)
437
+ .trigger($.Event(Event.HIDDEN, relatedTarget))
438
+ }
439
+ }
440
+
441
+ static _getParentFromElement(element) {
442
+ let parent
443
+ const selector = Util.getSelectorFromElement(element)
444
+
445
+ if (selector) {
446
+ parent = document.querySelector(selector)
447
+ }
448
+
449
+ return parent || element.parentNode
450
+ }
451
+
452
+ // eslint-disable-next-line complexity
453
+ static _dataApiKeydownHandler(event) {
454
+ // If not input/textarea:
455
+ // - And not a key in REGEXP_KEYDOWN => not a dropdown command
456
+ // If input/textarea:
457
+ // - If space key => not a dropdown command
458
+ // - If key is other than escape
459
+ // - If key is not up or down => not a dropdown command
460
+ // - If trigger inside the menu => not a dropdown command
461
+ if (/input|textarea/i.test(event.target.tagName)
462
+ ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&
463
+ (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||
464
+ $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
465
+ return
466
+ }
467
+
468
+ event.preventDefault()
469
+ event.stopPropagation()
470
+
471
+ if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
472
+ return
473
+ }
474
+
475
+ const parent = Dropdown._getParentFromElement(this)
476
+ const isActive = $(parent).hasClass(ClassName.SHOW)
477
+
478
+ if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
479
+ if (event.which === ESCAPE_KEYCODE) {
480
+ const toggle = parent.querySelector(Selector.DATA_TOGGLE)
481
+ $(toggle).trigger('focus')
482
+ }
483
+
484
+ $(this).trigger('click')
485
+ return
486
+ }
487
+
488
+ const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))
489
+
490
+ if (items.length === 0) {
491
+ return
492
+ }
493
+
494
+ let index = items.indexOf(event.target)
495
+
496
+ if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up
497
+ index--
498
+ }
499
+
500
+ if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down
501
+ index++
502
+ }
503
+
504
+ if (index < 0) {
505
+ index = 0
506
+ }
507
+
508
+ items[index].focus()
509
+ }
510
+ }
511
+
512
+ /**
513
+ * ------------------------------------------------------------------------
514
+ * Data Api implementation
515
+ * ------------------------------------------------------------------------
516
+ */
517
+
518
+ $(document)
519
+ .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)
520
+ .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)
521
+ .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)
522
+ .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
523
+ event.preventDefault()
524
+ event.stopPropagation()
525
+ Dropdown._jQueryInterface.call($(this), 'toggle')
526
+ })
527
+ .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {
528
+ e.stopPropagation()
529
+ })
530
+
531
+ /**
532
+ * ------------------------------------------------------------------------
533
+ * jQuery
534
+ * ------------------------------------------------------------------------
535
+ */
536
+
537
+ $.fn[NAME] = Dropdown._jQueryInterface
538
+ $.fn[NAME].Constructor = Dropdown
539
+ $.fn[NAME].noConflict = () => {
540
+ $.fn[NAME] = JQUERY_NO_CONFLICT
541
+ return Dropdown._jQueryInterface
542
+ }
543
+
544
+
545
+ export default Dropdown
@@ -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.3.0): 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
+ }