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,892 @@
1
+ $(function () {
2
+ 'use strict'
3
+
4
+ QUnit.module('collapse plugin')
5
+
6
+ QUnit.test('should be defined on jquery object', function (assert) {
7
+ assert.expect(1)
8
+ assert.ok($(document.body).collapse, 'collapse method is defined')
9
+ })
10
+
11
+ QUnit.module('collapse', {
12
+ beforeEach: function () {
13
+ // Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
14
+ $.fn.bootstrapCollapse = $.fn.collapse.noConflict()
15
+ },
16
+ afterEach: function () {
17
+ $.fn.collapse = $.fn.bootstrapCollapse
18
+ delete $.fn.bootstrapCollapse
19
+ $('#qunit-fixture').html('')
20
+ }
21
+ })
22
+
23
+ QUnit.test('should provide no conflict', function (assert) {
24
+ assert.expect(1)
25
+ assert.strictEqual(typeof $.fn.collapse, 'undefined', 'collapse was set back to undefined (org value)')
26
+ })
27
+
28
+ QUnit.test('should throw explicit error on undefined method', function (assert) {
29
+ assert.expect(1)
30
+ var $el = $('<div/>')
31
+ $el.bootstrapCollapse()
32
+ try {
33
+ $el.bootstrapCollapse('noMethod')
34
+ } catch (err) {
35
+ assert.strictEqual(err.message, 'No method named "noMethod"')
36
+ }
37
+ })
38
+
39
+ QUnit.test('should return jquery collection containing the element', function (assert) {
40
+ assert.expect(2)
41
+ var $el = $('<div/>')
42
+ var $collapse = $el.bootstrapCollapse()
43
+ assert.ok($collapse instanceof $, 'returns jquery collection')
44
+ assert.strictEqual($collapse[0], $el[0], 'collection contains element')
45
+ })
46
+
47
+ QUnit.test('should show a collapsed element', function (assert) {
48
+ assert.expect(2)
49
+ var done = assert.async()
50
+ var $el = $('<div class="collapse"/>')
51
+
52
+ $el.one('shown.bs.collapse', function () {
53
+ assert.ok($el.hasClass('show'), 'has class "show"')
54
+ assert.ok(!/height/i.test($el.attr('style')), 'has height reset')
55
+ done()
56
+ }).bootstrapCollapse('show')
57
+ })
58
+
59
+ QUnit.test('should show multiple collapsed elements', function (assert) {
60
+ assert.expect(4)
61
+ var done = assert.async()
62
+ var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href=".multi"/>').appendTo('#qunit-fixture')
63
+ var $el = $('<div class="collapse multi"/>').appendTo('#qunit-fixture')
64
+ var $el2 = $('<div class="collapse multi"/>').appendTo('#qunit-fixture')
65
+ $el.one('shown.bs.collapse', function () {
66
+ assert.ok($el.hasClass('show'), 'has class "show"')
67
+ assert.ok(!/height/i.test($el.attr('style')), 'has height reset')
68
+ })
69
+ $el2.one('shown.bs.collapse', function () {
70
+ assert.ok($el2.hasClass('show'), 'has class "show"')
71
+ assert.ok(!/height/i.test($el2.attr('style')), 'has height reset')
72
+ done()
73
+ })
74
+ $target.trigger('click')
75
+ })
76
+
77
+ QUnit.test('should collapse only the first collapse', function (assert) {
78
+ assert.expect(2)
79
+ var done = assert.async()
80
+ var html = [
81
+ '<div class="panel-group" id="accordion1">',
82
+ '<div class="panel">',
83
+ '<div id="collapse1" class="collapse"/>',
84
+ '</div>',
85
+ '</div>',
86
+ '<div class="panel-group" id="accordion2">',
87
+ '<div class="panel">',
88
+ '<div id="collapse2" class="collapse show"/>',
89
+ '</div>',
90
+ '</div>'
91
+ ].join('')
92
+ $(html).appendTo('#qunit-fixture')
93
+ var $el1 = $('#collapse1')
94
+ var $el2 = $('#collapse2')
95
+ $el1.one('shown.bs.collapse', function () {
96
+ assert.ok($el1.hasClass('show'))
97
+ assert.ok($el2.hasClass('show'))
98
+ done()
99
+ }).bootstrapCollapse('show')
100
+ })
101
+
102
+ QUnit.test('should hide a collapsed element', function (assert) {
103
+ assert.expect(1)
104
+ var $el = $('<div class="collapse"/>').bootstrapCollapse('hide')
105
+
106
+ assert.ok(!$el.hasClass('show'), 'does not have class "show"')
107
+ })
108
+
109
+ QUnit.test('should not fire shown when show is prevented', function (assert) {
110
+ assert.expect(1)
111
+ var done = assert.async()
112
+
113
+ $('<div class="collapse"/>')
114
+ .on('show.bs.collapse', function (e) {
115
+ e.preventDefault()
116
+ assert.ok(true, 'show event fired')
117
+ done()
118
+ })
119
+ .on('shown.bs.collapse', function () {
120
+ assert.ok(false, 'shown event fired')
121
+ })
122
+ .bootstrapCollapse('show')
123
+ })
124
+
125
+ QUnit.test('should reset style to auto after finishing opening collapse', function (assert) {
126
+ assert.expect(2)
127
+ var done = assert.async()
128
+
129
+ $('<div class="collapse" style="height: 0px"/>')
130
+ .on('show.bs.collapse', function () {
131
+ assert.strictEqual(this.style.height, '0px', 'height is 0px')
132
+ })
133
+ .on('shown.bs.collapse', function () {
134
+ assert.strictEqual(this.style.height, '', 'height is auto')
135
+ done()
136
+ })
137
+ .bootstrapCollapse('show')
138
+ })
139
+
140
+ QUnit.test('should reset style to auto after finishing closing collapse', function (assert) {
141
+ assert.expect(1)
142
+ var done = assert.async()
143
+
144
+ $('<div class="collapse"/>')
145
+ .on('shown.bs.collapse', function () {
146
+ $(this).bootstrapCollapse('hide')
147
+ })
148
+ .on('hidden.bs.collapse', function () {
149
+ assert.strictEqual(this.style.height, '', 'height is auto')
150
+ done()
151
+ })
152
+ .bootstrapCollapse('show')
153
+ })
154
+
155
+ QUnit.test('should remove "collapsed" class from target when collapse is shown', function (assert) {
156
+ assert.expect(1)
157
+ var done = assert.async()
158
+
159
+ var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
160
+
161
+ $('<div id="test1"/>')
162
+ .appendTo('#qunit-fixture')
163
+ .on('shown.bs.collapse', function () {
164
+ assert.ok(!$target.hasClass('collapsed'), 'target does not have collapsed class')
165
+ done()
166
+ })
167
+
168
+ $target.trigger('click')
169
+ })
170
+
171
+ QUnit.test('should add "collapsed" class to target when collapse is hidden', function (assert) {
172
+ assert.expect(1)
173
+ var done = assert.async()
174
+
175
+ var $target = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
176
+
177
+ $('<div id="test1" class="show"/>')
178
+ .appendTo('#qunit-fixture')
179
+ .on('hidden.bs.collapse', function () {
180
+ assert.ok($target.hasClass('collapsed'), 'target has collapsed class')
181
+ done()
182
+ })
183
+
184
+ $target.trigger('click')
185
+ })
186
+
187
+ QUnit.test('should remove "collapsed" class from all triggers targeting the collapse when the collapse is shown', function (assert) {
188
+ assert.expect(2)
189
+ var done = assert.async()
190
+
191
+ var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
192
+ var $alt = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
193
+
194
+ $('<div id="test1"/>')
195
+ .appendTo('#qunit-fixture')
196
+ .on('shown.bs.collapse', function () {
197
+ assert.ok(!$target.hasClass('collapsed'), 'target trigger does not have collapsed class')
198
+ assert.ok(!$alt.hasClass('collapsed'), 'alt trigger does not have collapsed class')
199
+ done()
200
+ })
201
+
202
+ $target.trigger('click')
203
+ })
204
+
205
+ QUnit.test('should add "collapsed" class to all triggers targeting the collapse when the collapse is hidden', function (assert) {
206
+ assert.expect(2)
207
+ var done = assert.async()
208
+
209
+ var $target = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
210
+ var $alt = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
211
+
212
+ $('<div id="test1" class="show"/>')
213
+ .appendTo('#qunit-fixture')
214
+ .on('hidden.bs.collapse', function () {
215
+ assert.ok($target.hasClass('collapsed'), 'target has collapsed class')
216
+ assert.ok($alt.hasClass('collapsed'), 'alt trigger has collapsed class')
217
+ done()
218
+ })
219
+
220
+ $target.trigger('click')
221
+ })
222
+
223
+ QUnit.test('should not close a collapse when initialized with "show" option if already shown', function (assert) {
224
+ assert.expect(0)
225
+ var done = assert.async()
226
+
227
+ var $test = $('<div id="test1" class="show"/>')
228
+ .appendTo('#qunit-fixture')
229
+ .on('hide.bs.collapse', function () {
230
+ assert.ok(false)
231
+ })
232
+
233
+ $test.bootstrapCollapse('show')
234
+
235
+ setTimeout(done, 0)
236
+ })
237
+
238
+ QUnit.test('should open a collapse when initialized with "show" option if not already shown', function (assert) {
239
+ assert.expect(1)
240
+ var done = assert.async()
241
+
242
+ var $test = $('<div id="test1" />')
243
+ .appendTo('#qunit-fixture')
244
+ .on('show.bs.collapse', function () {
245
+ assert.ok(true)
246
+ })
247
+
248
+ $test.bootstrapCollapse('show')
249
+
250
+ setTimeout(done, 0)
251
+ })
252
+
253
+ QUnit.test('should not show a collapse when initialized with "hide" option if already hidden', function (assert) {
254
+ assert.expect(0)
255
+ var done = assert.async()
256
+
257
+ $('<div class="collapse"></div>')
258
+ .appendTo('#qunit-fixture')
259
+ .on('show.bs.collapse', function () {
260
+ assert.ok(false, 'showing a previously-uninitialized hidden collapse when the "hide" method is called')
261
+ })
262
+ .bootstrapCollapse('hide')
263
+
264
+ setTimeout(done, 0)
265
+ })
266
+
267
+ QUnit.test('should hide a collapse when initialized with "hide" option if not already hidden', function (assert) {
268
+ assert.expect(1)
269
+ var done = assert.async()
270
+
271
+ $('<div class="collapse show"></div>')
272
+ .appendTo('#qunit-fixture')
273
+ .on('hide.bs.collapse', function () {
274
+ assert.ok(true, 'hiding a previously-uninitialized shown collapse when the "hide" method is called')
275
+ })
276
+ .bootstrapCollapse('hide')
277
+
278
+ setTimeout(done, 0)
279
+ })
280
+
281
+ QUnit.test('should remove "collapsed" class from active accordion target', function (assert) {
282
+ assert.expect(3)
283
+ var done = assert.async()
284
+
285
+ var accordionHTML = '<div id="accordion">' +
286
+ '<div class="card"/>' +
287
+ '<div class="card"/>' +
288
+ '<div class="card"/>' +
289
+ '</div>'
290
+ var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.card')
291
+
292
+ var $target1 = $('<a role="button" data-toggle="collapse" href="#body1" />').appendTo($groups.eq(0))
293
+
294
+ $('<div id="body1" class="show" data-parent="#accordion"/>').appendTo($groups.eq(0))
295
+
296
+ var $target2 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body2" />').appendTo($groups.eq(1))
297
+
298
+ $('<div id="body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
299
+
300
+ var $target3 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3" />').appendTo($groups.eq(2))
301
+
302
+ $('<div id="body3" data-parent="#accordion"/>')
303
+ .appendTo($groups.eq(2))
304
+ .on('shown.bs.collapse', function () {
305
+ assert.ok($target1.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
306
+ assert.ok($target2.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
307
+ assert.ok(!$target3.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
308
+
309
+ done()
310
+ })
311
+
312
+ $target3.trigger('click')
313
+ })
314
+
315
+ QUnit.test('should allow dots in data-parent', function (assert) {
316
+ assert.expect(3)
317
+ var done = assert.async()
318
+
319
+ var accordionHTML = '<div class="accordion">' +
320
+ '<div class="card"/>' +
321
+ '<div class="card"/>' +
322
+ '<div class="card"/>' +
323
+ '</div>'
324
+ var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.card')
325
+
326
+ var $target1 = $('<a role="button" data-toggle="collapse" href="#body1"/>').appendTo($groups.eq(0))
327
+
328
+ $('<div id="body1" class="show" data-parent=".accordion"/>').appendTo($groups.eq(0))
329
+
330
+ var $target2 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body2"/>').appendTo($groups.eq(1))
331
+
332
+ $('<div id="body2" data-parent=".accordion"/>').appendTo($groups.eq(1))
333
+
334
+ var $target3 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3"/>').appendTo($groups.eq(2))
335
+
336
+ $('<div id="body3" data-parent=".accordion"/>')
337
+ .appendTo($groups.eq(2))
338
+ .on('shown.bs.collapse', function () {
339
+ assert.ok($target1.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
340
+ assert.ok($target2.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
341
+ assert.ok(!$target3.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
342
+
343
+ done()
344
+ })
345
+
346
+ $target3.trigger('click')
347
+ })
348
+
349
+ QUnit.test('should set aria-expanded="true" on trigger/control when collapse is shown', function (assert) {
350
+ assert.expect(1)
351
+ var done = assert.async()
352
+
353
+ var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
354
+
355
+ $('<div id="test1"/>')
356
+ .appendTo('#qunit-fixture')
357
+ .on('shown.bs.collapse', function () {
358
+ assert.strictEqual($target.attr('aria-expanded'), 'true', 'aria-expanded on target is "true"')
359
+ done()
360
+ })
361
+
362
+ $target.trigger('click')
363
+ })
364
+
365
+ QUnit.test('should set aria-expanded="false" on trigger/control when collapse is hidden', function (assert) {
366
+ assert.expect(1)
367
+ var done = assert.async()
368
+
369
+ var $target = $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
370
+
371
+ $('<div id="test1" class="show"/>')
372
+ .appendTo('#qunit-fixture')
373
+ .on('hidden.bs.collapse', function () {
374
+ assert.strictEqual($target.attr('aria-expanded'), 'false', 'aria-expanded on target is "false"')
375
+ done()
376
+ })
377
+
378
+ $target.trigger('click')
379
+ })
380
+
381
+ QUnit.test('should set aria-expanded="true" on all triggers targeting the collapse when the collapse is shown', function (assert) {
382
+ assert.expect(2)
383
+ var done = assert.async()
384
+
385
+ var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
386
+ var $alt = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
387
+
388
+ $('<div id="test1"/>')
389
+ .appendTo('#qunit-fixture')
390
+ .on('shown.bs.collapse', function () {
391
+ assert.strictEqual($target.attr('aria-expanded'), 'true', 'aria-expanded on trigger/control is "true"')
392
+ assert.strictEqual($alt.attr('aria-expanded'), 'true', 'aria-expanded on alternative trigger/control is "true"')
393
+ done()
394
+ })
395
+
396
+ $target.trigger('click')
397
+ })
398
+
399
+ QUnit.test('should set aria-expanded="false" on all triggers targeting the collapse when the collapse is hidden', function (assert) {
400
+ assert.expect(2)
401
+ var done = assert.async()
402
+
403
+ var $target = $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
404
+ var $alt = $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
405
+
406
+ $('<div id="test1" class="show"/>')
407
+ .appendTo('#qunit-fixture')
408
+ .on('hidden.bs.collapse', function () {
409
+ assert.strictEqual($target.attr('aria-expanded'), 'false', 'aria-expanded on trigger/control is "false"')
410
+ assert.strictEqual($alt.attr('aria-expanded'), 'false', 'aria-expanded on alternative trigger/control is "false"')
411
+ done()
412
+ })
413
+
414
+ $target.trigger('click')
415
+ })
416
+
417
+ QUnit.test('should change aria-expanded from active accordion trigger/control to "false" and set the trigger/control for the newly active one to "true"', function (assert) {
418
+ assert.expect(3)
419
+ var done = assert.async()
420
+
421
+ var accordionHTML = '<div id="accordion">' +
422
+ '<div class="card"/>' +
423
+ '<div class="card"/>' +
424
+ '<div class="card"/>' +
425
+ '</div>'
426
+ var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.card')
427
+
428
+ var $target1 = $('<a role="button" data-toggle="collapse" aria-expanded="true" href="#body1"/>').appendTo($groups.eq(0))
429
+
430
+ $('<div id="body1" class="show" data-parent="#accordion"/>').appendTo($groups.eq(0))
431
+
432
+ var $target2 = $('<a role="button" data-toggle="collapse" aria-expanded="false" href="#body2" class="collapsed" aria-expanded="false" />').appendTo($groups.eq(1))
433
+
434
+ $('<div id="body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
435
+
436
+ var $target3 = $('<a class="collapsed" data-toggle="collapse" aria-expanded="false" role="button" href="#body3"/>').appendTo($groups.eq(2))
437
+
438
+ $('<div id="body3" data-parent="#accordion"/>')
439
+ .appendTo($groups.eq(2))
440
+ .on('shown.bs.collapse', function () {
441
+ assert.strictEqual($target1.attr('aria-expanded'), 'false', 'inactive trigger/control 1 has aria-expanded="false"')
442
+ assert.strictEqual($target2.attr('aria-expanded'), 'false', 'inactive trigger/control 2 has aria-expanded="false"')
443
+ assert.strictEqual($target3.attr('aria-expanded'), 'true', 'active trigger/control 3 has aria-expanded="true"')
444
+
445
+ done()
446
+ })
447
+
448
+ $target3.trigger('click')
449
+ })
450
+
451
+ QUnit.test('should not fire show event if show is prevented because other element is still transitioning', function (assert) {
452
+ assert.expect(1)
453
+ var done = assert.async()
454
+
455
+ var accordionHTML = '<div id="accordion">' +
456
+ '<div class="card"/>' +
457
+ '<div class="card"/>' +
458
+ '</div>'
459
+ var showFired = false
460
+ var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.card')
461
+
462
+ var $target1 = $('<a role="button" data-toggle="collapse" href="#body1"/>').appendTo($groups.eq(0))
463
+
464
+ $('<div id="body1" class="collapse" data-parent="#accordion"/>')
465
+ .appendTo($groups.eq(0))
466
+ .on('show.bs.collapse', function () {
467
+ showFired = true
468
+ })
469
+
470
+ var $target2 = $('<a role="button" data-toggle="collapse" href="#body2"/>').appendTo($groups.eq(1))
471
+ var $body2 = $('<div id="body2" class="collapse" data-parent="#accordion"/>').appendTo($groups.eq(1))
472
+
473
+ $target2.trigger('click')
474
+
475
+ $body2
476
+ .toggleClass('show collapsing')
477
+ .data('bs.collapse')._isTransitioning = 1
478
+
479
+ $target1.trigger('click')
480
+
481
+ setTimeout(function () {
482
+ assert.ok(!showFired, 'show event did not fire')
483
+ done()
484
+ }, 1)
485
+ })
486
+
487
+ QUnit.test('should add "collapsed" class to target when collapse is hidden via manual invocation', function (assert) {
488
+ assert.expect(1)
489
+ var done = assert.async()
490
+
491
+ var $target = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
492
+
493
+ $('<div id="test1" class="show"/>')
494
+ .appendTo('#qunit-fixture')
495
+ .on('hidden.bs.collapse', function () {
496
+ assert.ok($target.hasClass('collapsed'))
497
+ done()
498
+ })
499
+ .bootstrapCollapse('hide')
500
+ })
501
+
502
+ QUnit.test('should remove "collapsed" class from target when collapse is shown via manual invocation', function (assert) {
503
+ assert.expect(1)
504
+ var done = assert.async()
505
+
506
+ var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
507
+
508
+ $('<div id="test1"/>')
509
+ .appendTo('#qunit-fixture')
510
+ .on('shown.bs.collapse', function () {
511
+ assert.ok(!$target.hasClass('collapsed'))
512
+ done()
513
+ })
514
+ .bootstrapCollapse('show')
515
+ })
516
+
517
+ QUnit.test('should allow accordion to use children other than card', function (assert) {
518
+ assert.expect(4)
519
+ var done = assert.async()
520
+ var accordionHTML = '<div id="accordion">' +
521
+ '<div class="item">' +
522
+ '<a id="linkTrigger" data-toggle="collapse" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne"></a>' +
523
+ '<div id="collapseOne" class="collapse" role="tabpanel" aria-labelledby="headingThree" data-parent="#accordion"></div>' +
524
+ '</div>' +
525
+ '<div class="item">' +
526
+ '<a id="linkTriggerTwo" data-toggle="collapse" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"></a>' +
527
+ '<div id="collapseTwo" class="collapse show" role="tabpanel" aria-labelledby="headingTwo" data-parent="#accordion"></div>' +
528
+ '</div>' +
529
+ '</div>'
530
+
531
+ $(accordionHTML).appendTo('#qunit-fixture')
532
+ var $trigger = $('#linkTrigger')
533
+ var $triggerTwo = $('#linkTriggerTwo')
534
+ var $collapseOne = $('#collapseOne')
535
+ var $collapseTwo = $('#collapseTwo')
536
+ $collapseOne.on('shown.bs.collapse', function () {
537
+ assert.ok($collapseOne.hasClass('show'), '#collapseOne is shown')
538
+ assert.ok(!$collapseTwo.hasClass('show'), '#collapseTwo is not shown')
539
+ $collapseTwo.on('shown.bs.collapse', function () {
540
+ assert.ok(!$collapseOne.hasClass('show'), '#collapseOne is not shown')
541
+ assert.ok($collapseTwo.hasClass('show'), '#collapseTwo is shown')
542
+ done()
543
+ })
544
+ $triggerTwo.trigger($.Event('click'))
545
+ })
546
+ $trigger.trigger($.Event('click'))
547
+ })
548
+
549
+ QUnit.test('should allow accordion to contain nested elements', function (assert) {
550
+ assert.expect(4)
551
+ var done = assert.async()
552
+ var accordionHTML = '<div id="accordion">' +
553
+ '<div class="row">' +
554
+ '<div class="col-lg-6">' +
555
+ '<div class="item">' +
556
+ '<a id="linkTrigger" data-toggle="collapse" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne"></a>' +
557
+ '<div id="collapseOne" class="collapse" role="tabpanel" aria-labelledby="headingThree" data-parent="#accordion"></div>' +
558
+ '</div>' +
559
+ '</div>' +
560
+ '<div class="col-lg-6">' +
561
+ '<div class="item">' +
562
+ '<a id="linkTriggerTwo" data-toggle="collapse" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"></a>' +
563
+ '<div id="collapseTwo" class="collapse show" role="tabpanel" aria-labelledby="headingTwo" data-parent="#accordion"></div>' +
564
+ '</div>' +
565
+ '</div>' +
566
+ '</div>' +
567
+ '</div>'
568
+
569
+ $(accordionHTML).appendTo('#qunit-fixture')
570
+ var $trigger = $('#linkTrigger')
571
+ var $triggerTwo = $('#linkTriggerTwo')
572
+ var $collapseOne = $('#collapseOne')
573
+ var $collapseTwo = $('#collapseTwo')
574
+ $collapseOne.on('shown.bs.collapse', function () {
575
+ assert.ok($collapseOne.hasClass('show'), '#collapseOne is shown')
576
+ assert.ok(!$collapseTwo.hasClass('show'), '#collapseTwo is not shown')
577
+ $collapseTwo.on('shown.bs.collapse', function () {
578
+ assert.ok(!$collapseOne.hasClass('show'), '#collapseOne is not shown')
579
+ assert.ok($collapseTwo.hasClass('show'), '#collapseTwo is shown')
580
+ done()
581
+ })
582
+ $triggerTwo.trigger($.Event('click'))
583
+ })
584
+ $trigger.trigger($.Event('click'))
585
+ })
586
+
587
+ QUnit.test('should allow accordion to target multiple elements', function (assert) {
588
+ assert.expect(8)
589
+ var done = assert.async()
590
+ var accordionHTML = '<div id="accordion">' +
591
+ '<a id="linkTriggerOne" data-toggle="collapse" data-target=".collapseOne" href="#" aria-expanded="false" aria-controls="collapseOne"></a>' +
592
+ '<a id="linkTriggerTwo" data-toggle="collapse" data-target=".collapseTwo" href="#" aria-expanded="false" aria-controls="collapseTwo"></a>' +
593
+ '<div id="collapseOneOne" class="collapse collapseOne" role="tabpanel" data-parent="#accordion"></div>' +
594
+ '<div id="collapseOneTwo" class="collapse collapseOne" role="tabpanel" data-parent="#accordion"></div>' +
595
+ '<div id="collapseTwoOne" class="collapse collapseTwo" role="tabpanel" data-parent="#accordion"></div>' +
596
+ '<div id="collapseTwoTwo" class="collapse collapseTwo" role="tabpanel" data-parent="#accordion"></div>' +
597
+ '</div>'
598
+
599
+ $(accordionHTML).appendTo('#qunit-fixture')
600
+ var $trigger = $('#linkTriggerOne')
601
+ var $triggerTwo = $('#linkTriggerTwo')
602
+ var $collapseOneOne = $('#collapseOneOne')
603
+ var $collapseOneTwo = $('#collapseOneTwo')
604
+ var $collapseTwoOne = $('#collapseTwoOne')
605
+ var $collapseTwoTwo = $('#collapseTwoTwo')
606
+ var collapsedElements = {
607
+ one : false,
608
+ two : false
609
+ }
610
+
611
+ function firstTest() {
612
+ assert.ok($collapseOneOne.hasClass('show'), '#collapseOneOne is shown')
613
+ assert.ok($collapseOneTwo.hasClass('show'), '#collapseOneTwo is shown')
614
+ assert.ok(!$collapseTwoOne.hasClass('show'), '#collapseTwoOne is not shown')
615
+ assert.ok(!$collapseTwoTwo.hasClass('show'), '#collapseTwoTwo is not shown')
616
+ $triggerTwo.trigger($.Event('click'))
617
+ }
618
+
619
+ function secondTest() {
620
+ assert.ok(!$collapseOneOne.hasClass('show'), '#collapseOneOne is not shown')
621
+ assert.ok(!$collapseOneTwo.hasClass('show'), '#collapseOneTwo is not shown')
622
+ assert.ok($collapseTwoOne.hasClass('show'), '#collapseTwoOne is shown')
623
+ assert.ok($collapseTwoTwo.hasClass('show'), '#collapseTwoTwo is shown')
624
+ done()
625
+ }
626
+
627
+ $collapseOneOne.on('shown.bs.collapse', function () {
628
+ if (collapsedElements.one) {
629
+ firstTest()
630
+ } else {
631
+ collapsedElements.one = true
632
+ }
633
+ })
634
+
635
+ $collapseOneTwo.on('shown.bs.collapse', function () {
636
+ if (collapsedElements.one) {
637
+ firstTest()
638
+ } else {
639
+ collapsedElements.one = true
640
+ }
641
+ })
642
+
643
+ $collapseTwoOne.on('shown.bs.collapse', function () {
644
+ if (collapsedElements.two) {
645
+ secondTest()
646
+ } else {
647
+ collapsedElements.two = true
648
+ }
649
+ })
650
+
651
+ $collapseTwoTwo.on('shown.bs.collapse', function () {
652
+ if (collapsedElements.two) {
653
+ secondTest()
654
+ } else {
655
+ collapsedElements.two = true
656
+ }
657
+ })
658
+
659
+ $trigger.trigger($.Event('click'))
660
+ })
661
+
662
+ QUnit.test('should collapse accordion children but not nested accordion children', function (assert) {
663
+ assert.expect(9)
664
+ var done = assert.async()
665
+ $('<div id="accordion">' +
666
+ '<div class="item">' +
667
+ '<a id="linkTrigger" data-toggle="collapse" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne"></a>' +
668
+ '<div id="collapseOne" data-parent="#accordion" class="collapse" role="tabpanel" aria-labelledby="headingThree">' +
669
+ '<div id="nestedAccordion">' +
670
+ '<div class="item">' +
671
+ '<a id="nestedLinkTrigger" data-toggle="collapse" href="#nestedCollapseOne" aria-expanded="false" aria-controls="nestedCollapseOne"></a>' +
672
+ '<div id="nestedCollapseOne" data-parent="#nestedAccordion" class="collapse" role="tabpanel" aria-labelledby="headingThree">' +
673
+ '</div>' +
674
+ '</div>' +
675
+ '</div>' +
676
+ '</div>' +
677
+ '</div>' +
678
+ '<div class="item">' +
679
+ '<a id="linkTriggerTwo" data-toggle="collapse" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"></a>' +
680
+ '<div id="collapseTwo" data-parent="#accordion" class="collapse show" role="tabpanel" aria-labelledby="headingTwo"></div>' +
681
+ '</div>' +
682
+ '</div>').appendTo('#qunit-fixture')
683
+ var $trigger = $('#linkTrigger')
684
+ var $triggerTwo = $('#linkTriggerTwo')
685
+ var $nestedTrigger = $('#nestedLinkTrigger')
686
+ var $collapseOne = $('#collapseOne')
687
+ var $collapseTwo = $('#collapseTwo')
688
+ var $nestedCollapseOne = $('#nestedCollapseOne')
689
+
690
+ $collapseOne.one('shown.bs.collapse', function () {
691
+ assert.ok($collapseOne.hasClass('show'), '#collapseOne is shown')
692
+ assert.ok(!$collapseTwo.hasClass('show'), '#collapseTwo is not shown')
693
+ assert.ok(!$('#nestedCollapseOne').hasClass('show'), '#nestedCollapseOne is not shown')
694
+ $nestedCollapseOne.one('shown.bs.collapse', function () {
695
+ assert.ok($collapseOne.hasClass('show'), '#collapseOne is shown')
696
+ assert.ok(!$collapseTwo.hasClass('show'), '#collapseTwo is not shown')
697
+ assert.ok($nestedCollapseOne.hasClass('show'), '#nestedCollapseOne is shown')
698
+ $collapseTwo.one('shown.bs.collapse', function () {
699
+ assert.ok(!$collapseOne.hasClass('show'), '#collapseOne is not shown')
700
+ assert.ok($collapseTwo.hasClass('show'), '#collapseTwo is shown')
701
+ assert.ok($nestedCollapseOne.hasClass('show'), '#nestedCollapseOne is shown')
702
+ done()
703
+ })
704
+ $triggerTwo.trigger($.Event('click'))
705
+ })
706
+ $nestedTrigger.trigger($.Event('click'))
707
+ })
708
+ $trigger.trigger($.Event('click'))
709
+ })
710
+
711
+ QUnit.test('should not prevent event for input', function (assert) {
712
+ assert.expect(3)
713
+ var done = assert.async()
714
+ var $target = $('<input type="checkbox" data-toggle="collapse" data-target="#collapsediv1" />').appendTo('#qunit-fixture')
715
+
716
+ $('<div id="collapsediv1"/>')
717
+ .appendTo('#qunit-fixture')
718
+ .on('shown.bs.collapse', function () {
719
+ assert.ok($(this).hasClass('show'))
720
+ assert.ok($target.attr('aria-expanded') === 'true')
721
+ assert.ok($target.prop('checked'))
722
+ done()
723
+ })
724
+
725
+ $target.trigger($.Event('click'))
726
+ })
727
+
728
+ QUnit.test('should add "collapsed" class to triggers only when all the targeted collapse are hidden', function (assert) {
729
+ assert.expect(9)
730
+ var done = assert.async()
731
+
732
+ var $trigger1 = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
733
+ var $trigger2 = $('<a role="button" data-toggle="collapse" href="#test2"/>').appendTo('#qunit-fixture')
734
+ var $trigger3 = $('<a role="button" data-toggle="collapse" href=".multi"/>').appendTo('#qunit-fixture')
735
+
736
+ var $target1 = $('<div id="test1" class="multi"/>').appendTo('#qunit-fixture')
737
+ var $target2 = $('<div id="test2" class="multi"/>').appendTo('#qunit-fixture')
738
+
739
+ $target2.one('shown.bs.collapse', function () {
740
+ assert.ok(!$trigger1.hasClass('collapsed'), 'trigger1 does not have collapsed class')
741
+ assert.ok(!$trigger2.hasClass('collapsed'), 'trigger2 does not have collapsed class')
742
+ assert.ok(!$trigger3.hasClass('collapsed'), 'trigger3 does not have collapsed class')
743
+ $target2.one('hidden.bs.collapse', function () {
744
+ assert.ok(!$trigger1.hasClass('collapsed'), 'trigger1 does not have collapsed class')
745
+ assert.ok($trigger2.hasClass('collapsed'), 'trigger2 has collapsed class')
746
+ assert.ok(!$trigger3.hasClass('collapsed'), 'trigger3 does not have collapsed class')
747
+ $target1.one('hidden.bs.collapse', function () {
748
+ assert.ok($trigger1.hasClass('collapsed'), 'trigger1 has collapsed class')
749
+ assert.ok($trigger2.hasClass('collapsed'), 'trigger2 has collapsed class')
750
+ assert.ok($trigger3.hasClass('collapsed'), 'trigger3 has collapsed class')
751
+ done()
752
+ })
753
+ $trigger1.trigger('click')
754
+ })
755
+ $trigger2.trigger('click')
756
+ })
757
+ $trigger3.trigger('click')
758
+ })
759
+
760
+ QUnit.test('should set aria-expanded="true" to triggers targeting shown collaspe and aria-expanded="false" only when all the targeted collapses are shown', function (assert) {
761
+ assert.expect(9)
762
+ var done = assert.async()
763
+
764
+ var $trigger1 = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
765
+ var $trigger2 = $('<a role="button" data-toggle="collapse" href="#test2"/>').appendTo('#qunit-fixture')
766
+ var $trigger3 = $('<a role="button" data-toggle="collapse" href=".multi"/>').appendTo('#qunit-fixture')
767
+
768
+ var $target1 = $('<div id="test1" class="multi collapse"/>').appendTo('#qunit-fixture')
769
+ var $target2 = $('<div id="test2" class="multi collapse"/>').appendTo('#qunit-fixture')
770
+
771
+ $target2.one('shown.bs.collapse', function () {
772
+ assert.strictEqual($trigger1.attr('aria-expanded'), 'true', 'aria-expanded on trigger1 is "true"')
773
+ assert.strictEqual($trigger2.attr('aria-expanded'), 'true', 'aria-expanded on trigger2 is "true"')
774
+ assert.strictEqual($trigger3.attr('aria-expanded'), 'true', 'aria-expanded on trigger3 is "true"')
775
+ $target2.one('hidden.bs.collapse', function () {
776
+ assert.strictEqual($trigger1.attr('aria-expanded'), 'true', 'aria-expanded on trigger1 is "true"')
777
+ assert.strictEqual($trigger2.attr('aria-expanded'), 'false', 'aria-expanded on trigger2 is "false"')
778
+ assert.strictEqual($trigger3.attr('aria-expanded'), 'true', 'aria-expanded on trigger3 is "true"')
779
+ $target1.one('hidden.bs.collapse', function () {
780
+ assert.strictEqual($trigger1.attr('aria-expanded'), 'false', 'aria-expanded on trigger1 is "fasle"')
781
+ assert.strictEqual($trigger2.attr('aria-expanded'), 'false', 'aria-expanded on trigger2 is "false"')
782
+ assert.strictEqual($trigger3.attr('aria-expanded'), 'false', 'aria-expanded on trigger3 is "false"')
783
+ done()
784
+ })
785
+ $trigger1.trigger('click')
786
+ })
787
+ $trigger2.trigger('click')
788
+ })
789
+ $trigger3.trigger('click')
790
+ })
791
+
792
+ QUnit.test('should not prevent interactions inside the collapse element', function (assert) {
793
+ assert.expect(2)
794
+ var done = assert.async()
795
+
796
+ var $target = $('<input type="checkbox" data-toggle="collapse" data-target="#collapsediv1" />').appendTo('#qunit-fixture')
797
+ var htmlCollapse =
798
+ '<div id="collapsediv1" class="collapse">' +
799
+ ' <input type="checkbox" id="testCheckbox" />' +
800
+ '</div>'
801
+
802
+ $(htmlCollapse)
803
+ .appendTo('#qunit-fixture')
804
+ .on('shown.bs.collapse', function () {
805
+ assert.ok($target.prop('checked'), '$trigger is checked')
806
+ var $testCheckbox = $('#testCheckbox')
807
+ $testCheckbox.trigger($.Event('click'))
808
+ setTimeout(function () {
809
+ assert.ok($testCheckbox.prop('checked'), '$testCheckbox is checked too')
810
+ done()
811
+ }, 5)
812
+ })
813
+
814
+ $target.trigger($.Event('click'))
815
+ })
816
+
817
+ QUnit.test('should allow jquery object in parent config', function (assert) {
818
+ assert.expect(1)
819
+ var html =
820
+ '<div class="my-collapse">' +
821
+ ' <div class="item">' +
822
+ ' <a data-toggle="collapse" href="#">Toggle item</a>' +
823
+ ' <div class="collapse">Lorem ipsum</div>' +
824
+ ' </div>' +
825
+ '</div>'
826
+
827
+ $(html).appendTo('#qunit-fixture')
828
+ try {
829
+ $('[data-toggle="collapse"]').bootstrapCollapse({
830
+ parent: $('.my-collapse')
831
+ })
832
+ assert.ok(true, 'collapse correctly created')
833
+ } catch (err) {
834
+ assert.ok(false, 'collapse not created')
835
+ }
836
+ })
837
+
838
+ QUnit.test('should allow DOM object in parent config', function (assert) {
839
+ assert.expect(1)
840
+ var html =
841
+ '<div class="my-collapse">' +
842
+ ' <div class="item">' +
843
+ ' <a data-toggle="collapse" href="#">Toggle item</a>' +
844
+ ' <div class="collapse">Lorem ipsum</div>' +
845
+ ' </div>' +
846
+ '</div>'
847
+
848
+ $(html).appendTo('#qunit-fixture')
849
+ try {
850
+ $('[data-toggle="collapse"]').bootstrapCollapse({
851
+ parent: $('.my-collapse')[0]
852
+ })
853
+ assert.ok(true, 'collapse correctly created')
854
+ } catch (err) {
855
+ assert.ok(false, 'collapse not created')
856
+ }
857
+ })
858
+
859
+ QUnit.test('should find collapse children if they have collapse class too not only data-parent', function (assert) {
860
+ assert.expect(2)
861
+ var done = assert.async()
862
+
863
+ var html =
864
+ '<div class="my-collapse">' +
865
+ ' <div class="item">' +
866
+ ' <a data-toggle="collapse" href="#">Toggle item 1</a>' +
867
+ ' <div id="collapse1" class="collapse show">Lorem ipsum 1</div>' +
868
+ ' </div>' +
869
+ ' <div class="item">' +
870
+ ' <a id="triggerCollapse2" data-toggle="collapse" href="#">Toggle item 2</a>' +
871
+ ' <div id="collapse2" class="collapse">Lorem ipsum 2</div>' +
872
+ ' </div>' +
873
+ '</div>'
874
+
875
+ $(html).appendTo('#qunit-fixture')
876
+
877
+ var $parent = $('.my-collapse')
878
+ var $collapse2 = $('#collapse2')
879
+ $parent.find('.collapse').bootstrapCollapse({
880
+ parent: $parent,
881
+ toggle: false
882
+ })
883
+
884
+ $collapse2.on('shown.bs.collapse', function () {
885
+ assert.ok($collapse2.hasClass('show'))
886
+ assert.ok(!$('#collapse1').hasClass('show'))
887
+ done()
888
+ })
889
+
890
+ $collapse2.bootstrapCollapse('toggle')
891
+ })
892
+ })