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,402 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Bootstrap (v4.3.0): collapse.js
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import $ from 'jquery'
9
+ import Util from './util'
10
+
11
+ /**
12
+ * ------------------------------------------------------------------------
13
+ * Constants
14
+ * ------------------------------------------------------------------------
15
+ */
16
+
17
+ const NAME = 'collapse'
18
+ const VERSION = '4.3.0'
19
+ const DATA_KEY = 'bs.collapse'
20
+ const EVENT_KEY = `.${DATA_KEY}`
21
+ const DATA_API_KEY = '.data-api'
22
+ const JQUERY_NO_CONFLICT = $.fn[NAME]
23
+
24
+ const Default = {
25
+ toggle : true,
26
+ parent : ''
27
+ }
28
+
29
+ const DefaultType = {
30
+ toggle : 'boolean',
31
+ parent : '(string|element)'
32
+ }
33
+
34
+ const Event = {
35
+ SHOW : `show${EVENT_KEY}`,
36
+ SHOWN : `shown${EVENT_KEY}`,
37
+ HIDE : `hide${EVENT_KEY}`,
38
+ HIDDEN : `hidden${EVENT_KEY}`,
39
+ CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`
40
+ }
41
+
42
+ const ClassName = {
43
+ SHOW : 'show',
44
+ COLLAPSE : 'collapse',
45
+ COLLAPSING : 'collapsing',
46
+ COLLAPSED : 'collapsed'
47
+ }
48
+
49
+ const Dimension = {
50
+ WIDTH : 'width',
51
+ HEIGHT : 'height'
52
+ }
53
+
54
+ const Selector = {
55
+ ACTIVES : '.show, .collapsing',
56
+ DATA_TOGGLE : '[data-toggle="collapse"]'
57
+ }
58
+
59
+ /**
60
+ * ------------------------------------------------------------------------
61
+ * Class Definition
62
+ * ------------------------------------------------------------------------
63
+ */
64
+
65
+ class Collapse {
66
+ constructor(element, config) {
67
+ this._isTransitioning = false
68
+ this._element = element
69
+ this._config = this._getConfig(config)
70
+ this._triggerArray = [].slice.call(document.querySelectorAll(
71
+ `[data-toggle="collapse"][href="#${element.id}"],` +
72
+ `[data-toggle="collapse"][data-target="#${element.id}"]`
73
+ ))
74
+
75
+ const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))
76
+ for (let i = 0, len = toggleList.length; i < len; i++) {
77
+ const elem = toggleList[i]
78
+ const selector = Util.getSelectorFromElement(elem)
79
+ const filterElement = [].slice.call(document.querySelectorAll(selector))
80
+ .filter((foundElem) => foundElem === element)
81
+
82
+ if (selector !== null && filterElement.length > 0) {
83
+ this._selector = selector
84
+ this._triggerArray.push(elem)
85
+ }
86
+ }
87
+
88
+ this._parent = this._config.parent ? this._getParent() : null
89
+
90
+ if (!this._config.parent) {
91
+ this._addAriaAndCollapsedClass(this._element, this._triggerArray)
92
+ }
93
+
94
+ if (this._config.toggle) {
95
+ this.toggle()
96
+ }
97
+ }
98
+
99
+ // Getters
100
+
101
+ static get VERSION() {
102
+ return VERSION
103
+ }
104
+
105
+ static get Default() {
106
+ return Default
107
+ }
108
+
109
+ // Public
110
+
111
+ toggle() {
112
+ if ($(this._element).hasClass(ClassName.SHOW)) {
113
+ this.hide()
114
+ } else {
115
+ this.show()
116
+ }
117
+ }
118
+
119
+ show() {
120
+ if (this._isTransitioning ||
121
+ $(this._element).hasClass(ClassName.SHOW)) {
122
+ return
123
+ }
124
+
125
+ let actives
126
+ let activesData
127
+
128
+ if (this._parent) {
129
+ actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))
130
+ .filter((elem) => {
131
+ if (typeof this._config.parent === 'string') {
132
+ return elem.getAttribute('data-parent') === this._config.parent
133
+ }
134
+
135
+ return elem.classList.contains(ClassName.COLLAPSE)
136
+ })
137
+
138
+ if (actives.length === 0) {
139
+ actives = null
140
+ }
141
+ }
142
+
143
+ if (actives) {
144
+ activesData = $(actives).not(this._selector).data(DATA_KEY)
145
+ if (activesData && activesData._isTransitioning) {
146
+ return
147
+ }
148
+ }
149
+
150
+ const startEvent = $.Event(Event.SHOW)
151
+ $(this._element).trigger(startEvent)
152
+ if (startEvent.isDefaultPrevented()) {
153
+ return
154
+ }
155
+
156
+ if (actives) {
157
+ Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')
158
+ if (!activesData) {
159
+ $(actives).data(DATA_KEY, null)
160
+ }
161
+ }
162
+
163
+ const dimension = this._getDimension()
164
+
165
+ $(this._element)
166
+ .removeClass(ClassName.COLLAPSE)
167
+ .addClass(ClassName.COLLAPSING)
168
+
169
+ this._element.style[dimension] = 0
170
+
171
+ if (this._triggerArray.length) {
172
+ $(this._triggerArray)
173
+ .removeClass(ClassName.COLLAPSED)
174
+ .attr('aria-expanded', true)
175
+ }
176
+
177
+ this.setTransitioning(true)
178
+
179
+ const complete = () => {
180
+ $(this._element)
181
+ .removeClass(ClassName.COLLAPSING)
182
+ .addClass(ClassName.COLLAPSE)
183
+ .addClass(ClassName.SHOW)
184
+
185
+ this._element.style[dimension] = ''
186
+
187
+ this.setTransitioning(false)
188
+
189
+ $(this._element).trigger(Event.SHOWN)
190
+ }
191
+
192
+ const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)
193
+ const scrollSize = `scroll${capitalizedDimension}`
194
+ const transitionDuration = Util.getTransitionDurationFromElement(this._element)
195
+
196
+ $(this._element)
197
+ .one(Util.TRANSITION_END, complete)
198
+ .emulateTransitionEnd(transitionDuration)
199
+
200
+ this._element.style[dimension] = `${this._element[scrollSize]}px`
201
+ }
202
+
203
+ hide() {
204
+ if (this._isTransitioning ||
205
+ !$(this._element).hasClass(ClassName.SHOW)) {
206
+ return
207
+ }
208
+
209
+ const startEvent = $.Event(Event.HIDE)
210
+ $(this._element).trigger(startEvent)
211
+ if (startEvent.isDefaultPrevented()) {
212
+ return
213
+ }
214
+
215
+ const dimension = this._getDimension()
216
+
217
+ this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`
218
+
219
+ Util.reflow(this._element)
220
+
221
+ $(this._element)
222
+ .addClass(ClassName.COLLAPSING)
223
+ .removeClass(ClassName.COLLAPSE)
224
+ .removeClass(ClassName.SHOW)
225
+
226
+ const triggerArrayLength = this._triggerArray.length
227
+ if (triggerArrayLength > 0) {
228
+ for (let i = 0; i < triggerArrayLength; i++) {
229
+ const trigger = this._triggerArray[i]
230
+ const selector = Util.getSelectorFromElement(trigger)
231
+
232
+ if (selector !== null) {
233
+ const $elem = $([].slice.call(document.querySelectorAll(selector)))
234
+ if (!$elem.hasClass(ClassName.SHOW)) {
235
+ $(trigger).addClass(ClassName.COLLAPSED)
236
+ .attr('aria-expanded', false)
237
+ }
238
+ }
239
+ }
240
+ }
241
+
242
+ this.setTransitioning(true)
243
+
244
+ const complete = () => {
245
+ this.setTransitioning(false)
246
+ $(this._element)
247
+ .removeClass(ClassName.COLLAPSING)
248
+ .addClass(ClassName.COLLAPSE)
249
+ .trigger(Event.HIDDEN)
250
+ }
251
+
252
+ this._element.style[dimension] = ''
253
+ const transitionDuration = Util.getTransitionDurationFromElement(this._element)
254
+
255
+ $(this._element)
256
+ .one(Util.TRANSITION_END, complete)
257
+ .emulateTransitionEnd(transitionDuration)
258
+ }
259
+
260
+ setTransitioning(isTransitioning) {
261
+ this._isTransitioning = isTransitioning
262
+ }
263
+
264
+ dispose() {
265
+ $.removeData(this._element, DATA_KEY)
266
+
267
+ this._config = null
268
+ this._parent = null
269
+ this._element = null
270
+ this._triggerArray = null
271
+ this._isTransitioning = null
272
+ }
273
+
274
+ // Private
275
+
276
+ _getConfig(config) {
277
+ config = {
278
+ ...Default,
279
+ ...config
280
+ }
281
+ config.toggle = Boolean(config.toggle) // Coerce string values
282
+ Util.typeCheckConfig(NAME, config, DefaultType)
283
+ return config
284
+ }
285
+
286
+ _getDimension() {
287
+ const hasWidth = $(this._element).hasClass(Dimension.WIDTH)
288
+ return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT
289
+ }
290
+
291
+ _getParent() {
292
+ let parent
293
+
294
+ if (Util.isElement(this._config.parent)) {
295
+ parent = this._config.parent
296
+
297
+ // It's a jQuery object
298
+ if (typeof this._config.parent.jquery !== 'undefined') {
299
+ parent = this._config.parent[0]
300
+ }
301
+ } else {
302
+ parent = document.querySelector(this._config.parent)
303
+ }
304
+
305
+ const selector =
306
+ `[data-toggle="collapse"][data-parent="${this._config.parent}"]`
307
+
308
+ const children = [].slice.call(parent.querySelectorAll(selector))
309
+ $(children).each((i, element) => {
310
+ this._addAriaAndCollapsedClass(
311
+ Collapse._getTargetFromElement(element),
312
+ [element]
313
+ )
314
+ })
315
+
316
+ return parent
317
+ }
318
+
319
+ _addAriaAndCollapsedClass(element, triggerArray) {
320
+ const isOpen = $(element).hasClass(ClassName.SHOW)
321
+
322
+ if (triggerArray.length) {
323
+ $(triggerArray)
324
+ .toggleClass(ClassName.COLLAPSED, !isOpen)
325
+ .attr('aria-expanded', isOpen)
326
+ }
327
+ }
328
+
329
+ // Static
330
+
331
+ static _getTargetFromElement(element) {
332
+ const selector = Util.getSelectorFromElement(element)
333
+ return selector ? document.querySelector(selector) : null
334
+ }
335
+
336
+ static _jQueryInterface(config) {
337
+ return this.each(function () {
338
+ const $this = $(this)
339
+ let data = $this.data(DATA_KEY)
340
+ const _config = {
341
+ ...Default,
342
+ ...$this.data(),
343
+ ...typeof config === 'object' && config ? config : {}
344
+ }
345
+
346
+ if (!data && _config.toggle && /show|hide/.test(config)) {
347
+ _config.toggle = false
348
+ }
349
+
350
+ if (!data) {
351
+ data = new Collapse(this, _config)
352
+ $this.data(DATA_KEY, data)
353
+ }
354
+
355
+ if (typeof config === 'string') {
356
+ if (typeof data[config] === 'undefined') {
357
+ throw new TypeError(`No method named "${config}"`)
358
+ }
359
+ data[config]()
360
+ }
361
+ })
362
+ }
363
+ }
364
+
365
+ /**
366
+ * ------------------------------------------------------------------------
367
+ * Data Api implementation
368
+ * ------------------------------------------------------------------------
369
+ */
370
+
371
+ $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
372
+ // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
373
+ if (event.currentTarget.tagName === 'A') {
374
+ event.preventDefault()
375
+ }
376
+
377
+ const $trigger = $(this)
378
+ const selector = Util.getSelectorFromElement(this)
379
+ const selectors = [].slice.call(document.querySelectorAll(selector))
380
+
381
+ $(selectors).each(function () {
382
+ const $target = $(this)
383
+ const data = $target.data(DATA_KEY)
384
+ const config = data ? 'toggle' : $trigger.data()
385
+ Collapse._jQueryInterface.call($target, config)
386
+ })
387
+ })
388
+
389
+ /**
390
+ * ------------------------------------------------------------------------
391
+ * jQuery
392
+ * ------------------------------------------------------------------------
393
+ */
394
+
395
+ $.fn[NAME] = Collapse._jQueryInterface
396
+ $.fn[NAME].Constructor = Collapse
397
+ $.fn[NAME].noConflict = () => {
398
+ $.fn[NAME] = JQUERY_NO_CONFLICT
399
+ return Collapse._jQueryInterface
400
+ }
401
+
402
+ export default Collapse