sketch-json-parse
Version:
sketch-json解析
107 lines (106 loc) • 4.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.layoutRow = exports.isRow = exports.layoutColumnCenter = exports.layoutCenter = exports.isRowCenter = void 0;
const handleTypeLayout_1 = require("./handleTypeLayout");
// import * as fs from 'fs';
/**
* 判断当前所有图层是否相对于父元素水平居中
*
* @param {*} data
* @param {*} parent
*/
const isRowCenter = (data, parent) => {
const xDiff = data[0].structure.x -
parent.structure.x -
(parent.structure.x +
parent.structure.width -
data[0].structure.x -
data[0].structure.width);
if (data.length == 1 && parent && Math.abs(xDiff) <= 2) {
return true;
}
return false;
};
exports.isRowCenter = isRowCenter;
// 横向居中
const layoutCenter = (data, parent) => {
parent.style = Object.assign(Object.assign({}, parent.style), { display: "flex", flexDirection: "row", justifyContent: "center" });
for (let i = 0; i < data.length; i++) {
if (!data[i].style) {
data[i].style = {};
}
}
if (handleTypeLayout_1.utils.isAlignMiddle(data, parent)) {
if (!handleTypeLayout_1.utils.isSameParentHeight(data, parent)) {
parent.style = Object.assign(Object.assign({}, parent.style), { alignItems: "center" });
}
}
else {
for (let i = 0; i < data.length; i++) {
data[i].style = Object.assign(Object.assign({}, data[i].style), { marginTop: data[i].structure.y - parent.structure.y });
}
}
return data;
};
exports.layoutCenter = layoutCenter;
// 纵向居中
const layoutColumnCenter = (data, parent) => {
parent.style = Object.assign(Object.assign({}, parent.style), { display: "flex", flexDirection: "column", justifyContent: "center" });
for (let i = 0; i < data.length; i++) {
if (!data[i].style) {
data[i].style = {};
}
}
if (handleTypeLayout_1.utils.isVerticalCenter(data, parent)) {
if (!handleTypeLayout_1.utils.isSameParentWidth(data, parent)) {
parent.style = Object.assign(Object.assign({}, parent.style), { alignItems: "center" });
}
}
else {
for (let i = 0; i < data.length; i++) {
if (i == 0) {
data[i].style = Object.assign(Object.assign({}, data[i].style), { marginLeft: data[i].structure.x - parent.structure.x });
}
else {
data[i].style = Object.assign(Object.assign({}, data[i].style), { marginLeft: data[i].structure.x -
data[i - 1].structure.x -
data[i - 1].structure.width });
}
}
}
return data;
};
exports.layoutColumnCenter = layoutColumnCenter;
/**
* 行布局
*/
const isRow = (data) => {
let flag = true;
if (Array.isArray(data) && data.length > 1) {
let dataTemp = JSON.parse(JSON.stringify(data));
dataTemp = dataTemp.sort((a, b) => a.structure.x - b.structure.x);
for (let i = 0; i < dataTemp.length; i++) {
const item = dataTemp[i];
flag = false; // 除非其中有元素跟任何一个都不是一行,否则只要有能拍到一行的元素就都进行行处理
for (let j = i; j < dataTemp.length; j++) {
const itemJ = dataTemp[j];
if ((item.structure.y <= itemJ.structure.y &&
itemJ.structure.y < item.structure.y + item.structure.height) ||
(itemJ.structure.y <= item.structure.y &&
item.structure.y < itemJ.structure.y + itemJ.structure.height)) {
flag = true;
}
}
}
}
return flag;
};
exports.isRow = isRow;
const layoutRow = (data, parent) => {
// 单个元素水平居中
if ((0, exports.isRowCenter)(data, parent)) {
return (0, exports.layoutCenter)(data, parent);
}
return data;
};
exports.layoutRow = layoutRow;