]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Add Manipulator object to add shortcuts for dom manipulations
authorJohann-S <johann.servoire@gmail.com>
Tue, 5 Sep 2017 12:35:52 +0000 (14:35 +0200)
committerXhmikosR <xhmikosr@gmail.com>
Wed, 20 Feb 2019 20:05:45 +0000 (22:05 +0200)
js/src/button.js
js/src/dom/eventHandler.js
js/src/dom/manipulator.js [new file with mode: 0644]
js/tests/index.html
js/tests/unit/.eslintrc.json
js/tests/unit/button.js
js/tests/visual/button.html

index 410da06cb3996bf7157d4679d76b68fb7b1bafe5..acba736af4c95deb16e9325c682652962e4c79ef 100644 (file)
@@ -7,6 +7,7 @@
 
 import Data from './dom/data'
 import EventHandler from './dom/eventHandler'
+import Manipulator from './dom/manipulator'
 import SelectorEngine from './dom/selectorEngine'
 
 /**
@@ -93,7 +94,7 @@ class Button {
             rootElement.classList.contains('disabled')) {
             return
           }
-          input.checked = !this._element.classList.contains(ClassName.ACTIVE)
+          Manipulator.setChecked(input, !this._element.classList.contains(ClassName.ACTIVE))
           EventHandler.trigger(input, 'change')
         }
 
index 476f7af26f5ca8800ea7bacaf4cbc470cb8bd6c8..746f84bcb56a8e1b9bfadfdac84edda5e2f75833 100644 (file)
@@ -85,7 +85,7 @@ const nativeEvents = [
   'orientationchange',
   'touchstart', 'touchmove', 'touchend', 'touchcancel',
   'gesturestart', 'gesturechange', 'gestureend',
-  'focus', 'blur', 'change', 'reset', 'select', 'submit',
+  'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout',
   'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange',
   'error', 'abort', 'scroll'
 ]
diff --git a/js/src/dom/manipulator.js b/js/src/dom/manipulator.js
new file mode 100644 (file)
index 0000000..c124802
--- /dev/null
@@ -0,0 +1,24 @@
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.0.0-beta): dom/manipulator.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+const Manipulator = {
+  setChecked(input, val) {
+    if (input instanceof HTMLInputElement) {
+      input.checked = val
+      input.bsChecked = val
+    }
+  },
+
+  isChecked(input) {
+    if (input instanceof HTMLInputElement) {
+      return input.bsChecked || input.checked
+    }
+    throw new Error('INPUT parameter is not an HTMLInputElement')
+  }
+}
+
+export default Manipulator
index db0743f0ffe069dc572bbb0a7c82830c74125672..b49bbfa58f0ba7fa0674e4f7f83d3665f191fe5b 100644 (file)
     <script src="../dist/dom/eventHandler.js"></script>
     <script src="../dist/dom/selectorEngine.js"></script>
     <script src="../dist/dom/data.js"></script>
+    <script src="../dist/dom/manipulator.js"></script>
     <script src="../dist/util.js"></script>
     <script src="../dist/alert.js"></script>
     <script src="../dist/button.js"></script>
index 487ba6c168a4d3bb4a61f2201521e6f03f9fdce9..cb40cd0ab8a3343b640789147be4cc5a4059f623 100644 (file)
@@ -14,7 +14,8 @@
     "Simulator": false,
     "Toast": false,
     "EventHandler": false,
-    "Data": false
+    "Data": false,
+    "Manipulator": false
   },
   "parserOptions": {
     "ecmaVersion": 5,
index 68e052e22f4514e981e3bf8ac6fb1d39ba0b9452..fff6df5bc7955b05ce17095e4178b176ce67e903 100644 (file)
@@ -127,21 +127,21 @@ $(function () {
     assert.ok($btn1.hasClass('active'), 'btn1 has active class')
     assert.ok($btn1.find('input').prop('checked'), 'btn1 is checked')
     assert.ok(!$btn2.hasClass('active'), 'btn2 does not have active class')
-    assert.ok(!$btn2.find('input').prop('checked'), 'btn2 is not checked')
+    assert.ok(!Manipulator.isChecked($btn2.find('input')[0]), 'btn2 is not checked')
 
     EventHandler.trigger($btn2.find('input')[0], 'click')
 
     assert.ok(!$btn1.hasClass('active'), 'btn1 does not have active class')
     assert.ok(!$btn1.find('input').prop('checked'), 'btn1 is not checked')
     assert.ok($btn2.hasClass('active'), 'btn2 has active class')
-    assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
+    assert.ok(Manipulator.isChecked($btn2.find('input')[0]), 'btn2 is checked')
 
     EventHandler.trigger($btn2.find('input')[0], 'click') // clicking an already checked radio should not un-check it
 
     assert.ok(!$btn1.hasClass('active'), 'btn1 does not have active class')
     assert.ok(!$btn1.find('input').prop('checked'), 'btn1 is not checked')
     assert.ok($btn2.hasClass('active'), 'btn2 has active class')
-    assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
+    assert.ok(Manipulator.isChecked($btn2.find('input')[0]), 'btn2 is checked')
   })
 
   QUnit.test('should only toggle selectable inputs', function (assert) {
index 774e755eb7299d4b9834d0a2a4449ff512b0a5b4..5f2dfa92afb79d20c024eef014b7959f221ae7d1 100644 (file)
@@ -46,6 +46,7 @@
 
     <script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
     <script src="../../dist/dom/eventHandler.js"></script>
+    <script src="../../dist/dom/manipulator.js"></script>
     <script src="../../dist/dom/selectorEngine.js"></script>
     <script src="../../dist/dom/data.js"></script>
     <script src="../../dist/util.js"></script>