inkstream 0.1.0 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +21 -0
- data/README.md +95 -0
- data/_config.yml +131 -0
- data/_includes/button.html +4 -0
- data/_includes/icon.html +1 -0
- data/_includes/nav-default.html +23 -0
- data/_includes/nav-header.html +25 -0
- data/_includes/post-list.html +59 -0
- data/_includes/post-meta.html +0 -0
- data/_includes/post-pagination.html +29 -0
- data/_includes/promo-section.html +12 -0
- data/_includes/site-before-end.html +1 -0
- data/_includes/site-before-start.html +1 -0
- data/_includes/site-favicons.html +12 -0
- data/_includes/site-fonts.html +13 -0
- data/_includes/site-footer-default.html +17 -0
- data/_includes/site-footer.html +23 -0
- data/_includes/site-header.html +66 -0
- data/_includes/site-styles.html +6 -0
- data/_layouts/blog.html +24 -0
- data/_layouts/default.html +62 -0
- data/_layouts/page.html +35 -0
- data/_layouts/post.html +201 -0
- data/assets/css/styles.css +11167 -0
- data/assets/favicon/android-chrome-192x192.png +0 -0
- data/assets/favicon/android-chrome-512x512.png +0 -0
- data/assets/favicon/apple-touch-icon.png +0 -0
- data/assets/favicon/browserconfig.xml +9 -0
- data/assets/favicon/favicon-16x16.png +0 -0
- data/assets/favicon/favicon-32x32.png +0 -0
- data/assets/favicon/favicon.ico +0 -0
- data/assets/favicon/favicon.svg +1 -0
- data/assets/favicon/mstile-150x150.png +0 -0
- data/assets/favicon/safari-pinned-tab.svg +88 -0
- data/assets/favicon/site.webmanifest +19 -0
- data/assets/images/about-me.jpg +0 -0
- data/assets/images/posts/default-post-img.jpg +0 -0
- data/assets/images/posts/text-syntax.jpg +0 -0
- data/assets/images/posts/welcome.jpg +0 -0
- data/assets/images/profile.png +0 -0
- data/assets/images/promo-banner.jpg +0 -0
- data/assets/js/blog.js +9 -0
- data/assets/js/demo/style-switcher.js +45 -0
- data/assets/logo/logo.jpg +0 -0
- data/assets/logo/logo.svg +1 -0
- data/assets/plugins/bootstrap/js/bootstrap.min.js +7 -0
- data/assets/plugins/jquery-3.3.1.min.js +2 -0
- data/assets/plugins/popper.min.js +5 -0
- data/assets/resume/resume.pdf +0 -0
- data/assets/scss/bootstrap/js/dist/alert.js +199 -0
- data/assets/scss/bootstrap/js/dist/alert.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/button.js +187 -0
- data/assets/scss/bootstrap/js/dist/button.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/carousel.js +668 -0
- data/assets/scss/bootstrap/js/dist/carousel.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/collapse.js +428 -0
- data/assets/scss/bootstrap/js/dist/collapse.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/dropdown.js +595 -0
- data/assets/scss/bootstrap/js/dist/dropdown.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/index.js +23 -0
- data/assets/scss/bootstrap/js/dist/index.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/modal.js +650 -0
- data/assets/scss/bootstrap/js/dist/modal.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/popover.js +261 -0
- data/assets/scss/bootstrap/js/dist/popover.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/scrollspy.js +375 -0
- data/assets/scss/bootstrap/js/dist/scrollspy.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/tab.js +269 -0
- data/assets/scss/bootstrap/js/dist/tab.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/toast.js +283 -0
- data/assets/scss/bootstrap/js/dist/toast.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/tooltip.js +760 -0
- data/assets/scss/bootstrap/js/dist/tooltip.js.map +1 -0
- data/assets/scss/bootstrap/js/dist/util.js +172 -0
- data/assets/scss/bootstrap/js/dist/util.js.map +1 -0
- data/assets/scss/bootstrap/js/src/alert.js +179 -0
- data/assets/scss/bootstrap/js/src/button.js +171 -0
- data/assets/scss/bootstrap/js/src/carousel.js +606 -0
- data/assets/scss/bootstrap/js/src/collapse.js +402 -0
- data/assets/scss/bootstrap/js/src/dropdown.js +545 -0
- data/assets/scss/bootstrap/js/src/index.js +52 -0
- data/assets/scss/bootstrap/js/src/modal.js +594 -0
- data/assets/scss/bootstrap/js/src/popover.js +184 -0
- data/assets/scss/bootstrap/js/src/scrollspy.js +326 -0
- data/assets/scss/bootstrap/js/src/tab.js +260 -0
- data/assets/scss/bootstrap/js/src/toast.js +227 -0
- data/assets/scss/bootstrap/js/src/tooltip.js +752 -0
- data/assets/scss/bootstrap/js/src/util.js +177 -0
- data/assets/scss/bootstrap/js/tests/README.md +69 -0
- data/assets/scss/bootstrap/js/tests/browsers.js +82 -0
- data/assets/scss/bootstrap/js/tests/index.html +133 -0
- data/assets/scss/bootstrap/js/tests/integration/bundle.js +8 -0
- data/assets/scss/bootstrap/js/tests/integration/index.html +66 -0
- data/assets/scss/bootstrap/js/tests/integration/rollup.bundle.js +20 -0
- data/assets/scss/bootstrap/js/tests/karma.conf.js +143 -0
- data/assets/scss/bootstrap/js/tests/unit/.eslintrc.json +40 -0
- data/assets/scss/bootstrap/js/tests/unit/alert.js +123 -0
- data/assets/scss/bootstrap/js/tests/unit/button.js +222 -0
- data/assets/scss/bootstrap/js/tests/unit/carousel.js +1333 -0
- data/assets/scss/bootstrap/js/tests/unit/collapse.js +892 -0
- data/assets/scss/bootstrap/js/tests/unit/dropdown.js +1419 -0
- data/assets/scss/bootstrap/js/tests/unit/modal.js +815 -0
- data/assets/scss/bootstrap/js/tests/unit/popover.js +471 -0
- data/assets/scss/bootstrap/js/tests/unit/scrollspy.js +728 -0
- data/assets/scss/bootstrap/js/tests/unit/tab.js +518 -0
- data/assets/scss/bootstrap/js/tests/unit/toast.js +259 -0
- data/assets/scss/bootstrap/js/tests/unit/tooltip.js +1109 -0
- data/assets/scss/bootstrap/js/tests/unit/util.js +163 -0
- data/assets/scss/bootstrap/js/tests/visual/alert.html +58 -0
- data/assets/scss/bootstrap/js/tests/visual/button.html +51 -0
- data/assets/scss/bootstrap/js/tests/visual/carousel.html +66 -0
- data/assets/scss/bootstrap/js/tests/visual/collapse.html +78 -0
- data/assets/scss/bootstrap/js/tests/visual/dropdown.html +212 -0
- data/assets/scss/bootstrap/js/tests/visual/modal.html +268 -0
- data/assets/scss/bootstrap/js/tests/visual/popover.html +46 -0
- data/assets/scss/bootstrap/js/tests/visual/scrollspy.html +95 -0
- data/assets/scss/bootstrap/js/tests/visual/tab.html +234 -0
- data/assets/scss/bootstrap/js/tests/visual/toast.html +72 -0
- data/assets/scss/bootstrap/js/tests/visual/tooltip.html +106 -0
- data/assets/scss/bootstrap/scss/_alert.scss +51 -0
- data/assets/scss/bootstrap/scss/_badge.scss +54 -0
- data/assets/scss/bootstrap/scss/_breadcrumb.scss +41 -0
- data/assets/scss/bootstrap/scss/_button-group.scss +163 -0
- data/assets/scss/bootstrap/scss/_buttons.scss +137 -0
- data/assets/scss/bootstrap/scss/_card.scss +289 -0
- data/assets/scss/bootstrap/scss/_carousel.scss +197 -0
- data/assets/scss/bootstrap/scss/_close.scss +41 -0
- data/assets/scss/bootstrap/scss/_code.scss +48 -0
- data/assets/scss/bootstrap/scss/_custom-forms.scss +507 -0
- data/assets/scss/bootstrap/scss/_dropdown.scss +191 -0
- data/assets/scss/bootstrap/scss/_forms.scss +330 -0
- data/assets/scss/bootstrap/scss/_functions.scss +86 -0
- data/assets/scss/bootstrap/scss/_grid.scss +52 -0
- data/assets/scss/bootstrap/scss/_images.scss +42 -0
- data/assets/scss/bootstrap/scss/_input-group.scss +193 -0
- data/assets/scss/bootstrap/scss/_jumbotron.scss +17 -0
- data/assets/scss/bootstrap/scss/_list-group.scss +149 -0
- data/assets/scss/bootstrap/scss/_media.scss +8 -0
- data/assets/scss/bootstrap/scss/_mixins.scss +47 -0
- data/assets/scss/bootstrap/scss/_modal.scss +229 -0
- data/assets/scss/bootstrap/scss/_nav.scss +120 -0
- data/assets/scss/bootstrap/scss/_navbar.scss +294 -0
- data/assets/scss/bootstrap/scss/_pagination.scss +73 -0
- data/assets/scss/bootstrap/scss/_popover.scss +171 -0
- data/assets/scss/bootstrap/scss/_print.scss +141 -0
- data/assets/scss/bootstrap/scss/_progress.scss +43 -0
- data/assets/scss/bootstrap/scss/_reboot.scss +483 -0
- data/assets/scss/bootstrap/scss/_root.scss +19 -0
- data/assets/scss/bootstrap/scss/_spinners.scss +55 -0
- data/assets/scss/bootstrap/scss/_tables.scss +185 -0
- data/assets/scss/bootstrap/scss/_toasts.scss +44 -0
- data/assets/scss/bootstrap/scss/_tooltip.scss +115 -0
- data/assets/scss/bootstrap/scss/_transitions.scss +20 -0
- data/assets/scss/bootstrap/scss/_type.scss +125 -0
- data/assets/scss/bootstrap/scss/_utilities.scss +17 -0
- data/assets/scss/bootstrap/scss/_variables.scss +1123 -0
- data/assets/scss/bootstrap/scss/bootstrap-grid.scss +29 -0
- data/assets/scss/bootstrap/scss/bootstrap-reboot.scss +12 -0
- data/assets/scss/bootstrap/scss/bootstrap.scss +44 -0
- data/assets/scss/bootstrap/scss/mixins/_alert.scss +13 -0
- data/assets/scss/bootstrap/scss/mixins/_background-variant.scss +21 -0
- data/assets/scss/bootstrap/scss/mixins/_badge.scss +17 -0
- data/assets/scss/bootstrap/scss/mixins/_border-radius.scss +63 -0
- data/assets/scss/bootstrap/scss/mixins/_box-shadow.scss +20 -0
- data/assets/scss/bootstrap/scss/mixins/_breakpoints.scss +123 -0
- data/assets/scss/bootstrap/scss/mixins/_buttons.scss +107 -0
- data/assets/scss/bootstrap/scss/mixins/_caret.scss +62 -0
- data/assets/scss/bootstrap/scss/mixins/_clearfix.scss +7 -0
- data/assets/scss/bootstrap/scss/mixins/_deprecate.scss +10 -0
- data/assets/scss/bootstrap/scss/mixins/_float.scss +14 -0
- data/assets/scss/bootstrap/scss/mixins/_forms.scss +192 -0
- data/assets/scss/bootstrap/scss/mixins/_gradients.scss +45 -0
- data/assets/scss/bootstrap/scss/mixins/_grid-framework.scss +66 -0
- data/assets/scss/bootstrap/scss/mixins/_grid.scss +51 -0
- data/assets/scss/bootstrap/scss/mixins/_hover.scss +37 -0
- data/assets/scss/bootstrap/scss/mixins/_image.scss +36 -0
- data/assets/scss/bootstrap/scss/mixins/_list-group.scss +21 -0
- data/assets/scss/bootstrap/scss/mixins/_lists.scss +7 -0
- data/assets/scss/bootstrap/scss/mixins/_nav-divider.scss +10 -0
- data/assets/scss/bootstrap/scss/mixins/_pagination.scss +22 -0
- data/assets/scss/bootstrap/scss/mixins/_reset-text.scss +17 -0
- data/assets/scss/bootstrap/scss/mixins/_resize.scss +6 -0
- data/assets/scss/bootstrap/scss/mixins/_screen-reader.scss +33 -0
- data/assets/scss/bootstrap/scss/mixins/_size.scss +7 -0
- data/assets/scss/bootstrap/scss/mixins/_table-row.scss +39 -0
- data/assets/scss/bootstrap/scss/mixins/_text-emphasis.scss +16 -0
- data/assets/scss/bootstrap/scss/mixins/_text-hide.scss +11 -0
- data/assets/scss/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- data/assets/scss/bootstrap/scss/mixins/_transition.scss +16 -0
- data/assets/scss/bootstrap/scss/mixins/_visibility.scss +8 -0
- data/assets/scss/bootstrap/scss/utilities/_align.scss +8 -0
- data/assets/scss/bootstrap/scss/utilities/_background.scss +19 -0
- data/assets/scss/bootstrap/scss/utilities/_borders.scss +75 -0
- data/assets/scss/bootstrap/scss/utilities/_clearfix.scss +3 -0
- data/assets/scss/bootstrap/scss/utilities/_display.scss +26 -0
- data/assets/scss/bootstrap/scss/utilities/_embed.scss +39 -0
- data/assets/scss/bootstrap/scss/utilities/_flex.scss +51 -0
- data/assets/scss/bootstrap/scss/utilities/_float.scss +11 -0
- data/assets/scss/bootstrap/scss/utilities/_overflow.scss +5 -0
- data/assets/scss/bootstrap/scss/utilities/_position.scss +32 -0
- data/assets/scss/bootstrap/scss/utilities/_screenreaders.scss +11 -0
- data/assets/scss/bootstrap/scss/utilities/_shadows.scss +6 -0
- data/assets/scss/bootstrap/scss/utilities/_sizing.scss +20 -0
- data/assets/scss/bootstrap/scss/utilities/_spacing.scss +73 -0
- data/assets/scss/bootstrap/scss/utilities/_stretched-link.scss +19 -0
- data/assets/scss/bootstrap/scss/utilities/_text.scss +72 -0
- data/assets/scss/bootstrap/scss/utilities/_visibility.scss +13 -0
- data/assets/scss/bootstrap/scss/vendor/_rfs.scss +212 -0
- data/assets/scss/theme/_about.scss +28 -0
- data/assets/scss/theme/_base.scss +207 -0
- data/assets/scss/theme/_blog.scss +140 -0
- data/assets/scss/theme/_demo.scss +153 -0
- data/assets/scss/theme/_mixins.scss +34 -0
- data/assets/scss/theme/_responsive.scss +88 -0
- data/assets/scss/theme/styles.scss +14 -0
- data/assets/scss/theme-8.scss +41 -0
- data/assets/styles.scss +6 -0
- metadata +221 -4
@@ -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
|
+
})
|