UNPKG

reactronic-dom

Version:

Reactronic DOM - Transactional Reactive Front-End Development Framework

73 lines (72 loc) 2.61 kB
export const SymDataForSensor = Symbol('DataForSensor'); export const SymResizeObserver = Symbol('ResizeObserver'); export const EmptyDataArray = []; export function findTargetElementData(targetPath, underPointer, sym, anyOfPayloadKeys, ignoreWindow = false) { let result = undefined; let i = 0; let window = undefined; while (i < targetPath.length) { const candidate = targetPath[i]; const candidateData = candidate[sym]; if (candidateData !== undefined) { if (!ignoreWindow) { if (window === undefined) window = candidateData['window']; else if (window !== candidateData['window']) break; } if (result === undefined) { for (const payloadKey of anyOfPayloadKeys) { const payload = candidateData[payloadKey]; if (payload !== undefined && underPointer.includes(candidate)) { result = candidateData; break; } } } } i++; } return { data: result, window }; } export function grabElementDataList(targetPath, sym, payloadKey, existing, ignoreWindow = false, predicate = () => false) { let result = existing; let i = 0; let j = 0; let window = undefined; let activeData = undefined; while (i < targetPath.length) { let payload = undefined; const candidate = targetPath[i]; const candidateData = candidate[sym]; if (candidateData !== undefined) { if (!ignoreWindow) { if (window === undefined) window = candidateData['window']; else if (window !== candidateData['window']) break; } payload = candidateData[payloadKey]; if (payload !== undefined) { if (result !== existing) { result.push(payload); } else { if (payload !== existing[j]) { result = existing.slice(0, j); result.push(payload); } else j++; } } } if (activeData === undefined && predicate(candidate)) { activeData = payload; } i++; } if (j === 0 && result === existing && existing.length > 0) result = EmptyDataArray; return { dataList: result, window, activeData }; }