sketch-json-parse
Version:
sketch-json解析
155 lines (154 loc) • 5.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.utils = void 0;
// 公用方法
exports.utils = {
// 判断是否等宽
isEqualWidth(data) {
// 判断所有的元素是否等宽
let setList = new Set();
for (let item of data) {
setList.add(item.structure.width);
}
let ary = [...new Set(setList)];
return ary.length == 1 ? true : false;
},
// 判断所有的子元素是否水平中线对齐
isAlignMiddle(data, parent) {
if (Array.isArray(data) && parent) {
const parentY = parent.structure.y + parent.structure.height / 2;
for (let i = 0; i < data.length; i++) {
const itemY = data[i].structure.y + data[i].structure.height / 2;
if (Math.abs(parentY - itemY) > 2) {
return false;
}
}
return true;
}
return false;
},
// 是否垂直中线居中
isVerticalCenter: (data, parent) => {
if (Array.isArray(data) && parent) {
const parentX = parent.structure.x + parent.structure.width / 2;
for (let i = 0; i < data.length; i++) {
const itemX = data[i].structure.x + data[i].structure.width / 2;
if (Math.abs(parentX - itemX) > 2) {
return false;
}
}
return true;
}
return false;
},
isEqualHeight(data) {
// 判断所有的元素是否等宽
let setList = new Set();
for (let item of data) {
setList.add(item.structure.height);
}
let ary = [...new Set(setList)];
return ary.length == 1 ? true : false;
},
// 第一层级只包含一个文本节点
hasTextType(data) {
if (data.componentName == "Text")
return true; // 自身是文本的情况返回 true
if (data.children) {
let textList = [];
for (let item of data.children) {
if (item.componentName == "Text") {
textList.push(item);
}
}
return textList.length == 1;
}
return false;
},
// 多行之间判断是否是否相同间距
isSameSpacing(data) {
let flag = true;
let space = data[1].structure.x - data[0].structure.x - data[0].structure.width;
for (let i = 1; i < data.length; i++) {
if (data[i].structure.y == data[i - 1].structure.y &&
Math.abs(data[i].structure.x - data[i - 1].structure.x - data[i - 1].structure.width - space) > 4 ||
(!data[i].structure.x && data[i].structure.x !== 0)) {
flag = false;
break;
}
}
return flag;
},
// 是否有边框
hasBorder(data) {
var _a;
let flag = true;
for (let i = 0; i < data.length; i++) {
let item = data[i];
if (!((_a = item.structure) === null || _a === void 0 ? void 0 : _a.border)) {
flag = false;
break;
}
}
return flag;
},
// 是否有背景
hasBackground(data) {
var _a;
let flag = true;
for (let i = 0; i < data.length; i++) {
let item = data[i];
if ((_a = item.style) === null || _a === void 0 ? void 0 : _a.background) {
flag = false;
break;
}
}
return flag;
},
// 判断所有的子元素和父元素的高度是否一致
isSameParentHeight(data, parent) {
let flag = true;
for (let i = 0; i < data.length; i++) {
let item = data[i];
if (item.structure.height != parent.structure.height) {
flag = false;
break;
}
}
return flag;
},
// 判断所有的子元素和父元素的宽度是否一致
isSameParentWidth(data, parent) {
let flag = true;
for (let i = 0; i < data.length; i++) {
let item = data[i];
if (item.structure.width != parent.structure.width) {
flag = false;
break;
}
}
return flag;
},
// 判断水平方向子元素贴近父元素
isHorizontalCloseParent(data, parent) {
if (data.length < 2)
return false;
// 两个元素组合位于父元素中间
return (data[0].structure.x == parent.structure.x &&
Math.abs(data[data.length - 1].structure.x +
data[data.length - 1].structure.width -
parent.structure.x -
parent.structure.width) < 2);
},
// 判断垂直方向子元素贴近父元素
isVerticalCloseParent(data, parent) {
if (data.length < 2)
return false;
// 两个元素组合位于父元素中间
return (data[0].structure.y == parent.structure.y &&
Math.abs(data[data.length - 1].structure.y +
data[data.length - 1].structure.height -
parent.structure.y -
parent.structure.height) < 2);
}
};