diff --git a/js/src/carousel.js b/js/src/carousel.js index efacd9494e06..d8da854a2206 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -390,10 +390,11 @@ const Carousel = (($) => { if (typeof config === 'number') { data.to(config) - - } else if (action) { + } else if (typeof action === 'string') { + if (data[action] === undefined) { + throw new Error(`No method named "${action}"`) + } data[action]() - } else if (_config.interval) { data.pause() data.cycle() diff --git a/js/src/collapse.js b/js/src/collapse.js index e46d3ec60426..a9980926e03e 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -333,6 +333,9 @@ const Collapse = (($) => { } if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error(`No method named "${config}"`) + } data[config]() } }) diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 734e64312784..f947d2aa11fc 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -143,6 +143,9 @@ const Dropdown = (($) => { } if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error(`No method named "${config}"`) + } data[config].call(this) } }) diff --git a/js/src/modal.js b/js/src/modal.js index f57131e7e05b..99a49f148f92 100644 --- a/js/src/modal.js +++ b/js/src/modal.js @@ -463,8 +463,10 @@ const Modal = (($) => { } if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error(`No method named "${config}"`) + } data[config](relatedTarget) - } else if (_config.show) { data.show(relatedTarget) } diff --git a/js/src/popover.js b/js/src/popover.js index b8b24a1c4c30..11ee86e70ccf 100644 --- a/js/src/popover.js +++ b/js/src/popover.js @@ -153,6 +153,9 @@ const Popover = (($) => { } if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error(`No method named "${config}"`) + } data[config]() } }) diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index 27a91958efe2..bdbd6439c98f 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -277,6 +277,9 @@ const ScrollSpy = (($) => { } if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error(`No method named "${config}"`) + } data[config]() } }) diff --git a/js/src/tab.js b/js/src/tab.js index 4b311c24e35e..1283881e4c79 100644 --- a/js/src/tab.js +++ b/js/src/tab.js @@ -234,6 +234,9 @@ const Tab = (($) => { } if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error(`No method named "${config}"`) + } data[config]() } }) diff --git a/js/src/tooltip.js b/js/src/tooltip.js index 151cd6f515ea..b80bd8e8c972 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -622,6 +622,9 @@ const Tooltip = (($) => { } if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error(`No method named "${config}"`) + } data[config]() } }) diff --git a/js/tests/unit/carousel.js b/js/tests/unit/carousel.js index 017bd9beeee1..d6d0186e15d0 100644 --- a/js/tests/unit/carousel.js +++ b/js/tests/unit/carousel.js @@ -24,6 +24,18 @@ $(function () { assert.strictEqual($.fn.carousel, undefined, 'carousel was set back to undefined (orig value)') }) + QUnit.test('should throw explicit error on undefined method', function (assert) { + assert.expect(1) + var $el = $('
') + $el.bootstrapCarousel() + try { + $el.bootstrapCarousel('noMethod') + } + catch (err) { + assert.strictEqual(err.message, 'No method named "noMethod"') + } + }) + QUnit.test('should return jquery collection containing the element', function (assert) { assert.expect(2) var $el = $('
') diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js index 78fafc6c2d88..4eadc205bef9 100644 --- a/js/tests/unit/collapse.js +++ b/js/tests/unit/collapse.js @@ -24,6 +24,18 @@ $(function () { assert.strictEqual($.fn.collapse, undefined, 'collapse was set back to undefined (org value)') }) + QUnit.test('should throw explicit error on undefined method', function (assert) { + assert.expect(1) + var $el = $('
') + $el.bootstrapCollapse() + try { + $el.bootstrapCollapse('noMethod') + } + catch (err) { + assert.strictEqual(err.message, 'No method named "noMethod"') + } + }) + QUnit.test('should return jquery collection containing the element', function (assert) { assert.expect(2) var $el = $('
') diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js index 566b50ee7e12..e6cda58d4010 100644 --- a/js/tests/unit/dropdown.js +++ b/js/tests/unit/dropdown.js @@ -24,6 +24,18 @@ $(function () { assert.strictEqual($.fn.dropdown, undefined, 'dropdown was set back to undefined (org value)') }) + QUnit.test('should throw explicit error on undefined method', function (assert) { + assert.expect(1) + var $el = $('
') + $el.bootstrapDropdown() + try { + $el.bootstrapDropdown('noMethod') + } + catch (err) { + assert.strictEqual(err.message, 'No method named "noMethod"') + } + }) + QUnit.test('should return jquery collection containing the element', function (assert) { assert.expect(2) var $el = $('
') diff --git a/js/tests/unit/modal.js b/js/tests/unit/modal.js index 6da09e3c6e23..50baac8a3a7c 100644 --- a/js/tests/unit/modal.js +++ b/js/tests/unit/modal.js @@ -24,6 +24,18 @@ $(function () { assert.strictEqual($.fn.modal, undefined, 'modal was set back to undefined (orig value)') }) + QUnit.test('should throw explicit error on undefined method', function (assert) { + assert.expect(1) + var $el = $('