birdpaper-ui
Version:
一个通用的 vue3 UI组件库。A common vue3 UI component library.
85 lines (84 loc) • 2.19 kB
JavaScript
const isElement = (vn) => {
return Boolean(
vn && vn.shapeFlag & 1
/* ELEMENT */
);
};
const isComponent = (vn, type) => {
return Boolean(
vn && vn.shapeFlag & 6
/* COMPONENT */
);
};
const isTextChildren = (child, children) => {
return Boolean(child && child.shapeFlag & 8);
};
const isArrayChildren = (vn, children) => {
return Boolean(
vn && vn.shapeFlag & 16
/* ARRAY_CHILDREN */
);
};
const opt = Object.prototype.toString;
const isArray = (obj) => {
return opt.call(obj) === "[object Array]";
};
const isSlotsChildren = (vn, children) => {
return Boolean(
vn && vn.shapeFlag & 32
/* SLOTS_CHILDREN */
);
};
const getAllElements = (children, includeText = false) => {
var _a, _b;
const results = [];
for (const item of children ?? []) {
if (isElement(item) || isComponent(item) || includeText && isTextChildren(item, item.children)) {
results.push(item);
} else if (isArrayChildren(item, item.children)) {
results.push(...getAllElements(item.children, includeText));
} else if (isSlotsChildren(item, item.children)) {
results.push(...getAllElements((_b = (_a = item.children).default) == null ? void 0 : _b.call(_a), includeText));
} else if (isArray(item)) {
results.push(...getAllElements(item, includeText));
}
}
return results;
};
const isScrollElement = (element) => {
return element.scrollHeight > element.offsetHeight || element.scrollWidth > element.offsetWidth;
};
const getScrollElements = (el) => {
const scrollElements = [];
let element = el;
while (element && element !== document.documentElement) {
if (isScrollElement(element)) {
scrollElements.push(element);
}
element = element.parentElement ?? void 0;
}
return scrollElements;
};
const getChildrenIndex = (ele) => {
if (ele.sourceIndex) {
return ele.sourceIndex - ele.parentNode.sourceIndex - 1;
}
var i = 0;
while (ele = ele.previousElementSibling) {
i++;
}
return i;
};
export {
getAllElements,
getChildrenIndex,
getScrollElements,
isArray,
isArrayChildren,
isComponent,
isElement,
isScrollElement,
isSlotsChildren,
isTextChildren,
opt
};