font.js 1.35 KB
'use strict';

var TYPES = require('../parsers').TYPES;
var valueType = require('../parsers').valueType;
var shorthandParser = require('../parsers').shorthandParser;
var shorthandSetter = require('../parsers').shorthandSetter;
var shorthandGetter = require('../parsers').shorthandGetter;

var shorthand_for = {
    'font-family': require('./fontFamily'),
    'font-size': require('./fontSize'),
    'font-style': require('./fontStyle'),
    'font-variant': require('./fontVariant'),
    'font-weight': require('./fontWeight'),
    'line-height': require('./lineHeight')
};

var static_fonts = ['caption', 'icon', 'menu', 'message-box', 'small-caption', 'status-bar', 'inherit'];

module.exports.isValid = function isValid(v) {
    return (shorthandParser(v, shorthand_for) !== undefined) ||
        (valueType(v) === TYPES.KEYWORD && static_fonts.indexOf(v.toLowerCase()) !== -1);
};

var setter = shorthandSetter('font', shorthand_for);

module.exports.definition = {
    set: function (v) {
        var short = shorthandParser(v, shorthand_for);
        if (short !== undefined) {
            return setter.call(this, v);
        }
        if (valueType(v) === TYPES.KEYWORD && static_fonts.indexOf(v.toLowerCase()) !== -1) {
            this._setProperty('font', v);
        }
    },
    get: shorthandGetter('font', shorthand_for),
    enumerable: true,
    configurable: true
};