56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
let range = null;
|
|
|
|
export function parseHTML(html) {
|
|
if (range == null) { range = document.createRange() }
|
|
return range.createContextualFragment(html);
|
|
}
|
|
|
|
// equivalent to jQuery's :visble
|
|
export function isVisible(el) {
|
|
return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);
|
|
}
|
|
|
|
export function hideElement(el) {
|
|
if (el.style.display === 'none') {
|
|
return;
|
|
}
|
|
// back up the existing display setting in data-style-display
|
|
if (el.style.display) {
|
|
el.dataset.styleDisplay = el.style.display;
|
|
}
|
|
el.style.display = 'none';
|
|
}
|
|
|
|
export function showElement(el) {
|
|
if (el.style.display !== 'none') {
|
|
return;
|
|
}
|
|
if (el.dataset.styleDisplay) {
|
|
// restore backed-up dispay property
|
|
el.style.display = el.dataset.styleDisplay;
|
|
delete el.dataset.styleDisplay;
|
|
} else {
|
|
el.style.display = '';
|
|
}
|
|
}
|
|
|
|
export function emptyChildNodes(el) {
|
|
if (el.firstChild) {
|
|
el.removeChild(el.firstChild);
|
|
emptyChildNodes(el);
|
|
}
|
|
}
|
|
|
|
export function replaceChildNodes(el, newChildNodes) {
|
|
emptyChildNodes(el);
|
|
if (newChildNodes instanceof DocumentFragment) {
|
|
el.appendChild(newChildNodes);
|
|
} else if (typeof newChildNodes === 'string') {
|
|
el.appendChild(parseHTML(newChildNodes));
|
|
} else if (typeof newChildNodes.forEach === 'function') {
|
|
newChildNodes.forEach((node) => {
|
|
el.appendChild(node);
|
|
});
|
|
}
|
|
}
|