const m = Element.prototype.matches ||
Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector
// Checks if the given native dom element matches the selector
- // element
-
// native DOM element
- // selector
-
// CSS selector string or // a JavaScript object with ‘selector` and `exclude` properties // Examples: “form”, { selector: “form”, exclude: “form”} const matches = function(element, selector) {
if (selector.exclude) { return m.call(element, selector.selector) && !m.call(element, selector.exclude) } else { return m.call(element, selector) }
}
// get and set data on a given element using “expando properties” // See: developer.mozilla.org/en-US/docs/Glossary/Expando const EXPANDO = “_ujsData”
const getData = (element, key) => element ? element[key] : undefined
const setData = function(element, key, value) {
if (!element[EXPANDO]) { element[EXPANDO] = {} } return element[EXPANDO][key] = value
}
// a wrapper for document.querySelectorAll // returns an
Array
const $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector))const isContentEditable = function(element) {
var isEditable = false do { if(element.isContentEditable) { isEditable = true break } element = element.parentElement } while(element) return isEditable
}
export { matches, getData, setData, $, isContentEditable }