}
})
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
/**
if (triggerChangeEvent) {
this._element.classList.toggle(ClassName.ACTIVE)
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
dispose() {
event.preventDefault()
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
/**
}
})
-
/**
* ------------------------------------------------------------------------
* jQuery
Collapse._collapseInterface(this, config)
})
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
/**
--- /dev/null
+import EventHandler from './eventHandler'
+
+const Polyfill = (() => {
+ // defaultPrevented is broken in IE.
+ // https://connect.microsoft.com/IE/feedback/details/790389/event-defaultprevented-returns-false-after-preventdefault-was-called
+ const workingDefaultPrevented = (() => {
+ const e = document.createEvent('CustomEvent')
+ e.initEvent('Bootstrap', true, true)
+ e.preventDefault()
+ return e.defaultPrevented
+ })()
+
+ let defaultPreventedPreservedOnDispatch = true
+
+ // CustomEvent polyfill for IE (see: https://mzl.la/2v76Zvn)
+ if (typeof window.CustomEvent !== 'function') {
+ window.CustomEvent = (event, params) => {
+ params = params || {
+ bubbles: false,
+ cancelable: false,
+ detail: null
+ }
+ const evt = document.createEvent('CustomEvent')
+ evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)
+ if (!workingDefaultPrevented) {
+ const origPreventDefault = Event.prototype.preventDefault
+ evt.preventDefault = () => {
+ if (!evt.cancelable) {
+ return
+ }
+
+ origPreventDefault.call(evt)
+ Object.defineProperty(evt, 'defaultPrevented', {
+ get() {
+ return true
+ },
+ configurable: true
+ })
+ }
+ }
+ return evt
+ }
+
+ window.CustomEvent.prototype = window.Event.prototype
+ } else {
+ // MSEdge resets defaultPrevented flag upon dispatchEvent call if at least one listener is attached
+ defaultPreventedPreservedOnDispatch = (() => {
+ const e = new CustomEvent('Bootstrap', {
+ cancelable: true
+ })
+
+ const element = document.createElement('div')
+ element.addEventListener('Bootstrap', () => null)
+
+ e.preventDefault()
+ element.dispatchEvent(e)
+ return e.defaultPrevented
+ })()
+ }
+
+ // Event constructor shim
+ if (!window.Event || typeof window.Event !== 'function') {
+ const origEvent = window.Event
+ window.Event = (inType, params) => {
+ params = params || {}
+ const e = document.createEvent('Event')
+ e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable))
+ return e
+ }
+ window.Event.prototype = origEvent.prototype
+ }
+
+ // focusin and focusout polyfill
+ if (typeof window.onfocusin === 'undefined') {
+ (() => {
+ function listenerFocus(event) {
+ EventHandler.trigger(event.target, 'focusin')
+ }
+ function listenerBlur(event) {
+ EventHandler.trigger(event.target, 'focusout')
+ }
+ EventHandler.on(document, 'focus', 'input', listenerFocus)
+ EventHandler.on(document, 'blur', 'input', listenerBlur)
+ })()
+ }
+
+ return {
+ get defaultPreventedPreservedOnDispatch() {
+ return defaultPreventedPreservedOnDispatch
+ }
+ }
+})()
+
+export default Polyfill
items[index].focus()
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
/**
import Dropdown from './dropdown'
import Modal from './modal'
import Popover from './popover'
-import Scrollspy from './scrollspy'
+import ScrollSpy from './scrollspy'
import Tab from './tab'
import Toast from './toast'
import Tooltip from './tooltip'
Dropdown,
Modal,
Popover,
- Scrollspy,
+ ScrollSpy,
Tab,
Toast,
Tooltip
} else {
document.body.style.paddingRight = ''
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
_getScrollbarWidth() { // thx d.walsh
}
})
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
/**
}
})
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
/**
}
})
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
/**
.map((token) => token.trim())
.forEach((tClass) => tip.classList.remove(tClass))
}
+
+ static _getInstance(element) {
+ return Data.getData(element, DATA_KEY)
+ }
}
_handlePopperPlacementChange(popperData) {
"Simulator": false,
"Toast": false,
"EventHandler": false,
- "Data": false,
"Manipulator": false
},
"parserOptions": {
$(function () {
'use strict'
+ var Alert = typeof window.bootstrap !== 'undefined' ? window.bootstrap.Alert : window.Alert
+
QUnit.module('alert plugin')
QUnit.test('should be defined on jquery object', function (assert) {
var done = assert.async()
var $el = $('<div/>')
var $alert = $el.bootstrapAlert()
- var alertInstance = Data.getData($alert[0], 'bs.alert')
+ var alertInstance = Alert._getInstance($alert[0])
$alert.one('closed.bs.alert', function () {
assert.ok('alert closed')
var $el = $('<div/>')
var $alert = $el.bootstrapAlert()
- assert.ok(typeof Data.getData($alert[0], 'bs.alert') !== 'undefined')
+ assert.ok(typeof Alert._getInstance($alert[0]) !== 'undefined')
- Data.getData($alert[0], 'bs.alert').dispose()
+ Alert._getInstance($alert[0]).dispose()
- assert.ok(Data.getData($alert[0], 'bs.alert') === null)
+ assert.ok(Alert._getInstance($alert[0]) === null)
})
QUnit.test('should return alert version', function (assert) {
$(function () {
'use strict'
+ var Button = typeof window.bootstrap !== 'undefined' ? window.bootstrap.Button : window.Button
+
QUnit.module('button plugin')
QUnit.test('should be defined on jquery object', function (assert) {
var $el = $('<div/>')
var $button = $el.bootstrapButton()
- assert.ok(typeof Data.getData($button[0], 'bs.button') !== 'undefined')
+ assert.ok(typeof Button._getInstance($button[0]) !== 'undefined')
- Data.getData($button[0], 'bs.button').dispose()
+ Button._getInstance($button[0]).dispose()
- assert.ok(Data.getData($button[0], 'bs.button') === null)
+ assert.ok(Button._getInstance($button[0]) === null)
})
QUnit.test('should return button version', function (assert) {
$carousel.appendTo('body')
EventHandler.trigger($('[data-slide]').first()[0], 'click')
- assert.strictEqual(Data.getData($carousel[0], 'bs.carousel')._config.interval, 1814)
+ assert.strictEqual(Carousel._getInstance($carousel[0])._config.interval, 1814)
$carousel.remove()
$carousel.appendTo('body').attr('data-modal', 'foobar')
EventHandler.trigger($('[data-slide]').first()[0], 'click')
- assert.strictEqual(Data.getData($carousel[0], 'bs.carousel')._config.interval, 1814, 'even if there is an data-modal attribute set')
+ assert.strictEqual(Carousel._getInstance($carousel[0])._config.interval, 1814, 'even if there is an data-modal attribute set')
$carousel.remove()
$carousel.appendTo('body')
EventHandler.trigger($('[data-slide]').first()[0], 'click')
$carousel.attr('data-interval', 1860)
EventHandler.trigger($('[data-slide]').first()[0], 'click')
- assert.strictEqual(Data.getData($carousel[0], 'bs.carousel')._config.interval, 1814, 'attributes should be read only on initialization')
+ assert.strictEqual(Carousel._getInstance($carousel[0])._config.interval, 1814, 'attributes should be read only on initialization')
$carousel.bootstrapCarousel('dispose')
$carousel.remove()
$carousel.attr('data-interval', false)
$carousel.appendTo('body')
$carousel.bootstrapCarousel(1)
- assert.strictEqual(Data.getData($carousel[0], 'bs.carousel')._config.interval, false, 'data attribute has higher priority than default options')
+ assert.strictEqual(Carousel._getInstance($carousel[0])._config.interval, false, 'data attribute has higher priority than default options')
$carousel.remove()
})
$(function () {
'use strict'
+ var Collapse = typeof window.bootstrap !== 'undefined' ? window.bootstrap.Collapse : window.Collapse
+
QUnit.module('collapse plugin')
QUnit.test('should be defined on jquery object', function (assert) {
EventHandler.trigger($target2[0], 'click')
$body2.toggleClass('show collapsing')
- Data.getData($body2[0], 'bs.collapse')._isTransitioning = true
+ Collapse._getInstance($body2[0])._isTransitioning = true
EventHandler.trigger($target1[0], 'click')
$(function () {
'use strict'
+ var Dropdown = typeof window.bootstrap !== 'undefined' ? window.bootstrap.Dropdown : window.Dropdown
+
QUnit.module('dropdowns plugin')
QUnit.test('should be defined on jquery object', function (assert) {
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- var dropdown = Data.getData($dropdown[0], 'bs.dropdown')
+ var dropdown = Dropdown._getInstance($dropdown[0])
dropdown.toggle()
assert.ok(dropdown._popper)
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- var dropdown = Data.getData($dropdown[0], 'bs.dropdown')
+ var dropdown = Dropdown._getInstance($dropdown[0])
var spyDetectNavbar = sinon.spy(dropdown, '_detectNavbar')
dropdown.update()
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- var dropdown = Data.getData($dropdown[0], 'bs.dropdown')
+ var dropdown = Dropdown._getInstance($dropdown[0])
dropdown.toggle()
assert.ok(dropdown._popper)
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- var dropdown = Data.getData($dropdown[0], 'bs.dropdown')
+ var dropdown = Dropdown._getInstance($dropdown[0])
assert.notOk(dropdown._popper)
assert.ok(dropdown._menu !== null)
$(function () {
'use strict'
+ var Popover = typeof window.bootstrap !== 'undefined' ? window.bootstrap.Popover : window.Popover
+
QUnit.module('popover plugin')
QUnit.test('should be defined on jquery object', function (assert) {
assert.expect(1)
var $popover = $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>').bootstrapPopover()
- assert.ok(Data.getData($popover[0], 'bs.popover'), 'popover instance exists')
+ assert.ok(Popover._getInstance($popover[0]), 'popover instance exists')
})
QUnit.test('should store popover trigger in popover instance data object', function (assert) {
$popover.bootstrapPopover('show')
- assert.ok(Data.getData($('.popover')[0], 'bs.popover'), 'popover trigger stored in instance data')
+ assert.ok(Popover._getInstance($('.popover')[0]), 'popover trigger stored in instance data')
})
QUnit.test('should get title and content from options', function (assert) {
})
.on('click.foo', $.noop)
- assert.ok(Data.getData($popover[0], 'bs.popover'), 'popover has data')
+ assert.ok(Popover._getInstance($popover[0]), 'popover has data')
$popover.bootstrapPopover('show')
$popover.bootstrapPopover('dispose')
assert.ok(!$popover.hasClass('show'), 'popover is hidden')
- assert.ok(!$popover.data('popover'), 'popover does not have data')
+ assert.ok(!Popover._getInstance($popover[0]), 'popover does not have data')
})
QUnit.test('should render popover element using delegated selector', function (assert) {
assert.ok(false, 'should not fire any popover events')
})
.bootstrapPopover('hide')
- assert.ok(Data.getData($popover[0], 'bs.popover') === null, 'should not initialize the popover')
+ assert.ok(Popover._getInstance($popover[0]) === null, 'should not initialize the popover')
})
QUnit.test('should fire inserted event', function (assert) {
$(function () {
'use strict'
+ var ScrollSpy = typeof window.bootstrap !== 'undefined' ? window.bootstrap.ScrollSpy : window.ScrollSpy
+
QUnit.module('scrollspy plugin')
QUnit.test('should be defined on jquery object', function (assert) {
}
var $target = $('#div-' + type + 'm-2')
- var scrollspy = Data.getData($content[0], 'bs.scrollspy')
+ var scrollspy = ScrollSpy._getInstance($content[0])
assert.ok(scrollspy._offsets[1] === $target.offset().top, 'offset method with ' + type + ' option')
assert.ok(scrollspy._offsets[1] !== $target.position().top, 'position method with ' + type + ' option')
}
var $target = $('#div-' + type + 'm-2')
- var scrollspy = Data.getData($content[0], 'bs.scrollspy')
+ var scrollspy = ScrollSpy._getInstance($content[0])
assert.ok(scrollspy._offsets[1] !== $target.offset().top, 'offset method with ' + type + ' option')
assert.ok(scrollspy._offsets[1] === $target.position().top, 'position method with ' + type + ' option')
$(function () {
'use strict'
+ var Tooltip = typeof window.bootstrap !== 'undefined' ? window.bootstrap.Tooltip : window.Tooltip
+
QUnit.module('tooltip plugin')
QUnit.test('should be defined on jquery object', function (assert) {
$tooltip.bootstrapTooltip('hide')
})
.one('hidden.bs.tooltip', function () {
- assert.strictEqual(Data.getData($tooltip[0], 'bs.tooltip').tip.parentNode, null, 'tooltip removed')
+ assert.strictEqual(Tooltip._getInstance($tooltip[0]).tip.parentNode, null, 'tooltip removed')
done()
})
.bootstrapTooltip('show')
$tooltip.bootstrapTooltip('hide')
})
.one('hidden.bs.tooltip', function () {
- assert.strictEqual(Data.getData($tooltip[0], 'bs.tooltip').tip.parentNode, null, 'tooltip removed')
+ assert.strictEqual(Tooltip._getInstance($tooltip[0]).tip.parentNode, null, 'tooltip removed')
done()
})
.bootstrapTooltip('show')
$tooltip.bootstrapTooltip('hide')
})
.one('hidden.bs.tooltip', function () {
- assert.strictEqual(Data.getData($tooltip[0], 'bs.tooltip').tip.parentNode, null, 'tooltip removed')
+ assert.strictEqual(Tooltip._getInstance($tooltip[0]).tip.parentNode, null, 'tooltip removed')
done()
})
.bootstrapTooltip('show')
.bootstrapTooltip()
.on('click.foo', function () {}) // eslint-disable-line no-empty-function
- assert.ok(Data.getData($tooltip[0], 'bs.tooltip'), 'tooltip has data')
+ assert.ok(Tooltip._getInstance($tooltip[0]), 'tooltip has data')
$tooltip.bootstrapTooltip('show')
$tooltip.bootstrapTooltip('dispose')
assert.ok(!$tooltip.hasClass('show'), 'tooltip is hidden')
- assert.ok(!Data.getData($tooltip[0], 'bs.tooltip'), 'tooltip does not have data')
+ assert.ok(!Tooltip._getInstance($tooltip[0]), 'tooltip does not have data')
})
// QUnit.test('should show tooltip with delegate selector on click', function (assert) {
trigger: 'manual'
})
.on('inserted.bs.tooltip', function () {
- var $tooltip = $(Data.getData(this, 'bs.tooltip').tip)
+ var $tooltip = $(Tooltip._getInstance(this).tip)
assert.ok($tooltip.hasClass('bs-tooltip-right'))
assert.ok(typeof $tooltip.attr('style') === 'undefined')
$styles.remove()
})
setTimeout(function () {
- assert.ok($(Data.getData($tooltip[0], 'bs.tooltip').tip).is('.fade.show'), '1ms: tooltip faded active')
+ assert.ok($(Tooltip._getInstance($tooltip[0]).tip).is('.fade.show'), '1ms: tooltip faded active')
EventHandler.trigger($tooltip[0], 'mouseout')
setTimeout(function () {
- assert.ok($(Data.getData($tooltip[0], 'bs.tooltip').tip).is('.fade.show'), '100ms: tooltip still faded active')
+ assert.ok($(Tooltip._getInstance($tooltip[0]).tip).is('.fade.show'), '100ms: tooltip still faded active')
}, 100)
setTimeout(function () {
- assert.ok(!$(Data.getData($tooltip[0], 'bs.tooltip').tip).is('.show'), '200ms: tooltip removed')
+ assert.ok(!$(Tooltip._getInstance($tooltip[0]).tip).is('.show'), '200ms: tooltip removed')
done()
}, 200)
}, 0)
title: titleHtml
})
- var obj = Data.getData($tooltip[0], 'bs.tooltip')
+ var obj = Tooltip._getInstance($tooltip[0])
EventHandler.trigger($('#tt-outer')[0], 'mouseover')
assert.ok(false, 'should not fire any tooltip events')
})
.bootstrapTooltip('hide')
- assert.ok(Data.getData($tooltip[0], 'bs.tooltip') === null, 'should not initialize the tooltip')
+ assert.ok(Tooltip._getInstance($tooltip[0]) === null, 'should not initialize the tooltip')
})
QUnit.test('should not remove tooltip if multiple triggers are set and one is still active', function (assert) {
animation: false
})
- var tooltip = Data.getData($el[0], 'bs.tooltip')
+ var tooltip = Tooltip._getInstance($el[0])
var $tooltip = $(tooltip.getTipElement())
function showingTooltip() {
animation: false
})
- var tooltip = Data.getData($el[0], 'bs.tooltip')
+ var tooltip = Tooltip._getInstance($el[0])
var $tooltip = $(tooltip.getTipElement())
function showingTooltip() {
.appendTo('#qunit-fixture')
.bootstrapTooltip('show')
.on('hidden.bs.tooltip', function () {
- var tooltip = Data.getData($el[0], 'bs.tooltip')
+ var tooltip = Tooltip._getInstance($el[0])
var $tooltip = $(tooltip.getTipElement())
assert.ok($tooltip.hasClass('tooltip'))
assert.ok($tooltip.hasClass('fade'))
var $el = $('<a href="#" rel="tooltip" title="7"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.tooltip', function () {
- var tooltip = Data.getData($el[0], 'bs.tooltip')
+ var tooltip = Tooltip._getInstance($el[0])
var $tooltip = $(tooltip.getTipElement())
assert.strictEqual($tooltip.children().text(), '7')
done()
.appendTo('#qunit-fixture')
.bootstrapTooltip()
- var tooltip = Data.getData($tooltip[0], 'bs.tooltip')
+ var tooltip = Tooltip._getInstance($tooltip[0])
tooltip.show()
assert.ok(tooltip._popper)
.appendTo('#qunit-fixture')
.bootstrapTooltip()
- var tooltip = Data.getData($tooltip[0], 'bs.tooltip')
+ var tooltip = Tooltip._getInstance($tooltip[0])
tooltip.update()
assert.ok(tooltip._popper === null)