Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
psd-parse-web
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
劳工
psd-parse-web
Commits
ce8ed08c
Commit
ce8ed08c
authored
May 22, 2020
by
rockyl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复色块颜色值的问题,
增加相对坐标的解析
parent
9969fdc8
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
206 additions
and
32 deletions
+206
-32
index.es.js
dist/index.es.js
+50
-7
index.es.js.map
dist/index.es.js.map
+1
-1
index.js
dist/index.js
+50
-7
index.js.map
dist/index.js.map
+1
-1
index.umd.js
dist/index.umd.js
+52
-9
index.umd.js.map
dist/index.umd.js.map
+1
-1
zeroing.js
src/zeroing.js
+51
-6
No files found.
dist/index.es.js
View file @
ce8ed08c
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
;
}
}
}
}
...
...
dist/index.es.js.map
View file @
ce8ed08c
{
"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\n
const PSD = window['require']('psd');
\n\n
export async function getTree(file) {\n
\t
let psd = await PSD.fromDroppedFile(file);
\n\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (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\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import hash from 'object-hash';
\n
import zlib from 'zlib';
\n\n
const relativePosPrefixMap = {\n
\t
l: {field: 'left',},
\n\t
t: {field: 'top',},
\n\t
r: {field: 'right',},
\n\t
b: {field: 'bottom',},
\n\t
h: {field: 'horizonCenter',},
\n\t
v: {field: 'verticalCenter',},
\n\t
wp: {field: 'width', isPercent: true},
\n\t
hp: {field: 'height', isPercent: true},
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile.name, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\t
const imageHashMap = {};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
let
{
name
}
= node;
\n\t\t
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
\n\t\t
//console.log('walk node:', name);
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\n\t\t
if (name.includes('|')) {\n
\t\t\t
try {\n
\t\t\t\t
let arr = name.split('|');
\n\t\t\t\t
name = arr[0];
\n\t\t\t\t
let paramsStr = arr[1];
\n\t\t\t\t
let params = paramsStr.split(';');
\n\t\t\t\t
let relativePos = params[0];
\n\t\t\t\t
if (relativePos) {\n
\t\t\t\t\t
let items = relativePos.split(',');
\n\t\t\t\t\t
for (let item of items) {\n
\t\t\t\t\t\t
let result = item.match(/[a-zA-Z]+/);
\n\t\t\t\t\t\t
if(!result)
{
\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
let prefix = result[0];
\n\t\t\t\t\t\t
let mapItem = relativePosPrefixMap[prefix];
\n\t\t\t\t\t\t
if (mapItem) {\n
\t\t\t\t\t\t\t
const {field, isPercent} = mapItem;
\n\t\t\t\t\t\t\t
let value = item.substr(prefix.length);
\n\t\t\t\t\t\t\t
if (isPercent) {\n
\t\t\t\t\t\t\t\t
value += '%';
\n\t\t\t\t\t\t\t
} else {\n
\t\t\t\t\t\t\t\t
value = parseFloat(value);
\n\t\t\t\t\t\t\t\t
if (isNaN(value)) {\n
\t\t\t\t\t\t\t\t\t
value = 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\t
properties[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\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
let dealLater = true;
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
const sizes = fontInfo.sizes();
\n\t\t\t
const colors = fontInfo.colors();
\n\t\t\t
properties.size = sizes ? sizes[0] || 20 : 20;
\n\t\t\t
let [r, g, b, a] = colors[0];
\n\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
\n\t\t\t
viewNode.type = 'label';
\n\t\t\t
dealLater = false;
\n\t\t
} else if (solidColor && layer.vectorMask) {\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
let paths = layer.vectorMask().paths;
\n\t\t\t
if (paths[2].numPoints === 4) {\n
\t\t\t\t
let isRect = true;
\n\t\t\t\t
for (let i = 3; i < paths.length; i++) {\n
\t\t\t\t\t
if (paths[i].recordType !== 2) {\n
\t\t\t\t\t\t
isRect = false;
\n\t\t\t\t\t\t
break;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t\t
if (isRect) {\n
\t\t\t\t\t
viewNode.type = 'rect';
\n\t\t\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t\t\t\t
dealLater = false;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
if (dealLater) {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
let uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
let dataUrl;
\n\t\t\t\t
try {\n
\t\t\t\t\t
let img = node.origin.toPng();
\n\t\t\t\t\t
dataUrl = img.src;
\n\t\t\t\t
} catch (e)
{
\n\n\t\t\t\t
}
\n\n\t\t\t\t
if (dataUrl) {\n
\t\t\t\t\t
let base64Data = dataUrl.replace(/^data:image
\\
/
\\
w+;base64,/,
\"\"
);
\n\t\t\t\t\t
let buffer = new Buffer(base64Data, 'base64');
\n\t\t\t\t\t
const fileNameHash = hash(buffer);
\n\t\t\t\t\t
if (imageHashMap.hasOwnProperty(fileNameHash)) {\n
\t\t\t\t\t\t
uuid = imageHashMap[fileNameHash];
\n\t\t\t\t\t
} else {\n
\t\t\t\t\t\t
imageHashMap[fileNameHash] = uuid;
\n\t\t\t\t\t\t
assets.push({\n
\t\t\t\t\t\t\t
name,
\n\t\t\t\t\t\t\t
ext,
\n\t\t\t\t\t\t\t
uuid,
\n\t\t\t\t\t\t\t
base64Data,
\n\t\t\t\t\t\t\t
hash: fileNameHash,
\n\t\t\t\t\t\t
});
\n\t\t\t\t\t
}
\n\n\t\t\t\t\t
properties.source = 'asset://' + uuid;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
let data = {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
};
\n\n\t
let dataString = JSON.stringify(data);
\n\n\t
let buf = new Buffer(dataString);
\n\t
return await new Promise((resolve, reject) => {\n
\t\t
zlib.gzip(buf, function (err, res) {\n
\t\t\t
if (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\n
const PSD = window['require']('psd');
\n\n
export async function getTree(file) {\n
\t
let psd = await PSD.fromDroppedFile(file);
\n\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (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\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import hash from 'object-hash';
\n
import zlib from 'zlib';
\n\n
const relativePosPrefixMap = {\n
\t
l: {field: 'left',},
\n\t
t: {field: 'top',},
\n\t
r: {field: 'right',},
\n\t
b: {field: 'bottom',},
\n\t
h: {field: 'horizonCenter',},
\n\t
v: {field: 'verticalCenter',},
\n\t
wp: {field: 'width', },
\n\t
hp: {field: 'height', },
\n\t
lp: {field: 'left', },
\n\t
tp: {field: 'top', },
\n\t
rp: {field: 'right', },
\n\t
bp: {field: 'bottom', },
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile.name, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\t
const imageHashMap = {};
\n\n\t
const {width: stageWidth, height: stageHeight} = tree;
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
let
{
name
}
= node;
\n\t\t
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
\n\t\t
//console.log('walk node:', name);
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\n\t\t
const {width: parentWidth, height: parentHeight} = parent;
\n\n\t\t
if (name.includes('|')) {\n
\t\t\t
try {\n
\t\t\t\t
let arr = name.split('|');
\n\t\t\t\t
name = arr[0];
\n\t\t\t\t
let paramsStr = arr[1];
\n\t\t\t\t
let params = paramsStr.split(';');
\n\t\t\t\t
let relativePos = params[0];
\n\t\t\t\t
if (relativePos) {\n
\t\t\t\t\t
let items = relativePos.split(',');
\n\t\t\t\t\t
for (let item of items) {\n
\t\t\t\t\t\t
let result = item.match(/[a-zA-Z]+/);
\n\t\t\t\t\t\t
if(!result)
{
\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
let prefix = result[0];
\n\t\t\t\t\t\t
let mapItem = relativePosPrefixMap[prefix];
\n\t\t\t\t\t\t
if (mapItem) {\n
\t\t\t\t\t\t\t
let
{
field,
}
= mapItem;
\n\t\t\t\t\t\t\t
let value = item.substr(prefix.length);
\n\t\t\t\t\t\t\t
let hasValue = value.length > 0;
\n\t\t\t\t\t\t\t
let fieldChar = prefix[0];
\n\t\t\t\t\t\t\t
if(!hasValue){\n
\t\t\t\t\t\t\t\t
switch(fieldChar){\n
\t\t\t\t\t\t\t\t\t
case 'l':
\n\t\t\t\t\t\t\t\t\t\t
value = x;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 't':
\n\t\t\t\t\t\t\t\t\t\t
value = y;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'r':
\n\t\t\t\t\t\t\t\t\t\t
value = stageWidth - width;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'b':
\n\t\t\t\t\t\t\t\t\t\t
value = stageHeight - height;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'h':
\n\t\t\t\t\t\t\t\t\t\t
value = x + width / 2 - stageWidth / 2;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'v':
\n\t\t\t\t\t\t\t\t\t\t
value = y + height / 2 - stageHeight / 2;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t
let isPercent = prefix.endsWith('p');
\n\t\t\t\t\t\t\t
if (isPercent) {\n
\t\t\t\t\t\t\t\t
if(!hasValue){\n
\t\t\t\t\t\t\t\t\t
switch(fieldChar){\n
\t\t\t\t\t\t\t\t\t\t
case 'l':
\n\t\t\t\t\t\t\t\t\t\t
case 'r':
\n\t\t\t\t\t\t\t\t\t\t\t
value /= stageWidth;
\n\t\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t\t
case 't':
\n\t\t\t\t\t\t\t\t\t\t
case 'b':
\n\t\t\t\t\t\t\t\t\t\t\t
value /= stageHeight;
\n\t\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t\t\t
value = Math.floor(value * 100);
\n\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t\t
value += '%';
\n\t\t\t\t\t\t\t
} else {\n
\t\t\t\t\t\t\t\t
value = parseFloat(value);
\n\t\t\t\t\t\t\t\t
if (isNaN(value)) {\n
\t\t\t\t\t\t\t\t\t
value = 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\t
properties[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\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
let dealLater = true;
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
const sizes = fontInfo.sizes();
\n\t\t\t
const colors = fontInfo.colors();
\n\t\t\t
properties.size = sizes ? sizes[0] || 20 : 20;
\n\t\t\t
let [r, g, b, a] = colors[0];
\n\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
\n\t\t\t
viewNode.type = 'label';
\n\t\t\t
dealLater = false;
\n\t\t
} else if (solidColor && layer.vectorMask) {\n
\n\t\t\t
let paths = layer.vectorMask().paths;
\n\t\t\t
if (paths[2].numPoints === 4) {\n
\t\t\t\t
let isRect = true;
\n\t\t\t\t
for (let i = 3; i < paths.length; i++) {\n
\t\t\t\t\t
if (paths[i].recordType !== 2) {\n
\t\t\t\t\t\t
isRect = false;
\n\t\t\t\t\t\t
break;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t\t
if (isRect) {\n
\t\t\t\t\t
viewNode.type = 'rect';
\n\t\t\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;
\n\t\t\t\t\t
dealLater = false;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
if (dealLater) {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
let uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
let dataUrl;
\n\t\t\t\t
try {\n
\t\t\t\t\t
let img = node.origin.toPng();
\n\t\t\t\t\t
dataUrl = img.src;
\n\t\t\t\t
} catch (e)
{
\n\n\t\t\t\t
}
\n\n\t\t\t\t
if (dataUrl) {\n
\t\t\t\t\t
let base64Data = dataUrl.replace(/^data:image
\\
/
\\
w+;base64,/,
\"\"
);
\n\t\t\t\t\t
let buffer = new Buffer(base64Data, 'base64');
\n\t\t\t\t\t
const fileNameHash = hash(buffer);
\n\t\t\t\t\t
if (imageHashMap.hasOwnProperty(fileNameHash)) {\n
\t\t\t\t\t\t
uuid = imageHashMap[fileNameHash];
\n\t\t\t\t\t
} else {\n
\t\t\t\t\t\t
imageHashMap[fileNameHash] = uuid;
\n\t\t\t\t\t\t
assets.push({\n
\t\t\t\t\t\t\t
name,
\n\t\t\t\t\t\t\t
ext,
\n\t\t\t\t\t\t\t
uuid,
\n\t\t\t\t\t\t\t
base64Data,
\n\t\t\t\t\t\t\t
hash: fileNameHash,
\n\t\t\t\t\t\t
});
\n\t\t\t\t\t
}
\n\n\t\t\t\t\t
properties.source = 'asset://' + uuid;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
let data = {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
};
\n\n\t
let dataString = JSON.stringify(data);
\n\n\t
let buf = new Buffer(dataString);
\n\t
return await new Promise((resolve, reject) => {\n
\t\t
zlib.gzip(buf, function (err, res) {\n
\t\t\t
if (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
dist/index.js
View file @
ce8ed08c
...
@@ -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
;
}
}
}
}
...
...
dist/index.js.map
View file @
ce8ed08c
{
"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\n
const PSD = window['require']('psd');
\n\n
export async function getTree(file) {\n
\t
let psd = await PSD.fromDroppedFile(file);
\n\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (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\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import hash from 'object-hash';
\n
import zlib from 'zlib';
\n\n
const relativePosPrefixMap = {\n
\t
l: {field: 'left',},
\n\t
t: {field: 'top',},
\n\t
r: {field: 'right',},
\n\t
b: {field: 'bottom',},
\n\t
h: {field: 'horizonCenter',},
\n\t
v: {field: 'verticalCenter',},
\n\t
wp: {field: 'width', isPercent: true},
\n\t
hp: {field: 'height', isPercent: true},
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile.name, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\t
const imageHashMap = {};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
let
{
name
}
= node;
\n\t\t
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
\n\t\t
//console.log('walk node:', name);
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\n\t\t
if (name.includes('|')) {\n
\t\t\t
try {\n
\t\t\t\t
let arr = name.split('|');
\n\t\t\t\t
name = arr[0];
\n\t\t\t\t
let paramsStr = arr[1];
\n\t\t\t\t
let params = paramsStr.split(';');
\n\t\t\t\t
let relativePos = params[0];
\n\t\t\t\t
if (relativePos) {\n
\t\t\t\t\t
let items = relativePos.split(',');
\n\t\t\t\t\t
for (let item of items) {\n
\t\t\t\t\t\t
let result = item.match(/[a-zA-Z]+/);
\n\t\t\t\t\t\t
if(!result)
{
\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
let prefix = result[0];
\n\t\t\t\t\t\t
let mapItem = relativePosPrefixMap[prefix];
\n\t\t\t\t\t\t
if (mapItem) {\n
\t\t\t\t\t\t\t
const {field, isPercent} = mapItem;
\n\t\t\t\t\t\t\t
let value = item.substr(prefix.length);
\n\t\t\t\t\t\t\t
if (isPercent) {\n
\t\t\t\t\t\t\t\t
value += '%';
\n\t\t\t\t\t\t\t
} else {\n
\t\t\t\t\t\t\t\t
value = parseFloat(value);
\n\t\t\t\t\t\t\t\t
if (isNaN(value)) {\n
\t\t\t\t\t\t\t\t\t
value = 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\t
properties[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\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
let dealLater = true;
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
const sizes = fontInfo.sizes();
\n\t\t\t
const colors = fontInfo.colors();
\n\t\t\t
properties.size = sizes ? sizes[0] || 20 : 20;
\n\t\t\t
let [r, g, b, a] = colors[0];
\n\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
\n\t\t\t
viewNode.type = 'label';
\n\t\t\t
dealLater = false;
\n\t\t
} else if (solidColor && layer.vectorMask) {\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
let paths = layer.vectorMask().paths;
\n\t\t\t
if (paths[2].numPoints === 4) {\n
\t\t\t\t
let isRect = true;
\n\t\t\t\t
for (let i = 3; i < paths.length; i++) {\n
\t\t\t\t\t
if (paths[i].recordType !== 2) {\n
\t\t\t\t\t\t
isRect = false;
\n\t\t\t\t\t\t
break;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t\t
if (isRect) {\n
\t\t\t\t\t
viewNode.type = 'rect';
\n\t\t\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t\t\t\t
dealLater = false;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
if (dealLater) {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
let uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
let dataUrl;
\n\t\t\t\t
try {\n
\t\t\t\t\t
let img = node.origin.toPng();
\n\t\t\t\t\t
dataUrl = img.src;
\n\t\t\t\t
} catch (e)
{
\n\n\t\t\t\t
}
\n\n\t\t\t\t
if (dataUrl) {\n
\t\t\t\t\t
let base64Data = dataUrl.replace(/^data:image
\\
/
\\
w+;base64,/,
\"\"
);
\n\t\t\t\t\t
let buffer = new Buffer(base64Data, 'base64');
\n\t\t\t\t\t
const fileNameHash = hash(buffer);
\n\t\t\t\t\t
if (imageHashMap.hasOwnProperty(fileNameHash)) {\n
\t\t\t\t\t\t
uuid = imageHashMap[fileNameHash];
\n\t\t\t\t\t
} else {\n
\t\t\t\t\t\t
imageHashMap[fileNameHash] = uuid;
\n\t\t\t\t\t\t
assets.push({\n
\t\t\t\t\t\t\t
name,
\n\t\t\t\t\t\t\t
ext,
\n\t\t\t\t\t\t\t
uuid,
\n\t\t\t\t\t\t\t
base64Data,
\n\t\t\t\t\t\t\t
hash: fileNameHash,
\n\t\t\t\t\t\t
});
\n\t\t\t\t\t
}
\n\n\t\t\t\t\t
properties.source = 'asset://' + uuid;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
let data = {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
};
\n\n\t
let dataString = JSON.stringify(data);
\n\n\t
let buf = new Buffer(dataString);
\n\t
return await new Promise((resolve, reject) => {\n
\t\t
zlib.gzip(buf, function (err, res) {\n
\t\t\t
if (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\n
const PSD = window['require']('psd');
\n\n
export async function getTree(file) {\n
\t
let psd = await PSD.fromDroppedFile(file);
\n\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (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\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import hash from 'object-hash';
\n
import zlib from 'zlib';
\n\n
const relativePosPrefixMap = {\n
\t
l: {field: 'left',},
\n\t
t: {field: 'top',},
\n\t
r: {field: 'right',},
\n\t
b: {field: 'bottom',},
\n\t
h: {field: 'horizonCenter',},
\n\t
v: {field: 'verticalCenter',},
\n\t
wp: {field: 'width', },
\n\t
hp: {field: 'height', },
\n\t
lp: {field: 'left', },
\n\t
tp: {field: 'top', },
\n\t
rp: {field: 'right', },
\n\t
bp: {field: 'bottom', },
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile.name, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\t
const imageHashMap = {};
\n\n\t
const {width: stageWidth, height: stageHeight} = tree;
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
let
{
name
}
= node;
\n\t\t
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
\n\t\t
//console.log('walk node:', name);
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\n\t\t
const {width: parentWidth, height: parentHeight} = parent;
\n\n\t\t
if (name.includes('|')) {\n
\t\t\t
try {\n
\t\t\t\t
let arr = name.split('|');
\n\t\t\t\t
name = arr[0];
\n\t\t\t\t
let paramsStr = arr[1];
\n\t\t\t\t
let params = paramsStr.split(';');
\n\t\t\t\t
let relativePos = params[0];
\n\t\t\t\t
if (relativePos) {\n
\t\t\t\t\t
let items = relativePos.split(',');
\n\t\t\t\t\t
for (let item of items) {\n
\t\t\t\t\t\t
let result = item.match(/[a-zA-Z]+/);
\n\t\t\t\t\t\t
if(!result)
{
\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
let prefix = result[0];
\n\t\t\t\t\t\t
let mapItem = relativePosPrefixMap[prefix];
\n\t\t\t\t\t\t
if (mapItem) {\n
\t\t\t\t\t\t\t
let
{
field,
}
= mapItem;
\n\t\t\t\t\t\t\t
let value = item.substr(prefix.length);
\n\t\t\t\t\t\t\t
let hasValue = value.length > 0;
\n\t\t\t\t\t\t\t
let fieldChar = prefix[0];
\n\t\t\t\t\t\t\t
if(!hasValue){\n
\t\t\t\t\t\t\t\t
switch(fieldChar){\n
\t\t\t\t\t\t\t\t\t
case 'l':
\n\t\t\t\t\t\t\t\t\t\t
value = x;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 't':
\n\t\t\t\t\t\t\t\t\t\t
value = y;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'r':
\n\t\t\t\t\t\t\t\t\t\t
value = stageWidth - width;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'b':
\n\t\t\t\t\t\t\t\t\t\t
value = stageHeight - height;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'h':
\n\t\t\t\t\t\t\t\t\t\t
value = x + width / 2 - stageWidth / 2;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'v':
\n\t\t\t\t\t\t\t\t\t\t
value = y + height / 2 - stageHeight / 2;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t
let isPercent = prefix.endsWith('p');
\n\t\t\t\t\t\t\t
if (isPercent) {\n
\t\t\t\t\t\t\t\t
if(!hasValue){\n
\t\t\t\t\t\t\t\t\t
switch(fieldChar){\n
\t\t\t\t\t\t\t\t\t\t
case 'l':
\n\t\t\t\t\t\t\t\t\t\t
case 'r':
\n\t\t\t\t\t\t\t\t\t\t\t
value /= stageWidth;
\n\t\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t\t
case 't':
\n\t\t\t\t\t\t\t\t\t\t
case 'b':
\n\t\t\t\t\t\t\t\t\t\t\t
value /= stageHeight;
\n\t\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t\t\t
value = Math.floor(value * 100);
\n\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t\t
value += '%';
\n\t\t\t\t\t\t\t
} else {\n
\t\t\t\t\t\t\t\t
value = parseFloat(value);
\n\t\t\t\t\t\t\t\t
if (isNaN(value)) {\n
\t\t\t\t\t\t\t\t\t
value = 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\t
properties[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\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
let dealLater = true;
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
const sizes = fontInfo.sizes();
\n\t\t\t
const colors = fontInfo.colors();
\n\t\t\t
properties.size = sizes ? sizes[0] || 20 : 20;
\n\t\t\t
let [r, g, b, a] = colors[0];
\n\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
\n\t\t\t
viewNode.type = 'label';
\n\t\t\t
dealLater = false;
\n\t\t
} else if (solidColor && layer.vectorMask) {\n
\n\t\t\t
let paths = layer.vectorMask().paths;
\n\t\t\t
if (paths[2].numPoints === 4) {\n
\t\t\t\t
let isRect = true;
\n\t\t\t\t
for (let i = 3; i < paths.length; i++) {\n
\t\t\t\t\t
if (paths[i].recordType !== 2) {\n
\t\t\t\t\t\t
isRect = false;
\n\t\t\t\t\t\t
break;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t\t
if (isRect) {\n
\t\t\t\t\t
viewNode.type = 'rect';
\n\t\t\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;
\n\t\t\t\t\t
dealLater = false;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
if (dealLater) {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
let uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
let dataUrl;
\n\t\t\t\t
try {\n
\t\t\t\t\t
let img = node.origin.toPng();
\n\t\t\t\t\t
dataUrl = img.src;
\n\t\t\t\t
} catch (e)
{
\n\n\t\t\t\t
}
\n\n\t\t\t\t
if (dataUrl) {\n
\t\t\t\t\t
let base64Data = dataUrl.replace(/^data:image
\\
/
\\
w+;base64,/,
\"\"
);
\n\t\t\t\t\t
let buffer = new Buffer(base64Data, 'base64');
\n\t\t\t\t\t
const fileNameHash = hash(buffer);
\n\t\t\t\t\t
if (imageHashMap.hasOwnProperty(fileNameHash)) {\n
\t\t\t\t\t\t
uuid = imageHashMap[fileNameHash];
\n\t\t\t\t\t
} else {\n
\t\t\t\t\t\t
imageHashMap[fileNameHash] = uuid;
\n\t\t\t\t\t\t
assets.push({\n
\t\t\t\t\t\t\t
name,
\n\t\t\t\t\t\t\t
ext,
\n\t\t\t\t\t\t\t
uuid,
\n\t\t\t\t\t\t\t
base64Data,
\n\t\t\t\t\t\t\t
hash: fileNameHash,
\n\t\t\t\t\t\t
});
\n\t\t\t\t\t
}
\n\n\t\t\t\t\t
properties.source = 'asset://' + uuid;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
let data = {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
};
\n\n\t
let dataString = JSON.stringify(data);
\n\n\t
let buf = new Buffer(dataString);
\n\t
return await new Promise((resolve, reject) => {\n
\t\t
zlib.gzip(buf, function (err, res) {\n
\t\t\t
if (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
dist/index.umd.js
View file @
ce8ed08c
(
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
.
C
olor
,
global
.
generateUUID
,
global
.
hash
,
global
.
zlib
));
(
global
=
global
||
self
,
factory
(
global
[
'psd-parse-web'
]
=
{},
global
.
path
,
global
.
c
olor
,
global
.
generateUUID
,
global
.
hash
,
global
.
zlib
));
}(
this
,
function
(
exports
,
path
,
C
olor
,
generateUUID
,
hash
,
zlib
)
{
'use strict'
;
}(
this
,
function
(
exports
,
path
,
c
olor
,
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'
]
:
C
olor
;
color
=
color
&&
color
.
hasOwnProperty
(
'default'
)
?
color
[
'default'
]
:
c
olor
;
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
;
}
}
}
}
...
...
dist/index.umd.js.map
View file @
ce8ed08c
{
"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\n
const PSD = window['require']('psd');
\n\n
export async function getTree(file) {\n
\t
let psd = await PSD.fromDroppedFile(file);
\n\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (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\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import hash from 'object-hash';
\n
import zlib from 'zlib';
\n\n
const relativePosPrefixMap = {\n
\t
l: {field: 'left',},
\n\t
t: {field: 'top',},
\n\t
r: {field: 'right',},
\n\t
b: {field: 'bottom',},
\n\t
h: {field: 'horizonCenter',},
\n\t
v: {field: 'verticalCenter',},
\n\t
wp: {field: 'width', isPercent: true},
\n\t
hp: {field: 'height', isPercent: true},
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile.name, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\t
const imageHashMap = {};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
let
{
name
}
= node;
\n\t\t
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
\n\t\t
//console.log('walk node:', name);
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\n\t\t
if (name.includes('|')) {\n
\t\t\t
try {\n
\t\t\t\t
let arr = name.split('|');
\n\t\t\t\t
name = arr[0];
\n\t\t\t\t
let paramsStr = arr[1];
\n\t\t\t\t
let params = paramsStr.split(';');
\n\t\t\t\t
let relativePos = params[0];
\n\t\t\t\t
if (relativePos) {\n
\t\t\t\t\t
let items = relativePos.split(',');
\n\t\t\t\t\t
for (let item of items) {\n
\t\t\t\t\t\t
let result = item.match(/[a-zA-Z]+/);
\n\t\t\t\t\t\t
if(!result)
{
\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
let prefix = result[0];
\n\t\t\t\t\t\t
let mapItem = relativePosPrefixMap[prefix];
\n\t\t\t\t\t\t
if (mapItem) {\n
\t\t\t\t\t\t\t
const {field, isPercent} = mapItem;
\n\t\t\t\t\t\t\t
let value = item.substr(prefix.length);
\n\t\t\t\t\t\t\t
if (isPercent) {\n
\t\t\t\t\t\t\t\t
value += '%';
\n\t\t\t\t\t\t\t
} else {\n
\t\t\t\t\t\t\t\t
value = parseFloat(value);
\n\t\t\t\t\t\t\t\t
if (isNaN(value)) {\n
\t\t\t\t\t\t\t\t\t
value = 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\t
properties[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\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
let dealLater = true;
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
const sizes = fontInfo.sizes();
\n\t\t\t
const colors = fontInfo.colors();
\n\t\t\t
properties.size = sizes ? sizes[0] || 20 : 20;
\n\t\t\t
let [r, g, b, a] = colors[0];
\n\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
\n\t\t\t
viewNode.type = 'label';
\n\t\t\t
dealLater = false;
\n\t\t
} else if (solidColor && layer.vectorMask) {\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
let paths = layer.vectorMask().paths;
\n\t\t\t
if (paths[2].numPoints === 4) {\n
\t\t\t\t
let isRect = true;
\n\t\t\t\t
for (let i = 3; i < paths.length; i++) {\n
\t\t\t\t\t
if (paths[i].recordType !== 2) {\n
\t\t\t\t\t\t
isRect = false;
\n\t\t\t\t\t\t
break;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t\t
if (isRect) {\n
\t\t\t\t\t
viewNode.type = 'rect';
\n\t\t\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t\t\t\t
dealLater = false;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
if (dealLater) {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
let uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
let dataUrl;
\n\t\t\t\t
try {\n
\t\t\t\t\t
let img = node.origin.toPng();
\n\t\t\t\t\t
dataUrl = img.src;
\n\t\t\t\t
} catch (e)
{
\n\n\t\t\t\t
}
\n\n\t\t\t\t
if (dataUrl) {\n
\t\t\t\t\t
let base64Data = dataUrl.replace(/^data:image
\\
/
\\
w+;base64,/,
\"\"
);
\n\t\t\t\t\t
let buffer = new Buffer(base64Data, 'base64');
\n\t\t\t\t\t
const fileNameHash = hash(buffer);
\n\t\t\t\t\t
if (imageHashMap.hasOwnProperty(fileNameHash)) {\n
\t\t\t\t\t\t
uuid = imageHashMap[fileNameHash];
\n\t\t\t\t\t
} else {\n
\t\t\t\t\t\t
imageHashMap[fileNameHash] = uuid;
\n\t\t\t\t\t\t
assets.push({\n
\t\t\t\t\t\t\t
name,
\n\t\t\t\t\t\t\t
ext,
\n\t\t\t\t\t\t\t
uuid,
\n\t\t\t\t\t\t\t
base64Data,
\n\t\t\t\t\t\t\t
hash: fileNameHash,
\n\t\t\t\t\t\t
});
\n\t\t\t\t\t
}
\n\n\t\t\t\t\t
properties.source = 'asset://' + uuid;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
let data = {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
};
\n\n\t
let dataString = JSON.stringify(data);
\n\n\t
let buf = new Buffer(dataString);
\n\t
return await new Promise((resolve, reject) => {\n
\t\t
zlib.gzip(buf, function (err, res) {\n
\t\t\t
if (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\n
const PSD = window['require']('psd');
\n\n
export async function getTree(file) {\n
\t
let psd = await PSD.fromDroppedFile(file);
\n\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (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\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import hash from 'object-hash';
\n
import zlib from 'zlib';
\n\n
const relativePosPrefixMap = {\n
\t
l: {field: 'left',},
\n\t
t: {field: 'top',},
\n\t
r: {field: 'right',},
\n\t
b: {field: 'bottom',},
\n\t
h: {field: 'horizonCenter',},
\n\t
v: {field: 'verticalCenter',},
\n\t
wp: {field: 'width', },
\n\t
hp: {field: 'height', },
\n\t
lp: {field: 'left', },
\n\t
tp: {field: 'top', },
\n\t
rp: {field: 'right', },
\n\t
bp: {field: 'bottom', },
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile.name, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\t
const imageHashMap = {};
\n\n\t
const {width: stageWidth, height: stageHeight} = tree;
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
let
{
name
}
= node;
\n\t\t
const {x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
\n\t\t
//console.log('walk node:', name);
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\n\t\t
const {width: parentWidth, height: parentHeight} = parent;
\n\n\t\t
if (name.includes('|')) {\n
\t\t\t
try {\n
\t\t\t\t
let arr = name.split('|');
\n\t\t\t\t
name = arr[0];
\n\t\t\t\t
let paramsStr = arr[1];
\n\t\t\t\t
let params = paramsStr.split(';');
\n\t\t\t\t
let relativePos = params[0];
\n\t\t\t\t
if (relativePos) {\n
\t\t\t\t\t
let items = relativePos.split(',');
\n\t\t\t\t\t
for (let item of items) {\n
\t\t\t\t\t\t
let result = item.match(/[a-zA-Z]+/);
\n\t\t\t\t\t\t
if(!result)
{
\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
let prefix = result[0];
\n\t\t\t\t\t\t
let mapItem = relativePosPrefixMap[prefix];
\n\t\t\t\t\t\t
if (mapItem) {\n
\t\t\t\t\t\t\t
let
{
field,
}
= mapItem;
\n\t\t\t\t\t\t\t
let value = item.substr(prefix.length);
\n\t\t\t\t\t\t\t
let hasValue = value.length > 0;
\n\t\t\t\t\t\t\t
let fieldChar = prefix[0];
\n\t\t\t\t\t\t\t
if(!hasValue){\n
\t\t\t\t\t\t\t\t
switch(fieldChar){\n
\t\t\t\t\t\t\t\t\t
case 'l':
\n\t\t\t\t\t\t\t\t\t\t
value = x;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 't':
\n\t\t\t\t\t\t\t\t\t\t
value = y;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'r':
\n\t\t\t\t\t\t\t\t\t\t
value = stageWidth - width;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'b':
\n\t\t\t\t\t\t\t\t\t\t
value = stageHeight - height;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'h':
\n\t\t\t\t\t\t\t\t\t\t
value = x + width / 2 - stageWidth / 2;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
case 'v':
\n\t\t\t\t\t\t\t\t\t\t
value = y + height / 2 - stageHeight / 2;
\n\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t
let isPercent = prefix.endsWith('p');
\n\t\t\t\t\t\t\t
if (isPercent) {\n
\t\t\t\t\t\t\t\t
if(!hasValue){\n
\t\t\t\t\t\t\t\t\t
switch(fieldChar){\n
\t\t\t\t\t\t\t\t\t\t
case 'l':
\n\t\t\t\t\t\t\t\t\t\t
case 'r':
\n\t\t\t\t\t\t\t\t\t\t\t
value /= stageWidth;
\n\t\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t\t
case 't':
\n\t\t\t\t\t\t\t\t\t\t
case 'b':
\n\t\t\t\t\t\t\t\t\t\t\t
value /= stageHeight;
\n\t\t\t\t\t\t\t\t\t\t\t
break;
\n\t\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t\t\t
value = Math.floor(value * 100);
\n\t\t\t\t\t\t\t\t
}
\n\t\t\t\t\t\t\t\t
value += '%';
\n\t\t\t\t\t\t\t
} else {\n
\t\t\t\t\t\t\t\t
value = parseFloat(value);
\n\t\t\t\t\t\t\t\t
if (isNaN(value)) {\n
\t\t\t\t\t\t\t\t\t
value = 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\t
properties[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\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
let dealLater = true;
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
const sizes = fontInfo.sizes();
\n\t\t\t
const colors = fontInfo.colors();
\n\t\t\t
properties.size = sizes ? sizes[0] || 20 : 20;
\n\t\t\t
let [r, g, b, a] = colors[0];
\n\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
\n\t\t\t
viewNode.type = 'label';
\n\t\t\t
dealLater = false;
\n\t\t
} else if (solidColor && layer.vectorMask) {\n
\n\t\t\t
let paths = layer.vectorMask().paths;
\n\t\t\t
if (paths[2].numPoints === 4) {\n
\t\t\t\t
let isRect = true;
\n\t\t\t\t
for (let i = 3; i < paths.length; i++) {\n
\t\t\t\t\t
if (paths[i].recordType !== 2) {\n
\t\t\t\t\t\t
isRect = false;
\n\t\t\t\t\t\t
break;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t\t
if (isRect) {\n
\t\t\t\t\t
viewNode.type = 'rect';
\n\t\t\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t\t\t
properties.fillColor = `rgba(${r}, ${g}, ${b}, 1)`;
\n\t\t\t\t\t
dealLater = false;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
if (dealLater) {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
let uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
let dataUrl;
\n\t\t\t\t
try {\n
\t\t\t\t\t
let img = node.origin.toPng();
\n\t\t\t\t\t
dataUrl = img.src;
\n\t\t\t\t
} catch (e)
{
\n\n\t\t\t\t
}
\n\n\t\t\t\t
if (dataUrl) {\n
\t\t\t\t\t
let base64Data = dataUrl.replace(/^data:image
\\
/
\\
w+;base64,/,
\"\"
);
\n\t\t\t\t\t
let buffer = new Buffer(base64Data, 'base64');
\n\t\t\t\t\t
const fileNameHash = hash(buffer);
\n\t\t\t\t\t
if (imageHashMap.hasOwnProperty(fileNameHash)) {\n
\t\t\t\t\t\t
uuid = imageHashMap[fileNameHash];
\n\t\t\t\t\t
} else {\n
\t\t\t\t\t\t
imageHashMap[fileNameHash] = uuid;
\n\t\t\t\t\t\t
assets.push({\n
\t\t\t\t\t\t\t
name,
\n\t\t\t\t\t\t\t
ext,
\n\t\t\t\t\t\t\t
uuid,
\n\t\t\t\t\t\t\t
base64Data,
\n\t\t\t\t\t\t\t
hash: fileNameHash,
\n\t\t\t\t\t\t
});
\n\t\t\t\t\t
}
\n\n\t\t\t\t\t
properties.source = 'asset://' + uuid;
\n\t\t\t\t
}
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
let data = {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
};
\n\n\t
let dataString = JSON.stringify(data);
\n\n\t
let buf = new Buffer(dataString);
\n\t
return await new Promise((resolve, reject) => {\n
\t\t
zlib.gzip(buf, function (err, res) {\n
\t\t\t
if (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
src/zeroing.js
View file @
ce8ed08c
...
@@ -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
;
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment