sketch-json-parse
Version:
sketch-json解析
95 lines (94 loc) • 3.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getImgFileUrl = exports.generateMargin = exports.generateBorderRadius = exports.generateProperty = exports.generateColor = void 0;
const generateColor = ({ red = '', green = '', blue = '', alpha = 1, } = {}) => {
return `rgba(${red}, ${green}, ${blue}, ${alpha})`;
};
exports.generateColor = generateColor;
// border处理
const generateProperty = (obj) => {
let rst = {};
if (Object.prototype.toString.call(obj) !== "[object Object]")
return rst;
let keys = Object.keys(obj);
if (!keys || !keys.length)
return rst;
const isObjValEqual = (obj1, obj2) => {
let isEqual = true;
let objItem = Object.keys(obj1);
for (let i = 0; i < objItem.length; i++) {
if (objItem[i] == 'color') {
if (obj1.color.alpha != obj2.color.alpha ||
obj1.color.red != obj2.color.red ||
obj1.color.blue != obj2.color.blue ||
obj1.color.green != obj2.color.green) {
isEqual = false;
}
}
else {
if (obj1[objItem[i]] != obj2[objItem[i]]) {
isEqual = false;
break;
}
}
}
return isEqual;
};
// 判断四个方向的值都是一样的
if (keys.length == 4 &&
isObjValEqual(obj.top, obj.bottom) &&
isObjValEqual(obj.left, obj.right) &&
isObjValEqual(obj.top, obj.left)) {
let { width, color, style } = obj.left;
rst.border = `${width}px ${style} ${(0, exports.generateColor)(color)}`;
}
else {
for (let key of keys) {
// top right bottom left
if (obj[key] != undefined) {
let { width, color, style } = obj[key];
rst[`border-${key}`] = `${width}px ${style} ${(0, exports.generateColor)(color)}`;
}
}
}
return rst;
};
exports.generateProperty = generateProperty;
// border-radius处理
const generateBorderRadius = (obj) => {
if (typeof obj == 'string')
return obj;
if (typeof obj == 'object') {
let values = Object.values(obj);
if (!values.length || (!values[0] && !values[1] && !values[2] && !values[3]))
return '';
if (values.length == 4 && new Set(values).size === 1) {
return typeof obj.topLeft === 'string' ? obj.topLeft : `${obj.topLeft}px`;
}
return `${obj.topLeft}px ${obj.topRight}px ${obj.bottomRight}px ${obj.bottomLeft}px`;
}
};
exports.generateBorderRadius = generateBorderRadius;
// margin、padding处理
const generateMargin = (obj) => {
if (typeof obj == 'string')
return obj;
if (typeof obj == 'object') {
let values = Object.values(obj);
if (!values.length)
return '';
if (values.length == 4 && new Set(values).size == 1) {
return `${obj.top}px`;
}
return `${obj.top}px ${obj.right}px ${obj.bottom}px ${obj.left}px`;
}
};
exports.generateMargin = generateMargin;
const getImgFileUrl = (svg) => {
// 创建一个 Blob 对象
var blob = new Blob([decodeURI(svg)], { type: "charset=utf-8" });
// 创建一个 File 对象
var file = new File([blob], "hello.svg");
console.log('file', file);
};
exports.getImgFileUrl = getImgFileUrl;