vertx-howtos-jekyll-theme 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +52 -0
- data/_layouts/page.html +61 -0
- data/_sass/bootstrap/js/dist/alert.js +199 -0
- data/_sass/bootstrap/js/dist/alert.js.map +1 -0
- data/_sass/bootstrap/js/dist/button.js +187 -0
- data/_sass/bootstrap/js/dist/button.js.map +1 -0
- data/_sass/bootstrap/js/dist/carousel.js +666 -0
- data/_sass/bootstrap/js/dist/carousel.js.map +1 -0
- data/_sass/bootstrap/js/dist/collapse.js +428 -0
- data/_sass/bootstrap/js/dist/collapse.js.map +1 -0
- data/_sass/bootstrap/js/dist/dropdown.js +591 -0
- data/_sass/bootstrap/js/dist/dropdown.js.map +1 -0
- data/_sass/bootstrap/js/dist/index.js +23 -0
- data/_sass/bootstrap/js/dist/index.js.map +1 -0
- data/_sass/bootstrap/js/dist/modal.js +644 -0
- data/_sass/bootstrap/js/dist/modal.js.map +1 -0
- data/_sass/bootstrap/js/dist/popover.js +261 -0
- data/_sass/bootstrap/js/dist/popover.js.map +1 -0
- data/_sass/bootstrap/js/dist/scrollspy.js +375 -0
- data/_sass/bootstrap/js/dist/scrollspy.js.map +1 -0
- data/_sass/bootstrap/js/dist/tab.js +266 -0
- data/_sass/bootstrap/js/dist/tab.js.map +1 -0
- data/_sass/bootstrap/js/dist/toast.js +278 -0
- data/_sass/bootstrap/js/dist/toast.js.map +1 -0
- data/_sass/bootstrap/js/dist/tooltip.js +745 -0
- data/_sass/bootstrap/js/dist/tooltip.js.map +1 -0
- data/_sass/bootstrap/js/dist/util.js +168 -0
- data/_sass/bootstrap/js/dist/util.js.map +1 -0
- data/_sass/bootstrap/js/src/alert.js +179 -0
- data/_sass/bootstrap/js/src/button.js +171 -0
- data/_sass/bootstrap/js/src/carousel.js +604 -0
- data/_sass/bootstrap/js/src/collapse.js +402 -0
- data/_sass/bootstrap/js/src/dropdown.js +538 -0
- data/_sass/bootstrap/js/src/index.js +52 -0
- data/_sass/bootstrap/js/src/modal.js +587 -0
- data/_sass/bootstrap/js/src/popover.js +184 -0
- data/_sass/bootstrap/js/src/scrollspy.js +326 -0
- data/_sass/bootstrap/js/src/tab.js +257 -0
- data/_sass/bootstrap/js/src/toast.js +223 -0
- data/_sass/bootstrap/js/src/tooltip.js +735 -0
- data/_sass/bootstrap/js/src/util.js +173 -0
- data/_sass/bootstrap/js/tests/README.md +69 -0
- data/_sass/bootstrap/js/tests/browsers.js +82 -0
- data/_sass/bootstrap/js/tests/index.html +145 -0
- data/_sass/bootstrap/js/tests/integration/bundle.js +8 -0
- data/_sass/bootstrap/js/tests/integration/index.html +66 -0
- data/_sass/bootstrap/js/tests/integration/rollup.bundle.js +20 -0
- data/_sass/bootstrap/js/tests/karma.conf.js +145 -0
- data/_sass/bootstrap/js/tests/unit/.eslintrc.json +40 -0
- data/_sass/bootstrap/js/tests/unit/alert.js +123 -0
- data/_sass/bootstrap/js/tests/unit/button.js +222 -0
- data/_sass/bootstrap/js/tests/unit/carousel.js +1273 -0
- data/_sass/bootstrap/js/tests/unit/collapse.js +892 -0
- data/_sass/bootstrap/js/tests/unit/dropdown.js +1364 -0
- data/_sass/bootstrap/js/tests/unit/modal.js +796 -0
- data/_sass/bootstrap/js/tests/unit/popover.js +471 -0
- data/_sass/bootstrap/js/tests/unit/scrollspy.js +728 -0
- data/_sass/bootstrap/js/tests/unit/tab.js +462 -0
- data/_sass/bootstrap/js/tests/unit/toast.js +239 -0
- data/_sass/bootstrap/js/tests/unit/tooltip.js +1072 -0
- data/_sass/bootstrap/js/tests/unit/util.js +164 -0
- data/_sass/bootstrap/js/tests/visual/alert.html +58 -0
- data/_sass/bootstrap/js/tests/visual/button.html +51 -0
- data/_sass/bootstrap/js/tests/visual/carousel.html +66 -0
- data/_sass/bootstrap/js/tests/visual/collapse.html +78 -0
- data/_sass/bootstrap/js/tests/visual/dropdown.html +212 -0
- data/_sass/bootstrap/js/tests/visual/modal.html +268 -0
- data/_sass/bootstrap/js/tests/visual/popover.html +46 -0
- data/_sass/bootstrap/js/tests/visual/scrollspy.html +95 -0
- data/_sass/bootstrap/js/tests/visual/tab.html +234 -0
- data/_sass/bootstrap/js/tests/visual/toast.html +72 -0
- data/_sass/bootstrap/js/tests/visual/tooltip.html +106 -0
- data/_sass/bootstrap/scss/_alert.scss +51 -0
- data/_sass/bootstrap/scss/_badge.scss +53 -0
- data/_sass/bootstrap/scss/_breadcrumb.scss +41 -0
- data/_sass/bootstrap/scss/_button-group.scss +163 -0
- data/_sass/bootstrap/scss/_buttons.scss +140 -0
- data/_sass/bootstrap/scss/_card.scss +310 -0
- data/_sass/bootstrap/scss/_carousel.scss +198 -0
- data/_sass/bootstrap/scss/_close.scss +44 -0
- data/_sass/bootstrap/scss/_code.scss +48 -0
- data/_sass/bootstrap/scss/_custom-forms.scss +507 -0
- data/_sass/bootstrap/scss/_dropdown.scss +191 -0
- data/_sass/bootstrap/scss/_forms.scss +334 -0
- data/_sass/bootstrap/scss/_functions.scss +86 -0
- data/_sass/bootstrap/scss/_grid.scss +52 -0
- data/_sass/bootstrap/scss/_images.scss +42 -0
- data/_sass/bootstrap/scss/_input-group.scss +193 -0
- data/_sass/bootstrap/scss/_jumbotron.scss +16 -0
- data/_sass/bootstrap/scss/_list-group.scss +121 -0
- data/_sass/bootstrap/scss/_media.scss +8 -0
- data/_sass/bootstrap/scss/_mixins.scss +41 -0
- data/_sass/bootstrap/scss/_modal.scss +186 -0
- data/_sass/bootstrap/scss/_nav.scss +120 -0
- data/_sass/bootstrap/scss/_navbar.scss +299 -0
- data/_sass/bootstrap/scss/_pagination.scss +78 -0
- data/_sass/bootstrap/scss/_popover.scss +183 -0
- data/_sass/bootstrap/scss/_print.scss +141 -0
- data/_sass/bootstrap/scss/_progress.scss +34 -0
- data/_sass/bootstrap/scss/_reboot.scss +462 -0
- data/_sass/bootstrap/scss/_root.scss +19 -0
- data/_sass/bootstrap/scss/_spinners.scss +53 -0
- data/_sass/bootstrap/scss/_tables.scss +187 -0
- data/_sass/bootstrap/scss/_toasts.scss +43 -0
- data/_sass/bootstrap/scss/_tooltip.scss +115 -0
- data/_sass/bootstrap/scss/_transitions.scss +22 -0
- data/_sass/bootstrap/scss/_type.scss +125 -0
- data/_sass/bootstrap/scss/_utilities.scss +16 -0
- data/_sass/bootstrap/scss/_variables.scss +1091 -0
- data/_sass/bootstrap/scss/bootstrap-grid.scss +29 -0
- data/_sass/bootstrap/scss/bootstrap-reboot.scss +12 -0
- data/_sass/bootstrap/scss/bootstrap.scss +44 -0
- data/_sass/bootstrap/scss/mixins/_alert.scss +13 -0
- data/_sass/bootstrap/scss/mixins/_background-variant.scss +21 -0
- data/_sass/bootstrap/scss/mixins/_badge.scss +11 -0
- data/_sass/bootstrap/scss/mixins/_border-radius.scss +35 -0
- data/_sass/bootstrap/scss/mixins/_box-shadow.scss +5 -0
- data/_sass/bootstrap/scss/mixins/_breakpoints.scss +123 -0
- data/_sass/bootstrap/scss/mixins/_buttons.scss +111 -0
- data/_sass/bootstrap/scss/mixins/_caret.scss +62 -0
- data/_sass/bootstrap/scss/mixins/_clearfix.scss +7 -0
- data/_sass/bootstrap/scss/mixins/_float.scss +11 -0
- data/_sass/bootstrap/scss/mixins/_forms.scss +198 -0
- data/_sass/bootstrap/scss/mixins/_gradients.scss +45 -0
- data/_sass/bootstrap/scss/mixins/_grid-framework.scss +66 -0
- data/_sass/bootstrap/scss/mixins/_grid.scss +51 -0
- data/_sass/bootstrap/scss/mixins/_hover.scss +37 -0
- data/_sass/bootstrap/scss/mixins/_image.scss +36 -0
- data/_sass/bootstrap/scss/mixins/_list-group.scss +21 -0
- data/_sass/bootstrap/scss/mixins/_lists.scss +7 -0
- data/_sass/bootstrap/scss/mixins/_nav-divider.scss +10 -0
- data/_sass/bootstrap/scss/mixins/_pagination.scss +22 -0
- data/_sass/bootstrap/scss/mixins/_reset-text.scss +17 -0
- data/_sass/bootstrap/scss/mixins/_resize.scss +6 -0
- data/_sass/bootstrap/scss/mixins/_screen-reader.scss +33 -0
- data/_sass/bootstrap/scss/mixins/_size.scss +6 -0
- data/_sass/bootstrap/scss/mixins/_table-row.scss +39 -0
- data/_sass/bootstrap/scss/mixins/_text-emphasis.scss +14 -0
- data/_sass/bootstrap/scss/mixins/_text-hide.scss +13 -0
- data/_sass/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- data/_sass/bootstrap/scss/mixins/_transition.scss +16 -0
- data/_sass/bootstrap/scss/mixins/_visibility.scss +7 -0
- data/_sass/bootstrap/scss/utilities/_align.scss +8 -0
- data/_sass/bootstrap/scss/utilities/_background.scss +19 -0
- data/_sass/bootstrap/scss/utilities/_borders.scss +63 -0
- data/_sass/bootstrap/scss/utilities/_clearfix.scss +3 -0
- data/_sass/bootstrap/scss/utilities/_display.scss +38 -0
- data/_sass/bootstrap/scss/utilities/_embed.scss +39 -0
- data/_sass/bootstrap/scss/utilities/_flex.scss +51 -0
- data/_sass/bootstrap/scss/utilities/_float.scss +9 -0
- data/_sass/bootstrap/scss/utilities/_overflow.scss +5 -0
- data/_sass/bootstrap/scss/utilities/_position.scss +32 -0
- data/_sass/bootstrap/scss/utilities/_screenreaders.scss +11 -0
- data/_sass/bootstrap/scss/utilities/_shadows.scss +6 -0
- data/_sass/bootstrap/scss/utilities/_sizing.scss +20 -0
- data/_sass/bootstrap/scss/utilities/_spacing.scss +73 -0
- data/_sass/bootstrap/scss/utilities/_text.scss +67 -0
- data/_sass/bootstrap/scss/utilities/_visibility.scss +11 -0
- data/_sass/custom.scss +1 -0
- data/assets/css/style.scss +65 -0
- data/assets/images/vertx-square.svg +1 -0
- metadata +248 -0
@@ -0,0 +1,1364 @@
|
|
1
|
+
$(function () {
|
2
|
+
'use strict'
|
3
|
+
|
4
|
+
QUnit.module('dropdowns plugin')
|
5
|
+
|
6
|
+
QUnit.test('should be defined on jquery object', function (assert) {
|
7
|
+
assert.expect(1)
|
8
|
+
assert.ok($(document.body).dropdown, 'dropdown method is defined')
|
9
|
+
})
|
10
|
+
|
11
|
+
QUnit.module('dropdowns', {
|
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.bootstrapDropdown = $.fn.dropdown.noConflict()
|
15
|
+
},
|
16
|
+
afterEach: function () {
|
17
|
+
$.fn.dropdown = $.fn.bootstrapDropdown
|
18
|
+
delete $.fn.bootstrapDropdown
|
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.dropdown, 'undefined', 'dropdown 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.bootstrapDropdown()
|
32
|
+
try {
|
33
|
+
$el.bootstrapDropdown('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 $dropdown = $el.bootstrapDropdown()
|
43
|
+
assert.ok($dropdown instanceof $, 'returns jquery collection')
|
44
|
+
assert.strictEqual($dropdown[0], $el[0], 'collection contains element')
|
45
|
+
})
|
46
|
+
|
47
|
+
QUnit.test('should not open dropdown if target is disabled via attribute', function (assert) {
|
48
|
+
assert.expect(1)
|
49
|
+
var done = assert.async()
|
50
|
+
var dropdownHTML = '<div class="tabs">' +
|
51
|
+
'<div class="dropdown">' +
|
52
|
+
'<button disabled href="#" class="btn dropdown-toggle" data-toggle="dropdown">Dropdown</button>' +
|
53
|
+
'<div class="dropdown-menu">' +
|
54
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
55
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
56
|
+
'<div class="divider"/>' +
|
57
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
58
|
+
'</div>' +
|
59
|
+
'</div>' +
|
60
|
+
'</div>'
|
61
|
+
$(dropdownHTML).appendTo('#qunit-fixture')
|
62
|
+
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
|
63
|
+
$dropdown.on('click', function () {
|
64
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'))
|
65
|
+
done()
|
66
|
+
})
|
67
|
+
$dropdown.trigger($.Event('click'))
|
68
|
+
})
|
69
|
+
|
70
|
+
QUnit.test('should not add class position-static to dropdown if boundary not set', function (assert) {
|
71
|
+
assert.expect(1)
|
72
|
+
var done = assert.async()
|
73
|
+
var dropdownHTML = '<div class="tabs">' +
|
74
|
+
'<div class="dropdown">' +
|
75
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
76
|
+
'<div class="dropdown-menu">' +
|
77
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
78
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
79
|
+
'</div>' +
|
80
|
+
'</div>' +
|
81
|
+
'</div>'
|
82
|
+
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown()
|
83
|
+
$dropdown
|
84
|
+
.parent('.dropdown')
|
85
|
+
.on('shown.bs.dropdown', function () {
|
86
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('position-static'), '"position-static" class not added')
|
87
|
+
done()
|
88
|
+
})
|
89
|
+
$dropdown.trigger('click')
|
90
|
+
})
|
91
|
+
|
92
|
+
QUnit.test('should add class position-static to dropdown if boundary not scrollParent', function (assert) {
|
93
|
+
assert.expect(1)
|
94
|
+
var done = assert.async()
|
95
|
+
var dropdownHTML = '<div class="tabs">' +
|
96
|
+
'<div class="dropdown">' +
|
97
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-boundary="viewport">Dropdown</a>' +
|
98
|
+
'<div class="dropdown-menu">' +
|
99
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
100
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
101
|
+
'</div>' +
|
102
|
+
'</div>' +
|
103
|
+
'</div>'
|
104
|
+
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown()
|
105
|
+
$dropdown
|
106
|
+
.parent('.dropdown')
|
107
|
+
.on('shown.bs.dropdown', function () {
|
108
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('position-static'), '"position-static" class added')
|
109
|
+
done()
|
110
|
+
})
|
111
|
+
$dropdown.trigger('click')
|
112
|
+
})
|
113
|
+
|
114
|
+
QUnit.test('should set aria-expanded="true" on target when dropdown menu is shown', function (assert) {
|
115
|
+
assert.expect(1)
|
116
|
+
var done = assert.async()
|
117
|
+
var dropdownHTML = '<div class="tabs">' +
|
118
|
+
'<div class="dropdown">' +
|
119
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Dropdown</a>' +
|
120
|
+
'<div class="dropdown-menu">' +
|
121
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
122
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
123
|
+
'<div class="divider"/>' +
|
124
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
125
|
+
'</div>' +
|
126
|
+
'</div>' +
|
127
|
+
'</div>'
|
128
|
+
var $dropdown = $(dropdownHTML)
|
129
|
+
.appendTo('#qunit-fixture')
|
130
|
+
.find('[data-toggle="dropdown"]')
|
131
|
+
.bootstrapDropdown()
|
132
|
+
$dropdown
|
133
|
+
.parent('.dropdown')
|
134
|
+
.on('shown.bs.dropdown', function () {
|
135
|
+
assert.strictEqual($dropdown.attr('aria-expanded'), 'true', 'aria-expanded is set to string "true" on click')
|
136
|
+
done()
|
137
|
+
})
|
138
|
+
$dropdown.trigger('click')
|
139
|
+
})
|
140
|
+
|
141
|
+
QUnit.test('should set aria-expanded="false" on target when dropdown menu is hidden', function (assert) {
|
142
|
+
assert.expect(1)
|
143
|
+
var done = assert.async()
|
144
|
+
var dropdownHTML = '<div class="tabs">' +
|
145
|
+
'<div class="dropdown">' +
|
146
|
+
'<a href="#" class="dropdown-toggle" aria-expanded="false" data-toggle="dropdown">Dropdown</a>' +
|
147
|
+
'<div class="dropdown-menu">' +
|
148
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
149
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
150
|
+
'<div class="divider"/>' +
|
151
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
152
|
+
'</div>' +
|
153
|
+
'</div>' +
|
154
|
+
'</div>'
|
155
|
+
var $dropdown = $(dropdownHTML)
|
156
|
+
.appendTo('#qunit-fixture')
|
157
|
+
.find('[data-toggle="dropdown"]')
|
158
|
+
.bootstrapDropdown()
|
159
|
+
|
160
|
+
$dropdown
|
161
|
+
.parent('.dropdown')
|
162
|
+
.on('hidden.bs.dropdown', function () {
|
163
|
+
assert.strictEqual($dropdown.attr('aria-expanded'), 'false', 'aria-expanded is set to string "false" on hide')
|
164
|
+
done()
|
165
|
+
})
|
166
|
+
|
167
|
+
$dropdown.trigger('click')
|
168
|
+
$(document.body).trigger('click')
|
169
|
+
})
|
170
|
+
|
171
|
+
QUnit.test('should not open dropdown if target is disabled via class', function (assert) {
|
172
|
+
assert.expect(1)
|
173
|
+
var done = assert.async()
|
174
|
+
var dropdownHTML = '<div class="tabs">' +
|
175
|
+
'<div class="dropdown">' +
|
176
|
+
'<button href="#" class="btn dropdown-toggle disabled" data-toggle="dropdown">Dropdown</button>' +
|
177
|
+
'<div class="dropdown-menu">' +
|
178
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
179
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
180
|
+
'<div class="divider"/>' +
|
181
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
182
|
+
'</div>' +
|
183
|
+
'</div>' +
|
184
|
+
'</div>'
|
185
|
+
|
186
|
+
$(dropdownHTML).appendTo('#qunit-fixture')
|
187
|
+
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
|
188
|
+
$dropdown.on('click', function () {
|
189
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'))
|
190
|
+
done()
|
191
|
+
})
|
192
|
+
$dropdown.trigger($.Event('click'))
|
193
|
+
})
|
194
|
+
|
195
|
+
QUnit.test('should add class show to menu if clicked', function (assert) {
|
196
|
+
assert.expect(1)
|
197
|
+
var done = assert.async()
|
198
|
+
var dropdownHTML = '<div class="tabs">' +
|
199
|
+
'<div class="dropdown">' +
|
200
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
201
|
+
'<div class="dropdown-menu">' +
|
202
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
203
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
204
|
+
'<div class="divider"/>' +
|
205
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
206
|
+
'</div>' +
|
207
|
+
'</div>' +
|
208
|
+
'</div>'
|
209
|
+
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown()
|
210
|
+
$dropdown
|
211
|
+
.parent('.dropdown')
|
212
|
+
.on('shown.bs.dropdown', function () {
|
213
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
|
214
|
+
done()
|
215
|
+
})
|
216
|
+
$dropdown.trigger('click')
|
217
|
+
})
|
218
|
+
|
219
|
+
QUnit.test('should remove "show" class if body is clicked', function (assert) {
|
220
|
+
assert.expect(2)
|
221
|
+
var done = assert.async()
|
222
|
+
var dropdownHTML = '<div class="tabs">' +
|
223
|
+
'<div class="dropdown">' +
|
224
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
225
|
+
'<div class="dropdown-menu">' +
|
226
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
227
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
228
|
+
'<div class="divider"/>' +
|
229
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
230
|
+
'</div>' +
|
231
|
+
'</div>' +
|
232
|
+
'</div>'
|
233
|
+
var $dropdown = $(dropdownHTML)
|
234
|
+
.appendTo('#qunit-fixture')
|
235
|
+
.find('[data-toggle="dropdown"]')
|
236
|
+
.bootstrapDropdown()
|
237
|
+
|
238
|
+
$dropdown
|
239
|
+
.parent('.dropdown')
|
240
|
+
.on('shown.bs.dropdown', function () {
|
241
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
|
242
|
+
$(document.body).trigger('click')
|
243
|
+
}).on('hidden.bs.dropdown', function () {
|
244
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
|
245
|
+
done()
|
246
|
+
})
|
247
|
+
$dropdown.trigger('click')
|
248
|
+
})
|
249
|
+
|
250
|
+
QUnit.test('should remove "show" class if tabbing outside of menu', function (assert) {
|
251
|
+
assert.expect(2)
|
252
|
+
var done = assert.async()
|
253
|
+
var dropdownHTML = '<div class="tabs">' +
|
254
|
+
'<div class="dropdown">' +
|
255
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
256
|
+
'<div class="dropdown-menu">' +
|
257
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
258
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
259
|
+
'<div class="dropdown-divider"/>' +
|
260
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
261
|
+
'</div>' +
|
262
|
+
'</div>' +
|
263
|
+
'</div>'
|
264
|
+
var $dropdown = $(dropdownHTML)
|
265
|
+
.appendTo('#qunit-fixture')
|
266
|
+
.find('[data-toggle="dropdown"]')
|
267
|
+
.bootstrapDropdown()
|
268
|
+
$dropdown
|
269
|
+
.parent('.dropdown')
|
270
|
+
.on('shown.bs.dropdown', function () {
|
271
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
|
272
|
+
var e = $.Event('keyup')
|
273
|
+
e.which = 9 // Tab
|
274
|
+
$(document.body).trigger(e)
|
275
|
+
}).on('hidden.bs.dropdown', function () {
|
276
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
|
277
|
+
done()
|
278
|
+
})
|
279
|
+
$dropdown.trigger('click')
|
280
|
+
})
|
281
|
+
|
282
|
+
QUnit.test('should remove "show" class if body is clicked, with multiple dropdowns', function (assert) {
|
283
|
+
assert.expect(7)
|
284
|
+
var done = assert.async()
|
285
|
+
var dropdownHTML = '<div class="nav">' +
|
286
|
+
'<div class="dropdown" id="testmenu">' +
|
287
|
+
'<a class="dropdown-toggle" data-toggle="dropdown" href="#testmenu">Test menu <span class="caret"/></a>' +
|
288
|
+
'<div class="dropdown-menu">' +
|
289
|
+
'<a class="dropdown-item" href="#sub1">Submenu 1</a>' +
|
290
|
+
'</div>' +
|
291
|
+
'</div>' +
|
292
|
+
'</div>' +
|
293
|
+
'<div class="btn-group">' +
|
294
|
+
'<button class="btn">Actions</button>' +
|
295
|
+
'<button class="btn dropdown-toggle" data-toggle="dropdown"></button>' +
|
296
|
+
'<div class="dropdown-menu">' +
|
297
|
+
'<a class="dropdown-item" href="#">Action 1</a>' +
|
298
|
+
'</div>' +
|
299
|
+
'</div>'
|
300
|
+
var $dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle="dropdown"]')
|
301
|
+
var $first = $dropdowns.first()
|
302
|
+
var $last = $dropdowns.last()
|
303
|
+
|
304
|
+
assert.strictEqual($dropdowns.length, 2, 'two dropdowns')
|
305
|
+
|
306
|
+
$first.parent('.dropdown')
|
307
|
+
.on('shown.bs.dropdown', function () {
|
308
|
+
assert.strictEqual($first.parents('.show').length, 1, '"show" class added on click')
|
309
|
+
assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown')
|
310
|
+
$(document.body).trigger('click')
|
311
|
+
}).on('hidden.bs.dropdown', function () {
|
312
|
+
assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed')
|
313
|
+
$last.trigger('click')
|
314
|
+
})
|
315
|
+
|
316
|
+
$last.parent('.btn-group')
|
317
|
+
.on('shown.bs.dropdown', function () {
|
318
|
+
assert.strictEqual($last.parent('.show').length, 1, '"show" class added on click')
|
319
|
+
assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown')
|
320
|
+
$(document.body).trigger('click')
|
321
|
+
}).on('hidden.bs.dropdown', function () {
|
322
|
+
assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed')
|
323
|
+
done()
|
324
|
+
})
|
325
|
+
$first.trigger('click')
|
326
|
+
})
|
327
|
+
|
328
|
+
QUnit.test('should remove "show" class if body if tabbing outside of menu, with multiple dropdowns', function (assert) {
|
329
|
+
assert.expect(7)
|
330
|
+
var done = assert.async()
|
331
|
+
var dropdownHTML = '<div class="nav">' +
|
332
|
+
'<div class="dropdown" id="testmenu">' +
|
333
|
+
'<a class="dropdown-toggle" data-toggle="dropdown" href="#testmenu">Test menu <span class="caret"/></a>' +
|
334
|
+
'<div class="dropdown-menu">' +
|
335
|
+
'<a class="dropdown-item" href="#sub1">Submenu 1</a>' +
|
336
|
+
'</div>' +
|
337
|
+
'</div>' +
|
338
|
+
'</div>' +
|
339
|
+
'<div class="btn-group">' +
|
340
|
+
'<button class="btn">Actions</button>' +
|
341
|
+
'<button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"/></button>' +
|
342
|
+
'<div class="dropdown-menu">' +
|
343
|
+
'<a class="dropdown-item" href="#">Action 1</a>' +
|
344
|
+
'</div>' +
|
345
|
+
'</div>'
|
346
|
+
var $dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle="dropdown"]')
|
347
|
+
var $first = $dropdowns.first()
|
348
|
+
var $last = $dropdowns.last()
|
349
|
+
|
350
|
+
assert.strictEqual($dropdowns.length, 2, 'two dropdowns')
|
351
|
+
|
352
|
+
$first.parent('.dropdown')
|
353
|
+
.on('shown.bs.dropdown', function () {
|
354
|
+
assert.strictEqual($first.parents('.show').length, 1, '"show" class added on click')
|
355
|
+
assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown')
|
356
|
+
var e = $.Event('keyup')
|
357
|
+
e.which = 9 // Tab
|
358
|
+
$(document.body).trigger(e)
|
359
|
+
}).on('hidden.bs.dropdown', function () {
|
360
|
+
assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed')
|
361
|
+
$last.trigger('click')
|
362
|
+
})
|
363
|
+
|
364
|
+
$last.parent('.btn-group')
|
365
|
+
.on('shown.bs.dropdown', function () {
|
366
|
+
assert.strictEqual($last.parent('.show').length, 1, '"show" class added on click')
|
367
|
+
assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown')
|
368
|
+
var e = $.Event('keyup')
|
369
|
+
e.which = 9 // Tab
|
370
|
+
$(document.body).trigger(e)
|
371
|
+
}).on('hidden.bs.dropdown', function () {
|
372
|
+
assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed')
|
373
|
+
done()
|
374
|
+
})
|
375
|
+
$first.trigger('click')
|
376
|
+
})
|
377
|
+
|
378
|
+
QUnit.test('should fire show and hide event', function (assert) {
|
379
|
+
assert.expect(2)
|
380
|
+
var dropdownHTML = '<div class="tabs">' +
|
381
|
+
'<div class="dropdown">' +
|
382
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
383
|
+
'<div class="dropdown-menu">' +
|
384
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
385
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
386
|
+
'<div class="divider"/>' +
|
387
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
388
|
+
'</div>' +
|
389
|
+
'</div>' +
|
390
|
+
'</div>'
|
391
|
+
var $dropdown = $(dropdownHTML)
|
392
|
+
.appendTo('#qunit-fixture')
|
393
|
+
.find('[data-toggle="dropdown"]')
|
394
|
+
.bootstrapDropdown()
|
395
|
+
|
396
|
+
var done = assert.async()
|
397
|
+
|
398
|
+
$dropdown
|
399
|
+
.parent('.dropdown')
|
400
|
+
.on('show.bs.dropdown', function () {
|
401
|
+
assert.ok(true, 'show was fired')
|
402
|
+
})
|
403
|
+
.on('hide.bs.dropdown', function () {
|
404
|
+
assert.ok(true, 'hide was fired')
|
405
|
+
done()
|
406
|
+
})
|
407
|
+
|
408
|
+
$dropdown.trigger('click')
|
409
|
+
$(document.body).trigger('click')
|
410
|
+
})
|
411
|
+
|
412
|
+
QUnit.test('should fire shown and hidden event', function (assert) {
|
413
|
+
assert.expect(2)
|
414
|
+
var dropdownHTML = '<div class="tabs">' +
|
415
|
+
'<div class="dropdown">' +
|
416
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
417
|
+
'<div class="dropdown-menu">' +
|
418
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
419
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
420
|
+
'<div class="divider"/>' +
|
421
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
422
|
+
'</div>' +
|
423
|
+
'</div>' +
|
424
|
+
'</div>'
|
425
|
+
var $dropdown = $(dropdownHTML)
|
426
|
+
.appendTo('#qunit-fixture')
|
427
|
+
.find('[data-toggle="dropdown"]')
|
428
|
+
.bootstrapDropdown()
|
429
|
+
|
430
|
+
var done = assert.async()
|
431
|
+
|
432
|
+
$dropdown
|
433
|
+
.parent('.dropdown')
|
434
|
+
.on('shown.bs.dropdown', function () {
|
435
|
+
assert.ok(true, 'shown was fired')
|
436
|
+
})
|
437
|
+
.on('hidden.bs.dropdown', function () {
|
438
|
+
assert.ok(true, 'hidden was fired')
|
439
|
+
done()
|
440
|
+
})
|
441
|
+
|
442
|
+
$dropdown.trigger('click')
|
443
|
+
$(document.body).trigger('click')
|
444
|
+
})
|
445
|
+
|
446
|
+
QUnit.test('should fire shown and hidden event with a relatedTarget', function (assert) {
|
447
|
+
assert.expect(2)
|
448
|
+
var dropdownHTML = '<div class="tabs">' +
|
449
|
+
'<div class="dropdown">' +
|
450
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
451
|
+
'<div class="dropdown-menu">' +
|
452
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
453
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
454
|
+
'<div class="divider"/>' +
|
455
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
456
|
+
'</div>' +
|
457
|
+
'</div>' +
|
458
|
+
'</div>'
|
459
|
+
var $dropdown = $(dropdownHTML)
|
460
|
+
.appendTo('#qunit-fixture')
|
461
|
+
.find('[data-toggle="dropdown"]')
|
462
|
+
.bootstrapDropdown()
|
463
|
+
var done = assert.async()
|
464
|
+
|
465
|
+
$dropdown.parent('.dropdown')
|
466
|
+
.on('hidden.bs.dropdown', function (e) {
|
467
|
+
assert.strictEqual(e.relatedTarget, $dropdown[0])
|
468
|
+
done()
|
469
|
+
})
|
470
|
+
.on('shown.bs.dropdown', function (e) {
|
471
|
+
assert.strictEqual(e.relatedTarget, $dropdown[0])
|
472
|
+
$(document.body).trigger('click')
|
473
|
+
})
|
474
|
+
|
475
|
+
$dropdown.trigger('click')
|
476
|
+
})
|
477
|
+
|
478
|
+
QUnit.test('should fire hide and hidden event with a clickEvent', function (assert) {
|
479
|
+
assert.expect(3)
|
480
|
+
var dropdownHTML = '<div class="tabs">' +
|
481
|
+
'<div class="dropdown">' +
|
482
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
483
|
+
'<div class="dropdown-menu">' +
|
484
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
485
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
486
|
+
'<div class="divider"/>' +
|
487
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
488
|
+
'</div>' +
|
489
|
+
'</div>' +
|
490
|
+
'</div>'
|
491
|
+
var $dropdown = $(dropdownHTML)
|
492
|
+
.appendTo('#qunit-fixture')
|
493
|
+
.find('[data-toggle="dropdown"]')
|
494
|
+
.bootstrapDropdown()
|
495
|
+
|
496
|
+
$dropdown.parent('.dropdown')
|
497
|
+
.on('hide.bs.dropdown', function (e) {
|
498
|
+
assert.ok(e.clickEvent)
|
499
|
+
})
|
500
|
+
.on('hidden.bs.dropdown', function (e) {
|
501
|
+
assert.ok(e.clickEvent)
|
502
|
+
})
|
503
|
+
.on('shown.bs.dropdown', function () {
|
504
|
+
assert.ok(true, 'shown was fired')
|
505
|
+
$(document.body).trigger('click')
|
506
|
+
})
|
507
|
+
|
508
|
+
$dropdown.trigger('click')
|
509
|
+
})
|
510
|
+
|
511
|
+
QUnit.test('should fire hide and hidden event without a clickEvent if event type is not click', function (assert) {
|
512
|
+
assert.expect(3)
|
513
|
+
var dropdownHTML = '<div class="tabs">' +
|
514
|
+
'<div class="dropdown">' +
|
515
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
516
|
+
'<div class="dropdown-menu">' +
|
517
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
518
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
519
|
+
'<div class="divider"/>' +
|
520
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
521
|
+
'</div>' +
|
522
|
+
'</div>' +
|
523
|
+
'</div>'
|
524
|
+
var $dropdown = $(dropdownHTML)
|
525
|
+
.appendTo('#qunit-fixture')
|
526
|
+
.find('[data-toggle="dropdown"]')
|
527
|
+
.bootstrapDropdown()
|
528
|
+
|
529
|
+
$dropdown.parent('.dropdown')
|
530
|
+
.on('hide.bs.dropdown', function (e) {
|
531
|
+
assert.notOk(e.clickEvent)
|
532
|
+
})
|
533
|
+
.on('hidden.bs.dropdown', function (e) {
|
534
|
+
assert.notOk(e.clickEvent)
|
535
|
+
})
|
536
|
+
.on('shown.bs.dropdown', function () {
|
537
|
+
assert.ok(true, 'shown was fired')
|
538
|
+
$dropdown.trigger($.Event('keydown', {
|
539
|
+
which: 27
|
540
|
+
}))
|
541
|
+
})
|
542
|
+
|
543
|
+
$dropdown.trigger('click')
|
544
|
+
})
|
545
|
+
|
546
|
+
QUnit.test('should ignore keyboard events within <input>s and <textarea>s', function (assert) {
|
547
|
+
assert.expect(3)
|
548
|
+
var done = assert.async()
|
549
|
+
|
550
|
+
var dropdownHTML = '<div class="tabs">' +
|
551
|
+
'<div class="dropdown">' +
|
552
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
553
|
+
'<div class="dropdown-menu">' +
|
554
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
555
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
556
|
+
'<div class="divider"/>' +
|
557
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
558
|
+
'<input type="text" id="input">' +
|
559
|
+
'<textarea id="textarea"/>' +
|
560
|
+
'</div>' +
|
561
|
+
'</div>' +
|
562
|
+
'</div>'
|
563
|
+
var $dropdown = $(dropdownHTML)
|
564
|
+
.appendTo('#qunit-fixture')
|
565
|
+
.find('[data-toggle="dropdown"]')
|
566
|
+
.bootstrapDropdown()
|
567
|
+
|
568
|
+
var $input = $('#input')
|
569
|
+
var $textarea = $('#textarea')
|
570
|
+
|
571
|
+
$dropdown
|
572
|
+
.parent('.dropdown')
|
573
|
+
.on('shown.bs.dropdown', function () {
|
574
|
+
assert.ok(true, 'shown was fired')
|
575
|
+
|
576
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
577
|
+
which: 38
|
578
|
+
}))
|
579
|
+
assert.ok($(document.activeElement).is($input), 'input still focused')
|
580
|
+
|
581
|
+
$textarea.trigger('focus').trigger($.Event('keydown', {
|
582
|
+
which: 38
|
583
|
+
}))
|
584
|
+
assert.ok($(document.activeElement).is($textarea), 'textarea still focused')
|
585
|
+
|
586
|
+
done()
|
587
|
+
})
|
588
|
+
|
589
|
+
$dropdown.trigger('click')
|
590
|
+
})
|
591
|
+
|
592
|
+
QUnit.test('should skip disabled element when using keyboard navigation', function (assert) {
|
593
|
+
assert.expect(3)
|
594
|
+
var done = assert.async()
|
595
|
+
var dropdownHTML = '<div class="tabs">' +
|
596
|
+
'<div class="dropdown">' +
|
597
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
598
|
+
'<div class="dropdown-menu">' +
|
599
|
+
'<a class="dropdown-item disabled" href="#">Disabled link</a>' +
|
600
|
+
'<button class="dropdown-item" type="button" disabled>Disabled button</button>' +
|
601
|
+
'<a id="item1" class="dropdown-item" href="#">Another link</a>' +
|
602
|
+
'</div>' +
|
603
|
+
'</div>' +
|
604
|
+
'</div>'
|
605
|
+
var $dropdown = $(dropdownHTML)
|
606
|
+
.appendTo('#qunit-fixture')
|
607
|
+
.find('[data-toggle="dropdown"]')
|
608
|
+
.bootstrapDropdown()
|
609
|
+
|
610
|
+
$dropdown
|
611
|
+
.parent('.dropdown')
|
612
|
+
.on('shown.bs.dropdown', function () {
|
613
|
+
assert.ok(true, 'shown was fired')
|
614
|
+
$dropdown.trigger($.Event('keydown', {
|
615
|
+
which: 40
|
616
|
+
}))
|
617
|
+
$dropdown.trigger($.Event('keydown', {
|
618
|
+
which: 40
|
619
|
+
}))
|
620
|
+
assert.ok(!$(document.activeElement).is('.disabled'), '.disabled is not focused')
|
621
|
+
assert.ok(!$(document.activeElement).is(':disabled'), ':disabled is not focused')
|
622
|
+
done()
|
623
|
+
})
|
624
|
+
$dropdown.trigger('click')
|
625
|
+
})
|
626
|
+
|
627
|
+
QUnit.test('should focus next/previous element when using keyboard navigation', function (assert) {
|
628
|
+
assert.expect(4)
|
629
|
+
var done = assert.async()
|
630
|
+
var dropdownHTML = '<div class="tabs">' +
|
631
|
+
'<div class="dropdown">' +
|
632
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
633
|
+
'<div class="dropdown-menu">' +
|
634
|
+
'<a id="item1" class="dropdown-item" href="#">A link</a>' +
|
635
|
+
'<a id="item2" class="dropdown-item" href="#">Another link</a>' +
|
636
|
+
'</div>' +
|
637
|
+
'</div>' +
|
638
|
+
'</div>'
|
639
|
+
var $dropdown = $(dropdownHTML)
|
640
|
+
.appendTo('#qunit-fixture')
|
641
|
+
.find('[data-toggle="dropdown"]')
|
642
|
+
.bootstrapDropdown()
|
643
|
+
|
644
|
+
$dropdown
|
645
|
+
.parent('.dropdown')
|
646
|
+
.on('shown.bs.dropdown', function () {
|
647
|
+
assert.ok(true, 'shown was fired')
|
648
|
+
$dropdown.trigger($.Event('keydown', {
|
649
|
+
which: 40
|
650
|
+
}))
|
651
|
+
assert.ok($(document.activeElement).is($('#item1')), 'item1 is focused')
|
652
|
+
|
653
|
+
$(document.activeElement).trigger($.Event('keydown', {
|
654
|
+
which: 40
|
655
|
+
}))
|
656
|
+
assert.ok($(document.activeElement).is($('#item2')), 'item2 is focused')
|
657
|
+
|
658
|
+
$(document.activeElement).trigger($.Event('keydown', {
|
659
|
+
which: 38
|
660
|
+
}))
|
661
|
+
assert.ok($(document.activeElement).is($('#item1')), 'item1 is focused')
|
662
|
+
done()
|
663
|
+
})
|
664
|
+
$dropdown.trigger('click')
|
665
|
+
})
|
666
|
+
|
667
|
+
QUnit.test('should not close the dropdown if the user clicks on a text field', function (assert) {
|
668
|
+
assert.expect(2)
|
669
|
+
var done = assert.async()
|
670
|
+
var dropdownHTML = '<div class="dropdown">' +
|
671
|
+
'<button type="button" data-toggle="dropdown">Dropdown</button>' +
|
672
|
+
'<div class="dropdown-menu">' +
|
673
|
+
'<input id="textField" type="text" />' +
|
674
|
+
'</div>' +
|
675
|
+
'</div>'
|
676
|
+
var $dropdown = $(dropdownHTML)
|
677
|
+
.appendTo('#qunit-fixture')
|
678
|
+
.find('[data-toggle="dropdown"]')
|
679
|
+
.bootstrapDropdown()
|
680
|
+
|
681
|
+
var $textfield = $('#textField')
|
682
|
+
$textfield.on('click', function () {
|
683
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
684
|
+
done()
|
685
|
+
})
|
686
|
+
|
687
|
+
$dropdown
|
688
|
+
.parent('.dropdown')
|
689
|
+
.on('shown.bs.dropdown', function () {
|
690
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
691
|
+
$textfield.trigger($.Event('click'))
|
692
|
+
})
|
693
|
+
$dropdown.trigger('click')
|
694
|
+
})
|
695
|
+
|
696
|
+
QUnit.test('should not close the dropdown if the user clicks on a textarea', function (assert) {
|
697
|
+
assert.expect(2)
|
698
|
+
var done = assert.async()
|
699
|
+
var dropdownHTML = '<div class="dropdown">' +
|
700
|
+
'<button type="button" data-toggle="dropdown">Dropdown</button>' +
|
701
|
+
'<div class="dropdown-menu">' +
|
702
|
+
'<textarea id="textArea"></textarea>' +
|
703
|
+
'</div>' +
|
704
|
+
'</div>'
|
705
|
+
var $dropdown = $(dropdownHTML)
|
706
|
+
.appendTo('#qunit-fixture')
|
707
|
+
.find('[data-toggle="dropdown"]')
|
708
|
+
.bootstrapDropdown()
|
709
|
+
|
710
|
+
var $textarea = $('#textArea')
|
711
|
+
$textarea.on('click', function () {
|
712
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
713
|
+
done()
|
714
|
+
})
|
715
|
+
|
716
|
+
$dropdown
|
717
|
+
.parent('.dropdown')
|
718
|
+
.on('shown.bs.dropdown', function () {
|
719
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
720
|
+
$textarea.trigger($.Event('click'))
|
721
|
+
})
|
722
|
+
$dropdown.trigger('click')
|
723
|
+
})
|
724
|
+
|
725
|
+
QUnit.test('Dropdown should not use Popper.js in navbar', function (assert) {
|
726
|
+
assert.expect(1)
|
727
|
+
var done = assert.async()
|
728
|
+
var html = '<nav class="navbar navbar-expand-md navbar-light bg-light">' +
|
729
|
+
'<div class="dropdown">' +
|
730
|
+
' <a class="nav-link dropdown-toggle" href="#" id="dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>' +
|
731
|
+
' <div class="dropdown-menu" aria-labelledby="dropdown">' +
|
732
|
+
' <a class="dropdown-item" href="#">Action</a>' +
|
733
|
+
' <a class="dropdown-item" href="#">Another action</a>' +
|
734
|
+
' <a class="dropdown-item" href="#">Something else here</a>' +
|
735
|
+
' </div>' +
|
736
|
+
'</div>' +
|
737
|
+
'</nav>'
|
738
|
+
|
739
|
+
$(html).appendTo('#qunit-fixture')
|
740
|
+
var $triggerDropdown = $('#qunit-fixture')
|
741
|
+
.find('[data-toggle="dropdown"]')
|
742
|
+
.bootstrapDropdown()
|
743
|
+
var $dropdownMenu = $triggerDropdown.next()
|
744
|
+
|
745
|
+
$triggerDropdown
|
746
|
+
.parent('.dropdown')
|
747
|
+
.on('shown.bs.dropdown', function () {
|
748
|
+
assert.ok(typeof $dropdownMenu.attr('style') === 'undefined', 'No inline style applied by Popper.js')
|
749
|
+
done()
|
750
|
+
})
|
751
|
+
$triggerDropdown.trigger($.Event('click'))
|
752
|
+
})
|
753
|
+
|
754
|
+
QUnit.test('should ignore keyboard events for <input>s and <textarea>s within dropdown-menu, except for escape key', function (assert) {
|
755
|
+
assert.expect(7)
|
756
|
+
var done = assert.async()
|
757
|
+
|
758
|
+
var dropdownHTML = '<div class="tabs">' +
|
759
|
+
'<div class="dropdown">' +
|
760
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
761
|
+
'<div class="dropdown-menu">' +
|
762
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
763
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
764
|
+
'<div class="divider"/>' +
|
765
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
766
|
+
'<input type="text" id="input">' +
|
767
|
+
'<textarea id="textarea"/>' +
|
768
|
+
'</div>' +
|
769
|
+
'</div>' +
|
770
|
+
'</div>'
|
771
|
+
var $dropdown = $(dropdownHTML)
|
772
|
+
.appendTo('#qunit-fixture')
|
773
|
+
.find('[data-toggle="dropdown"]')
|
774
|
+
.bootstrapDropdown()
|
775
|
+
|
776
|
+
var $input = $('#input')
|
777
|
+
var $textarea = $('#textarea')
|
778
|
+
|
779
|
+
$dropdown
|
780
|
+
.parent('.dropdown')
|
781
|
+
.on('shown.bs.dropdown', function () {
|
782
|
+
// Space key
|
783
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
784
|
+
which: 32
|
785
|
+
}))
|
786
|
+
assert.ok($(document.activeElement)[0] === $input[0], 'input still focused')
|
787
|
+
$textarea.trigger('focus').trigger($.Event('keydown', {
|
788
|
+
which: 32
|
789
|
+
}))
|
790
|
+
assert.ok($(document.activeElement)[0] === $textarea[0], 'textarea still focused')
|
791
|
+
|
792
|
+
// Key up
|
793
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
794
|
+
which: 38
|
795
|
+
}))
|
796
|
+
assert.ok($(document.activeElement)[0] === $input[0], 'input still focused')
|
797
|
+
$textarea.trigger('focus').trigger($.Event('keydown', {
|
798
|
+
which: 38
|
799
|
+
}))
|
800
|
+
assert.ok($(document.activeElement)[0] === $textarea[0], 'textarea still focused')
|
801
|
+
|
802
|
+
// Key down
|
803
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
804
|
+
which: 40
|
805
|
+
}))
|
806
|
+
assert.ok($(document.activeElement)[0] === $input[0], 'input still focused')
|
807
|
+
$textarea.trigger('focus').trigger($.Event('keydown', {
|
808
|
+
which: 40
|
809
|
+
}))
|
810
|
+
assert.ok($(document.activeElement)[0] === $textarea[0], 'textarea still focused')
|
811
|
+
|
812
|
+
// Key escape
|
813
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
814
|
+
which: 27
|
815
|
+
}))
|
816
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
|
817
|
+
done()
|
818
|
+
})
|
819
|
+
|
820
|
+
$dropdown.trigger('click')
|
821
|
+
})
|
822
|
+
|
823
|
+
QUnit.test('should ignore space key events for <input>s within dropdown, and accept up, down and escape', function (assert) {
|
824
|
+
assert.expect(6)
|
825
|
+
var done = assert.async()
|
826
|
+
|
827
|
+
var dropdownHTML =
|
828
|
+
'<ul class="nav tabs">' +
|
829
|
+
' <li class="dropdown">' +
|
830
|
+
' <input type="text" id="input" data-toggle="dropdown">' +
|
831
|
+
' <div class="dropdown-menu" role="menu">' +
|
832
|
+
' <a id="item1" class="dropdown-item" href="#">Secondary link</a>' +
|
833
|
+
' <a id="item2" class="dropdown-item" href="#">Something else here</a>' +
|
834
|
+
' <div class="divider"></div>' +
|
835
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
836
|
+
' </div>' +
|
837
|
+
' </li>' +
|
838
|
+
'</ul>'
|
839
|
+
|
840
|
+
var $dropdown = $(dropdownHTML)
|
841
|
+
.appendTo('#qunit-fixture')
|
842
|
+
.find('[data-toggle="dropdown"]')
|
843
|
+
.bootstrapDropdown()
|
844
|
+
|
845
|
+
var $input = $('#input')
|
846
|
+
|
847
|
+
$dropdown
|
848
|
+
.parent('.dropdown')
|
849
|
+
.one('shown.bs.dropdown', function () {
|
850
|
+
assert.ok(true, 'shown was fired')
|
851
|
+
|
852
|
+
// Key space
|
853
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
854
|
+
which: 32
|
855
|
+
}))
|
856
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
857
|
+
assert.ok($(document.activeElement).is($input), 'input is still focused')
|
858
|
+
|
859
|
+
// Key escape
|
860
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
861
|
+
which: 27
|
862
|
+
}))
|
863
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
|
864
|
+
|
865
|
+
$dropdown
|
866
|
+
.parent('.dropdown')
|
867
|
+
.one('shown.bs.dropdown', function () {
|
868
|
+
// Key down
|
869
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
870
|
+
which: 40
|
871
|
+
}))
|
872
|
+
assert.ok(document.activeElement === $('#item1')[0], 'item1 is focused')
|
873
|
+
|
874
|
+
$dropdown
|
875
|
+
.parent('.dropdown')
|
876
|
+
.one('shown.bs.dropdown', function () {
|
877
|
+
// Key up
|
878
|
+
$input.trigger('focus').trigger($.Event('keydown', {
|
879
|
+
which: 38
|
880
|
+
}))
|
881
|
+
assert.ok(document.activeElement === $('#item1')[0], 'item1 is focused')
|
882
|
+
done()
|
883
|
+
}).bootstrapDropdown('toggle')
|
884
|
+
$input.trigger('click')
|
885
|
+
})
|
886
|
+
$input.trigger('click')
|
887
|
+
})
|
888
|
+
$input.trigger('click')
|
889
|
+
})
|
890
|
+
|
891
|
+
QUnit.test('should ignore space key events for <textarea>s within dropdown, and accept up, down and escape', function (assert) {
|
892
|
+
assert.expect(6)
|
893
|
+
var done = assert.async()
|
894
|
+
|
895
|
+
var dropdownHTML =
|
896
|
+
'<ul class="nav tabs">' +
|
897
|
+
' <li class="dropdown">' +
|
898
|
+
' <textarea id="textarea" data-toggle="dropdown"></textarea>' +
|
899
|
+
' <div class="dropdown-menu" role="menu">' +
|
900
|
+
' <a id="item1" class="dropdown-item" href="#">Secondary link</a>' +
|
901
|
+
' <a id="item2" class="dropdown-item" href="#">Something else here</a>' +
|
902
|
+
' <div class="divider"></div>' +
|
903
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
904
|
+
' </div>' +
|
905
|
+
' </li>' +
|
906
|
+
'</ul>'
|
907
|
+
|
908
|
+
var $dropdown = $(dropdownHTML)
|
909
|
+
.appendTo('#qunit-fixture')
|
910
|
+
.find('[data-toggle="dropdown"]')
|
911
|
+
.bootstrapDropdown()
|
912
|
+
|
913
|
+
var $textarea = $('#textarea')
|
914
|
+
|
915
|
+
$dropdown
|
916
|
+
.parent('.dropdown')
|
917
|
+
.one('shown.bs.dropdown', function () {
|
918
|
+
assert.ok(true, 'shown was fired')
|
919
|
+
|
920
|
+
// Key space
|
921
|
+
$textarea.trigger('focus').trigger($.Event('keydown', {
|
922
|
+
which: 32
|
923
|
+
}))
|
924
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
925
|
+
assert.ok($(document.activeElement).is($textarea), 'textarea is still focused')
|
926
|
+
|
927
|
+
// Key escape
|
928
|
+
$textarea.trigger('focus').trigger($.Event('keydown', {
|
929
|
+
which: 27
|
930
|
+
}))
|
931
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
|
932
|
+
|
933
|
+
$dropdown
|
934
|
+
.parent('.dropdown')
|
935
|
+
.one('shown.bs.dropdown', function () {
|
936
|
+
// Key down
|
937
|
+
$textarea.trigger('focus').trigger($.Event('keydown', {
|
938
|
+
which: 40
|
939
|
+
}))
|
940
|
+
assert.ok(document.activeElement === $('#item1')[0], 'item1 is focused')
|
941
|
+
|
942
|
+
$dropdown
|
943
|
+
.parent('.dropdown')
|
944
|
+
.one('shown.bs.dropdown', function () {
|
945
|
+
// Key up
|
946
|
+
$textarea.trigger('focus').trigger($.Event('keydown', {
|
947
|
+
which: 38
|
948
|
+
}))
|
949
|
+
assert.ok(document.activeElement === $('#item1')[0], 'item1 is focused')
|
950
|
+
done()
|
951
|
+
}).bootstrapDropdown('toggle')
|
952
|
+
$textarea.trigger('click')
|
953
|
+
})
|
954
|
+
$textarea.trigger('click')
|
955
|
+
})
|
956
|
+
$textarea.trigger('click')
|
957
|
+
})
|
958
|
+
|
959
|
+
QUnit.test('should not use Popper.js if display set to static', function (assert) {
|
960
|
+
assert.expect(1)
|
961
|
+
var dropdownHTML =
|
962
|
+
'<div class="dropdown">' +
|
963
|
+
'<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-display="static">Dropdown</a>' +
|
964
|
+
'<div class="dropdown-menu">' +
|
965
|
+
'<a class="dropdown-item" href="#">Secondary link</a>' +
|
966
|
+
'<a class="dropdown-item" href="#">Something else here</a>' +
|
967
|
+
'<div class="divider"/>' +
|
968
|
+
'<a class="dropdown-item" href="#">Another link</a>' +
|
969
|
+
'</div>' +
|
970
|
+
'</div>'
|
971
|
+
|
972
|
+
var $dropdown = $(dropdownHTML)
|
973
|
+
.appendTo('#qunit-fixture')
|
974
|
+
.find('[data-toggle="dropdown"]')
|
975
|
+
.bootstrapDropdown()
|
976
|
+
var done = assert.async()
|
977
|
+
var dropdownMenu = $dropdown.next()[0]
|
978
|
+
|
979
|
+
$dropdown.parent('.dropdown')
|
980
|
+
.on('shown.bs.dropdown', function () {
|
981
|
+
// Popper.js add this attribute when we use it
|
982
|
+
assert.strictEqual(dropdownMenu.getAttribute('x-placement'), null)
|
983
|
+
done()
|
984
|
+
})
|
985
|
+
|
986
|
+
$dropdown.trigger('click')
|
987
|
+
})
|
988
|
+
|
989
|
+
QUnit.test('should call Popper.js and detect navbar on update', function (assert) {
|
990
|
+
assert.expect(3)
|
991
|
+
|
992
|
+
var dropdownHTML =
|
993
|
+
'<div class="dropdown">' +
|
994
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
995
|
+
' <div class="dropdown-menu">' +
|
996
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
997
|
+
' </div>' +
|
998
|
+
'</div>'
|
999
|
+
|
1000
|
+
var $dropdown = $(dropdownHTML)
|
1001
|
+
.appendTo('#qunit-fixture')
|
1002
|
+
.find('[data-toggle="dropdown"]')
|
1003
|
+
.bootstrapDropdown()
|
1004
|
+
|
1005
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1006
|
+
dropdown.toggle()
|
1007
|
+
assert.ok(dropdown._popper)
|
1008
|
+
|
1009
|
+
var spyPopper = sinon.spy(dropdown._popper, 'scheduleUpdate')
|
1010
|
+
var spyDetectNavbar = sinon.spy(dropdown, '_detectNavbar')
|
1011
|
+
dropdown.update()
|
1012
|
+
|
1013
|
+
assert.ok(spyPopper.called)
|
1014
|
+
assert.ok(spyDetectNavbar.called)
|
1015
|
+
})
|
1016
|
+
|
1017
|
+
QUnit.test('should just detect navbar on update', function (assert) {
|
1018
|
+
assert.expect(2)
|
1019
|
+
|
1020
|
+
var dropdownHTML =
|
1021
|
+
'<div class="dropdown">' +
|
1022
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1023
|
+
' <div class="dropdown-menu">' +
|
1024
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1025
|
+
' </div>' +
|
1026
|
+
'</div>'
|
1027
|
+
|
1028
|
+
var $dropdown = $(dropdownHTML)
|
1029
|
+
.appendTo('#qunit-fixture')
|
1030
|
+
.find('[data-toggle="dropdown"]')
|
1031
|
+
.bootstrapDropdown()
|
1032
|
+
|
1033
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1034
|
+
var spyDetectNavbar = sinon.spy(dropdown, '_detectNavbar')
|
1035
|
+
|
1036
|
+
dropdown.update()
|
1037
|
+
|
1038
|
+
assert.notOk(dropdown._popper)
|
1039
|
+
assert.ok(spyDetectNavbar.called)
|
1040
|
+
})
|
1041
|
+
|
1042
|
+
QUnit.test('should dispose dropdown with Popper', function (assert) {
|
1043
|
+
assert.expect(6)
|
1044
|
+
|
1045
|
+
var dropdownHTML =
|
1046
|
+
'<div class="dropdown">' +
|
1047
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1048
|
+
' <div class="dropdown-menu">' +
|
1049
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1050
|
+
' </div>' +
|
1051
|
+
'</div>'
|
1052
|
+
|
1053
|
+
var $dropdown = $(dropdownHTML)
|
1054
|
+
.appendTo('#qunit-fixture')
|
1055
|
+
.find('[data-toggle="dropdown"]')
|
1056
|
+
.bootstrapDropdown()
|
1057
|
+
|
1058
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1059
|
+
dropdown.toggle()
|
1060
|
+
|
1061
|
+
assert.ok(dropdown._popper)
|
1062
|
+
assert.ok(dropdown._menu !== null)
|
1063
|
+
assert.ok(dropdown._element !== null)
|
1064
|
+
var spyDestroy = sinon.spy(dropdown._popper, 'destroy')
|
1065
|
+
|
1066
|
+
dropdown.dispose()
|
1067
|
+
|
1068
|
+
assert.ok(spyDestroy.called)
|
1069
|
+
assert.ok(dropdown._menu === null)
|
1070
|
+
assert.ok(dropdown._element === null)
|
1071
|
+
})
|
1072
|
+
|
1073
|
+
QUnit.test('should dispose dropdown', function (assert) {
|
1074
|
+
assert.expect(5)
|
1075
|
+
|
1076
|
+
var dropdownHTML =
|
1077
|
+
'<div class="dropdown">' +
|
1078
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1079
|
+
' <div class="dropdown-menu">' +
|
1080
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1081
|
+
' </div>' +
|
1082
|
+
'</div>'
|
1083
|
+
|
1084
|
+
var $dropdown = $(dropdownHTML)
|
1085
|
+
.appendTo('#qunit-fixture')
|
1086
|
+
.find('[data-toggle="dropdown"]')
|
1087
|
+
.bootstrapDropdown()
|
1088
|
+
|
1089
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1090
|
+
|
1091
|
+
assert.notOk(dropdown._popper)
|
1092
|
+
assert.ok(dropdown._menu !== null)
|
1093
|
+
assert.ok(dropdown._element !== null)
|
1094
|
+
|
1095
|
+
dropdown.dispose()
|
1096
|
+
|
1097
|
+
assert.ok(dropdown._menu === null)
|
1098
|
+
assert.ok(dropdown._element === null)
|
1099
|
+
})
|
1100
|
+
|
1101
|
+
QUnit.test('should show dropdown', function (assert) {
|
1102
|
+
assert.expect(2)
|
1103
|
+
|
1104
|
+
var dropdownHTML =
|
1105
|
+
'<div class="dropdown">' +
|
1106
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1107
|
+
' <div class="dropdown-menu">' +
|
1108
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1109
|
+
' </div>' +
|
1110
|
+
'</div>'
|
1111
|
+
|
1112
|
+
var $dropdown = $(dropdownHTML)
|
1113
|
+
.appendTo('#qunit-fixture')
|
1114
|
+
.find('[data-toggle="dropdown"]')
|
1115
|
+
.bootstrapDropdown()
|
1116
|
+
|
1117
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1118
|
+
var done = assert.async()
|
1119
|
+
|
1120
|
+
$dropdown
|
1121
|
+
.parent('.dropdown')
|
1122
|
+
.on('show.bs.dropdown', function () {
|
1123
|
+
assert.ok(true, 'show was fired')
|
1124
|
+
})
|
1125
|
+
.on('shown.bs.dropdown', function () {
|
1126
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
1127
|
+
done()
|
1128
|
+
})
|
1129
|
+
|
1130
|
+
dropdown.show()
|
1131
|
+
})
|
1132
|
+
|
1133
|
+
QUnit.test('should hide dropdown', function (assert) {
|
1134
|
+
assert.expect(2)
|
1135
|
+
|
1136
|
+
var dropdownHTML =
|
1137
|
+
'<div class="dropdown">' +
|
1138
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1139
|
+
' <div class="dropdown-menu">' +
|
1140
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1141
|
+
' </div>' +
|
1142
|
+
'</div>'
|
1143
|
+
|
1144
|
+
var $dropdown = $(dropdownHTML)
|
1145
|
+
.appendTo('#qunit-fixture')
|
1146
|
+
.find('[data-toggle="dropdown"]')
|
1147
|
+
.bootstrapDropdown()
|
1148
|
+
|
1149
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1150
|
+
var done = assert.async()
|
1151
|
+
$dropdown.trigger('click')
|
1152
|
+
|
1153
|
+
$dropdown
|
1154
|
+
.parent('.dropdown')
|
1155
|
+
.on('hide.bs.dropdown', function () {
|
1156
|
+
assert.ok(true, 'hide was fired')
|
1157
|
+
})
|
1158
|
+
.on('hidden.bs.dropdown', function () {
|
1159
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is hidden')
|
1160
|
+
done()
|
1161
|
+
})
|
1162
|
+
|
1163
|
+
dropdown.hide()
|
1164
|
+
})
|
1165
|
+
|
1166
|
+
QUnit.test('should not hide dropdown', function (assert) {
|
1167
|
+
assert.expect(1)
|
1168
|
+
|
1169
|
+
var dropdownHTML =
|
1170
|
+
'<div class="dropdown">' +
|
1171
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1172
|
+
' <div class="dropdown-menu">' +
|
1173
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1174
|
+
' </div>' +
|
1175
|
+
'</div>'
|
1176
|
+
|
1177
|
+
var $dropdown = $(dropdownHTML)
|
1178
|
+
.appendTo('#qunit-fixture')
|
1179
|
+
.find('[data-toggle="dropdown"]')
|
1180
|
+
.bootstrapDropdown()
|
1181
|
+
|
1182
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1183
|
+
$dropdown.trigger('click')
|
1184
|
+
dropdown.show()
|
1185
|
+
|
1186
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is still shown')
|
1187
|
+
})
|
1188
|
+
|
1189
|
+
QUnit.test('should not show dropdown', function (assert) {
|
1190
|
+
assert.expect(1)
|
1191
|
+
|
1192
|
+
var dropdownHTML =
|
1193
|
+
'<div class="dropdown">' +
|
1194
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1195
|
+
' <div class="dropdown-menu">' +
|
1196
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1197
|
+
' </div>' +
|
1198
|
+
'</div>'
|
1199
|
+
|
1200
|
+
var $dropdown = $(dropdownHTML)
|
1201
|
+
.appendTo('#qunit-fixture')
|
1202
|
+
.find('[data-toggle="dropdown"]')
|
1203
|
+
.bootstrapDropdown()
|
1204
|
+
|
1205
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1206
|
+
dropdown.hide()
|
1207
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is still hidden')
|
1208
|
+
})
|
1209
|
+
|
1210
|
+
QUnit.test('should show dropdown', function (assert) {
|
1211
|
+
assert.expect(2)
|
1212
|
+
|
1213
|
+
var dropdownHTML =
|
1214
|
+
'<div class="dropdown">' +
|
1215
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1216
|
+
' <div class="dropdown-menu">' +
|
1217
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1218
|
+
' </div>' +
|
1219
|
+
'</div>'
|
1220
|
+
|
1221
|
+
var $dropdown = $(dropdownHTML)
|
1222
|
+
.appendTo('#qunit-fixture')
|
1223
|
+
.find('[data-toggle="dropdown"]')
|
1224
|
+
.bootstrapDropdown()
|
1225
|
+
|
1226
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1227
|
+
var done = assert.async()
|
1228
|
+
|
1229
|
+
$dropdown
|
1230
|
+
.parent('.dropdown')
|
1231
|
+
.on('show.bs.dropdown', function () {
|
1232
|
+
assert.ok(true, 'show was fired')
|
1233
|
+
})
|
1234
|
+
.on('shown.bs.dropdown', function () {
|
1235
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
1236
|
+
done()
|
1237
|
+
})
|
1238
|
+
|
1239
|
+
dropdown.show()
|
1240
|
+
})
|
1241
|
+
|
1242
|
+
QUnit.test('should prevent default event on show method call', function (assert) {
|
1243
|
+
assert.expect(1)
|
1244
|
+
|
1245
|
+
var dropdownHTML =
|
1246
|
+
'<div class="dropdown">' +
|
1247
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1248
|
+
' <div class="dropdown-menu">' +
|
1249
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1250
|
+
' </div>' +
|
1251
|
+
'</div>'
|
1252
|
+
|
1253
|
+
var $dropdown = $(dropdownHTML)
|
1254
|
+
.appendTo('#qunit-fixture')
|
1255
|
+
.find('[data-toggle="dropdown"]')
|
1256
|
+
.bootstrapDropdown()
|
1257
|
+
|
1258
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1259
|
+
var done = assert.async()
|
1260
|
+
|
1261
|
+
$dropdown
|
1262
|
+
.parent('.dropdown')
|
1263
|
+
.on('show.bs.dropdown', function (event) {
|
1264
|
+
event.preventDefault()
|
1265
|
+
done()
|
1266
|
+
})
|
1267
|
+
|
1268
|
+
dropdown.show()
|
1269
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is hidden')
|
1270
|
+
})
|
1271
|
+
|
1272
|
+
QUnit.test('should prevent default event on hide method call', function (assert) {
|
1273
|
+
assert.expect(1)
|
1274
|
+
|
1275
|
+
var dropdownHTML =
|
1276
|
+
'<div class="dropdown">' +
|
1277
|
+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
|
1278
|
+
' <div class="dropdown-menu">' +
|
1279
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1280
|
+
' </div>' +
|
1281
|
+
'</div>'
|
1282
|
+
|
1283
|
+
var $dropdown = $(dropdownHTML)
|
1284
|
+
.appendTo('#qunit-fixture')
|
1285
|
+
.find('[data-toggle="dropdown"]')
|
1286
|
+
.bootstrapDropdown()
|
1287
|
+
|
1288
|
+
var dropdown = $dropdown.data('bs.dropdown')
|
1289
|
+
var done = assert.async()
|
1290
|
+
$dropdown.trigger('click')
|
1291
|
+
|
1292
|
+
$dropdown
|
1293
|
+
.parent('.dropdown')
|
1294
|
+
.on('hide.bs.dropdown', function (event) {
|
1295
|
+
event.preventDefault()
|
1296
|
+
done()
|
1297
|
+
})
|
1298
|
+
|
1299
|
+
dropdown.hide()
|
1300
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
|
1301
|
+
})
|
1302
|
+
|
1303
|
+
QUnit.test('should not open dropdown via show method if target is disabled via attribute', function (assert) {
|
1304
|
+
assert.expect(1)
|
1305
|
+
var dropdownHTML =
|
1306
|
+
'<div class="dropdown">' +
|
1307
|
+
' <button disabled href="#" class="btn dropdown-toggle" data-toggle="dropdown">Dropdown</button>' +
|
1308
|
+
' <div class="dropdown-menu">' +
|
1309
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1310
|
+
' </div>' +
|
1311
|
+
'</div>'
|
1312
|
+
$(dropdownHTML).appendTo('#qunit-fixture')
|
1313
|
+
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
|
1314
|
+
$dropdown.show()
|
1315
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'))
|
1316
|
+
})
|
1317
|
+
|
1318
|
+
QUnit.test('should not open dropdown via show method if target is disabled via class', function (assert) {
|
1319
|
+
assert.expect(1)
|
1320
|
+
var dropdownHTML =
|
1321
|
+
'<div class="dropdown">' +
|
1322
|
+
' <button href="#" class="btn dropdown-toggle disabled" data-toggle="dropdown">Dropdown</button>' +
|
1323
|
+
' <div class="dropdown-menu">' +
|
1324
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1325
|
+
' </div>' +
|
1326
|
+
'</div>'
|
1327
|
+
|
1328
|
+
$(dropdownHTML).appendTo('#qunit-fixture')
|
1329
|
+
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
|
1330
|
+
$dropdown.show()
|
1331
|
+
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'))
|
1332
|
+
})
|
1333
|
+
|
1334
|
+
QUnit.test('should not hide dropdown via hide method if target is disabled via attribute', function (assert) {
|
1335
|
+
assert.expect(1)
|
1336
|
+
var dropdownHTML =
|
1337
|
+
'<div class="dropdown show">' +
|
1338
|
+
' <button disabled href="#" class="btn dropdown-toggle" data-toggle="dropdown">Dropdown</button>' +
|
1339
|
+
' <div class="dropdown-menu">' +
|
1340
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1341
|
+
' </div>' +
|
1342
|
+
'</div>'
|
1343
|
+
$(dropdownHTML).appendTo('#qunit-fixture')
|
1344
|
+
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
|
1345
|
+
$dropdown.hide()
|
1346
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'))
|
1347
|
+
})
|
1348
|
+
|
1349
|
+
QUnit.test('should not hide dropdown via hide method if target is disabled via class', function (assert) {
|
1350
|
+
assert.expect(1)
|
1351
|
+
var dropdownHTML =
|
1352
|
+
'<div class="dropdown show">' +
|
1353
|
+
' <button href="#" class="btn dropdown-toggle disabled" data-toggle="dropdown">Dropdown</button>' +
|
1354
|
+
' <div class="dropdown-menu">' +
|
1355
|
+
' <a class="dropdown-item" href="#">Another link</a>' +
|
1356
|
+
' </div>' +
|
1357
|
+
'</div>'
|
1358
|
+
|
1359
|
+
$(dropdownHTML).appendTo('#qunit-fixture')
|
1360
|
+
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
|
1361
|
+
$dropdown.hide()
|
1362
|
+
assert.ok($dropdown.parent('.dropdown').hasClass('show'))
|
1363
|
+
})
|
1364
|
+
})
|