diff options
| author | Chris Rebert <[email protected]> | 2015-04-25 13:17:20 -0700 |
|---|---|---|
| committer | Chris Rebert <[email protected]> | 2015-04-25 13:17:20 -0700 |
| commit | 17aaab3de87b0c4467409ac512ed3ec85fa2852a (patch) | |
| tree | 42025bd7be075b00d02498fbc06d3c1af3a6814b | |
| parent | 8949bcecd2b298d67bce34705a5d235b155a9ba7 (diff) | |
| parent | fc372952e2983934dda338ffefd705112db8008a (diff) | |
| download | bootstrap-17aaab3de87b0c4467409ac512ed3ec85fa2852a.tar.xz bootstrap-17aaab3de87b0c4467409ac512ed3ec85fa2852a.zip | |
Merge pull request #16324 from twbs/address-16219
Throw error when tooltip/popover template has multiple top-level elements
| -rw-r--r-- | js/tests/unit/popover.js | 11 | ||||
| -rw-r--r-- | js/tests/unit/tooltip.js | 10 | ||||
| -rw-r--r-- | js/tooltip.js | 8 |
3 files changed, 28 insertions, 1 deletions
diff --git a/js/tests/unit/popover.js b/js/tests/unit/popover.js index 2c3fd0cb0..a25df3a58 100644 --- a/js/tests/unit/popover.js +++ b/js/tests/unit/popover.js @@ -259,6 +259,16 @@ $(function () { assert.strictEqual($popover.data('bs.popover'), undefined, 'should not initialize the popover') }) + QUnit.test('should throw an error when template contains multiple top-level elements', function (assert) { + assert.expect(1) + assert.throws(function () { + $('<span data-toggle="popover" data-title="some title" data-content="some content">some text</span>') + .appendTo('#qunit-fixture') + .bootstrapPopover({ template: '<div>Foo</div><div>Bar</div>' }) + .bootstrapPopover('show') + }, new Error('popover `template` option must consist of exactly 1 top-level element!')) + }) + QUnit.test('should fire inserted event', function (assert) { assert.expect(2) var done = assert.async() @@ -276,4 +286,5 @@ $(function () { }) .bootstrapPopover('show') }) + }) diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js index 0cb964e9b..2c492a92b 100644 --- a/js/tests/unit/tooltip.js +++ b/js/tests/unit/tooltip.js @@ -1225,4 +1225,14 @@ $(function () { assert.strictEqual($tooltip.data('bs.tooltip'), undefined, 'should not initialize the tooltip') }) + QUnit.test('should throw an error when template contains multiple top-level elements', function (assert) { + assert.expect(1) + assert.throws(function () { + $('<a href="#" data-toggle="tooltip" title="Another tooltip"></a>') + .appendTo('#qunit-fixture') + .bootstrapTooltip({ template: '<div>Foo</div><div>Bar</div>' }) + .bootstrapTooltip('show') + }, new Error('tooltip `template` option must consist of exactly 1 top-level element!')) + }) + }) diff --git a/js/tooltip.js b/js/tooltip.js index b2d775938..2d42cab24 100644 --- a/js/tooltip.js +++ b/js/tooltip.js @@ -404,7 +404,13 @@ } Tooltip.prototype.tip = function () { - return (this.$tip = this.$tip || $(this.options.template)) + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip } Tooltip.prototype.arrow = function () { |
