Files
ANDJJJJJJ/server/node_modules/cssstyle/lib/utils/propertyDescriptors.js

56 lines
1.5 KiB
JavaScript

"use strict";
const parsers = require("../parsers");
const { AST_TYPES } = parsers;
const getPropertyDescriptor = (property) => ({
set(v) {
const value = parsers.prepareValue(v);
if (parsers.hasVarFunc(value)) {
this._setProperty(property, value);
} else {
const parsedValue = parsers.parsePropertyValue(property, v, {
globalObject: this._global,
inArray: true
});
if (Array.isArray(parsedValue)) {
if (parsedValue.length === 1) {
const [{ name, type, value: itemValue }] = parsedValue;
switch (type) {
case AST_TYPES.CALC: {
this._setProperty(property, `${name}(${itemValue})`);
break;
}
case AST_TYPES.GLOBAL_KEYWORD:
case AST_TYPES.IDENTIFIER: {
// Set the normalized name for keywords or identifiers.
this._setProperty(property, name);
break;
}
default: {
// Set the prepared value for Dimension, Function, etc.
this._setProperty(property, value);
}
}
} else {
// Set the prepared value for lists containing multiple values.
this._setProperty(property, value);
}
} else if (typeof parsedValue === "string") {
// Empty string.
this._setProperty(property, parsedValue);
}
}
},
get() {
return this.getPropertyValue(property);
},
enumerable: true,
configurable: true
});
module.exports = {
getPropertyDescriptor
};