@ionic/core
Version:
Base components for Ionic
86 lines (85 loc) • 2.56 kB
JavaScript
export function rIC(callback) {
if ('requestIdleCallback' in window) {
window.requestIdleCallback(callback);
}
else {
setTimeout(callback, 32);
}
}
export function hasShadowDom(el) {
return !!el.shadowRoot && !!el.attachShadow;
}
export function findItemLabel(componentEl) {
const itemEl = componentEl.closest('ion-item');
if (itemEl) {
return itemEl.querySelector('ion-label');
}
return null;
}
export function renderHiddenInput(always, container, name, value, disabled) {
if (always || hasShadowDom(container)) {
let input = container.querySelector('input.aux-input');
if (!input) {
input = container.ownerDocument.createElement('input');
input.type = 'hidden';
input.classList.add('aux-input');
container.appendChild(input);
}
input.disabled = disabled;
input.name = name;
input.value = value || '';
}
}
export function clamp(min, n, max) {
return Math.max(min, Math.min(n, max));
}
export function assert(actual, reason) {
if (!actual) {
const message = 'ASSERT: ' + reason;
console.error(message);
debugger;
throw new Error(message);
}
}
export function now(ev) {
return ev.timeStamp || Date.now();
}
export function pointerCoord(ev) {
if (ev) {
const changedTouches = ev.changedTouches;
if (changedTouches && changedTouches.length > 0) {
const touch = changedTouches[0];
return { x: touch.clientX, y: touch.clientY };
}
if (ev.pageX !== undefined) {
return { x: ev.pageX, y: ev.pageY };
}
}
return { x: 0, y: 0 };
}
export function isEndSide(win, side) {
const isRTL = win.document.dir === 'rtl';
switch (side) {
case 'start': return isRTL;
case 'end': return !isRTL;
default:
throw new Error(`"${side}" is not a valid value for [side]. Use "start" or "end" instead.`);
}
}
export function deferEvent(event) {
return debounceEvent(event, 0);
}
export function debounceEvent(event, wait) {
const original = event._original || event;
return {
_original: event,
emit: debounce(original.emit.bind(original), wait)
};
}
export function debounce(func, wait = 0) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(func, wait, ...args);
};
}