sketch-json-parse
Version:
sketch-json解析
80 lines (79 loc) • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleSortDslPosition = void 0;
const handleLayer_1 = require("./handleLayer");
const handleCascading_1 = require("./handleCascading");
const recombine_1 = require("./recombine");
const handleRow_1 = require("./handleRow");
const styleFix_1 = require("./styleFix");
/**
* 处理单层图层结构
*/
exports.default = (dsl, notBranchNames, effectRuleNames) => {
// 默认只处理一次蒙层分割
let { baseJson, cascadingJson } = (0, handleCascading_1.default)(dsl[0], effectRuleNames);
// fs.writeFileSync('./code_dsl_90.json',JSON.stringify(dsl,null,2));
// 通过分割后按照单图层依次处理
[baseJson, ...cascadingJson] = [baseJson, ...cascadingJson].map((dsl, ind) => {
if (dsl.length === 0) {
return [];
}
// 格式化
// dsl = formatData(dsl);
// 结构处理
if (effectRuleNames.dialog.filter((t) => dsl[0].name.toLocaleLowerCase().includes(t.toLocaleLowerCase())).length > 0 &&
ind !== 0) {
dsl = [dsl[0], ...dsl[0].children];
dsl[0].children = [];
}
// 重新处理层级嵌套关系结构
dsl = (0, recombine_1.default)(dsl);
// 行列处理,实现children每级的布局结构分行分列
dsl = (0, handleRow_1.default)(dsl, notBranchNames);
// 处理冗余结构
dsl = (0, handleLayer_1.default)(dsl);
// fs.writeFileSync('./code_dsl_97.json',JSON.stringify(dsl,null,2));
// 样式修正处理
dsl = (0, styleFix_1.default)(dsl);
return dsl;
});
// fs.writeFileSync('./code_dsl_98.json',JSON.stringify(baseJson,null,2));
// 将蒙层容器设置为绝对定位
if (Array.isArray(cascadingJson) && cascadingJson.length > 0) {
// 弹窗
cascadingJson = cascadingJson
.map((t) => t[0])
.filter((t) => !!t)
.map((item) => {
item["isPosition"] = true;
return item;
});
if (!baseJson[0].children) {
baseJson[0].children = [];
}
baseJson[0].children = [...baseJson[0].children, ...cascadingJson];
}
return baseJson;
};
// 图层排序y,x
const handleSortDslPosition = (layers) => {
// 同列不重叠上下交换,同行左右交换-不重叠
layers.sort((layerA, layerB) => {
if (layerA.structure.y + layerA.structure.height < layerB.structure.y) {
return -1;
}
else if (layerA.structure.x + layerA.structure.width < layerB.structure.x &&
layerA.structure.y + layerA.structure.height > layerB.structure.y &&
layerA.structure.y < layerB.structure.y + layerB.structure.height) {
return -1;
}
return 0;
});
for (let i = 0; i < layers.length; i++) {
if (Array.isArray(layers[i].children)) {
layers[i].children = (0, exports.handleSortDslPosition)(layers[i].children);
}
}
return layers;
};
exports.handleSortDslPosition = handleSortDslPosition;