Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("./utils");
exports.observerElementsMap = new Map();
function getPooled(options = {}) {
    const root = options.root || null;
    const rootMargin = utils_1.parseRootMargin(options.rootMargin);
    const threshold = Array.isArray(options.threshold)
        ? options.threshold
        : [options.threshold !== null ? options.threshold : 0];
    const observers = exports.observerElementsMap.keys();
    let observer;
    while ((observer = observers.next().value)) {
        const unmatched = root !== observer.root ||
            rootMargin !== observer.rootMargin ||
            utils_1.shallowCompare(threshold, observer.thresholds);
        if (!unmatched) {
            return observer;
        }
    }
    return null;
}
exports.getPooled = getPooled;
function findObserverElement(observer, entry) {
    const elements = exports.observerElementsMap.get(observer);
    if (elements) {
        const values = elements.values();
        let element;
        while ((element = values.next().value)) {
            if (element.target === entry.target) {
                return element;
            }
        }
    }
    return null;
}
exports.findObserverElement = findObserverElement;
/**
 * The Intersection Observer API callback that is called whenever one element,
 * called the target, intersects either the device viewport or a specified element.
 * Also will get caled whenever the visibility of the target element changes and
 * crosses desired amounts of intersection with the root.
 * @param {array} changes
 * @param {IntersectionObserver} observer
 */
function callback(changes, observer) {
    for (let i = 0; i < changes.length; i++) {
        const element = findObserverElement(observer, changes[i]);
        if (element) {
            element.handleChange(changes[i]);
        }
    }
}
exports.callback = callback;
function createObserver(options) {
    return getPooled(options) || new IntersectionObserver(callback, options);
}
exports.createObserver = createObserver;
function observeElement(element) {
    if (!exports.observerElementsMap.has(element.observer)) {
        exports.observerElementsMap.set(element.observer, new Set());
    }
    exports.observerElementsMap.get(element.observer).add(element);
    element.observer.observe(element.target);
}
exports.observeElement = observeElement;
function unobserveElement(element) {
    if (exports.observerElementsMap.has(element.observer)) {
        const targets = exports.observerElementsMap.get(element.observer);
        if (targets.delete(element)) {
            if (targets.size > 0) {
                element.observer.unobserve(element.target);
            }
            else {
                element.observer.disconnect();
                exports.observerElementsMap.delete(element.observer);
            }
        }
    }
}
exports.unobserveElement = unobserveElement;
//# sourceMappingURL=observer.js.map