TryGhost/Ghost

View on GitHub
ghost/admin/app/services/resize-detector.js

Summary

Maintainability
A
0 mins
Test Coverage
import Service from '@ember/service';
import erd from 'element-resize-detector';

export default class ResizeDetectorService extends Service {
    constructor() {
        super(...arguments);
        this.detector = erd({
            strategy: 'scroll'
        });
    }

    setup(selectorOrElement, callback) {
        const element = typeof selectorOrElement === 'string'
            ? document.querySelector(selectorOrElement)
            : selectorOrElement;

        if (!element) {
            // eslint-disable-next-line
            console.error(`service:resize-detector - could not find element matching ${selectorOrElement}`);
        }

        this.detector.listenTo(element, callback);
    }

    teardown(selectorOrElement, callback) {
        const element = typeof selectorOrElement === 'string'
            ? document.querySelector(selectorOrElement)
            : selectorOrElement;

        if (element) {
            this.detector.removeListener(element, callback);
        }
    }
}