From 866e99b00cb12dcfa0d9b88edf4f4d0ef06ca3f3 Mon Sep 17 00:00:00 2001 From: Kotas Vlastimil Date: Thu, 14 Jan 2016 17:41:36 +0100 Subject: [PATCH 01/91] Button toggling - trigger change event on input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bootstrap’s .button styles can be applied to other elements, such as labels, to provide checkbox or radio style button toggling. When the checkbox or radio state is changed, there should be triggered the change event. Currently, the change event is triggered on the Button, which is not correct. Only input fields do support the change event. --- js/src/button.js | 2 +- js/tests/unit/button.js | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/js/src/button.js b/js/src/button.js index 3144a3f101..f5551f169e 100644 --- a/js/src/button.js +++ b/js/src/button.js @@ -90,7 +90,7 @@ const Button = (($) => { if (triggerChangeEvent) { input.checked = !$(this._element).hasClass(ClassName.ACTIVE) - $(this._element).trigger('change') + $(input).trigger('change') } } } else { diff --git a/js/tests/unit/button.js b/js/tests/unit/button.js index 5648506cf5..f0ce96488f 100644 --- a/js/tests/unit/button.js +++ b/js/tests/unit/button.js @@ -72,6 +72,26 @@ $(function () { assert.strictEqual($btn.attr('aria-pressed'), 'true', 'btn aria-pressed state is true') }) + QUnit.test('should trigger input change event when toggled button has input field', function (assert) { + assert.expect(1) + var done = assert.async() + + var groupHTML = '
' + + '' + + '
' + var $group = $(groupHTML).appendTo('#qunit-fixture') + + $group.find('input').on('change', function (e) { + e.preventDefault() + assert.ok(true, 'change event fired') + done() + }) + + $group.find('label').trigger('click') + }) + QUnit.test('should check for closest matching toggle', function (assert) { assert.expect(12) var groupHTML = '
' From 14ec4fdfc10a965477314078c1a9531a1d02fb8f Mon Sep 17 00:00:00 2001 From: Johann-S Date: Mon, 1 Feb 2016 00:06:07 +0100 Subject: [PATCH 02/91] Carousel - Do not prevent on keydown for input and textarea --- js/src/carousel.js | 3 +-- js/tests/unit/carousel.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/js/src/carousel.js b/js/src/carousel.js index 34cab4391d..0ed4b7b5fe 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -229,11 +229,10 @@ const Carousel = (($) => { } _keydown(event) { - event.preventDefault() - if (/input|textarea/i.test(event.target.tagName)) { return } + event.preventDefault() switch (event.which) { case 37: this.prev(); break diff --git a/js/tests/unit/carousel.js b/js/tests/unit/carousel.js index d6d0186e15..8fac87d988 100644 --- a/js/tests/unit/carousel.js +++ b/js/tests/unit/carousel.js @@ -759,4 +759,36 @@ $(function () { .bootstrapCarousel('prev') assert.strictEqual($carousel.find('.carousel-item.active').attr('id'), 'one', 'carousel did not wrap around and stayed on 1st slide') }) + + QUnit.test('should not prevent keydown for inputs and textareas', function (assert) { + assert.expect(2) + var templateHTML = '' + var $template = $(templateHTML) + var done = assert.async() + $template.appendTo('#qunit-fixture') + var $inputText = $template.find('#inputText') + var $textArea = $template.find('#txtArea') + $template.bootstrapCarousel() + + var eventKeyDown = $.Event('keydown', { which: 65 }) // 65 for "a" + $inputText.on('keydown', function (event) { + assert.strictEqual(event.isDefaultPrevented(), false) + }) + $inputText.trigger(eventKeyDown) + + $textArea.on('keydown', function (event) { + assert.strictEqual(event.isDefaultPrevented(), false) + done() + }) + $textArea.trigger(eventKeyDown) + }) }) From bfa714ae1e91e2f77017d02489cbc39fada032c7 Mon Sep 17 00:00:00 2001 From: Max Beatty Date: Thu, 4 Aug 2016 13:47:30 -0700 Subject: [PATCH 03/91] prevent navigating to area href when modal target. fixes #18796 --- js/src/modal.js | 2 +- js/tests/unit/modal.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/js/src/modal.js b/js/src/modal.js index 9b3a99ddd7..fd13a687cb 100644 --- a/js/src/modal.js +++ b/js/src/modal.js @@ -491,7 +491,7 @@ const Modal = (($) => { let config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data()) - if (this.tagName === 'A') { + if (this.tagName === 'A' || this.tagName === 'AREA') { event.preventDefault() } diff --git a/js/tests/unit/modal.js b/js/tests/unit/modal.js index 28c1e0ec74..7329776bae 100644 --- a/js/tests/unit/modal.js +++ b/js/tests/unit/modal.js @@ -403,4 +403,26 @@ $(function () { }) .bootstrapModal('show') }) + + QUnit.test('should not follow link in area tag', function (assert) { + assert.expect(2) + var done = assert.async() + + $('') + .appendTo('#qunit-fixture') + + $('