Commit ce8ed08c authored by rockyl's avatar rockyl

修复色块颜色值的问题,

增加相对坐标的解析
parent 9969fdc8
import path from 'path'; import path from 'path';
import Color from 'color'; import 'color';
import generateUUID from 'uuid/v4'; import generateUUID from 'uuid/v4';
import hash from 'object-hash'; import hash from 'object-hash';
import zlib from 'zlib'; import zlib from 'zlib';
...@@ -72,8 +72,12 @@ const relativePosPrefixMap = { ...@@ -72,8 +72,12 @@ const relativePosPrefixMap = {
b: {field: 'bottom',}, b: {field: 'bottom',},
h: {field: 'horizonCenter',}, h: {field: 'horizonCenter',},
v: {field: 'verticalCenter',}, v: {field: 'verticalCenter',},
wp: {field: 'width', isPercent: true}, wp: {field: 'width', },
hp: {field: 'height', isPercent: true}, hp: {field: 'height', },
lp: {field: 'left', },
tp: {field: 'top', },
rp: {field: 'right', },
bp: {field: 'bottom', },
}; };
async function execute(psdFile, options) { async function execute(psdFile, options) {
...@@ -88,6 +92,8 @@ async function execute(psdFile, options) { ...@@ -88,6 +92,8 @@ async function execute(psdFile, options) {
const assets = []; const assets = [];
const imageHashMap = {}; const imageHashMap = {};
const {width: stageWidth, height: stageHeight} = tree;
await walkNode(tree, async function (node, parent) { await walkNode(tree, async function (node, parent) {
let {name} = node; let {name} = node;
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node; const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
...@@ -113,9 +119,47 @@ async function execute(psdFile, options) { ...@@ -113,9 +119,47 @@ async function execute(psdFile, options) {
let prefix = result[0]; let prefix = result[0];
let mapItem = relativePosPrefixMap[prefix]; let mapItem = relativePosPrefixMap[prefix];
if (mapItem) { if (mapItem) {
const {field, isPercent} = mapItem; let {field,} = mapItem;
let value = item.substr(prefix.length); let value = item.substr(prefix.length);
let hasValue = value.length > 0;
let fieldChar = prefix[0];
if(!hasValue){
switch(fieldChar){
case 'l':
value = x;
break;
case 't':
value = y;
break;
case 'r':
value = stageWidth - width;
break;
case 'b':
value = stageHeight - height;
break;
case 'h':
value = x + width / 2 - stageWidth / 2;
break;
case 'v':
value = y + height / 2 - stageHeight / 2;
break;
}
}
let isPercent = prefix.endsWith('p');
if (isPercent) { if (isPercent) {
if(!hasValue){
switch(fieldChar){
case 'l':
case 'r':
value /= stageWidth;
break;
case 't':
case 'b':
value /= stageHeight;
break;
}
value = Math.floor(value * 100);
}
value += '%'; value += '%';
} else { } else {
value = parseFloat(value); value = parseFloat(value);
...@@ -156,8 +200,6 @@ async function execute(psdFile, options) { ...@@ -156,8 +200,6 @@ async function execute(psdFile, options) {
viewNode.type = 'label'; viewNode.type = 'label';
dealLater = false; dealLater = false;
} else if (solidColor && layer.vectorMask) { } else if (solidColor && layer.vectorMask) {
const {r, g, b} = solidColor();
let color = Color({r, g, b});
let paths = layer.vectorMask().paths; let paths = layer.vectorMask().paths;
if (paths[2].numPoints === 4) { if (paths[2].numPoints === 4) {
...@@ -170,7 +212,8 @@ async function execute(psdFile, options) { ...@@ -170,7 +212,8 @@ async function execute(psdFile, options) {
} }
if (isRect) { if (isRect) {
viewNode.type = 'rect'; viewNode.type = 'rect';
properties.fillColor = '#' + color.rgbNumber().toString(16); const {r, g, b} = solidColor();
properties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;
dealLater = false; dealLater = false;
} }
} }
......
{"version":3,"file":"index.es.js","sources":["../src/psd-tree.js","../src/utils.js","../src/zeroing.js"],"sourcesContent":["/**\n * Created by rockyl on 2019-08-09.\n */\n\nconst PSD = window['require']('psd');\n\nexport async function getTree(file) {\n\tlet psd = await PSD.fromDroppedFile(file);\n\n\tconst root = {};\n\twalk(psd.tree(), root);\n\n\treturn root;\n}\n\nfunction walk(psNode, dataNode) {\n\tconst {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};\n\tconst {left, top, width, height, name, layer: {opacity, visible}} = psNode;\n\tconst x = left - pLeft;\n\tconst y = top - pTop;\n\n\tObject.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});\n\tif (psNode.children() && psNode.children().length > 0){\n\t\tdataNode.children = [];\n\t}\n\n\tlet children = psNode.children();\n\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\tconst childPsNode = children[i];\n\n\t\tconst childDataNode = {};\n\t\tdataNode.children.push(childDataNode);\n\t\twalk(childPsNode, childDataNode)\n\t}\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nexport async function walkNode(node, callback, includeSelf = false) {\n\tif (includeSelf) {\n\t\tawait callback(node, null);\n\t}\n\tif (node.children && node.children.length > 0) {\n\t\tfor (let childNode of node.children) {\n\t\t\tawait callback(childNode, node);\n\t\t\tconst result = await walkNode(childNode, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function walkObject(obj, callback) {\n\tif(typeof obj === \"object\"){\n\t\tfor (let key of Object.keys(obj)) {\n\t\t\tconst value = obj[key];\n\t\t\tawait callback(key, value, obj);\n\t\t\tconst result = await walkObject(value, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Created by rockyl on 2019-09-26.\n *\n * 导出zeroing的视图\n */\n\nimport {getTree} from \"./psd-tree\";\nimport {walkNode} from \"./utils\";\nimport path from 'path'\nimport Color from 'color'\nimport generateUUID from 'uuid/v4'\nimport hash from 'object-hash';\nimport zlib from 'zlib';\n\nconst relativePosPrefixMap = {\n\tl: {field: 'left',},\n\tt: {field: 'top',},\n\tr: {field: 'right',},\n\tb: {field: 'bottom',},\n\th: {field: 'horizonCenter',},\n\tv: {field: 'verticalCenter',},\n\twp: {field: 'width', isPercent: true},\n\thp: {field: 'height', isPercent: true},\n};\n\nexport async function execute(psdFile, options) {\n\tconst tree = await getTree(psdFile);\n\n\tlet viewRoot = {\n\t\tname: path.basename(psdFile.name, '.psd'),\n\t\ttype: 'node',\n\t\tuuid: generateUUID(),\n\t};\n\n\tconst assets = [];\n\tconst imageHashMap = {};\n\n\tawait walkNode(tree, async function (node, parent) {\n\t\tlet {name} = node;\n\t\tconst {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;\n\t\t//console.log('walk node:', name);\n\t\tlet properties = {\n\t\t\twidth, height, alpha, visible,\n\t\t};\n\n\t\tif (name.includes('|')) {\n\t\t\ttry {\n\t\t\t\tlet arr = name.split('|');\n\t\t\t\tname = arr[0];\n\t\t\t\tlet paramsStr = arr[1];\n\t\t\t\tlet params = paramsStr.split(';');\n\t\t\t\tlet relativePos = params[0];\n\t\t\t\tif (relativePos) {\n\t\t\t\t\tlet items = relativePos.split(',');\n\t\t\t\t\tfor (let item of items) {\n\t\t\t\t\t\tlet result = item.match(/[a-zA-Z]+/);\n\t\t\t\t\t\tif(!result){\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet prefix = result[0];\n\t\t\t\t\t\tlet mapItem = relativePosPrefixMap[prefix];\n\t\t\t\t\t\tif (mapItem) {\n\t\t\t\t\t\t\tconst {field, isPercent} = mapItem;\n\t\t\t\t\t\t\tlet value = item.substr(prefix.length);\n\t\t\t\t\t\t\tif (isPercent) {\n\t\t\t\t\t\t\t\tvalue += '%';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvalue = parseFloat(value);\n\t\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tproperties[field] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t}\n\n\t\tlet viewNode = {\n\t\t\tname,\n\t\t\tproperties,\n\t\t\tuuid: generateUUID(),\n\t\t};\n\t\tlet dealLater = true;\n\t\tif (x !== 0) {\n\t\t\tproperties.x = x;\n\t\t}\n\t\tif (y !== 0) {\n\t\t\tproperties.y = y;\n\t\t}\n\n\t\tif (typeTool) {\n\t\t\tlet fontInfo = typeTool();\n\t\t\tproperties.text = fontInfo.textValue;\n\t\t\tconst sizes = fontInfo.sizes();\n\t\t\tconst colors = fontInfo.colors();\n\t\t\tproperties.size = sizes ? sizes[0] || 20 : 20;\n\t\t\tlet [r, g, b, a] = colors[0];\n\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n\t\t\tviewNode.type = 'label';\n\t\t\tdealLater = false;\n\t\t} else if (solidColor && layer.vectorMask) {\n\t\t\tconst {r, g, b} = solidColor();\n\t\t\tlet color = Color({r, g, b});\n\n\t\t\tlet paths = layer.vectorMask().paths;\n\t\t\tif (paths[2].numPoints === 4) {\n\t\t\t\tlet isRect = true;\n\t\t\t\tfor (let i = 3; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].recordType !== 2) {\n\t\t\t\t\t\tisRect = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isRect) {\n\t\t\t\t\tviewNode.type = 'rect';\n\t\t\t\t\tproperties.fillColor = '#' + color.rgbNumber().toString(16);\n\t\t\t\t\tdealLater = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dealLater) {\n\t\t\tif (node.hasOwnProperty('children')) {\n\t\t\t\tviewNode.type = 'node';\n\t\t\t} else {\n\t\t\t\tviewNode.type = 'image';\n\n\t\t\t\tlet uuid = generateUUID();\n\t\t\t\tconst ext = '.png';\n\n\t\t\t\tlet dataUrl;\n\t\t\t\ttry {\n\t\t\t\t\tlet img = node.origin.toPng();\n\t\t\t\t\tdataUrl = img.src;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t}\n\n\t\t\t\tif (dataUrl) {\n\t\t\t\t\tlet base64Data = dataUrl.replace(/^data:image\\/\\w+;base64,/, \"\");\n\t\t\t\t\tlet buffer = new Buffer(base64Data, 'base64');\n\t\t\t\t\tconst fileNameHash = hash(buffer);\n\t\t\t\t\tif (imageHashMap.hasOwnProperty(fileNameHash)) {\n\t\t\t\t\t\tuuid = imageHashMap[fileNameHash];\n\t\t\t\t\t} else {\n\t\t\t\t\t\timageHashMap[fileNameHash] = uuid;\n\t\t\t\t\t\tassets.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\text,\n\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\tbase64Data,\n\t\t\t\t\t\t\thash: fileNameHash,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tproperties.source = 'asset://' + uuid;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet viewParent = parent.view || viewRoot;\n\t\tif (!viewParent.hasOwnProperty('children')) {\n\t\t\tviewParent.children = [];\n\t\t}\n\t\tviewParent.children.push(viewNode);\n\n\t\tnode.view = viewNode;\n\t});\n\n\tlet data = {\n\t\tview: viewRoot,\n\t\tassets,\n\t};\n\n\tlet dataString = JSON.stringify(data);\n\n\tlet buf = new Buffer(dataString);\n\treturn await new Promise((resolve, reject) => {\n\t\tzlib.gzip(buf, function (err, res) {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tconsole.log(res.length);\n\t\t\t\tresolve(res);\n\t\t\t}\n\t\t})\n\t})\n}\n"],"names":[],"mappings":"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"} {"version":3,"file":"index.es.js","sources":["../src/psd-tree.js","../src/utils.js","../src/zeroing.js"],"sourcesContent":["/**\n * Created by rockyl on 2019-08-09.\n */\n\nconst PSD = window['require']('psd');\n\nexport async function getTree(file) {\n\tlet psd = await PSD.fromDroppedFile(file);\n\n\tconst root = {};\n\twalk(psd.tree(), root);\n\n\treturn root;\n}\n\nfunction walk(psNode, dataNode) {\n\tconst {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};\n\tconst {left, top, width, height, name, layer: {opacity, visible}} = psNode;\n\tconst x = left - pLeft;\n\tconst y = top - pTop;\n\n\tObject.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});\n\tif (psNode.children() && psNode.children().length > 0){\n\t\tdataNode.children = [];\n\t}\n\n\tlet children = psNode.children();\n\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\tconst childPsNode = children[i];\n\n\t\tconst childDataNode = {};\n\t\tdataNode.children.push(childDataNode);\n\t\twalk(childPsNode, childDataNode)\n\t}\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nexport async function walkNode(node, callback, includeSelf = false) {\n\tif (includeSelf) {\n\t\tawait callback(node, null);\n\t}\n\tif (node.children && node.children.length > 0) {\n\t\tfor (let childNode of node.children) {\n\t\t\tawait callback(childNode, node);\n\t\t\tconst result = await walkNode(childNode, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function walkObject(obj, callback) {\n\tif(typeof obj === \"object\"){\n\t\tfor (let key of Object.keys(obj)) {\n\t\t\tconst value = obj[key];\n\t\t\tawait callback(key, value, obj);\n\t\t\tconst result = await walkObject(value, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Created by rockyl on 2019-09-26.\n *\n * 导出zeroing的视图\n */\n\nimport {getTree} from \"./psd-tree\";\nimport {walkNode} from \"./utils\";\nimport path from 'path'\nimport Color from 'color'\nimport generateUUID from 'uuid/v4'\nimport hash from 'object-hash';\nimport zlib from 'zlib';\n\nconst relativePosPrefixMap = {\n\tl: {field: 'left',},\n\tt: {field: 'top',},\n\tr: {field: 'right',},\n\tb: {field: 'bottom',},\n\th: {field: 'horizonCenter',},\n\tv: {field: 'verticalCenter',},\n\twp: {field: 'width', },\n\thp: {field: 'height', },\n\tlp: {field: 'left', },\n\ttp: {field: 'top', },\n\trp: {field: 'right', },\n\tbp: {field: 'bottom', },\n};\n\nexport async function execute(psdFile, options) {\n\tconst tree = await getTree(psdFile);\n\n\tlet viewRoot = {\n\t\tname: path.basename(psdFile.name, '.psd'),\n\t\ttype: 'node',\n\t\tuuid: generateUUID(),\n\t};\n\n\tconst assets = [];\n\tconst imageHashMap = {};\n\n\tconst {width: stageWidth, height: stageHeight} = tree;\n\n\tawait walkNode(tree, async function (node, parent) {\n\t\tlet {name} = node;\n\t\tconst {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;\n\t\t//console.log('walk node:', name);\n\t\tlet properties = {\n\t\t\twidth, height, alpha, visible,\n\t\t};\n\n\t\tconst {width: parentWidth, height: parentHeight} = parent;\n\n\t\tif (name.includes('|')) {\n\t\t\ttry {\n\t\t\t\tlet arr = name.split('|');\n\t\t\t\tname = arr[0];\n\t\t\t\tlet paramsStr = arr[1];\n\t\t\t\tlet params = paramsStr.split(';');\n\t\t\t\tlet relativePos = params[0];\n\t\t\t\tif (relativePos) {\n\t\t\t\t\tlet items = relativePos.split(',');\n\t\t\t\t\tfor (let item of items) {\n\t\t\t\t\t\tlet result = item.match(/[a-zA-Z]+/);\n\t\t\t\t\t\tif(!result){\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet prefix = result[0];\n\t\t\t\t\t\tlet mapItem = relativePosPrefixMap[prefix];\n\t\t\t\t\t\tif (mapItem) {\n\t\t\t\t\t\t\tlet {field,} = mapItem;\n\t\t\t\t\t\t\tlet value = item.substr(prefix.length);\n\t\t\t\t\t\t\tlet hasValue = value.length > 0;\n\t\t\t\t\t\t\tlet fieldChar = prefix[0];\n\t\t\t\t\t\t\tif(!hasValue){\n\t\t\t\t\t\t\t\tswitch(fieldChar){\n\t\t\t\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\t\t\t\tvalue = x;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 't':\n\t\t\t\t\t\t\t\t\t\tvalue = y;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'r':\n\t\t\t\t\t\t\t\t\t\tvalue = stageWidth - width;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\tvalue = stageHeight - height;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'h':\n\t\t\t\t\t\t\t\t\t\tvalue = x + width / 2 - stageWidth / 2;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'v':\n\t\t\t\t\t\t\t\t\t\tvalue = y + height / 2 - stageHeight / 2;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet isPercent = prefix.endsWith('p');\n\t\t\t\t\t\t\tif (isPercent) {\n\t\t\t\t\t\t\t\tif(!hasValue){\n\t\t\t\t\t\t\t\t\tswitch(fieldChar){\n\t\t\t\t\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\t\t\t\tcase 'r':\n\t\t\t\t\t\t\t\t\t\t\tvalue /= stageWidth;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase 't':\n\t\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\t\tvalue /= stageHeight;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvalue = Math.floor(value * 100);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvalue += '%';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvalue = parseFloat(value);\n\t\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tproperties[field] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t}\n\n\t\tlet viewNode = {\n\t\t\tname,\n\t\t\tproperties,\n\t\t\tuuid: generateUUID(),\n\t\t};\n\t\tlet dealLater = true;\n\t\tif (x !== 0) {\n\t\t\tproperties.x = x;\n\t\t}\n\t\tif (y !== 0) {\n\t\t\tproperties.y = y;\n\t\t}\n\n\t\tif (typeTool) {\n\t\t\tlet fontInfo = typeTool();\n\t\t\tproperties.text = fontInfo.textValue;\n\t\t\tconst sizes = fontInfo.sizes();\n\t\t\tconst colors = fontInfo.colors();\n\t\t\tproperties.size = sizes ? sizes[0] || 20 : 20;\n\t\t\tlet [r, g, b, a] = colors[0];\n\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n\t\t\tviewNode.type = 'label';\n\t\t\tdealLater = false;\n\t\t} else if (solidColor && layer.vectorMask) {\n\n\t\t\tlet paths = layer.vectorMask().paths;\n\t\t\tif (paths[2].numPoints === 4) {\n\t\t\t\tlet isRect = true;\n\t\t\t\tfor (let i = 3; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].recordType !== 2) {\n\t\t\t\t\t\tisRect = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isRect) {\n\t\t\t\t\tviewNode.type = 'rect';\n\t\t\t\t\tconst {r, g, b} = solidColor();\n\t\t\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;\n\t\t\t\t\tdealLater = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dealLater) {\n\t\t\tif (node.hasOwnProperty('children')) {\n\t\t\t\tviewNode.type = 'node';\n\t\t\t} else {\n\t\t\t\tviewNode.type = 'image';\n\n\t\t\t\tlet uuid = generateUUID();\n\t\t\t\tconst ext = '.png';\n\n\t\t\t\tlet dataUrl;\n\t\t\t\ttry {\n\t\t\t\t\tlet img = node.origin.toPng();\n\t\t\t\t\tdataUrl = img.src;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t}\n\n\t\t\t\tif (dataUrl) {\n\t\t\t\t\tlet base64Data = dataUrl.replace(/^data:image\\/\\w+;base64,/, \"\");\n\t\t\t\t\tlet buffer = new Buffer(base64Data, 'base64');\n\t\t\t\t\tconst fileNameHash = hash(buffer);\n\t\t\t\t\tif (imageHashMap.hasOwnProperty(fileNameHash)) {\n\t\t\t\t\t\tuuid = imageHashMap[fileNameHash];\n\t\t\t\t\t} else {\n\t\t\t\t\t\timageHashMap[fileNameHash] = uuid;\n\t\t\t\t\t\tassets.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\text,\n\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\tbase64Data,\n\t\t\t\t\t\t\thash: fileNameHash,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tproperties.source = 'asset://' + uuid;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet viewParent = parent.view || viewRoot;\n\t\tif (!viewParent.hasOwnProperty('children')) {\n\t\t\tviewParent.children = [];\n\t\t}\n\t\tviewParent.children.push(viewNode);\n\n\t\tnode.view = viewNode;\n\t});\n\n\tlet data = {\n\t\tview: viewRoot,\n\t\tassets,\n\t};\n\n\tlet dataString = JSON.stringify(data);\n\n\tlet buf = new Buffer(dataString);\n\treturn await new Promise((resolve, reject) => {\n\t\tzlib.gzip(buf, function (err, res) {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tconsole.log(res.length);\n\t\t\t\tresolve(res);\n\t\t\t}\n\t\t})\n\t})\n}\n"],"names":[],"mappings":";;;;;;AAAA;;;;AAIA,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;;AAErC,AAAO,eAAe,OAAO,CAAC,IAAI,EAAE;CACnC,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;;CAE1C,MAAM,IAAI,GAAG,EAAE,CAAC;CAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;;CAEvB,OAAO,IAAI,CAAC;CACZ;;AAED,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;CAC/B,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;CAC9D,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;CAC3E,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;CACvB,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;;CAErB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1J,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;EACrD,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;EACvB;;CAED,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;CACjC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;EAEhC,MAAM,aAAa,GAAG,EAAE,CAAC;EACzB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;EACtC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAC;EAChC;CACD;;AClCD;;;;AAIA,AAAO,eAAe,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,GAAG,KAAK,EAAE;CACnE,IAAI,WAAW,EAAE;EAChB,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;EAC3B;CACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;EAC9C,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;GACpC,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;GAChC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;GACnD,IAAI,MAAM,KAAK,IAAI,EAAE;IACpB,MAAM;IACN;GACD;EACD;CACD;;ACjBD;;;;;AAKA,AAQA;AACA,MAAM,oBAAoB,GAAG;CAC5B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE;CACnB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE;CAClB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE;CACpB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE;CACrB,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE;CAC5B,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE;CAC7B,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG;CACtB,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG;CACvB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG;CACrB,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG;CACpB,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG;CACtB,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG;CACvB,CAAC;;AAEF,AAAO,eAAe,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;CAC/C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;;CAEpC,IAAI,QAAQ,GAAG;EACd,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;EACzC,IAAI,EAAE,MAAM;EACZ,IAAI,EAAE,YAAY,EAAE;EACpB,CAAC;;CAEF,MAAM,MAAM,GAAG,EAAE,CAAC;CAClB,MAAM,YAAY,GAAG,EAAE,CAAC;;CAExB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;;CAEtD,MAAM,QAAQ,CAAC,IAAI,EAAE,gBAAgB,IAAI,EAAE,MAAM,EAAE;EAClD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;EAClB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;;EAEnG,IAAI,UAAU,GAAG;GAChB,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;GAC7B,CAAC;AACJ,AAEA;EACE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;GACvB,IAAI;IACH,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,WAAW,EAAE;KAChB,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;MACvB,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;MACrC,GAAG,CAAC,MAAM,CAAC;OACV,SAAS;OACT;MACD,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;MACvB,IAAI,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;MAC3C,IAAI,OAAO,EAAE;OACZ,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC;OACvB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;OACvC,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;OAChC,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;OAC1B,GAAG,CAAC,QAAQ,CAAC;QACZ,OAAO,SAAS;SACf,KAAK,GAAG;UACP,KAAK,GAAG,CAAC,CAAC;UACV,MAAM;SACP,KAAK,GAAG;UACP,KAAK,GAAG,CAAC,CAAC;UACV,MAAM;SACP,KAAK,GAAG;UACP,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;UAC3B,MAAM;SACP,KAAK,GAAG;UACP,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;UAC7B,MAAM;SACP,KAAK,GAAG;UACP,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;UACvC,MAAM;SACP,KAAK,GAAG;UACP,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;UACzC,MAAM;SACP;QACD;OACD,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;OACrC,IAAI,SAAS,EAAE;QACd,GAAG,CAAC,QAAQ,CAAC;SACZ,OAAO,SAAS;UACf,KAAK,GAAG,CAAC;UACT,KAAK,GAAG;WACP,KAAK,IAAI,UAAU,CAAC;WACpB,MAAM;UACP,KAAK,GAAG,CAAC;UACT,KAAK,GAAG;WACP,KAAK,IAAI,WAAW,CAAC;WACrB,MAAM;UACP;SACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;SAChC;QACD,KAAK,IAAI,GAAG,CAAC;QACb,MAAM;QACN,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;SACjB,KAAK,GAAG,CAAC,CAAC;SACV;QACD;OACD,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;OAC1B;MACD;KACD;IACD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACf;GACD;;EAED,IAAI,QAAQ,GAAG;GACd,IAAI;GACJ,UAAU;GACV,IAAI,EAAE,YAAY,EAAE;GACpB,CAAC;EACF,IAAI,SAAS,GAAG,IAAI,CAAC;EACrB,IAAI,CAAC,KAAK,CAAC,EAAE;GACZ,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;GACjB;EACD,IAAI,CAAC,KAAK,CAAC,EAAE;GACZ,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;GACjB;;EAED,IAAI,QAAQ,EAAE;GACb,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;GAC1B,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;GACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;GAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;GACjC,UAAU,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;GAC9C,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;GAC7B,UAAU,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;GAC5D,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;GACxB,SAAS,GAAG,KAAK,CAAC;GAClB,MAAM,IAAI,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE;;GAE1C,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;GACrC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE;IAC7B,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;KACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,EAAE;MAC9B,MAAM,GAAG,KAAK,CAAC;MACf,MAAM;MACN;KACD;IACD,IAAI,MAAM,EAAE;KACX,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;KACvB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC;KAC/B,UAAU,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;KACnD,SAAS,GAAG,KAAK,CAAC;KAClB;IACD;GACD;;EAED,IAAI,SAAS,EAAE;GACd,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;IACpC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;IACvB,MAAM;IACN,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;;IAExB,IAAI,IAAI,GAAG,YAAY,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC;;IAEnB,IAAI,OAAO,CAAC;IACZ,IAAI;KACH,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;KAC9B,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;KAClB,CAAC,OAAO,CAAC,EAAE;;KAEX;;IAED,IAAI,OAAO,EAAE;KACZ,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;KACjE,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;KAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;KAClC,IAAI,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;MAC9C,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;MAClC,MAAM;MACN,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;MAClC,MAAM,CAAC,IAAI,CAAC;OACX,IAAI;OACJ,GAAG;OACH,IAAI;OACJ,UAAU;OACV,IAAI,EAAE,YAAY;OAClB,CAAC,CAAC;MACH;;KAED,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;KACtC;IACD;GACD;;EAED,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;EACzC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;GAC3C,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC;GACzB;EACD,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;EAEnC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;EACrB,CAAC,CAAC;;CAEH,IAAI,IAAI,GAAG;EACV,IAAI,EAAE,QAAQ;EACd,MAAM;EACN,CAAC;;CAEF,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;CAEtC,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;CACjC,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;EAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,GAAG,EAAE;GAClC,IAAI,GAAG,EAAE;IACR,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM;IACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,CAAC;IACb;GACD,EAAC;EACF,CAAC;CACF;;;;"}
\ No newline at end of file \ No newline at end of file
...@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); ...@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var path = _interopDefault(require('path')); var path = _interopDefault(require('path'));
var Color = _interopDefault(require('color')); require('color');
var generateUUID = _interopDefault(require('uuid/v4')); var generateUUID = _interopDefault(require('uuid/v4'));
var hash = _interopDefault(require('object-hash')); var hash = _interopDefault(require('object-hash'));
var zlib = _interopDefault(require('zlib')); var zlib = _interopDefault(require('zlib'));
...@@ -78,8 +78,12 @@ const relativePosPrefixMap = { ...@@ -78,8 +78,12 @@ const relativePosPrefixMap = {
b: {field: 'bottom',}, b: {field: 'bottom',},
h: {field: 'horizonCenter',}, h: {field: 'horizonCenter',},
v: {field: 'verticalCenter',}, v: {field: 'verticalCenter',},
wp: {field: 'width', isPercent: true}, wp: {field: 'width', },
hp: {field: 'height', isPercent: true}, hp: {field: 'height', },
lp: {field: 'left', },
tp: {field: 'top', },
rp: {field: 'right', },
bp: {field: 'bottom', },
}; };
async function execute(psdFile, options) { async function execute(psdFile, options) {
...@@ -94,6 +98,8 @@ async function execute(psdFile, options) { ...@@ -94,6 +98,8 @@ async function execute(psdFile, options) {
const assets = []; const assets = [];
const imageHashMap = {}; const imageHashMap = {};
const {width: stageWidth, height: stageHeight} = tree;
await walkNode(tree, async function (node, parent) { await walkNode(tree, async function (node, parent) {
let {name} = node; let {name} = node;
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node; const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
...@@ -119,9 +125,47 @@ async function execute(psdFile, options) { ...@@ -119,9 +125,47 @@ async function execute(psdFile, options) {
let prefix = result[0]; let prefix = result[0];
let mapItem = relativePosPrefixMap[prefix]; let mapItem = relativePosPrefixMap[prefix];
if (mapItem) { if (mapItem) {
const {field, isPercent} = mapItem; let {field,} = mapItem;
let value = item.substr(prefix.length); let value = item.substr(prefix.length);
let hasValue = value.length > 0;
let fieldChar = prefix[0];
if(!hasValue){
switch(fieldChar){
case 'l':
value = x;
break;
case 't':
value = y;
break;
case 'r':
value = stageWidth - width;
break;
case 'b':
value = stageHeight - height;
break;
case 'h':
value = x + width / 2 - stageWidth / 2;
break;
case 'v':
value = y + height / 2 - stageHeight / 2;
break;
}
}
let isPercent = prefix.endsWith('p');
if (isPercent) { if (isPercent) {
if(!hasValue){
switch(fieldChar){
case 'l':
case 'r':
value /= stageWidth;
break;
case 't':
case 'b':
value /= stageHeight;
break;
}
value = Math.floor(value * 100);
}
value += '%'; value += '%';
} else { } else {
value = parseFloat(value); value = parseFloat(value);
...@@ -162,8 +206,6 @@ async function execute(psdFile, options) { ...@@ -162,8 +206,6 @@ async function execute(psdFile, options) {
viewNode.type = 'label'; viewNode.type = 'label';
dealLater = false; dealLater = false;
} else if (solidColor && layer.vectorMask) { } else if (solidColor && layer.vectorMask) {
const {r, g, b} = solidColor();
let color = Color({r, g, b});
let paths = layer.vectorMask().paths; let paths = layer.vectorMask().paths;
if (paths[2].numPoints === 4) { if (paths[2].numPoints === 4) {
...@@ -176,7 +218,8 @@ async function execute(psdFile, options) { ...@@ -176,7 +218,8 @@ async function execute(psdFile, options) {
} }
if (isRect) { if (isRect) {
viewNode.type = 'rect'; viewNode.type = 'rect';
properties.fillColor = '#' + color.rgbNumber().toString(16); const {r, g, b} = solidColor();
properties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;
dealLater = false; dealLater = false;
} }
} }
......
{"version":3,"file":"index.js","sources":["../src/psd-tree.js","../src/utils.js","../src/zeroing.js"],"sourcesContent":["/**\n * Created by rockyl on 2019-08-09.\n */\n\nconst PSD = window['require']('psd');\n\nexport async function getTree(file) {\n\tlet psd = await PSD.fromDroppedFile(file);\n\n\tconst root = {};\n\twalk(psd.tree(), root);\n\n\treturn root;\n}\n\nfunction walk(psNode, dataNode) {\n\tconst {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};\n\tconst {left, top, width, height, name, layer: {opacity, visible}} = psNode;\n\tconst x = left - pLeft;\n\tconst y = top - pTop;\n\n\tObject.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});\n\tif (psNode.children() && psNode.children().length > 0){\n\t\tdataNode.children = [];\n\t}\n\n\tlet children = psNode.children();\n\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\tconst childPsNode = children[i];\n\n\t\tconst childDataNode = {};\n\t\tdataNode.children.push(childDataNode);\n\t\twalk(childPsNode, childDataNode)\n\t}\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nexport async function walkNode(node, callback, includeSelf = false) {\n\tif (includeSelf) {\n\t\tawait callback(node, null);\n\t}\n\tif (node.children && node.children.length > 0) {\n\t\tfor (let childNode of node.children) {\n\t\t\tawait callback(childNode, node);\n\t\t\tconst result = await walkNode(childNode, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function walkObject(obj, callback) {\n\tif(typeof obj === \"object\"){\n\t\tfor (let key of Object.keys(obj)) {\n\t\t\tconst value = obj[key];\n\t\t\tawait callback(key, value, obj);\n\t\t\tconst result = await walkObject(value, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Created by rockyl on 2019-09-26.\n *\n * 导出zeroing的视图\n */\n\nimport {getTree} from \"./psd-tree\";\nimport {walkNode} from \"./utils\";\nimport path from 'path'\nimport Color from 'color'\nimport generateUUID from 'uuid/v4'\nimport hash from 'object-hash';\nimport zlib from 'zlib';\n\nconst relativePosPrefixMap = {\n\tl: {field: 'left',},\n\tt: {field: 'top',},\n\tr: {field: 'right',},\n\tb: {field: 'bottom',},\n\th: {field: 'horizonCenter',},\n\tv: {field: 'verticalCenter',},\n\twp: {field: 'width', isPercent: true},\n\thp: {field: 'height', isPercent: true},\n};\n\nexport async function execute(psdFile, options) {\n\tconst tree = await getTree(psdFile);\n\n\tlet viewRoot = {\n\t\tname: path.basename(psdFile.name, '.psd'),\n\t\ttype: 'node',\n\t\tuuid: generateUUID(),\n\t};\n\n\tconst assets = [];\n\tconst imageHashMap = {};\n\n\tawait walkNode(tree, async function (node, parent) {\n\t\tlet {name} = node;\n\t\tconst {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;\n\t\t//console.log('walk node:', name);\n\t\tlet properties = {\n\t\t\twidth, height, alpha, visible,\n\t\t};\n\n\t\tif (name.includes('|')) {\n\t\t\ttry {\n\t\t\t\tlet arr = name.split('|');\n\t\t\t\tname = arr[0];\n\t\t\t\tlet paramsStr = arr[1];\n\t\t\t\tlet params = paramsStr.split(';');\n\t\t\t\tlet relativePos = params[0];\n\t\t\t\tif (relativePos) {\n\t\t\t\t\tlet items = relativePos.split(',');\n\t\t\t\t\tfor (let item of items) {\n\t\t\t\t\t\tlet result = item.match(/[a-zA-Z]+/);\n\t\t\t\t\t\tif(!result){\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet prefix = result[0];\n\t\t\t\t\t\tlet mapItem = relativePosPrefixMap[prefix];\n\t\t\t\t\t\tif (mapItem) {\n\t\t\t\t\t\t\tconst {field, isPercent} = mapItem;\n\t\t\t\t\t\t\tlet value = item.substr(prefix.length);\n\t\t\t\t\t\t\tif (isPercent) {\n\t\t\t\t\t\t\t\tvalue += '%';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvalue = parseFloat(value);\n\t\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tproperties[field] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t}\n\n\t\tlet viewNode = {\n\t\t\tname,\n\t\t\tproperties,\n\t\t\tuuid: generateUUID(),\n\t\t};\n\t\tlet dealLater = true;\n\t\tif (x !== 0) {\n\t\t\tproperties.x = x;\n\t\t}\n\t\tif (y !== 0) {\n\t\t\tproperties.y = y;\n\t\t}\n\n\t\tif (typeTool) {\n\t\t\tlet fontInfo = typeTool();\n\t\t\tproperties.text = fontInfo.textValue;\n\t\t\tconst sizes = fontInfo.sizes();\n\t\t\tconst colors = fontInfo.colors();\n\t\t\tproperties.size = sizes ? sizes[0] || 20 : 20;\n\t\t\tlet [r, g, b, a] = colors[0];\n\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n\t\t\tviewNode.type = 'label';\n\t\t\tdealLater = false;\n\t\t} else if (solidColor && layer.vectorMask) {\n\t\t\tconst {r, g, b} = solidColor();\n\t\t\tlet color = Color({r, g, b});\n\n\t\t\tlet paths = layer.vectorMask().paths;\n\t\t\tif (paths[2].numPoints === 4) {\n\t\t\t\tlet isRect = true;\n\t\t\t\tfor (let i = 3; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].recordType !== 2) {\n\t\t\t\t\t\tisRect = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isRect) {\n\t\t\t\t\tviewNode.type = 'rect';\n\t\t\t\t\tproperties.fillColor = '#' + color.rgbNumber().toString(16);\n\t\t\t\t\tdealLater = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dealLater) {\n\t\t\tif (node.hasOwnProperty('children')) {\n\t\t\t\tviewNode.type = 'node';\n\t\t\t} else {\n\t\t\t\tviewNode.type = 'image';\n\n\t\t\t\tlet uuid = generateUUID();\n\t\t\t\tconst ext = '.png';\n\n\t\t\t\tlet dataUrl;\n\t\t\t\ttry {\n\t\t\t\t\tlet img = node.origin.toPng();\n\t\t\t\t\tdataUrl = img.src;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t}\n\n\t\t\t\tif (dataUrl) {\n\t\t\t\t\tlet base64Data = dataUrl.replace(/^data:image\\/\\w+;base64,/, \"\");\n\t\t\t\t\tlet buffer = new Buffer(base64Data, 'base64');\n\t\t\t\t\tconst fileNameHash = hash(buffer);\n\t\t\t\t\tif (imageHashMap.hasOwnProperty(fileNameHash)) {\n\t\t\t\t\t\tuuid = imageHashMap[fileNameHash];\n\t\t\t\t\t} else {\n\t\t\t\t\t\timageHashMap[fileNameHash] = uuid;\n\t\t\t\t\t\tassets.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\text,\n\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\tbase64Data,\n\t\t\t\t\t\t\thash: fileNameHash,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tproperties.source = 'asset://' + uuid;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet viewParent = parent.view || viewRoot;\n\t\tif (!viewParent.hasOwnProperty('children')) {\n\t\t\tviewParent.children = [];\n\t\t}\n\t\tviewParent.children.push(viewNode);\n\n\t\tnode.view = viewNode;\n\t});\n\n\tlet data = {\n\t\tview: viewRoot,\n\t\tassets,\n\t};\n\n\tlet dataString = JSON.stringify(data);\n\n\tlet buf = new Buffer(dataString);\n\treturn await new Promise((resolve, reject) => {\n\t\tzlib.gzip(buf, function (err, res) {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tconsole.log(res.length);\n\t\t\t\tresolve(res);\n\t\t\t}\n\t\t})\n\t})\n}\n"],"names":[],"mappings":"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"} {"version":3,"file":"index.js","sources":["../src/psd-tree.js","../src/utils.js","../src/zeroing.js"],"sourcesContent":["/**\n * Created by rockyl on 2019-08-09.\n */\n\nconst PSD = window['require']('psd');\n\nexport async function getTree(file) {\n\tlet psd = await PSD.fromDroppedFile(file);\n\n\tconst root = {};\n\twalk(psd.tree(), root);\n\n\treturn root;\n}\n\nfunction walk(psNode, dataNode) {\n\tconst {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};\n\tconst {left, top, width, height, name, layer: {opacity, visible}} = psNode;\n\tconst x = left - pLeft;\n\tconst y = top - pTop;\n\n\tObject.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});\n\tif (psNode.children() && psNode.children().length > 0){\n\t\tdataNode.children = [];\n\t}\n\n\tlet children = psNode.children();\n\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\tconst childPsNode = children[i];\n\n\t\tconst childDataNode = {};\n\t\tdataNode.children.push(childDataNode);\n\t\twalk(childPsNode, childDataNode)\n\t}\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nexport async function walkNode(node, callback, includeSelf = false) {\n\tif (includeSelf) {\n\t\tawait callback(node, null);\n\t}\n\tif (node.children && node.children.length > 0) {\n\t\tfor (let childNode of node.children) {\n\t\t\tawait callback(childNode, node);\n\t\t\tconst result = await walkNode(childNode, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function walkObject(obj, callback) {\n\tif(typeof obj === \"object\"){\n\t\tfor (let key of Object.keys(obj)) {\n\t\t\tconst value = obj[key];\n\t\t\tawait callback(key, value, obj);\n\t\t\tconst result = await walkObject(value, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Created by rockyl on 2019-09-26.\n *\n * 导出zeroing的视图\n */\n\nimport {getTree} from \"./psd-tree\";\nimport {walkNode} from \"./utils\";\nimport path from 'path'\nimport Color from 'color'\nimport generateUUID from 'uuid/v4'\nimport hash from 'object-hash';\nimport zlib from 'zlib';\n\nconst relativePosPrefixMap = {\n\tl: {field: 'left',},\n\tt: {field: 'top',},\n\tr: {field: 'right',},\n\tb: {field: 'bottom',},\n\th: {field: 'horizonCenter',},\n\tv: {field: 'verticalCenter',},\n\twp: {field: 'width', },\n\thp: {field: 'height', },\n\tlp: {field: 'left', },\n\ttp: {field: 'top', },\n\trp: {field: 'right', },\n\tbp: {field: 'bottom', },\n};\n\nexport async function execute(psdFile, options) {\n\tconst tree = await getTree(psdFile);\n\n\tlet viewRoot = {\n\t\tname: path.basename(psdFile.name, '.psd'),\n\t\ttype: 'node',\n\t\tuuid: generateUUID(),\n\t};\n\n\tconst assets = [];\n\tconst imageHashMap = {};\n\n\tconst {width: stageWidth, height: stageHeight} = tree;\n\n\tawait walkNode(tree, async function (node, parent) {\n\t\tlet {name} = node;\n\t\tconst {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;\n\t\t//console.log('walk node:', name);\n\t\tlet properties = {\n\t\t\twidth, height, alpha, visible,\n\t\t};\n\n\t\tconst {width: parentWidth, height: parentHeight} = parent;\n\n\t\tif (name.includes('|')) {\n\t\t\ttry {\n\t\t\t\tlet arr = name.split('|');\n\t\t\t\tname = arr[0];\n\t\t\t\tlet paramsStr = arr[1];\n\t\t\t\tlet params = paramsStr.split(';');\n\t\t\t\tlet relativePos = params[0];\n\t\t\t\tif (relativePos) {\n\t\t\t\t\tlet items = relativePos.split(',');\n\t\t\t\t\tfor (let item of items) {\n\t\t\t\t\t\tlet result = item.match(/[a-zA-Z]+/);\n\t\t\t\t\t\tif(!result){\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet prefix = result[0];\n\t\t\t\t\t\tlet mapItem = relativePosPrefixMap[prefix];\n\t\t\t\t\t\tif (mapItem) {\n\t\t\t\t\t\t\tlet {field,} = mapItem;\n\t\t\t\t\t\t\tlet value = item.substr(prefix.length);\n\t\t\t\t\t\t\tlet hasValue = value.length > 0;\n\t\t\t\t\t\t\tlet fieldChar = prefix[0];\n\t\t\t\t\t\t\tif(!hasValue){\n\t\t\t\t\t\t\t\tswitch(fieldChar){\n\t\t\t\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\t\t\t\tvalue = x;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 't':\n\t\t\t\t\t\t\t\t\t\tvalue = y;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'r':\n\t\t\t\t\t\t\t\t\t\tvalue = stageWidth - width;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\tvalue = stageHeight - height;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'h':\n\t\t\t\t\t\t\t\t\t\tvalue = x + width / 2 - stageWidth / 2;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'v':\n\t\t\t\t\t\t\t\t\t\tvalue = y + height / 2 - stageHeight / 2;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet isPercent = prefix.endsWith('p');\n\t\t\t\t\t\t\tif (isPercent) {\n\t\t\t\t\t\t\t\tif(!hasValue){\n\t\t\t\t\t\t\t\t\tswitch(fieldChar){\n\t\t\t\t\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\t\t\t\tcase 'r':\n\t\t\t\t\t\t\t\t\t\t\tvalue /= stageWidth;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase 't':\n\t\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\t\tvalue /= stageHeight;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvalue = Math.floor(value * 100);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvalue += '%';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvalue = parseFloat(value);\n\t\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tproperties[field] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t}\n\n\t\tlet viewNode = {\n\t\t\tname,\n\t\t\tproperties,\n\t\t\tuuid: generateUUID(),\n\t\t};\n\t\tlet dealLater = true;\n\t\tif (x !== 0) {\n\t\t\tproperties.x = x;\n\t\t}\n\t\tif (y !== 0) {\n\t\t\tproperties.y = y;\n\t\t}\n\n\t\tif (typeTool) {\n\t\t\tlet fontInfo = typeTool();\n\t\t\tproperties.text = fontInfo.textValue;\n\t\t\tconst sizes = fontInfo.sizes();\n\t\t\tconst colors = fontInfo.colors();\n\t\t\tproperties.size = sizes ? sizes[0] || 20 : 20;\n\t\t\tlet [r, g, b, a] = colors[0];\n\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n\t\t\tviewNode.type = 'label';\n\t\t\tdealLater = false;\n\t\t} else if (solidColor && layer.vectorMask) {\n\n\t\t\tlet paths = layer.vectorMask().paths;\n\t\t\tif (paths[2].numPoints === 4) {\n\t\t\t\tlet isRect = true;\n\t\t\t\tfor (let i = 3; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].recordType !== 2) {\n\t\t\t\t\t\tisRect = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isRect) {\n\t\t\t\t\tviewNode.type = 'rect';\n\t\t\t\t\tconst {r, g, b} = solidColor();\n\t\t\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;\n\t\t\t\t\tdealLater = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dealLater) {\n\t\t\tif (node.hasOwnProperty('children')) {\n\t\t\t\tviewNode.type = 'node';\n\t\t\t} else {\n\t\t\t\tviewNode.type = 'image';\n\n\t\t\t\tlet uuid = generateUUID();\n\t\t\t\tconst ext = '.png';\n\n\t\t\t\tlet dataUrl;\n\t\t\t\ttry {\n\t\t\t\t\tlet img = node.origin.toPng();\n\t\t\t\t\tdataUrl = img.src;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t}\n\n\t\t\t\tif (dataUrl) {\n\t\t\t\t\tlet base64Data = dataUrl.replace(/^data:image\\/\\w+;base64,/, \"\");\n\t\t\t\t\tlet buffer = new Buffer(base64Data, 'base64');\n\t\t\t\t\tconst fileNameHash = hash(buffer);\n\t\t\t\t\tif (imageHashMap.hasOwnProperty(fileNameHash)) {\n\t\t\t\t\t\tuuid = imageHashMap[fileNameHash];\n\t\t\t\t\t} else {\n\t\t\t\t\t\timageHashMap[fileNameHash] = uuid;\n\t\t\t\t\t\tassets.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\text,\n\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\tbase64Data,\n\t\t\t\t\t\t\thash: fileNameHash,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tproperties.source = 'asset://' + uuid;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet viewParent = parent.view || viewRoot;\n\t\tif (!viewParent.hasOwnProperty('children')) {\n\t\t\tviewParent.children = [];\n\t\t}\n\t\tviewParent.children.push(viewNode);\n\n\t\tnode.view = viewNode;\n\t});\n\n\tlet data = {\n\t\tview: viewRoot,\n\t\tassets,\n\t};\n\n\tlet dataString = JSON.stringify(data);\n\n\tlet buf = new Buffer(dataString);\n\treturn await new Promise((resolve, reject) => {\n\t\tzlib.gzip(buf, function (err, res) {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tconsole.log(res.length);\n\t\t\t\tresolve(res);\n\t\t\t}\n\t\t})\n\t})\n}\n"],"names":[],"mappings":"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"}
\ No newline at end of file \ No newline at end of file
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('path'), require('color'), require('uuid/v4'), require('object-hash'), require('zlib')) : typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('path'), require('color'), require('uuid/v4'), require('object-hash'), require('zlib')) :
typeof define === 'function' && define.amd ? define(['exports', 'path', 'color', 'uuid/v4', 'object-hash', 'zlib'], factory) : typeof define === 'function' && define.amd ? define(['exports', 'path', 'color', 'uuid/v4', 'object-hash', 'zlib'], factory) :
(global = global || self, factory(global['psd-parse-web'] = {}, global.path, global.Color, global.generateUUID, global.hash, global.zlib)); (global = global || self, factory(global['psd-parse-web'] = {}, global.path, global.color, global.generateUUID, global.hash, global.zlib));
}(this, function (exports, path, Color, generateUUID, hash, zlib) { 'use strict'; }(this, function (exports, path, color, generateUUID, hash, zlib) { 'use strict';
path = path && path.hasOwnProperty('default') ? path['default'] : path; path = path && path.hasOwnProperty('default') ? path['default'] : path;
Color = Color && Color.hasOwnProperty('default') ? Color['default'] : Color; color = color && color.hasOwnProperty('default') ? color['default'] : color;
generateUUID = generateUUID && generateUUID.hasOwnProperty('default') ? generateUUID['default'] : generateUUID; generateUUID = generateUUID && generateUUID.hasOwnProperty('default') ? generateUUID['default'] : generateUUID;
hash = hash && hash.hasOwnProperty('default') ? hash['default'] : hash; hash = hash && hash.hasOwnProperty('default') ? hash['default'] : hash;
zlib = zlib && zlib.hasOwnProperty('default') ? zlib['default'] : zlib; zlib = zlib && zlib.hasOwnProperty('default') ? zlib['default'] : zlib;
...@@ -78,8 +78,12 @@ ...@@ -78,8 +78,12 @@
b: {field: 'bottom',}, b: {field: 'bottom',},
h: {field: 'horizonCenter',}, h: {field: 'horizonCenter',},
v: {field: 'verticalCenter',}, v: {field: 'verticalCenter',},
wp: {field: 'width', isPercent: true}, wp: {field: 'width', },
hp: {field: 'height', isPercent: true}, hp: {field: 'height', },
lp: {field: 'left', },
tp: {field: 'top', },
rp: {field: 'right', },
bp: {field: 'bottom', },
}; };
async function execute(psdFile, options) { async function execute(psdFile, options) {
...@@ -94,6 +98,8 @@ ...@@ -94,6 +98,8 @@
const assets = []; const assets = [];
const imageHashMap = {}; const imageHashMap = {};
const {width: stageWidth, height: stageHeight} = tree;
await walkNode(tree, async function (node, parent) { await walkNode(tree, async function (node, parent) {
let {name} = node; let {name} = node;
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node; const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
...@@ -119,9 +125,47 @@ ...@@ -119,9 +125,47 @@
let prefix = result[0]; let prefix = result[0];
let mapItem = relativePosPrefixMap[prefix]; let mapItem = relativePosPrefixMap[prefix];
if (mapItem) { if (mapItem) {
const {field, isPercent} = mapItem; let {field,} = mapItem;
let value = item.substr(prefix.length); let value = item.substr(prefix.length);
let hasValue = value.length > 0;
let fieldChar = prefix[0];
if(!hasValue){
switch(fieldChar){
case 'l':
value = x;
break;
case 't':
value = y;
break;
case 'r':
value = stageWidth - width;
break;
case 'b':
value = stageHeight - height;
break;
case 'h':
value = x + width / 2 - stageWidth / 2;
break;
case 'v':
value = y + height / 2 - stageHeight / 2;
break;
}
}
let isPercent = prefix.endsWith('p');
if (isPercent) { if (isPercent) {
if(!hasValue){
switch(fieldChar){
case 'l':
case 'r':
value /= stageWidth;
break;
case 't':
case 'b':
value /= stageHeight;
break;
}
value = Math.floor(value * 100);
}
value += '%'; value += '%';
} else { } else {
value = parseFloat(value); value = parseFloat(value);
...@@ -162,8 +206,6 @@ ...@@ -162,8 +206,6 @@
viewNode.type = 'label'; viewNode.type = 'label';
dealLater = false; dealLater = false;
} else if (solidColor && layer.vectorMask) { } else if (solidColor && layer.vectorMask) {
const {r, g, b} = solidColor();
let color = Color({r, g, b});
let paths = layer.vectorMask().paths; let paths = layer.vectorMask().paths;
if (paths[2].numPoints === 4) { if (paths[2].numPoints === 4) {
...@@ -176,7 +218,8 @@ ...@@ -176,7 +218,8 @@
} }
if (isRect) { if (isRect) {
viewNode.type = 'rect'; viewNode.type = 'rect';
properties.fillColor = '#' + color.rgbNumber().toString(16); const {r, g, b} = solidColor();
properties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;
dealLater = false; dealLater = false;
} }
} }
......
{"version":3,"file":"index.umd.js","sources":["../src/psd-tree.js","../src/utils.js","../src/zeroing.js"],"sourcesContent":["/**\n * Created by rockyl on 2019-08-09.\n */\n\nconst PSD = window['require']('psd');\n\nexport async function getTree(file) {\n\tlet psd = await PSD.fromDroppedFile(file);\n\n\tconst root = {};\n\twalk(psd.tree(), root);\n\n\treturn root;\n}\n\nfunction walk(psNode, dataNode) {\n\tconst {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};\n\tconst {left, top, width, height, name, layer: {opacity, visible}} = psNode;\n\tconst x = left - pLeft;\n\tconst y = top - pTop;\n\n\tObject.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});\n\tif (psNode.children() && psNode.children().length > 0){\n\t\tdataNode.children = [];\n\t}\n\n\tlet children = psNode.children();\n\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\tconst childPsNode = children[i];\n\n\t\tconst childDataNode = {};\n\t\tdataNode.children.push(childDataNode);\n\t\twalk(childPsNode, childDataNode)\n\t}\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nexport async function walkNode(node, callback, includeSelf = false) {\n\tif (includeSelf) {\n\t\tawait callback(node, null);\n\t}\n\tif (node.children && node.children.length > 0) {\n\t\tfor (let childNode of node.children) {\n\t\t\tawait callback(childNode, node);\n\t\t\tconst result = await walkNode(childNode, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function walkObject(obj, callback) {\n\tif(typeof obj === \"object\"){\n\t\tfor (let key of Object.keys(obj)) {\n\t\t\tconst value = obj[key];\n\t\t\tawait callback(key, value, obj);\n\t\t\tconst result = await walkObject(value, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Created by rockyl on 2019-09-26.\n *\n * 导出zeroing的视图\n */\n\nimport {getTree} from \"./psd-tree\";\nimport {walkNode} from \"./utils\";\nimport path from 'path'\nimport Color from 'color'\nimport generateUUID from 'uuid/v4'\nimport hash from 'object-hash';\nimport zlib from 'zlib';\n\nconst relativePosPrefixMap = {\n\tl: {field: 'left',},\n\tt: {field: 'top',},\n\tr: {field: 'right',},\n\tb: {field: 'bottom',},\n\th: {field: 'horizonCenter',},\n\tv: {field: 'verticalCenter',},\n\twp: {field: 'width', isPercent: true},\n\thp: {field: 'height', isPercent: true},\n};\n\nexport async function execute(psdFile, options) {\n\tconst tree = await getTree(psdFile);\n\n\tlet viewRoot = {\n\t\tname: path.basename(psdFile.name, '.psd'),\n\t\ttype: 'node',\n\t\tuuid: generateUUID(),\n\t};\n\n\tconst assets = [];\n\tconst imageHashMap = {};\n\n\tawait walkNode(tree, async function (node, parent) {\n\t\tlet {name} = node;\n\t\tconst {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;\n\t\t//console.log('walk node:', name);\n\t\tlet properties = {\n\t\t\twidth, height, alpha, visible,\n\t\t};\n\n\t\tif (name.includes('|')) {\n\t\t\ttry {\n\t\t\t\tlet arr = name.split('|');\n\t\t\t\tname = arr[0];\n\t\t\t\tlet paramsStr = arr[1];\n\t\t\t\tlet params = paramsStr.split(';');\n\t\t\t\tlet relativePos = params[0];\n\t\t\t\tif (relativePos) {\n\t\t\t\t\tlet items = relativePos.split(',');\n\t\t\t\t\tfor (let item of items) {\n\t\t\t\t\t\tlet result = item.match(/[a-zA-Z]+/);\n\t\t\t\t\t\tif(!result){\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet prefix = result[0];\n\t\t\t\t\t\tlet mapItem = relativePosPrefixMap[prefix];\n\t\t\t\t\t\tif (mapItem) {\n\t\t\t\t\t\t\tconst {field, isPercent} = mapItem;\n\t\t\t\t\t\t\tlet value = item.substr(prefix.length);\n\t\t\t\t\t\t\tif (isPercent) {\n\t\t\t\t\t\t\t\tvalue += '%';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvalue = parseFloat(value);\n\t\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tproperties[field] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t}\n\n\t\tlet viewNode = {\n\t\t\tname,\n\t\t\tproperties,\n\t\t\tuuid: generateUUID(),\n\t\t};\n\t\tlet dealLater = true;\n\t\tif (x !== 0) {\n\t\t\tproperties.x = x;\n\t\t}\n\t\tif (y !== 0) {\n\t\t\tproperties.y = y;\n\t\t}\n\n\t\tif (typeTool) {\n\t\t\tlet fontInfo = typeTool();\n\t\t\tproperties.text = fontInfo.textValue;\n\t\t\tconst sizes = fontInfo.sizes();\n\t\t\tconst colors = fontInfo.colors();\n\t\t\tproperties.size = sizes ? sizes[0] || 20 : 20;\n\t\t\tlet [r, g, b, a] = colors[0];\n\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n\t\t\tviewNode.type = 'label';\n\t\t\tdealLater = false;\n\t\t} else if (solidColor && layer.vectorMask) {\n\t\t\tconst {r, g, b} = solidColor();\n\t\t\tlet color = Color({r, g, b});\n\n\t\t\tlet paths = layer.vectorMask().paths;\n\t\t\tif (paths[2].numPoints === 4) {\n\t\t\t\tlet isRect = true;\n\t\t\t\tfor (let i = 3; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].recordType !== 2) {\n\t\t\t\t\t\tisRect = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isRect) {\n\t\t\t\t\tviewNode.type = 'rect';\n\t\t\t\t\tproperties.fillColor = '#' + color.rgbNumber().toString(16);\n\t\t\t\t\tdealLater = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dealLater) {\n\t\t\tif (node.hasOwnProperty('children')) {\n\t\t\t\tviewNode.type = 'node';\n\t\t\t} else {\n\t\t\t\tviewNode.type = 'image';\n\n\t\t\t\tlet uuid = generateUUID();\n\t\t\t\tconst ext = '.png';\n\n\t\t\t\tlet dataUrl;\n\t\t\t\ttry {\n\t\t\t\t\tlet img = node.origin.toPng();\n\t\t\t\t\tdataUrl = img.src;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t}\n\n\t\t\t\tif (dataUrl) {\n\t\t\t\t\tlet base64Data = dataUrl.replace(/^data:image\\/\\w+;base64,/, \"\");\n\t\t\t\t\tlet buffer = new Buffer(base64Data, 'base64');\n\t\t\t\t\tconst fileNameHash = hash(buffer);\n\t\t\t\t\tif (imageHashMap.hasOwnProperty(fileNameHash)) {\n\t\t\t\t\t\tuuid = imageHashMap[fileNameHash];\n\t\t\t\t\t} else {\n\t\t\t\t\t\timageHashMap[fileNameHash] = uuid;\n\t\t\t\t\t\tassets.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\text,\n\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\tbase64Data,\n\t\t\t\t\t\t\thash: fileNameHash,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tproperties.source = 'asset://' + uuid;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet viewParent = parent.view || viewRoot;\n\t\tif (!viewParent.hasOwnProperty('children')) {\n\t\t\tviewParent.children = [];\n\t\t}\n\t\tviewParent.children.push(viewNode);\n\n\t\tnode.view = viewNode;\n\t});\n\n\tlet data = {\n\t\tview: viewRoot,\n\t\tassets,\n\t};\n\n\tlet dataString = JSON.stringify(data);\n\n\tlet buf = new Buffer(dataString);\n\treturn await new Promise((resolve, reject) => {\n\t\tzlib.gzip(buf, function (err, res) {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tconsole.log(res.length);\n\t\t\t\tresolve(res);\n\t\t\t}\n\t\t})\n\t})\n}\n"],"names":[],"mappings":"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"} {"version":3,"file":"index.umd.js","sources":["../src/psd-tree.js","../src/utils.js","../src/zeroing.js"],"sourcesContent":["/**\n * Created by rockyl on 2019-08-09.\n */\n\nconst PSD = window['require']('psd');\n\nexport async function getTree(file) {\n\tlet psd = await PSD.fromDroppedFile(file);\n\n\tconst root = {};\n\twalk(psd.tree(), root);\n\n\treturn root;\n}\n\nfunction walk(psNode, dataNode) {\n\tconst {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};\n\tconst {left, top, width, height, name, layer: {opacity, visible}} = psNode;\n\tconst x = left - pLeft;\n\tconst y = top - pTop;\n\n\tObject.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});\n\tif (psNode.children() && psNode.children().length > 0){\n\t\tdataNode.children = [];\n\t}\n\n\tlet children = psNode.children();\n\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\tconst childPsNode = children[i];\n\n\t\tconst childDataNode = {};\n\t\tdataNode.children.push(childDataNode);\n\t\twalk(childPsNode, childDataNode)\n\t}\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nexport async function walkNode(node, callback, includeSelf = false) {\n\tif (includeSelf) {\n\t\tawait callback(node, null);\n\t}\n\tif (node.children && node.children.length > 0) {\n\t\tfor (let childNode of node.children) {\n\t\t\tawait callback(childNode, node);\n\t\t\tconst result = await walkNode(childNode, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function walkObject(obj, callback) {\n\tif(typeof obj === \"object\"){\n\t\tfor (let key of Object.keys(obj)) {\n\t\t\tconst value = obj[key];\n\t\t\tawait callback(key, value, obj);\n\t\t\tconst result = await walkObject(value, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Created by rockyl on 2019-09-26.\n *\n * 导出zeroing的视图\n */\n\nimport {getTree} from \"./psd-tree\";\nimport {walkNode} from \"./utils\";\nimport path from 'path'\nimport Color from 'color'\nimport generateUUID from 'uuid/v4'\nimport hash from 'object-hash';\nimport zlib from 'zlib';\n\nconst relativePosPrefixMap = {\n\tl: {field: 'left',},\n\tt: {field: 'top',},\n\tr: {field: 'right',},\n\tb: {field: 'bottom',},\n\th: {field: 'horizonCenter',},\n\tv: {field: 'verticalCenter',},\n\twp: {field: 'width', },\n\thp: {field: 'height', },\n\tlp: {field: 'left', },\n\ttp: {field: 'top', },\n\trp: {field: 'right', },\n\tbp: {field: 'bottom', },\n};\n\nexport async function execute(psdFile, options) {\n\tconst tree = await getTree(psdFile);\n\n\tlet viewRoot = {\n\t\tname: path.basename(psdFile.name, '.psd'),\n\t\ttype: 'node',\n\t\tuuid: generateUUID(),\n\t};\n\n\tconst assets = [];\n\tconst imageHashMap = {};\n\n\tconst {width: stageWidth, height: stageHeight} = tree;\n\n\tawait walkNode(tree, async function (node, parent) {\n\t\tlet {name} = node;\n\t\tconst {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;\n\t\t//console.log('walk node:', name);\n\t\tlet properties = {\n\t\t\twidth, height, alpha, visible,\n\t\t};\n\n\t\tconst {width: parentWidth, height: parentHeight} = parent;\n\n\t\tif (name.includes('|')) {\n\t\t\ttry {\n\t\t\t\tlet arr = name.split('|');\n\t\t\t\tname = arr[0];\n\t\t\t\tlet paramsStr = arr[1];\n\t\t\t\tlet params = paramsStr.split(';');\n\t\t\t\tlet relativePos = params[0];\n\t\t\t\tif (relativePos) {\n\t\t\t\t\tlet items = relativePos.split(',');\n\t\t\t\t\tfor (let item of items) {\n\t\t\t\t\t\tlet result = item.match(/[a-zA-Z]+/);\n\t\t\t\t\t\tif(!result){\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet prefix = result[0];\n\t\t\t\t\t\tlet mapItem = relativePosPrefixMap[prefix];\n\t\t\t\t\t\tif (mapItem) {\n\t\t\t\t\t\t\tlet {field,} = mapItem;\n\t\t\t\t\t\t\tlet value = item.substr(prefix.length);\n\t\t\t\t\t\t\tlet hasValue = value.length > 0;\n\t\t\t\t\t\t\tlet fieldChar = prefix[0];\n\t\t\t\t\t\t\tif(!hasValue){\n\t\t\t\t\t\t\t\tswitch(fieldChar){\n\t\t\t\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\t\t\t\tvalue = x;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 't':\n\t\t\t\t\t\t\t\t\t\tvalue = y;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'r':\n\t\t\t\t\t\t\t\t\t\tvalue = stageWidth - width;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\tvalue = stageHeight - height;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'h':\n\t\t\t\t\t\t\t\t\t\tvalue = x + width / 2 - stageWidth / 2;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'v':\n\t\t\t\t\t\t\t\t\t\tvalue = y + height / 2 - stageHeight / 2;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet isPercent = prefix.endsWith('p');\n\t\t\t\t\t\t\tif (isPercent) {\n\t\t\t\t\t\t\t\tif(!hasValue){\n\t\t\t\t\t\t\t\t\tswitch(fieldChar){\n\t\t\t\t\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\t\t\t\tcase 'r':\n\t\t\t\t\t\t\t\t\t\t\tvalue /= stageWidth;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase 't':\n\t\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\t\tvalue /= stageHeight;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvalue = Math.floor(value * 100);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvalue += '%';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvalue = parseFloat(value);\n\t\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tproperties[field] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t}\n\n\t\tlet viewNode = {\n\t\t\tname,\n\t\t\tproperties,\n\t\t\tuuid: generateUUID(),\n\t\t};\n\t\tlet dealLater = true;\n\t\tif (x !== 0) {\n\t\t\tproperties.x = x;\n\t\t}\n\t\tif (y !== 0) {\n\t\t\tproperties.y = y;\n\t\t}\n\n\t\tif (typeTool) {\n\t\t\tlet fontInfo = typeTool();\n\t\t\tproperties.text = fontInfo.textValue;\n\t\t\tconst sizes = fontInfo.sizes();\n\t\t\tconst colors = fontInfo.colors();\n\t\t\tproperties.size = sizes ? sizes[0] || 20 : 20;\n\t\t\tlet [r, g, b, a] = colors[0];\n\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n\t\t\tviewNode.type = 'label';\n\t\t\tdealLater = false;\n\t\t} else if (solidColor && layer.vectorMask) {\n\n\t\t\tlet paths = layer.vectorMask().paths;\n\t\t\tif (paths[2].numPoints === 4) {\n\t\t\t\tlet isRect = true;\n\t\t\t\tfor (let i = 3; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].recordType !== 2) {\n\t\t\t\t\t\tisRect = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isRect) {\n\t\t\t\t\tviewNode.type = 'rect';\n\t\t\t\t\tconst {r, g, b} = solidColor();\n\t\t\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;\n\t\t\t\t\tdealLater = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dealLater) {\n\t\t\tif (node.hasOwnProperty('children')) {\n\t\t\t\tviewNode.type = 'node';\n\t\t\t} else {\n\t\t\t\tviewNode.type = 'image';\n\n\t\t\t\tlet uuid = generateUUID();\n\t\t\t\tconst ext = '.png';\n\n\t\t\t\tlet dataUrl;\n\t\t\t\ttry {\n\t\t\t\t\tlet img = node.origin.toPng();\n\t\t\t\t\tdataUrl = img.src;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t}\n\n\t\t\t\tif (dataUrl) {\n\t\t\t\t\tlet base64Data = dataUrl.replace(/^data:image\\/\\w+;base64,/, \"\");\n\t\t\t\t\tlet buffer = new Buffer(base64Data, 'base64');\n\t\t\t\t\tconst fileNameHash = hash(buffer);\n\t\t\t\t\tif (imageHashMap.hasOwnProperty(fileNameHash)) {\n\t\t\t\t\t\tuuid = imageHashMap[fileNameHash];\n\t\t\t\t\t} else {\n\t\t\t\t\t\timageHashMap[fileNameHash] = uuid;\n\t\t\t\t\t\tassets.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\text,\n\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\tbase64Data,\n\t\t\t\t\t\t\thash: fileNameHash,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tproperties.source = 'asset://' + uuid;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet viewParent = parent.view || viewRoot;\n\t\tif (!viewParent.hasOwnProperty('children')) {\n\t\t\tviewParent.children = [];\n\t\t}\n\t\tviewParent.children.push(viewNode);\n\n\t\tnode.view = viewNode;\n\t});\n\n\tlet data = {\n\t\tview: viewRoot,\n\t\tassets,\n\t};\n\n\tlet dataString = JSON.stringify(data);\n\n\tlet buf = new Buffer(dataString);\n\treturn await new Promise((resolve, reject) => {\n\t\tzlib.gzip(buf, function (err, res) {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tconsole.log(res.length);\n\t\t\t\tresolve(res);\n\t\t\t}\n\t\t})\n\t})\n}\n"],"names":[],"mappings":";;;;;;;;;;;;CAAA;CACA;CACA;;CAEA,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;;AAErC,CAAO,eAAe,OAAO,CAAC,IAAI,EAAE;CACpC,CAAC,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;;CAE3C,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;CACjB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;;CAExB,CAAC,OAAO,IAAI,CAAC;CACb,CAAC;;CAED,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;CAChC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;CAC/D,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;CAC5E,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;CACxB,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;;CAEtB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3J,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;CACvD,EAAE,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;CACzB,EAAE;;CAEF,CAAC,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;CAClC,CAAC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;CAChD,EAAE,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;CAElC,EAAE,MAAM,aAAa,GAAG,EAAE,CAAC;CAC3B,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;CACxC,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,EAAC;CAClC,EAAE;CACF,CAAC;;CClCD;CACA;CACA;;AAEA,CAAO,eAAe,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,GAAG,KAAK,EAAE;CACpE,CAAC,IAAI,WAAW,EAAE;CAClB,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;CAC7B,EAAE;CACF,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;CAChD,EAAE,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;CACvC,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;CACnC,GAAG,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;CACtD,GAAG,IAAI,MAAM,KAAK,IAAI,EAAE;CACxB,IAAI,MAAM;CACV,IAAI;CACJ,GAAG;CACH,EAAE;CACF,CAAC;;CCjBD;CACA;CACA;CACA;CACA;AACA,AAQA;CACA,MAAM,oBAAoB,GAAG;CAC7B,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE;CACpB,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE;CACnB,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE;CACrB,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE;CACtB,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE;CAC7B,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE;CAC9B,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG;CACvB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG;CACxB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG;CACtB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG;CACrB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG;CACvB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG;CACxB,CAAC,CAAC;;AAEF,CAAO,eAAe,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;CAChD,CAAC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;;CAErC,CAAC,IAAI,QAAQ,GAAG;CAChB,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;CAC3C,EAAE,IAAI,EAAE,MAAM;CACd,EAAE,IAAI,EAAE,YAAY,EAAE;CACtB,EAAE,CAAC;;CAEH,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;CACnB,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;;CAEzB,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;;CAEvD,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,gBAAgB,IAAI,EAAE,MAAM,EAAE;CACpD,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACpB,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACrG;CACA,EAAE,IAAI,UAAU,GAAG;CACnB,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAChC,GAAG,CAAC;AACJ,AAEA;CACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;CAC1B,GAAG,IAAI;CACP,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAC9B,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;CAClB,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;CAC3B,IAAI,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CACtC,IAAI,IAAI,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CAChC,IAAI,IAAI,WAAW,EAAE;CACrB,KAAK,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CACxC,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;CAC7B,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;CAC3C,MAAM,GAAG,CAAC,MAAM,CAAC;CACjB,OAAO,SAAS;CAChB,OAAO;CACP,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CAC7B,MAAM,IAAI,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;CACjD,MAAM,IAAI,OAAO,EAAE;CACnB,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC;CAC9B,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CAC9C,OAAO,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;CACvC,OAAO,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CACjC,OAAO,GAAG,CAAC,QAAQ,CAAC;CACpB,QAAQ,OAAO,SAAS;CACxB,SAAS,KAAK,GAAG;CACjB,UAAU,KAAK,GAAG,CAAC,CAAC;CACpB,UAAU,MAAM;CAChB,SAAS,KAAK,GAAG;CACjB,UAAU,KAAK,GAAG,CAAC,CAAC;CACpB,UAAU,MAAM;CAChB,SAAS,KAAK,GAAG;CACjB,UAAU,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;CACrC,UAAU,MAAM;CAChB,SAAS,KAAK,GAAG;CACjB,UAAU,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;CACvC,UAAU,MAAM;CAChB,SAAS,KAAK,GAAG;CACjB,UAAU,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;CACjD,UAAU,MAAM;CAChB,SAAS,KAAK,GAAG;CACjB,UAAU,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;CACnD,UAAU,MAAM;CAChB,SAAS;CACT,QAAQ;CACR,OAAO,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;CAC5C,OAAO,IAAI,SAAS,EAAE;CACtB,QAAQ,GAAG,CAAC,QAAQ,CAAC;CACrB,SAAS,OAAO,SAAS;CACzB,UAAU,KAAK,GAAG,CAAC;CACnB,UAAU,KAAK,GAAG;CAClB,WAAW,KAAK,IAAI,UAAU,CAAC;CAC/B,WAAW,MAAM;CACjB,UAAU,KAAK,GAAG,CAAC;CACnB,UAAU,KAAK,GAAG;CAClB,WAAW,KAAK,IAAI,WAAW,CAAC;CAChC,WAAW,MAAM;CACjB,UAAU;CACV,SAAS,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;CACzC,SAAS;CACT,QAAQ,KAAK,IAAI,GAAG,CAAC;CACrB,QAAQ,MAAM;CACd,QAAQ,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;CAClC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;CAC1B,SAAS,KAAK,GAAG,CAAC,CAAC;CACnB,SAAS;CACT,QAAQ;CACR,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;CACjC,OAAO;CACP,MAAM;CACN,KAAK;CACL,IAAI,OAAO,CAAC,EAAE;CACd,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACnB,IAAI;CACJ,GAAG;;CAEH,EAAE,IAAI,QAAQ,GAAG;CACjB,GAAG,IAAI;CACP,GAAG,UAAU;CACb,GAAG,IAAI,EAAE,YAAY,EAAE;CACvB,GAAG,CAAC;CACJ,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC;CACvB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;CACf,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;CACpB,GAAG;CACH,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;CACf,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;CACpB,GAAG;;CAEH,EAAE,IAAI,QAAQ,EAAE;CAChB,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;CAC7B,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;CACxC,GAAG,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;CAClC,GAAG,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;CACpC,GAAG,UAAU,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;CACjD,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CAChC,GAAG,UAAU,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;CAC/D,GAAG,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;CAC3B,GAAG,SAAS,GAAG,KAAK,CAAC;CACrB,GAAG,MAAM,IAAI,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE;;CAE7C,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;CACxC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE;CACjC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC;CACtB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;CAC3C,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,EAAE;CACpC,MAAM,MAAM,GAAG,KAAK,CAAC;CACrB,MAAM,MAAM;CACZ,MAAM;CACN,KAAK;CACL,IAAI,IAAI,MAAM,EAAE;CAChB,KAAK,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;CAC5B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC;CACpC,KAAK,UAAU,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;CACxD,KAAK,SAAS,GAAG,KAAK,CAAC;CACvB,KAAK;CACL,IAAI;CACJ,GAAG;;CAEH,EAAE,IAAI,SAAS,EAAE;CACjB,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;CACxC,IAAI,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;CAC3B,IAAI,MAAM;CACV,IAAI,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;;CAE5B,IAAI,IAAI,IAAI,GAAG,YAAY,EAAE,CAAC;CAC9B,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC;;CAEvB,IAAI,IAAI,OAAO,CAAC;CAChB,IAAI,IAAI;CACR,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;CACnC,KAAK,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;CACvB,KAAK,CAAC,OAAO,CAAC,EAAE;;CAEhB,KAAK;;CAEL,IAAI,IAAI,OAAO,EAAE;CACjB,KAAK,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;CACtE,KAAK,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;CACnD,KAAK,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;CACvC,KAAK,IAAI,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;CACpD,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;CACxC,MAAM,MAAM;CACZ,MAAM,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CACxC,MAAM,MAAM,CAAC,IAAI,CAAC;CAClB,OAAO,IAAI;CACX,OAAO,GAAG;CACV,OAAO,IAAI;CACX,OAAO,UAAU;CACjB,OAAO,IAAI,EAAE,YAAY;CACzB,OAAO,CAAC,CAAC;CACT,MAAM;;CAEN,KAAK,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;CAC3C,KAAK;CACL,IAAI;CACJ,GAAG;;CAEH,EAAE,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;CAC3C,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;CAC9C,GAAG,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC;CAC5B,GAAG;CACH,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;CAErC,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;CACvB,EAAE,CAAC,CAAC;;CAEJ,CAAC,IAAI,IAAI,GAAG;CACZ,EAAE,IAAI,EAAE,QAAQ;CAChB,EAAE,MAAM;CACR,EAAE,CAAC;;CAEH,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;CAEvC,CAAC,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;CAClC,CAAC,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;CAC/C,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,GAAG,EAAE;CACrC,GAAG,IAAI,GAAG,EAAE;CACZ,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;CAChB,IAAI,MAAM;CACV,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;CACjB,IAAI;CACJ,GAAG,EAAC;CACJ,EAAE,CAAC;CACH,CAAC;;;;;;;;;;;;;"}
\ No newline at end of file \ No newline at end of file
...@@ -19,8 +19,12 @@ const relativePosPrefixMap = { ...@@ -19,8 +19,12 @@ const relativePosPrefixMap = {
b: {field: 'bottom',}, b: {field: 'bottom',},
h: {field: 'horizonCenter',}, h: {field: 'horizonCenter',},
v: {field: 'verticalCenter',}, v: {field: 'verticalCenter',},
wp: {field: 'width', isPercent: true}, wp: {field: 'width', },
hp: {field: 'height', isPercent: true}, hp: {field: 'height', },
lp: {field: 'left', },
tp: {field: 'top', },
rp: {field: 'right', },
bp: {field: 'bottom', },
}; };
export async function execute(psdFile, options) { export async function execute(psdFile, options) {
...@@ -35,6 +39,8 @@ export async function execute(psdFile, options) { ...@@ -35,6 +39,8 @@ export async function execute(psdFile, options) {
const assets = []; const assets = [];
const imageHashMap = {}; const imageHashMap = {};
const {width: stageWidth, height: stageHeight} = tree;
await walkNode(tree, async function (node, parent) { await walkNode(tree, async function (node, parent) {
let {name} = node; let {name} = node;
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node; const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
...@@ -43,6 +49,8 @@ export async function execute(psdFile, options) { ...@@ -43,6 +49,8 @@ export async function execute(psdFile, options) {
width, height, alpha, visible, width, height, alpha, visible,
}; };
const {width: parentWidth, height: parentHeight} = parent;
if (name.includes('|')) { if (name.includes('|')) {
try { try {
let arr = name.split('|'); let arr = name.split('|');
...@@ -60,9 +68,47 @@ export async function execute(psdFile, options) { ...@@ -60,9 +68,47 @@ export async function execute(psdFile, options) {
let prefix = result[0]; let prefix = result[0];
let mapItem = relativePosPrefixMap[prefix]; let mapItem = relativePosPrefixMap[prefix];
if (mapItem) { if (mapItem) {
const {field, isPercent} = mapItem; let {field,} = mapItem;
let value = item.substr(prefix.length); let value = item.substr(prefix.length);
let hasValue = value.length > 0;
let fieldChar = prefix[0];
if(!hasValue){
switch(fieldChar){
case 'l':
value = x;
break;
case 't':
value = y;
break;
case 'r':
value = stageWidth - width;
break;
case 'b':
value = stageHeight - height;
break;
case 'h':
value = x + width / 2 - stageWidth / 2;
break;
case 'v':
value = y + height / 2 - stageHeight / 2;
break;
}
}
let isPercent = prefix.endsWith('p');
if (isPercent) { if (isPercent) {
if(!hasValue){
switch(fieldChar){
case 'l':
case 'r':
value /= stageWidth;
break;
case 't':
case 'b':
value /= stageHeight;
break;
}
value = Math.floor(value * 100);
}
value += '%'; value += '%';
} else { } else {
value = parseFloat(value); value = parseFloat(value);
...@@ -103,8 +149,6 @@ export async function execute(psdFile, options) { ...@@ -103,8 +149,6 @@ export async function execute(psdFile, options) {
viewNode.type = 'label'; viewNode.type = 'label';
dealLater = false; dealLater = false;
} else if (solidColor && layer.vectorMask) { } else if (solidColor && layer.vectorMask) {
const {r, g, b} = solidColor();
let color = Color({r, g, b});
let paths = layer.vectorMask().paths; let paths = layer.vectorMask().paths;
if (paths[2].numPoints === 4) { if (paths[2].numPoints === 4) {
...@@ -117,7 +161,8 @@ export async function execute(psdFile, options) { ...@@ -117,7 +161,8 @@ export async function execute(psdFile, options) {
} }
if (isRect) { if (isRect) {
viewNode.type = 'rect'; viewNode.type = 'rect';
properties.fillColor = '#' + color.rgbNumber().toString(16); const {r, g, b} = solidColor();
properties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;
dealLater = false; dealLater = false;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment