web-ui-pack
Version:
Web package with UI elements
47 lines (46 loc) • 1.58 kB
JavaScript
export function styleTransform(el, prop, value) {
const reg = new RegExp(`( )*${prop}\\(([%d \\w.,-]+)\\)( )*`);
const setValue = value || value === 0;
let isDone = !setValue;
const s = setValue
? el.style.transform.replace(reg, (_t, p1, _p2, p3) => {
isDone = true;
return `${p1 || ""}${prop}(${value})${p3 || ""}`;
})
: el.style.transform.replace(reg, " ").trim();
el.style.transform = isDone ? s : `${el.style.transform} ${prop}(${value})`.trimStart();
return el.style.transform;
}
export function px2Number(styleValue) {
return +(/([0-9]+)/.exec(styleValue)?.[0] || 0);
}
export function getBoundingInternalRect(el, options) {
if (el._savedBoundingRect && !options?.ignoreCache) {
return { ...el._savedBoundingRect };
}
const { borderTopWidth, borderLeftWidth } = options?.computedStyle ?? getComputedStyle(el);
let { left, top } = options?.elRect ?? el.getBoundingClientRect();
top = Math.round(top + px2Number(borderTopWidth));
left = Math.round(left + px2Number(borderLeftWidth));
const r = {
top,
left,
right: left + el.clientWidth,
bottom: top + el.clientHeight,
width: el.clientWidth,
height: el.clientHeight,
};
el._savedBoundingRect = { ...r };
setTimeout(() => delete el._savedBoundingRect);
return r;
}
export function parseMsTime(v) {
let t = Number.parseFloat(v);
if (!v.endsWith("ms")) {
t *= 1000;
}
if (Number.isNaN(t)) {
return 0;
}
return t;
}