UNPKG

sketch-json-parse

Version:

sketch-json解析

107 lines (106 loc) 4.02 kB
"use strict"; 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;