first commit
This commit is contained in:
125
js/libs/dom.js
Normal file
125
js/libs/dom.js
Normal file
@@ -0,0 +1,125 @@
|
||||
// DOM v1.0.0
|
||||
const DOM = {}
|
||||
DOM.dataset_obj = {}
|
||||
DOM.dataset_id = 0
|
||||
|
||||
// Select a single element
|
||||
DOM.el = (query, root = document) => {
|
||||
return root.querySelector(query)
|
||||
}
|
||||
|
||||
// Select an array of elements
|
||||
DOM.els = (query, root = document) => {
|
||||
return Array.from(root.querySelectorAll(query))
|
||||
}
|
||||
|
||||
// Select a single element or self
|
||||
DOM.el_or_self = (query, root = document) => {
|
||||
let el = root.querySelector(query)
|
||||
|
||||
if (!el) {
|
||||
if (root.classList.contains(query.replace(`.`, ``))) {
|
||||
el = root
|
||||
}
|
||||
}
|
||||
|
||||
return el
|
||||
}
|
||||
|
||||
// Select an array of elements or self
|
||||
DOM.els_or_self = (query, root = document) => {
|
||||
let els = Array.from(root.querySelectorAll(query))
|
||||
|
||||
if (els.length === 0) {
|
||||
if (root.classList.contains(query.replace(`.`, ``))) {
|
||||
els = [root]
|
||||
}
|
||||
}
|
||||
|
||||
return els
|
||||
}
|
||||
|
||||
// Clone element
|
||||
DOM.clone = (el) => {
|
||||
return el.cloneNode(true)
|
||||
}
|
||||
|
||||
// Clone element children
|
||||
DOM.clone_children = (query) => {
|
||||
let items = []
|
||||
let children = Array.from(DOM.el(query).children)
|
||||
|
||||
for (let c of children) {
|
||||
items.push(DOM.clone(c))
|
||||
}
|
||||
|
||||
return items
|
||||
}
|
||||
|
||||
// Data set manager
|
||||
DOM.dataset = (el, value, setvalue) => {
|
||||
if (!el) {
|
||||
return
|
||||
}
|
||||
|
||||
let id = el.dataset.dataset_id
|
||||
|
||||
if (!id) {
|
||||
id = DOM.dataset_id
|
||||
DOM.dataset_id += 1
|
||||
el.dataset.dataset_id = id
|
||||
DOM.dataset_obj[id] = {}
|
||||
}
|
||||
|
||||
if (setvalue !== undefined) {
|
||||
DOM.dataset_obj[id][value] = setvalue
|
||||
}
|
||||
else {
|
||||
return DOM.dataset_obj[id][value]
|
||||
}
|
||||
}
|
||||
|
||||
// Create an html element
|
||||
DOM.create = (type, classes = ``, id = ``) => {
|
||||
let el = document.createElement(type)
|
||||
|
||||
if (classes) {
|
||||
let classlist = classes.split(` `).filter(x => x != ``)
|
||||
|
||||
for (let cls of classlist) {
|
||||
el.classList.add(cls)
|
||||
}
|
||||
}
|
||||
|
||||
if (id) {
|
||||
el.id = id
|
||||
}
|
||||
|
||||
return el
|
||||
}
|
||||
|
||||
// Add an event listener
|
||||
DOM.ev = (element, event, callback, extra) => {
|
||||
element.addEventListener(event, callback, extra)
|
||||
}
|
||||
|
||||
// Add multiple event listeners
|
||||
DOM.evs = (element, events, callback, extra) => {
|
||||
for (let event of events) {
|
||||
element.addEventListener(event, callback, extra)
|
||||
}
|
||||
}
|
||||
|
||||
// Like jQuery's nextAll
|
||||
DOM.next_all = function* (e, selector) {
|
||||
while (e = e.nextElementSibling) {
|
||||
if (e.matches(selector)) {
|
||||
yield e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get item index
|
||||
DOM.index = (el) => {
|
||||
return Array.from(el.parentNode.children).indexOf(el)
|
||||
}
|
Reference in New Issue
Block a user