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.
Files changed (164) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +52 -0
  4. data/_layouts/page.html +61 -0
  5. data/_sass/bootstrap/js/dist/alert.js +199 -0
  6. data/_sass/bootstrap/js/dist/alert.js.map +1 -0
  7. data/_sass/bootstrap/js/dist/button.js +187 -0
  8. data/_sass/bootstrap/js/dist/button.js.map +1 -0
  9. data/_sass/bootstrap/js/dist/carousel.js +666 -0
  10. data/_sass/bootstrap/js/dist/carousel.js.map +1 -0
  11. data/_sass/bootstrap/js/dist/collapse.js +428 -0
  12. data/_sass/bootstrap/js/dist/collapse.js.map +1 -0
  13. data/_sass/bootstrap/js/dist/dropdown.js +591 -0
  14. data/_sass/bootstrap/js/dist/dropdown.js.map +1 -0
  15. data/_sass/bootstrap/js/dist/index.js +23 -0
  16. data/_sass/bootstrap/js/dist/index.js.map +1 -0
  17. data/_sass/bootstrap/js/dist/modal.js +644 -0
  18. data/_sass/bootstrap/js/dist/modal.js.map +1 -0
  19. data/_sass/bootstrap/js/dist/popover.js +261 -0
  20. data/_sass/bootstrap/js/dist/popover.js.map +1 -0
  21. data/_sass/bootstrap/js/dist/scrollspy.js +375 -0
  22. data/_sass/bootstrap/js/dist/scrollspy.js.map +1 -0
  23. data/_sass/bootstrap/js/dist/tab.js +266 -0
  24. data/_sass/bootstrap/js/dist/tab.js.map +1 -0
  25. data/_sass/bootstrap/js/dist/toast.js +278 -0
  26. data/_sass/bootstrap/js/dist/toast.js.map +1 -0
  27. data/_sass/bootstrap/js/dist/tooltip.js +745 -0
  28. data/_sass/bootstrap/js/dist/tooltip.js.map +1 -0
  29. data/_sass/bootstrap/js/dist/util.js +168 -0
  30. data/_sass/bootstrap/js/dist/util.js.map +1 -0
  31. data/_sass/bootstrap/js/src/alert.js +179 -0
  32. data/_sass/bootstrap/js/src/button.js +171 -0
  33. data/_sass/bootstrap/js/src/carousel.js +604 -0
  34. data/_sass/bootstrap/js/src/collapse.js +402 -0
  35. data/_sass/bootstrap/js/src/dropdown.js +538 -0
  36. data/_sass/bootstrap/js/src/index.js +52 -0
  37. data/_sass/bootstrap/js/src/modal.js +587 -0
  38. data/_sass/bootstrap/js/src/popover.js +184 -0
  39. data/_sass/bootstrap/js/src/scrollspy.js +326 -0
  40. data/_sass/bootstrap/js/src/tab.js +257 -0
  41. data/_sass/bootstrap/js/src/toast.js +223 -0
  42. data/_sass/bootstrap/js/src/tooltip.js +735 -0
  43. data/_sass/bootstrap/js/src/util.js +173 -0
  44. data/_sass/bootstrap/js/tests/README.md +69 -0
  45. data/_sass/bootstrap/js/tests/browsers.js +82 -0
  46. data/_sass/bootstrap/js/tests/index.html +145 -0
  47. data/_sass/bootstrap/js/tests/integration/bundle.js +8 -0
  48. data/_sass/bootstrap/js/tests/integration/index.html +66 -0
  49. data/_sass/bootstrap/js/tests/integration/rollup.bundle.js +20 -0
  50. data/_sass/bootstrap/js/tests/karma.conf.js +145 -0
  51. data/_sass/bootstrap/js/tests/unit/.eslintrc.json +40 -0
  52. data/_sass/bootstrap/js/tests/unit/alert.js +123 -0
  53. data/_sass/bootstrap/js/tests/unit/button.js +222 -0
  54. data/_sass/bootstrap/js/tests/unit/carousel.js +1273 -0
  55. data/_sass/bootstrap/js/tests/unit/collapse.js +892 -0
  56. data/_sass/bootstrap/js/tests/unit/dropdown.js +1364 -0
  57. data/_sass/bootstrap/js/tests/unit/modal.js +796 -0
  58. data/_sass/bootstrap/js/tests/unit/popover.js +471 -0
  59. data/_sass/bootstrap/js/tests/unit/scrollspy.js +728 -0
  60. data/_sass/bootstrap/js/tests/unit/tab.js +462 -0
  61. data/_sass/bootstrap/js/tests/unit/toast.js +239 -0
  62. data/_sass/bootstrap/js/tests/unit/tooltip.js +1072 -0
  63. data/_sass/bootstrap/js/tests/unit/util.js +164 -0
  64. data/_sass/bootstrap/js/tests/visual/alert.html +58 -0
  65. data/_sass/bootstrap/js/tests/visual/button.html +51 -0
  66. data/_sass/bootstrap/js/tests/visual/carousel.html +66 -0
  67. data/_sass/bootstrap/js/tests/visual/collapse.html +78 -0
  68. data/_sass/bootstrap/js/tests/visual/dropdown.html +212 -0
  69. data/_sass/bootstrap/js/tests/visual/modal.html +268 -0
  70. data/_sass/bootstrap/js/tests/visual/popover.html +46 -0
  71. data/_sass/bootstrap/js/tests/visual/scrollspy.html +95 -0
  72. data/_sass/bootstrap/js/tests/visual/tab.html +234 -0
  73. data/_sass/bootstrap/js/tests/visual/toast.html +72 -0
  74. data/_sass/bootstrap/js/tests/visual/tooltip.html +106 -0
  75. data/_sass/bootstrap/scss/_alert.scss +51 -0
  76. data/_sass/bootstrap/scss/_badge.scss +53 -0
  77. data/_sass/bootstrap/scss/_breadcrumb.scss +41 -0
  78. data/_sass/bootstrap/scss/_button-group.scss +163 -0
  79. data/_sass/bootstrap/scss/_buttons.scss +140 -0
  80. data/_sass/bootstrap/scss/_card.scss +310 -0
  81. data/_sass/bootstrap/scss/_carousel.scss +198 -0
  82. data/_sass/bootstrap/scss/_close.scss +44 -0
  83. data/_sass/bootstrap/scss/_code.scss +48 -0
  84. data/_sass/bootstrap/scss/_custom-forms.scss +507 -0
  85. data/_sass/bootstrap/scss/_dropdown.scss +191 -0
  86. data/_sass/bootstrap/scss/_forms.scss +334 -0
  87. data/_sass/bootstrap/scss/_functions.scss +86 -0
  88. data/_sass/bootstrap/scss/_grid.scss +52 -0
  89. data/_sass/bootstrap/scss/_images.scss +42 -0
  90. data/_sass/bootstrap/scss/_input-group.scss +193 -0
  91. data/_sass/bootstrap/scss/_jumbotron.scss +16 -0
  92. data/_sass/bootstrap/scss/_list-group.scss +121 -0
  93. data/_sass/bootstrap/scss/_media.scss +8 -0
  94. data/_sass/bootstrap/scss/_mixins.scss +41 -0
  95. data/_sass/bootstrap/scss/_modal.scss +186 -0
  96. data/_sass/bootstrap/scss/_nav.scss +120 -0
  97. data/_sass/bootstrap/scss/_navbar.scss +299 -0
  98. data/_sass/bootstrap/scss/_pagination.scss +78 -0
  99. data/_sass/bootstrap/scss/_popover.scss +183 -0
  100. data/_sass/bootstrap/scss/_print.scss +141 -0
  101. data/_sass/bootstrap/scss/_progress.scss +34 -0
  102. data/_sass/bootstrap/scss/_reboot.scss +462 -0
  103. data/_sass/bootstrap/scss/_root.scss +19 -0
  104. data/_sass/bootstrap/scss/_spinners.scss +53 -0
  105. data/_sass/bootstrap/scss/_tables.scss +187 -0
  106. data/_sass/bootstrap/scss/_toasts.scss +43 -0
  107. data/_sass/bootstrap/scss/_tooltip.scss +115 -0
  108. data/_sass/bootstrap/scss/_transitions.scss +22 -0
  109. data/_sass/bootstrap/scss/_type.scss +125 -0
  110. data/_sass/bootstrap/scss/_utilities.scss +16 -0
  111. data/_sass/bootstrap/scss/_variables.scss +1091 -0
  112. data/_sass/bootstrap/scss/bootstrap-grid.scss +29 -0
  113. data/_sass/bootstrap/scss/bootstrap-reboot.scss +12 -0
  114. data/_sass/bootstrap/scss/bootstrap.scss +44 -0
  115. data/_sass/bootstrap/scss/mixins/_alert.scss +13 -0
  116. data/_sass/bootstrap/scss/mixins/_background-variant.scss +21 -0
  117. data/_sass/bootstrap/scss/mixins/_badge.scss +11 -0
  118. data/_sass/bootstrap/scss/mixins/_border-radius.scss +35 -0
  119. data/_sass/bootstrap/scss/mixins/_box-shadow.scss +5 -0
  120. data/_sass/bootstrap/scss/mixins/_breakpoints.scss +123 -0
  121. data/_sass/bootstrap/scss/mixins/_buttons.scss +111 -0
  122. data/_sass/bootstrap/scss/mixins/_caret.scss +62 -0
  123. data/_sass/bootstrap/scss/mixins/_clearfix.scss +7 -0
  124. data/_sass/bootstrap/scss/mixins/_float.scss +11 -0
  125. data/_sass/bootstrap/scss/mixins/_forms.scss +198 -0
  126. data/_sass/bootstrap/scss/mixins/_gradients.scss +45 -0
  127. data/_sass/bootstrap/scss/mixins/_grid-framework.scss +66 -0
  128. data/_sass/bootstrap/scss/mixins/_grid.scss +51 -0
  129. data/_sass/bootstrap/scss/mixins/_hover.scss +37 -0
  130. data/_sass/bootstrap/scss/mixins/_image.scss +36 -0
  131. data/_sass/bootstrap/scss/mixins/_list-group.scss +21 -0
  132. data/_sass/bootstrap/scss/mixins/_lists.scss +7 -0
  133. data/_sass/bootstrap/scss/mixins/_nav-divider.scss +10 -0
  134. data/_sass/bootstrap/scss/mixins/_pagination.scss +22 -0
  135. data/_sass/bootstrap/scss/mixins/_reset-text.scss +17 -0
  136. data/_sass/bootstrap/scss/mixins/_resize.scss +6 -0
  137. data/_sass/bootstrap/scss/mixins/_screen-reader.scss +33 -0
  138. data/_sass/bootstrap/scss/mixins/_size.scss +6 -0
  139. data/_sass/bootstrap/scss/mixins/_table-row.scss +39 -0
  140. data/_sass/bootstrap/scss/mixins/_text-emphasis.scss +14 -0
  141. data/_sass/bootstrap/scss/mixins/_text-hide.scss +13 -0
  142. data/_sass/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  143. data/_sass/bootstrap/scss/mixins/_transition.scss +16 -0
  144. data/_sass/bootstrap/scss/mixins/_visibility.scss +7 -0
  145. data/_sass/bootstrap/scss/utilities/_align.scss +8 -0
  146. data/_sass/bootstrap/scss/utilities/_background.scss +19 -0
  147. data/_sass/bootstrap/scss/utilities/_borders.scss +63 -0
  148. data/_sass/bootstrap/scss/utilities/_clearfix.scss +3 -0
  149. data/_sass/bootstrap/scss/utilities/_display.scss +38 -0
  150. data/_sass/bootstrap/scss/utilities/_embed.scss +39 -0
  151. data/_sass/bootstrap/scss/utilities/_flex.scss +51 -0
  152. data/_sass/bootstrap/scss/utilities/_float.scss +9 -0
  153. data/_sass/bootstrap/scss/utilities/_overflow.scss +5 -0
  154. data/_sass/bootstrap/scss/utilities/_position.scss +32 -0
  155. data/_sass/bootstrap/scss/utilities/_screenreaders.scss +11 -0
  156. data/_sass/bootstrap/scss/utilities/_shadows.scss +6 -0
  157. data/_sass/bootstrap/scss/utilities/_sizing.scss +20 -0
  158. data/_sass/bootstrap/scss/utilities/_spacing.scss +73 -0
  159. data/_sass/bootstrap/scss/utilities/_text.scss +67 -0
  160. data/_sass/bootstrap/scss/utilities/_visibility.scss +11 -0
  161. data/_sass/custom.scss +1 -0
  162. data/assets/css/style.scss +65 -0
  163. data/assets/images/vertx-square.svg +1 -0
  164. metadata +248 -0
