dfcreative/mucss

View on GitHub
css.js

Summary

Maintainability
A
1 hr
Test Coverage
/**
 * Get or set element’s style, prefix-agnostic.
 *
 * @module  mucss/css
 */
var fakeStyle = require('./fake-element').style;
var prefix = require('./prefix').lowercase;


/**
 * Apply styles to an element.
 *
 * @param    {Element}   el   An element to apply styles.
 * @param    {Object|string}   obj   Set of style rules or string to get style rule.
 */
module.exports = function(el, obj){
    if (!el || !obj) return;

    var name, value;

    //return value, if string passed
    if (typeof obj === 'string') {
        name = obj;

        //return value, if no value passed
        if (arguments.length < 3) {
            return el.style[prefixize(name)];
        }

        //set style, if value passed
        value = arguments[2] || '';
        obj = {};
        obj[name] = value;
    }

    for (name in obj){
        //convert numbers to px
        if (typeof obj[name] === 'number' && /left|right|bottom|top|width|height/i.test(name)) obj[name] += 'px';

        value = obj[name] || '';

        el.style[prefixize(name)] = value;
    }
};


/**
 * Return prefixized prop name, if needed.
 *
 * @param    {string}   name   A property name.
 * @return   {string}   Prefixed property name.
 */
function prefixize(name){
    var uName = name[0].toUpperCase() + name.slice(1);
    if (fakeStyle[name] !== undefined) return name;
    if (fakeStyle[prefix + uName] !== undefined) return prefix + uName;
    return '';
}