101 lines
2.8 KiB
JavaScript
101 lines
2.8 KiB
JavaScript
"use strict";
|
|
|
|
const parsers = require("../parsers");
|
|
const borderBottomWidth = require("./borderBottomWidth");
|
|
const borderBottomStyle = require("./borderBottomStyle");
|
|
const borderBottomColor = require("./borderBottomColor");
|
|
|
|
const property = "border-bottom";
|
|
const shorthand = "border";
|
|
|
|
const subProps = {
|
|
width: borderBottomWidth.property,
|
|
style: borderBottomStyle.property,
|
|
color: borderBottomColor.property
|
|
};
|
|
|
|
module.exports.initialValues = new Map([
|
|
[borderBottomWidth.property, "medium"],
|
|
[borderBottomStyle.property, "none"],
|
|
[borderBottomColor.property, "currentcolor"]
|
|
]);
|
|
|
|
module.exports.shorthandFor = new Map([
|
|
[borderBottomWidth.property, borderBottomWidth],
|
|
[borderBottomStyle.property, borderBottomStyle],
|
|
[borderBottomColor.property, borderBottomColor]
|
|
]);
|
|
|
|
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 = {
|
|
[borderBottomWidth.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[borderBottomWidth.property] && obj[borderBottomWidth.property] === "medium") {
|
|
delete obj[borderBottomWidth.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;
|