dom/styles.js

/**
 * @module DOM
 * @memberOf dom
 */

const {isUnd, isStr} = require("../core/types")
const {filter, contains} = require("../core/collections")

const emptyStyle = ['', 'initial', 'unset', undefined, null];

/**
 * Set style / Get style / Get all styles
 * @param {HTMLElement|Element|Node} e - element/node
 * @param {String} [p] - style property name
 * @param {String} [v] - style property value
 * @return {Array|Object|String|*|string}
 */
function style(e, p, v) {
    if (isUnd(p)) {
        // let stl = {};
        let cs = getComputedStyle(e);
        cs = filter(cs, (s, n) => isStr(n)&&!contains(emptyStyle, s))
        // ForEach(cs, (s) => stl[s] = cs[s]);
        return cs
    }
    if (isUnd(v)) return e.style[p] || getComputedStyle(e)[p];
    e.style[p] = v;
}

/**
 * Element has style property
 * @param {HTMLElement|Element|Node} e - element/node
 * @param {String} p - style property name
 * @return {boolean}
 */
function hasStyle(e, p) {
    let s = style(e, p);
    return !contains(emptyStyle, s)
}

module.exports = {style, hasStyle}