All files / lib/utils observe-dom.js

0% Statements 0/10
0% Branches 0/10
0% Functions 0/2
0% Lines 0/10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                                                         
 
import { assign } from '../utils/object';
/**
 * Observe a DOM element changes, falls back to eventListener mode
 * @param {Element} el The DOM element to observe
 * @param {Function} callback callback to be called on change
 * @param {object} [opts={childList: true, subtree: true}] observe options
 * @see http://stackoverflow.com/questions/3219758
 */
export default function observeDOM(el, callback, opts) {
    const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
    const eventListenerSupported = window.addEventListener;
 
    if (MutationObserver) {
        // Define a new observer
        const obs = new MutationObserver(mutations => {
            if (mutations[0].addedNodes.length > 0 || mutations[0].removedNodes.length > 0) {
                callback();
            }
        });
 
        // Have the observer observe foo for changes in children
        obs.observe(el, assign({childList: true, subtree: true}, opts));
    } else if (eventListenerSupported) {
        el.addEventListener('DOMNodeInserted', callback, false);
        el.addEventListener('DOMNodeRemoved', callback, false);
    }
}