Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorJohann-S <johann.servoire@gmail.com>2019-05-16 12:57:05 +0300
committerJohann-S <johann.servoire@gmail.com>2019-05-16 14:24:29 +0300
commitd5752a18abdf2991ca97660ccdbf42c494d6878d (patch)
tree758c3240cbd4e6f38eb3ba552786d1a749c88411 /js
parent4ea7e11233dee88a6243ae1893ca1cd5b8cbeac6 (diff)
toast should allow prevent default for hide and show events
Diffstat (limited to 'js')
-rw-r--r--js/src/toast.js12
-rw-r--r--js/tests/unit/toast.js71
2 files changed, 81 insertions, 2 deletions
diff --git a/js/src/toast.js b/js/src/toast.js
index 9956fd4064..b29b051ec3 100644
--- a/js/src/toast.js
+++ b/js/src/toast.js
@@ -90,7 +90,11 @@ class Toast {
// Public
show() {
- EventHandler.trigger(this._element, Event.SHOW)
+ const showEvent = EventHandler.trigger(this._element, Event.SHOW)
+
+ if (showEvent.defaultPrevented) {
+ return
+ }
if (this._config.animation) {
this._element.classList.add(ClassName.FADE)
@@ -126,7 +130,11 @@ class Toast {
return
}
- EventHandler.trigger(this._element, Event.HIDE)
+ const hideEvent = EventHandler.trigger(this._element, Event.HIDE)
+
+ if (hideEvent.defaultPrevented) {
+ return
+ }
const complete = () => {
this._element.classList.add(ClassName.HIDE)
diff --git a/js/tests/unit/toast.js b/js/tests/unit/toast.js
index 57f953bd17..234e5955c5 100644
--- a/js/tests/unit/toast.js
+++ b/js/tests/unit/toast.js
@@ -255,4 +255,75 @@ $(function () {
var toast = Toast._getInstance($toast[0])
assert.strictEqual(toast._config.delay, defaultDelay)
})
+
+ QUnit.test('should not trigger shown if show is prevented', function (assert) {
+ assert.expect(1)
+ var done = assert.async()
+
+ var toastHtml =
+ '<div class="toast" data-delay="1" data-autohide="false">' +
+ '<div class="toast-body">' +
+ 'a simple toast' +
+ '</div>' +
+ '</div>'
+
+ var $toast = $(toastHtml)
+ .bootstrapToast()
+ .appendTo($('#qunit-fixture'))
+
+ var shownCalled = false
+ function assertDone() {
+ setTimeout(function () {
+ assert.strictEqual(shownCalled, false)
+ done()
+ }, 20)
+ }
+
+ $toast
+ .on('show.bs.toast', function (event) {
+ event.preventDefault()
+ assertDone()
+ })
+ .on('shown.bs.toast', function () {
+ shownCalled = true
+ })
+ .bootstrapToast('show')
+ })
+
+ QUnit.test('should not trigger hidden if hide is prevented', function (assert) {
+ assert.expect(1)
+ var done = assert.async()
+
+ var toastHtml =
+ '<div class="toast" data-delay="1" data-autohide="false">' +
+ '<div class="toast-body">' +
+ 'a simple toast' +
+ '</div>' +
+ '</div>'
+
+ var $toast = $(toastHtml)
+ .bootstrapToast()
+ .appendTo($('#qunit-fixture'))
+
+ var hiddenCalled = false
+ function assertDone() {
+ setTimeout(function () {
+ assert.strictEqual(hiddenCalled, false)
+ done()
+ }, 20)
+ }
+
+ $toast
+ .on('shown.bs.toast', function () {
+ $toast.bootstrapToast('hide')
+ })
+ .on('hide.bs.toast', function (event) {
+ event.preventDefault()
+ assertDone()
+ })
+ .on('hidden.bs.toast', function () {
+ hiddenCalled = true
+ })
+ .bootstrapToast('show')
+ })
})