1 | import { scheduler, updateCount } from './utils/scheduler';
|
2 | import { ResizeObservation } from './ResizeObservation';
|
3 | import { ResizeObserverDetail } from './ResizeObserverDetail';
|
4 | import { resizeObservers } from './utils/resizeObservers';
|
5 | var observerMap = new WeakMap();
|
6 | var 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 | };
|
14 | var 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 | }());
|
49 | export { ResizeObserverController };
|