aboutsummaryrefslogtreecommitdiff
path: root/js/src/util.js
diff options
context:
space:
mode:
authorAlessandro Chitolina <[email protected]>2017-09-15 16:07:24 +0200
committerXhmikosR <[email protected]>2019-02-20 22:05:45 +0200
commit33211eefdfb27eff7ba21886e16f2efdc0efa3e6 (patch)
treef8f3f3342a6c2c2363448346debf52beb4954b21 /js/src/util.js
parent9f9712b98c92678c709b2ad0adfa954e3c120911 (diff)
downloadbootstrap-33211eefdfb27eff7ba21886e16f2efdc0efa3e6.tar.xz
bootstrap-33211eefdfb27eff7ba21886e16f2efdc0efa3e6.zip
Rewritten modal without jquery (#23955)
* Trigger jquery events if available in event handler * Rewritten modal without jquery
Diffstat (limited to 'js/src/util.js')
-rw-r--r--js/src/util.js116
1 files changed, 79 insertions, 37 deletions
diff --git a/js/src/util.js b/js/src/util.js
index ad147a1be..607d50fd4 100644
--- a/js/src/util.js
+++ b/js/src/util.js
@@ -22,6 +22,20 @@ function toType(obj) {
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase()
}
+function normalizeData(val) {
+ if (val === 'true') {
+ return true
+ } else if (val === 'false') {
+ return false
+ } else if (val === 'null') {
+ return null
+ } else if (val === Number(val).toString()) {
+ return Number(val)
+ }
+
+ return val
+}
+
const Util = {
TRANSITION_END: 'bsTransitionEnd',
@@ -111,60 +125,84 @@ const Util = {
`but expected type "${expectedTypes}".`)
}
}
- },
-
- extend(obj1, obj2) {
- for (const secondProp in obj2) {
- if (Object.prototype.hasOwnProperty.call(obj2, secondProp)) {
- const secondVal = obj2[secondProp]
- // Is this value an object? If so, iterate over its properties, copying them over
- if (secondVal && Object.prototype.toString.call(secondVal) === '[object Object]') {
- obj1[secondProp] = obj1[secondProp] || {}
- Util.extend(obj1[secondProp], secondVal)
- } else {
- obj1[secondProp] = secondVal
- }
+ }
+ },
+
+ extend(obj1, ...others) {
+ const obj2 = others.shift()
+ for (const secondProp in obj2) {
+ if (Object.prototype.hasOwnProperty.call(obj2, secondProp)) {
+ const secondVal = obj2[secondProp]
+ // Is this value an object? If so, iterate over its properties, copying them over
+ if (secondVal && Object.prototype.toString.call(secondVal) === '[object Object]') {
+ obj1[secondProp] = obj1[secondProp] || {}
+ Util.extend(obj1[secondProp], secondVal)
+ } else {
+ obj1[secondProp] = secondVal
}
}
- return obj1
- },
+ }
- makeArray(nodeList) {
- if (typeof nodeList === 'undefined' || nodeList === null) {
- return []
- }
- return Array.prototype.slice.call(nodeList)
- },
+ if (others.length) {
+ this.extend(obj1, ...others)
+ }
- getDataAttributes(element) {
- if (typeof element === 'undefined' || element === null) {
- return {}
- }
+ return obj1
+ },
+
+ makeArray(nodeList) {
+ if (typeof nodeList === 'undefined' || nodeList === null) {
+ return []
+ }
+ return Array.prototype.slice.call(nodeList)
+ },
- const attributes = {}
+ getDataAttributes(element) {
+ if (typeof element === 'undefined' || element === null) {
+ return {}
+ }
+
+ let attributes
+ if (Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'dataset')) {
+ attributes = this.extend({}, element.dataset)
+ } else {
+ attributes = {}
for (let i = 0; i < element.attributes.length; i++) {
const attribute = element.attributes[i]
if (attribute.nodeName.indexOf('data-') !== -1) {
// remove 'data-' part of the attribute name
- const attributeName = attribute.nodeName.substring('data-'.length)
+ const attributeName = attribute.nodeName.substring('data-'.length).replace(/-./g, (str) => str.charAt(1).toUpperCase())
attributes[attributeName] = attribute.nodeValue
}
}
- return attributes
- },
+ }
- isVisible(element) {
- if (typeof element === 'undefined' || element === null) {
- return false
+ for (const key in attributes) {
+ if (!Object.prototype.hasOwnProperty.call(attributes, key)) {
+ continue
}
- if (element.style !== null && element.parentNode !== null && typeof element.parentNode.style !== 'undefined') {
- return element.style.display !== 'none'
- && element.parentNode.style.display !== 'none'
- && element.style.visibility !== 'hidden'
- }
+ attributes[key] = normalizeData(attributes[key])
+ }
+
+ return attributes
+ },
+
+ getDataAttribute(element, key) {
+ return normalizeData(element.getAttribute(`data-${key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`)}`))
+ },
+
+ isVisible(element) {
+ if (typeof element === 'undefined' || element === null) {
return false
}
+
+ if (element.style !== null && element.parentNode !== null && typeof element.parentNode.style !== 'undefined') {
+ return element.style.display !== 'none' &&
+ element.parentNode.style.display !== 'none' &&
+ element.style.visibility !== 'hidden'
+ }
+ return false
},
findShadowRoot(element) {
@@ -188,6 +226,10 @@ const Util = {
}
return Util.findShadowRoot(element.parentNode)
+ },
+
+ get jQuery() {
+ return window.$ || window.jQuery
}
}