/
githubmirror
/
amphtml
Обзор
Документация
Войти
/
githubmirror
/
amphtml
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
testing/resize-observer-stub.js
68 строк
1 KB
Kristofer Baxter
♻️ Remove Notice from JS and Markdown (#35717)
19 авг 2021, 21:21
Не верифицирован
19 авг 2021, 21:21
f564b7e
Код
Авторство
О чём код?
/** * @param {!Object} sandbox * @param {!Window} window * @return {!ResizeObservers} */ export function installResizeObserverStub(sandbox, win) { return new ResizeObservers(sandbox, win); } class ResizeObservers { constructor(sandbox, win) { const observers = new Set(); this.observers = observers; sandbox.stub(win, 'ResizeObserver').value(function (callback) { const observer = new ResizeObserverStub(callback, () => { observers.delete(observer); }); observers.add(observer); return observer; }); } /** * @param {!Element} target * @return {boolean} */ isObserved(target) { return Array.from(this.observers).some((observer) => observer.elements.has(target) ); } notifySync(entryOrEntries) { const entries = Array.isArray(entryOrEntries) ? entryOrEntries : [entryOrEntries]; this.observers.forEach((observer) => { const subEntries = entries.filter(({target}) => observer.elements.has(target) ); if (subEntries.length > 0) { observer.callback(subEntries); } }); } } class ResizeObserverStub { constructor(callback, onDisconnect) { this.onDisconnect_ = onDisconnect; this.callback = callback; this.elements = new Set(); } disconnect() { const onDisconnect = this.onDisconnect_; onDisconnect(); } observe(element) { this.elements.add(element); } unobserve(element) { this.elements.delete(element); } }