UNPKG

test-isc

Version:

An Ionic component similar to Ionic Select, that allows to search items, including async search, group, add, edit, delete items, and much more.

111 lines (108 loc) 3.24 kB
'use strict'; /** * Patched version of requestAnimationFrame that avoids ngzone * Use only when you know ngzone should not run */ const raf = (h) => { if (typeof __zone_symbol__requestAnimationFrame === 'function') { return __zone_symbol__requestAnimationFrame(h); } if (typeof requestAnimationFrame === 'function') { return requestAnimationFrame(h); } return setTimeout(h); }; const hasShadowDom = (el) => { return !!el.shadowRoot && !!el.attachShadow; }; const findItemLabel = (componentEl) => { const itemEl = componentEl.closest('ion-item'); if (itemEl) { return itemEl.querySelector('ion-label'); } return null; }; const 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 || ''; } }; const clamp = (min, n, max) => { return Math.max(min, Math.min(n, max)); }; const assert = (actual, reason) => { if (!actual) { const message = 'ASSERT: ' + reason; console.error(message); debugger; // tslint:disable-line throw new Error(message); } }; const now = (ev) => { return ev.timeStamp || Date.now(); }; const pointerCoord = (ev) => { // get X coordinates for either a mouse click // or a touch depending on the given event 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 }; }; /** * @hidden * Given a side, return if it should be on the end * based on the value of dir * @param side the side * @param isRTL whether the application dir is rtl */ const isEndSide = (side) => { const isRTL = 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.`); } }; const debounceEvent = (event, wait) => { const original = event._original || event; return { _original: event, emit: debounce(original.emit.bind(original), wait) }; }; const debounce = (func, wait = 0) => { let timer; return (...args) => { clearTimeout(timer); timer = setTimeout(func, wait, ...args); }; }; exports.assert = assert; exports.clamp = clamp; exports.debounce = debounce; exports.debounceEvent = debounceEvent; exports.findItemLabel = findItemLabel; exports.hasShadowDom = hasShadowDom; exports.isEndSide = isEndSide; exports.now = now; exports.pointerCoord = pointerCoord; exports.raf = raf; exports.renderHiddenInput = renderHiddenInput;