UNPKG

2.26 kBJavaScriptView Raw
1import { scheduler, updateCount } from './utils/scheduler';
2import { ResizeObservation } from './ResizeObservation';
3import { ResizeObserverDetail } from './ResizeObserverDetail';
4import { resizeObservers } from './utils/resizeObservers';
5var observerMap = new WeakMap();
6var getObservationIndex = function (observationTargets, target) {
7 for (var i = 0; i < observationTargets.length; i += 1) {
8 if (observationTargets[i].target === target) {
9 return i;
10 }
11 }
12 return -1;
13};
14var ResizeObserverController = (function () {
15 function ResizeObserverController() {
16 }
17 ResizeObserverController.connect = function (resizeObserver, callback) {
18 var detail = new ResizeObserverDetail(resizeObserver, callback);
19 observerMap.set(resizeObserver, detail);
20 };
21 ResizeObserverController.observe = function (resizeObserver, target, options) {
22 var detail = observerMap.get(resizeObserver);
23 var firstObservation = detail.observationTargets.length === 0;
24 if (getObservationIndex(detail.observationTargets, target) < 0) {
25 firstObservation && resizeObservers.push(detail);
26 detail.observationTargets.push(new ResizeObservation(target, options && options.box));
27 updateCount(1);
28 scheduler.schedule();
29 }
30 };
31 ResizeObserverController.unobserve = function (resizeObserver, target) {
32 var detail = observerMap.get(resizeObserver);
33 var index = getObservationIndex(detail.observationTargets, target);
34 var lastObservation = detail.observationTargets.length === 1;
35 if (index >= 0) {
36 lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);
37 detail.observationTargets.splice(index, 1);
38 updateCount(-1);
39 }
40 };
41 ResizeObserverController.disconnect = function (resizeObserver) {
42 var _this = this;
43 var detail = observerMap.get(resizeObserver);
44 detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });
45 detail.activeTargets.splice(0, detail.activeTargets.length);
46 };
47 return ResizeObserverController;
48}());
49export { ResizeObserverController };