all files / src/controller/ controller.abstract.js

100% Statements 10/10
100% Branches 14/14
100% Functions 2/2
100% Lines 10/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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53                                                                                     
/**
 * Class represents ControllerAbstract
 * @abstract
 */
class ControllerAbstract {
 
    /**
     * Create a new ControllerAbstract instance
     * @param {HTMLElement} element
     * @param {DataObserver} data
     * @param {ElementBuilder} elements
     * @param {DependencyManager} dependencies
     */
    constructor(element, data, elements, dependencies) {
        this._element = element;
        this._data = data;
        this._elements = elements;
        this._dependencies = dependencies || null;
 
        let elementReadyClass = (
            typeof elements === `object` &&
            typeof elements.getElementReadyClass === 'function'
        )
            ? elements.getElementReadyClass()
            : null;
 
        if(
            elementReadyClass &&
            this._element &&
            typeof this._element === 'object' &&
            typeof this._element.classList !== 'undefined'
        ) {
            this._element.classList.add(elementReadyClass);
        }
 
        if(this._dependencies) {
            this._dependencies.inject(this);
        }
    }
 
    /**
     * Callback when HTMLElement removed from DOM
     */
    destruct() {
        this._data.unsubscribe(this);
    }
 
 
}
 
export {
    ControllerAbstract,
};