@@ -0,0 +1,471 @@
1
+ $(function () {
2
+ 'use strict'
3
+
4
+ QUnit.module('popover plugin')
5
+
6
+ QUnit.test('should be defined on jquery object', function (assert) {
7
+ assert.expect(1)
8
+ assert.ok($(document.body).popover, 'popover method is defined')
9
+ })
10
+
11
+ QUnit.module('popover', {
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.bootstrapPopover = $.fn.popover.noConflict()
15
+ },
16
+ afterEach: function () {
17
+ $.fn.popover = $.fn.bootstrapPopover
18
+ delete $.fn.bootstrapPopover
19
+ $('.popover').remove()
20
+ $('#qunit-fixture').html('')
21
+ }
22
+ })
23
+
24
+ QUnit.test('should provide no conflict', function (assert) {
25
+ assert.expect(1)
26
+ assert.strictEqual(typeof $.fn.popover, 'undefined', 'popover was set back to undefined (org value)')
27
+ })
28
+
29
+ QUnit.test('should throw explicit error on undefined method', function (assert) {
30
+ assert.expect(1)
31
+ var $el = $('<div/>')
32
+ $el.bootstrapPopover()
33
+ try {
34
+ $el.bootstrapPopover('noMethod')
35
+ } catch (err) {
36
+ assert.strictEqual(err.message, 'No method named "noMethod"')
37
+ }
38
+ })
39
+
40
+ QUnit.test('should return jquery collection containing the element', function (assert) {
41
+ assert.expect(2)
42
+ var $el = $('<div/>')
43
+ var $popover = $el.bootstrapPopover()
44
+ assert.ok($popover instanceof $, 'returns jquery collection')
45
+ assert.strictEqual($popover[0], $el[0], 'collection contains element')
46
+ })
47
+
48
+ QUnit.test('should render popover element', function (assert) {
49
+ assert.expect(2)
50
+ var done = assert.async()
51
+ $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>')
52
+ .appendTo('#qunit-fixture')
53
+ .on('shown.bs.popover', function () {
54
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
55
+ $(this).bootstrapPopover('hide')
56
+ })
57
+ .on('hidden.bs.popover', function () {
58
+ assert.strictEqual($('.popover').length, 0, 'popover removed')
59
+ done()
60
+ })
61
+ .bootstrapPopover('show')
62
+ })
63
+
64
+ QUnit.test('should store popover instance in popover data object', function (assert) {
65
+ assert.expect(1)
66
+ var $popover = $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>').bootstrapPopover()
67
+
68
+ assert.ok($popover.data('bs.popover'), 'popover instance exists')
69
+ })
70
+
71
+ QUnit.test('should store popover trigger in popover instance data object', function (assert) {
72
+ assert.expect(1)
73
+ var $popover = $('<a href="#" title="ResentedHook">@ResentedHook</a>')
74
+ .appendTo('#qunit-fixture')
75
+ .bootstrapPopover()
76
+
77
+ $popover.bootstrapPopover('show')
78
+
79
+ assert.ok($('.popover').data('bs.popover'), 'popover trigger stored in instance data')
80
+ })
81
+
82
+ QUnit.test('should get title and content from options', function (assert) {
83
+ assert.expect(4)
84
+ var done = assert.async()
85
+ var $popover = $('<a href="#">@fat</a>')
86
+ .appendTo('#qunit-fixture')
87
+ .bootstrapPopover({
88
+ title: function () {
89
+ return '@fat'
90
+ },
91
+ content: function () {
92
+ return 'loves writing tests (╯°□°)╯︵ ┻━┻'
93
+ }
94
+ })
95
+
96
+ $popover
97
+ .one('shown.bs.popover', function () {
98
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
99
+ assert.strictEqual($('.popover .popover-header').text(), '@fat', 'title correctly inserted')
100
+ assert.strictEqual($('.popover .popover-body').text(), 'loves writing tests (╯°□°)╯︵ ┻━┻', 'content correctly inserted')
101
+ $popover.bootstrapPopover('hide')
102
+ })
103
+ .one('hidden.bs.popover', function () {
104
+ assert.strictEqual($('.popover').length, 0, 'popover was removed')
105
+ done()
106
+ })
107
+ .bootstrapPopover('show')
108
+ })
109
+
110
+ QUnit.test('should allow DOMElement title and content (html: true)', function (assert) {
111
+ assert.expect(5)
112
+ var title = document.createTextNode('@glebm <3 writing tests')
113
+ var content = $('<i>¯\\_(ツ)_/¯</i>').get(0)
114
+ var $popover = $('<a href="#" rel="tooltip"/>')
115
+ .appendTo('#qunit-fixture')
116
+ .bootstrapPopover({
117
+ html: true,
118
+ title: title,
119
+ content: content
120
+ })
121
+
122
+ $popover.bootstrapPopover('show')
123
+
124
+ assert.notEqual($('.popover').length, 0, 'popover inserted')
125
+ assert.strictEqual($('.popover .popover-header').text(), '@glebm <3 writing tests', 'title inserted')
126
+ assert.ok($.contains($('.popover').get(0), title), 'title node moved, not copied')
127
+ // toLowerCase because IE8 will return <I>...</I>
128
+ assert.strictEqual($('.popover .popover-body').html().toLowerCase(), '<i>¯\\_(ツ)_/¯</i>', 'content inserted')
129
+ assert.ok($.contains($('.popover').get(0), content), 'content node moved, not copied')
130
+ })
131
+
132
+ QUnit.test('should allow DOMElement title and content (html: false)', function (assert) {
133
+ assert.expect(5)
134
+ var title = document.createTextNode('@glebm <3 writing tests')
135
+ var content = $('<i>¯\\_(ツ)_/¯</i>').get(0)
136
+ var $popover = $('<a href="#" rel="tooltip"/>')
137
+ .appendTo('#qunit-fixture')
138
+ .bootstrapPopover({
139
+ title: title,
140
+ content: content
141
+ })
142
+
143
+ $popover.bootstrapPopover('show')
144
+
145
+ assert.notEqual($('.popover').length, 0, 'popover inserted')
146
+ assert.strictEqual($('.popover .popover-header').text(), '@glebm <3 writing tests', 'title inserted')
147
+ assert.ok(!$.contains($('.popover').get(0), title), 'title node copied, not moved')
148
+ assert.strictEqual($('.popover .popover-body').html(), '¯\\_(ツ)_/¯', 'content inserted')
149
+ assert.ok(!$.contains($('.popover').get(0), content), 'content node copied, not moved')
150
+ })
151
+
152
+ QUnit.test('should not duplicate HTML object', function (assert) {
153
+ assert.expect(6)
154
+ var done = assert.async()
155
+ var $div = $('<div/>').html('loves writing tests (╯°□°)╯︵ ┻━┻')
156
+
157
+ var $popover = $('<a href="#">@fat</a>')
158
+ .appendTo('#qunit-fixture')
159
+ .bootstrapPopover({
160
+ html: true,
161
+ content: function () {
162
+ return $div
163
+ }
164
+ })
165
+
166
+ function popoverInserted() {
167
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
168
+ assert.equal($('.popover .popover-body').html(), $div[0].outerHTML, 'content correctly inserted')
169
+ }
170
+
171
+ $popover
172
+ .one('shown.bs.popover', function () {
173
+ popoverInserted()
174
+
175
+ $popover.one('hidden.bs.popover', function () {
176
+ assert.strictEqual($('.popover').length, 0, 'popover was removed')
177
+
178
+ $popover.one('shown.bs.popover', function () {
179
+ popoverInserted()
180
+
181
+ $popover.one('hidden.bs.popover', function () {
182
+ assert.strictEqual($('.popover').length, 0, 'popover was removed')
183
+ done()
184
+ }).bootstrapPopover('hide')
185
+ }).bootstrapPopover('show')
186
+ }).bootstrapPopover('hide')
187
+ })
188
+ .bootstrapPopover('show')
189
+ })
190
+
191
+ QUnit.test('should get title and content from attributes', function (assert) {
192
+ assert.expect(4)
193
+ var done = assert.async()
194
+ var $popover = $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
195
+ .appendTo('#qunit-fixture')
196
+ .bootstrapPopover()
197
+ .one('shown.bs.popover', function () {
198
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
199
+ assert.strictEqual($('.popover .popover-header').text(), '@mdo', 'title correctly inserted')
200
+ assert.strictEqual($('.popover .popover-body').text(), 'loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻', 'content correctly inserted')
201
+ $popover.bootstrapPopover('hide')
202
+ })
203
+ .one('hidden.bs.popover', function () {
204
+ assert.strictEqual($('.popover').length, 0, 'popover was removed')
205
+ done()
206
+ })
207
+ .bootstrapPopover('show')
208
+ })
209
+
210
+ QUnit.test('should get title and content from attributes ignoring options passed via js', function (assert) {
211
+ assert.expect(4)
212
+ var done = assert.async()
213
+ var $popover = $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
214
+ .appendTo('#qunit-fixture')
215
+ .bootstrapPopover({
216
+ title: 'ignored title option',
217
+ content: 'ignored content option'
218
+ })
219
+ .one('shown.bs.popover', function () {
220
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
221
+ assert.strictEqual($('.popover .popover-header').text(), '@mdo', 'title correctly inserted')
222
+ assert.strictEqual($('.popover .popover-body').text(), 'loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻', 'content correctly inserted')
223
+ $popover.bootstrapPopover('hide')
224
+ })
225
+ .one('hidden.bs.popover', function () {
226
+ assert.strictEqual($('.popover').length, 0, 'popover was removed')
227
+ done()
228
+ })
229
+ .bootstrapPopover('show')
230
+ })
231
+
232
+ QUnit.test('should respect custom template', function (assert) {
233
+ assert.expect(3)
234
+ var done = assert.async()
235
+ var $popover = $('<a href="#">@fat</a>')
236
+ .appendTo('#qunit-fixture')
237
+ .bootstrapPopover({
238
+ title: 'Test',
239
+ content: 'Test',
240
+ template: '<div class="popover foobar"><div class="arrow"></div><div class="inner"><h3 class="title"/><div class="content"><p/></div></div></div>'
241
+ })
242
+ .one('shown.bs.popover', function () {
243
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
244
+ assert.ok($('.popover').hasClass('foobar'), 'custom class is present')
245
+ $popover.bootstrapPopover('hide')
246
+ })
247
+ .one('hidden.bs.popover', function () {
248
+ assert.strictEqual($('.popover').length, 0, 'popover was removed')
249
+ done()
250
+ })
251
+ .bootstrapPopover('show')
252
+ })
253
+
254
+ QUnit.test('should destroy popover', function (assert) {
255
+ assert.expect(7)
256
+ var $popover = $('<div/>')
257
+ .bootstrapPopover({
258
+ trigger: 'hover'
259
+ })
260
+ .on('click.foo', $.noop)
261
+
262
+ assert.ok($popover.data('bs.popover'), 'popover has data')
263
+ assert.ok($._data($popover[0], 'events').mouseover && $._data($popover[0], 'events').mouseout, 'popover has hover event')
264
+ assert.strictEqual($._data($popover[0], 'events').click[0].namespace, 'foo', 'popover has extra click.foo event')
265
+
266
+ $popover.bootstrapPopover('show')
267
+ $popover.bootstrapPopover('dispose')
268
+
269
+ assert.ok(!$popover.hasClass('show'), 'popover is hidden')
270
+ assert.ok(!$popover.data('popover'), 'popover does not have data')
271
+ assert.strictEqual($._data($popover[0], 'events').click[0].namespace, 'foo', 'popover still has click.foo')
272
+ assert.ok(!$._data($popover[0], 'events').mouseover && !$._data($popover[0], 'events').mouseout, 'popover does not have any events')
273
+ })
274
+
275
+ QUnit.test('should render popover element using delegated selector', function (assert) {
276
+ assert.expect(2)
277
+ var done = assert.async()
278
+ var $div = $('<div><a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a></div>')
279
+ .appendTo('#qunit-fixture')
280
+ .bootstrapPopover({
281
+ selector: 'a',
282
+ trigger: 'click'
283
+ })
284
+ .one('shown.bs.popover', function () {
285
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
286
+ $div.find('a').trigger('click')
287
+ })
288
+ .one('hidden.bs.popover', function () {
289
+ assert.strictEqual($('.popover').length, 0, 'popover was removed')
290
+ done()
291
+ })
292
+
293
+ $div.find('a').trigger('click')
294
+ })
295
+
296
+ QUnit.test('should detach popover content rather than removing it so that event handlers are left intact', function (assert) {
297
+ assert.expect(1)
298
+ var $content = $('<div class="content-with-handler"><a class="btn btn-warning">Button with event handler</a></div>').appendTo('#qunit-fixture')
299
+
300
+ var handlerCalled = false
301
+ $('.content-with-handler .btn').on('click', function () {
302
+ handlerCalled = true
303
+ })
304
+
305
+ var $div = $('<div><a href="#">Show popover</a></div>')
306
+ .appendTo('#qunit-fixture')
307
+ .bootstrapPopover({
308
+ html: true,
309
+ trigger: 'manual',
310
+ container: 'body',
311
+ animation: false,
312
+ content: function () {
313
+ return $content
314
+ }
315
+ })
316
+
317
+ var done = assert.async()
318
+ $div
319
+ .one('shown.bs.popover', function () {
320
+ $div
321
+ .one('hidden.bs.popover', function () {
322
+ $div
323
+ .one('shown.bs.popover', function () {
324
+ $('.content-with-handler .btn').trigger('click')
325
+ assert.ok(handlerCalled, 'content\'s event handler still present')
326
+ $div.bootstrapPopover('dispose')
327
+ done()
328
+ })
329
+ .bootstrapPopover('show')
330
+ })
331
+ .bootstrapPopover('hide')
332
+ })
333
+ .bootstrapPopover('show')
334
+ })
335
+
336
+ QUnit.test('should do nothing when an attempt is made to hide an uninitialized popover', function (assert) {
337
+ assert.expect(1)
338
+
339
+ var $popover = $('<span data-toggle="popover" data-title="some title" data-content="some content">some text</span>')
340
+ .appendTo('#qunit-fixture')
341
+ .on('hidden.bs.popover shown.bs.popover', function () {
342
+ assert.ok(false, 'should not fire any popover events')
343
+ })
344
+ .bootstrapPopover('hide')
345
+ assert.strictEqual(typeof $popover.data('bs.popover'), 'undefined', 'should not initialize the popover')
346
+ })
347
+
348
+ QUnit.test('should fire inserted event', function (assert) {
349
+ assert.expect(2)
350
+ var done = assert.async()
351
+
352
+ $('<a href="#">@Johann-S</a>')
353
+ .appendTo('#qunit-fixture')
354
+ .on('inserted.bs.popover', function () {
355
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
356
+ assert.ok(true, 'inserted event fired')
357
+ done()
358
+ })
359
+ .bootstrapPopover({
360
+ title: 'Test',
361
+ content: 'Test'
362
+ })
363
+ .bootstrapPopover('show')
364
+ })
365
+
366
+ QUnit.test('should throw an error when show is called on hidden elements', function (assert) {
367
+ assert.expect(1)
368
+ var done = assert.async()
369
+
370
+ try {
371
+ $('<div data-toggle="popover" data-title="some title" data-content="@Johann-S" style="display: none"/>').bootstrapPopover('show')
372
+ } catch (err) {
373
+ assert.strictEqual(err.message, 'Please use show on visible elements')
374
+ done()
375
+ }
376
+ })
377
+
378
+ QUnit.test('should hide popovers when their containing modal is closed', function (assert) {
379
+ assert.expect(1)
380
+ var done = assert.async()
381
+ var templateHTML = '<div id="modal-test" class="modal">' +
382
+ '<div class="modal-dialog" role="document">' +
383
+ '<div class="modal-content">' +
384
+ '<div class="modal-body">' +
385
+ '<button id="popover-test" type="button" class="btn btn-secondary" data-toggle="popover" data-placement="top" data-content="Popover">' +
386
+ 'Popover on top' +
387
+ '</button>' +
388
+ '</div>' +
389
+ '</div>' +
390
+ '</div>' +
391
+ '</div>'
392
+
393
+ $(templateHTML).appendTo('#qunit-fixture')
394
+ $('#popover-test')
395
+ .on('shown.bs.popover', function () {
396
+ $('#modal-test').modal('hide')
397
+ })
398
+ .on('hide.bs.popover', function () {
399
+ assert.ok(true, 'popover hide')
400
+ done()
401
+ })
402
+
403
+ $('#modal-test')
404
+ .on('shown.bs.modal', function () {
405
+ $('#popover-test').bootstrapPopover('show')
406
+ })
407
+ .modal('show')
408
+ })
409
+
410
+ QUnit.test('should convert number to string without error for content and title', function (assert) {
411
+ assert.expect(2)
412
+ var done = assert.async()
413
+ var $popover = $('<a href="#">@mdo</a>')
414
+ .appendTo('#qunit-fixture')
415
+ .bootstrapPopover({
416
+ title: 5,
417
+ content: 7
418
+ })
419
+ .on('shown.bs.popover', function () {
420
+ assert.strictEqual($('.popover .popover-header').text(), '5')
421
+ assert.strictEqual($('.popover .popover-body').text(), '7')
422
+ done()
423
+ })
424
+
425
+ $popover.bootstrapPopover('show')
426
+ })
427
+
428
+ QUnit.test('popover should be shown right away after the call of disable/enable', function (assert) {
429
+ assert.expect(2)
430
+ var done = assert.async()
431
+ var $popover = $('<a href="#">@mdo</a>')
432
+ .appendTo('#qunit-fixture')
433
+ .bootstrapPopover({
434
+ title: 'Test popover',
435
+ content: 'with disable/enable'
436
+ })
437
+ .on('shown.bs.popover', function () {
438
+ assert.strictEqual($('.popover').hasClass('show'), true)
439
+ done()
440
+ })
441
+
442
+ $popover.bootstrapPopover('disable')
443
+ $popover.trigger($.Event('click'))
444
+ setTimeout(function () {
445
+ assert.strictEqual($('.popover').length === 0, true)
446
+ $popover.bootstrapPopover('enable')
447
+ $popover.trigger($.Event('click'))
448
+ }, 200)
449
+ })
450
+
451
+ QUnit.test('popover should call content function only once', function (assert) {
452
+ assert.expect(1)
453
+ var done = assert.async()
454
+ var nbCall = 0
455
+ $('<div id="popover" style="display:none">content</div>').appendTo('#qunit-fixture')
456
+ var $popover = $('<a href="#">@Johann-S</a>')
457
+ .appendTo('#qunit-fixture')
458
+ .bootstrapPopover({
459
+ content: function () {
460
+ nbCall++
461
+ return $('#popover').clone().show().get(0)
462
+ }
463
+ })
464
+ .on('shown.bs.popover', function () {
465
+ assert.strictEqual(nbCall, 1)
466
+ done()
467
+ })
468
+
469
+ $popover.trigger($.Event('click'))
470
+ })
471
+ })