inkstream 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +21 -0
  3. data/README.md +93 -0
  4. data/_config.yml +122 -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 +7 -0
  16. data/_includes/site-fonts.html +13 -0
  17. data/_includes/site-footer-default.html +17 -0
  18. data/_includes/site-footer.html +12 -0
  19. data/_includes/site-header.html +46 -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/images/about-me.jpg +0 -0
  27. data/assets/images/blog/blog-post-banner.jpg +0 -0
  28. data/assets/images/blog/blog-post-thumb-1.jpg +0 -0
  29. data/assets/images/blog/blog-post-thumb-10.jpg +0 -0
  30. data/assets/images/blog/blog-post-thumb-11.jpg +0 -0
  31. data/assets/images/blog/blog-post-thumb-12.jpg +0 -0
  32. data/assets/images/blog/blog-post-thumb-2.jpg +0 -0
  33. data/assets/images/blog/blog-post-thumb-3.jpg +0 -0
  34. data/assets/images/blog/blog-post-thumb-4.jpg +0 -0
  35. data/assets/images/blog/blog-post-thumb-5.jpg +0 -0
  36. data/assets/images/blog/blog-post-thumb-6.jpg +0 -0
  37. data/assets/images/blog/blog-post-thumb-7.jpg +0 -0
  38. data/assets/images/blog/blog-post-thumb-8.jpg +0 -0
  39. data/assets/images/blog/blog-post-thumb-9.jpg +0 -0
  40. data/assets/images/posts/default-post-img.jpg +0 -0
  41. data/assets/images/posts/text-syntax.jpg +0 -0
  42. data/assets/images/posts/welcome.jpg +0 -0
  43. data/assets/images/profile.png +0 -0
  44. data/assets/images/promo-banner.jpg +0 -0
  45. data/assets/js/blog.js +9 -0
  46. data/assets/js/demo/style-switcher.js +45 -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/scss/bootstrap/js/dist/alert.js +199 -0
  51. data/assets/scss/bootstrap/js/dist/alert.js.map +1 -0
  52. data/assets/scss/bootstrap/js/dist/button.js +187 -0
  53. data/assets/scss/bootstrap/js/dist/button.js.map +1 -0
  54. data/assets/scss/bootstrap/js/dist/carousel.js +668 -0
  55. data/assets/scss/bootstrap/js/dist/carousel.js.map +1 -0
  56. data/assets/scss/bootstrap/js/dist/collapse.js +428 -0
  57. data/assets/scss/bootstrap/js/dist/collapse.js.map +1 -0
  58. data/assets/scss/bootstrap/js/dist/dropdown.js +595 -0
  59. data/assets/scss/bootstrap/js/dist/dropdown.js.map +1 -0
  60. data/assets/scss/bootstrap/js/dist/index.js +23 -0
  61. data/assets/scss/bootstrap/js/dist/index.js.map +1 -0
  62. data/assets/scss/bootstrap/js/dist/modal.js +650 -0
  63. data/assets/scss/bootstrap/js/dist/modal.js.map +1 -0
  64. data/assets/scss/bootstrap/js/dist/popover.js +261 -0
  65. data/assets/scss/bootstrap/js/dist/popover.js.map +1 -0
  66. data/assets/scss/bootstrap/js/dist/scrollspy.js +375 -0
  67. data/assets/scss/bootstrap/js/dist/scrollspy.js.map +1 -0
  68. data/assets/scss/bootstrap/js/dist/tab.js +269 -0
  69. data/assets/scss/bootstrap/js/dist/tab.js.map +1 -0
  70. data/assets/scss/bootstrap/js/dist/toast.js +283 -0
  71. data/assets/scss/bootstrap/js/dist/toast.js.map +1 -0
  72. data/assets/scss/bootstrap/js/dist/tooltip.js +760 -0
  73. data/assets/scss/bootstrap/js/dist/tooltip.js.map +1 -0
  74. data/assets/scss/bootstrap/js/dist/util.js +172 -0
  75. data/assets/scss/bootstrap/js/dist/util.js.map +1 -0
  76. data/assets/scss/bootstrap/js/src/alert.js +179 -0
  77. data/assets/scss/bootstrap/js/src/button.js +171 -0
  78. data/assets/scss/bootstrap/js/src/carousel.js +606 -0
  79. data/assets/scss/bootstrap/js/src/collapse.js +402 -0
  80. data/assets/scss/bootstrap/js/src/dropdown.js +545 -0
  81. data/assets/scss/bootstrap/js/src/index.js +52 -0
  82. data/assets/scss/bootstrap/js/src/modal.js +594 -0
  83. data/assets/scss/bootstrap/js/src/popover.js +184 -0
  84. data/assets/scss/bootstrap/js/src/scrollspy.js +326 -0
  85. data/assets/scss/bootstrap/js/src/tab.js +260 -0
  86. data/assets/scss/bootstrap/js/src/toast.js +227 -0
  87. data/assets/scss/bootstrap/js/src/tooltip.js +752 -0
  88. data/assets/scss/bootstrap/js/src/util.js +177 -0
  89. data/assets/scss/bootstrap/js/tests/README.md +69 -0
  90. data/assets/scss/bootstrap/js/tests/browsers.js +82 -0
  91. data/assets/scss/bootstrap/js/tests/index.html +133 -0
  92. data/assets/scss/bootstrap/js/tests/integration/bundle.js +8 -0
  93. data/assets/scss/bootstrap/js/tests/integration/index.html +66 -0
  94. data/assets/scss/bootstrap/js/tests/integration/rollup.bundle.js +20 -0
  95. data/assets/scss/bootstrap/js/tests/karma.conf.js +143 -0
  96. data/assets/scss/bootstrap/js/tests/unit/.eslintrc.json +40 -0
  97. data/assets/scss/bootstrap/js/tests/unit/alert.js +123 -0
  98. data/assets/scss/bootstrap/js/tests/unit/button.js +222 -0
  99. data/assets/scss/bootstrap/js/tests/unit/carousel.js +1333 -0
  100. data/assets/scss/bootstrap/js/tests/unit/collapse.js +892 -0
  101. data/assets/scss/bootstrap/js/tests/unit/dropdown.js +1419 -0
  102. data/assets/scss/bootstrap/js/tests/unit/modal.js +815 -0
  103. data/assets/scss/bootstrap/js/tests/unit/popover.js +471 -0
  104. data/assets/scss/bootstrap/js/tests/unit/scrollspy.js +728 -0
  105. data/assets/scss/bootstrap/js/tests/unit/tab.js +518 -0
  106. data/assets/scss/bootstrap/js/tests/unit/toast.js +259 -0
  107. data/assets/scss/bootstrap/js/tests/unit/tooltip.js +1109 -0
  108. data/assets/scss/bootstrap/js/tests/unit/util.js +163 -0
  109. data/assets/scss/bootstrap/js/tests/visual/alert.html +58 -0
  110. data/assets/scss/bootstrap/js/tests/visual/button.html +51 -0
  111. data/assets/scss/bootstrap/js/tests/visual/carousel.html +66 -0
  112. data/assets/scss/bootstrap/js/tests/visual/collapse.html +78 -0
  113. data/assets/scss/bootstrap/js/tests/visual/dropdown.html +212 -0
  114. data/assets/scss/bootstrap/js/tests/visual/modal.html +268 -0
  115. data/assets/scss/bootstrap/js/tests/visual/popover.html +46 -0
  116. data/assets/scss/bootstrap/js/tests/visual/scrollspy.html +95 -0
  117. data/assets/scss/bootstrap/js/tests/visual/tab.html +234 -0
  118. data/assets/scss/bootstrap/js/tests/visual/toast.html +72 -0
  119. data/assets/scss/bootstrap/js/tests/visual/tooltip.html +106 -0
  120. data/assets/scss/bootstrap/scss/_alert.scss +51 -0
  121. data/assets/scss/bootstrap/scss/_badge.scss +54 -0
  122. data/assets/scss/bootstrap/scss/_breadcrumb.scss +41 -0
  123. data/assets/scss/bootstrap/scss/_button-group.scss +163 -0
  124. data/assets/scss/bootstrap/scss/_buttons.scss +137 -0
  125. data/assets/scss/bootstrap/scss/_card.scss +289 -0
  126. data/assets/scss/bootstrap/scss/_carousel.scss +197 -0
  127. data/assets/scss/bootstrap/scss/_close.scss +41 -0
  128. data/assets/scss/bootstrap/scss/_code.scss +48 -0
  129. data/assets/scss/bootstrap/scss/_custom-forms.scss +507 -0
  130. data/assets/scss/bootstrap/scss/_dropdown.scss +191 -0
  131. data/assets/scss/bootstrap/scss/_forms.scss +330 -0
  132. data/assets/scss/bootstrap/scss/_functions.scss +86 -0
  133. data/assets/scss/bootstrap/scss/_grid.scss +52 -0
  134. data/assets/scss/bootstrap/scss/_images.scss +42 -0
  135. data/assets/scss/bootstrap/scss/_input-group.scss +193 -0
  136. data/assets/scss/bootstrap/scss/_jumbotron.scss +17 -0
  137. data/assets/scss/bootstrap/scss/_list-group.scss +149 -0
  138. data/assets/scss/bootstrap/scss/_media.scss +8 -0
  139. data/assets/scss/bootstrap/scss/_mixins.scss +47 -0
  140. data/assets/scss/bootstrap/scss/_modal.scss +229 -0
  141. data/assets/scss/bootstrap/scss/_nav.scss +120 -0
  142. data/assets/scss/bootstrap/scss/_navbar.scss +294 -0
  143. data/assets/scss/bootstrap/scss/_pagination.scss +73 -0
  144. data/assets/scss/bootstrap/scss/_popover.scss +171 -0
  145. data/assets/scss/bootstrap/scss/_print.scss +141 -0
  146. data/assets/scss/bootstrap/scss/_progress.scss +43 -0
  147. data/assets/scss/bootstrap/scss/_reboot.scss +483 -0
  148. data/assets/scss/bootstrap/scss/_root.scss +19 -0
  149. data/assets/scss/bootstrap/scss/_spinners.scss +55 -0
  150. data/assets/scss/bootstrap/scss/_tables.scss +185 -0
  151. data/assets/scss/bootstrap/scss/_toasts.scss +44 -0
  152. data/assets/scss/bootstrap/scss/_tooltip.scss +115 -0
  153. data/assets/scss/bootstrap/scss/_transitions.scss +20 -0
  154. data/assets/scss/bootstrap/scss/_type.scss +125 -0
  155. data/assets/scss/bootstrap/scss/_utilities.scss +17 -0
  156. data/assets/scss/bootstrap/scss/_variables.scss +1123 -0
  157. data/assets/scss/bootstrap/scss/bootstrap-grid.scss +29 -0
  158. data/assets/scss/bootstrap/scss/bootstrap-reboot.scss +12 -0
  159. data/assets/scss/bootstrap/scss/bootstrap.scss +44 -0
  160. data/assets/scss/bootstrap/scss/mixins/_alert.scss +13 -0
  161. data/assets/scss/bootstrap/scss/mixins/_background-variant.scss +21 -0
  162. data/assets/scss/bootstrap/scss/mixins/_badge.scss +17 -0
  163. data/assets/scss/bootstrap/scss/mixins/_border-radius.scss +63 -0
  164. data/assets/scss/bootstrap/scss/mixins/_box-shadow.scss +20 -0
  165. data/assets/scss/bootstrap/scss/mixins/_breakpoints.scss +123 -0
  166. data/assets/scss/bootstrap/scss/mixins/_buttons.scss +107 -0
  167. data/assets/scss/bootstrap/scss/mixins/_caret.scss +62 -0
  168. data/assets/scss/bootstrap/scss/mixins/_clearfix.scss +7 -0
  169. data/assets/scss/bootstrap/scss/mixins/_deprecate.scss +10 -0
  170. data/assets/scss/bootstrap/scss/mixins/_float.scss +14 -0
  171. data/assets/scss/bootstrap/scss/mixins/_forms.scss +192 -0
  172. data/assets/scss/bootstrap/scss/mixins/_gradients.scss +45 -0
  173. data/assets/scss/bootstrap/scss/mixins/_grid-framework.scss +66 -0
  174. data/assets/scss/bootstrap/scss/mixins/_grid.scss +51 -0
  175. data/assets/scss/bootstrap/scss/mixins/_hover.scss +37 -0
  176. data/assets/scss/bootstrap/scss/mixins/_image.scss +36 -0
  177. data/assets/scss/bootstrap/scss/mixins/_list-group.scss +21 -0
  178. data/assets/scss/bootstrap/scss/mixins/_lists.scss +7 -0
  179. data/assets/scss/bootstrap/scss/mixins/_nav-divider.scss +10 -0
  180. data/assets/scss/bootstrap/scss/mixins/_pagination.scss +22 -0
  181. data/assets/scss/bootstrap/scss/mixins/_reset-text.scss +17 -0
  182. data/assets/scss/bootstrap/scss/mixins/_resize.scss +6 -0
  183. data/assets/scss/bootstrap/scss/mixins/_screen-reader.scss +33 -0
  184. data/assets/scss/bootstrap/scss/mixins/_size.scss +7 -0
  185. data/assets/scss/bootstrap/scss/mixins/_table-row.scss +39 -0
  186. data/assets/scss/bootstrap/scss/mixins/_text-emphasis.scss +16 -0
  187. data/assets/scss/bootstrap/scss/mixins/_text-hide.scss +11 -0
  188. data/assets/scss/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  189. data/assets/scss/bootstrap/scss/mixins/_transition.scss +16 -0
  190. data/assets/scss/bootstrap/scss/mixins/_visibility.scss +8 -0
  191. data/assets/scss/bootstrap/scss/utilities/_align.scss +8 -0
  192. data/assets/scss/bootstrap/scss/utilities/_background.scss +19 -0
  193. data/assets/scss/bootstrap/scss/utilities/_borders.scss +75 -0
  194. data/assets/scss/bootstrap/scss/utilities/_clearfix.scss +3 -0
  195. data/assets/scss/bootstrap/scss/utilities/_display.scss +26 -0
  196. data/assets/scss/bootstrap/scss/utilities/_embed.scss +39 -0
  197. data/assets/scss/bootstrap/scss/utilities/_flex.scss +51 -0
  198. data/assets/scss/bootstrap/scss/utilities/_float.scss +11 -0
  199. data/assets/scss/bootstrap/scss/utilities/_overflow.scss +5 -0
  200. data/assets/scss/bootstrap/scss/utilities/_position.scss +32 -0
  201. data/assets/scss/bootstrap/scss/utilities/_screenreaders.scss +11 -0
  202. data/assets/scss/bootstrap/scss/utilities/_shadows.scss +6 -0
  203. data/assets/scss/bootstrap/scss/utilities/_sizing.scss +20 -0
  204. data/assets/scss/bootstrap/scss/utilities/_spacing.scss +73 -0
  205. data/assets/scss/bootstrap/scss/utilities/_stretched-link.scss +19 -0
  206. data/assets/scss/bootstrap/scss/utilities/_text.scss +72 -0
  207. data/assets/scss/bootstrap/scss/utilities/_visibility.scss +13 -0
  208. data/assets/scss/bootstrap/scss/vendor/_rfs.scss +212 -0
  209. data/assets/scss/theme/_about.scss +28 -0
  210. data/assets/scss/theme/_base.scss +207 -0
  211. data/assets/scss/theme/_blog.scss +140 -0
  212. data/assets/scss/theme/_demo.scss +153 -0
  213. data/assets/scss/theme/_mixins.scss +34 -0
  214. data/assets/scss/theme/_responsive.scss +88 -0
  215. data/assets/scss/theme/styles.scss +14 -0
  216. data/assets/scss/theme-8.scss +41 -0
  217. data/assets/styles.scss +6 -0
  218. metadata +219 -3
@@ -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
+ }