101 lines
2.7 KiB
JavaScript
101 lines
2.7 KiB
JavaScript
"use strict";
|
|
|
|
const parsers = require("../parsers");
|
|
const borderLeftWidth = require("./borderLeftWidth");
|
|
const borderLeftStyle = require("./borderLeftStyle");
|
|
const borderLeftColor = require("./borderLeftColor");
|
|
|
|
const property = "border-left";
|
|
const shorthand = "border";
|
|
|
|
const subProps = {
|
|
width: borderLeftWidth.property,
|
|
style: borderLeftStyle.property,
|
|
color: borderLeftColor.property
|
|
};
|
|
|
|
module.exports.initialValues = new Map([
|
|
[borderLeftWidth.property, "medium"],
|
|
[borderLeftStyle.property, "none"],
|
|
[borderLeftColor.property, "currentcolor"]
|
|
]);
|
|
|
|
module.exports.shorthandFor = new Map([
|
|
[borderLeftWidth.property, borderLeftWidth],
|
|
[borderLeftStyle.property, borderLeftStyle],
|
|
[borderLeftColor.property, borderLeftColor]
|
|
]);
|
|
|
|
module.exports.parse = (v, opt = {}) => {
|
|
const { globalObject } = opt;
|
|
if (v === "") {
|
|
return v;
|
|
}
|
|
const values = parsers.splitValue(v);
|
|
const parsedValues = new Map();
|
|
for (const val of values) {
|
|
const value = parsers.parsePropertyValue(property, val, {
|
|
globalObject,
|
|
inArray: true
|
|
});
|
|
if (Array.isArray(value) && value.length === 1) {
|
|
const parsedValue = parsers.resolveBorderShorthandValue(value, subProps, parsedValues);
|
|
if (typeof parsedValue === "string") {
|
|
return parsedValue;
|
|
} else if (Array.isArray(parsedValue)) {
|
|
const [key, resolvedVal] = parsedValue;
|
|
parsedValues.set(key, resolvedVal);
|
|
} else {
|
|
return;
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
if (parsedValues.size) {
|
|
const keys = module.exports.shorthandFor.keys();
|
|
const obj = {
|
|
[borderLeftWidth.property]: "medium"
|
|
};
|
|
for (const key of keys) {
|
|
if (parsedValues.has(key)) {
|
|
const parsedValue = parsedValues.get(key);
|
|
if (parsedValue !== module.exports.initialValues.get(key)) {
|
|
obj[key] = parsedValues.get(key);
|
|
if (obj[borderLeftWidth.property] && obj[borderLeftWidth.property] === "medium") {
|
|
delete obj[borderLeftWidth.property];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return obj;
|
|
}
|
|
};
|
|
|
|
module.exports.definition = {
|
|
set(v) {
|
|
v = parsers.prepareValue(v);
|
|
if (parsers.hasVarFunc(v)) {
|
|
this._borderSetter(property, v, "");
|
|
} else {
|
|
const val = module.exports.parse(v, {
|
|
globalObject: this._global
|
|
});
|
|
if (val || typeof val === "string") {
|
|
const priority =
|
|
!this._priorities.get(shorthand) && this._priorities.has(property)
|
|
? this._priorities.get(property)
|
|
: "";
|
|
this._borderSetter(property, val, priority);
|
|
}
|
|
}
|
|
},
|
|
get() {
|
|
return this.getPropertyValue(property);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
};
|
|
|
|
module.exports.property = property;
|