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
9552a48b
Commit
9552a48b
authored
Jul 28, 2020
by
rockyl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改上下裁剪机制
parent
5cc49b8f
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
102 additions
and
52 deletions
+102
-52
index.es.js
dist/index.es.js
+26
-12
index.es.js.map
dist/index.es.js.map
+1
-1
index.js
dist/index.js
+26
-12
index.js.map
dist/index.js.map
+1
-1
index.umd.js
dist/index.umd.js
+26
-12
index.umd.js.map
dist/index.umd.js.map
+1
-1
zeroing.js
src/zeroing.js
+21
-13
No files found.
dist/index.es.js
View file @
9552a48b
...
@@ -88,6 +88,10 @@ async function execute(psdFile, options) {
...
@@ -88,6 +88,10 @@ async function execute(psdFile, options) {
const
tree
=
await
getTree
(
psdFile
);
const
tree
=
await
getTree
(
psdFile
);
const
{
mode
=
'none'
,
singleView
=
true
}
=
options
;
const
{
mode
=
'none'
,
singleView
=
true
}
=
options
;
let
offset
=
{
x
:
0
,
y
:
0
};
let
offset
=
{
x
:
0
,
y
:
0
};
let
cutSize
=
{
x
:
0
,
y
:
0
};
if
(
mode
!==
'none'
)
{
cutSize
.
y
=
offsetAll
;
}
switch
(
mode
)
{
switch
(
mode
)
{
case
'top'
:
case
'top'
:
offset
.
y
=
offsetAll
;
offset
.
y
=
offsetAll
;
...
@@ -97,6 +101,8 @@ async function execute(psdFile, options) {
...
@@ -97,6 +101,8 @@ async function execute(psdFile, options) {
break
;
break
;
}
}
const
isCenter
=
mode
===
'center'
;
let
viewRoot
=
{
let
viewRoot
=
{
name
:
path
.
basename
(
psdFile
.
name
,
'.psd'
),
name
:
path
.
basename
(
psdFile
.
name
,
'.psd'
),
type
:
'node'
,
type
:
'node'
,
...
@@ -106,6 +112,10 @@ async function execute(psdFile, options) {
...
@@ -106,6 +112,10 @@ async function execute(psdFile, options) {
const
assets
=
[];
const
assets
=
[];
const
imageHashMap
=
{};
const
imageHashMap
=
{};
let
{
width
:
stageWidthOrigin
,
height
:
stageHeightOrigin
}
=
tree
;
const
stageWidth
=
stageWidthOrigin
-
cutSize
.
x
||
0
;
const
stageHeight
=
stageHeightOrigin
-
cutSize
.
y
||
0
;
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,17 +123,21 @@ async function execute(psdFile, options) {
...
@@ -113,17 +123,21 @@ async function execute(psdFile, options) {
let
properties
=
{
let
properties
=
{
width
,
height
,
alpha
,
visible
,
width
,
height
,
alpha
,
visible
,
};
};
const
isSecondLayer
=
!
parent
.
origin
.
parent
;
const
isSecondLayer
=
singleView
&&
!
parent
.
origin
.
parent
||
!
singleView
&&
parent
.
origin
.
parent
&&
!
parent
.
origin
.
parent
.
parent
;
const
shouldVerticalCenter
=
isSecondLayer
&&
isCenter
;
const
{
width
:
parentWidth
,
height
:
parentHeight
}
=
parent
;
if
(
name
.
includes
(
'|'
)
||
shouldVerticalCenter
)
{
if
(
name
.
includes
(
'|'
))
{
try
{
try
{
let
arr
=
name
.
split
(
'|'
);
let
arr
=
name
.
split
(
'|'
);
name
=
arr
[
0
];
name
=
arr
[
0
];
let
paramsStr
=
arr
[
1
];
let
paramsStr
=
arr
[
1
];
let
params
=
paramsStr
.
split
(
';'
);
let
relativePos
;
let
relativePos
=
params
[
0
];
if
(
paramsStr
){
let
params
=
paramsStr
.
split
(
';'
);
relativePos
=
params
[
0
];
}
else
if
(
shouldVerticalCenter
){
relativePos
=
'v'
;
}
if
(
relativePos
)
{
if
(
relativePos
)
{
let
items
=
relativePos
.
split
(
','
);
let
items
=
relativePos
.
split
(
','
);
for
(
let
item
of
items
)
{
for
(
let
item
of
items
)
{
...
@@ -147,16 +161,16 @@ async function execute(psdFile, options) {
...
@@ -147,16 +161,16 @@ async function execute(psdFile, options) {
value
=
y
-
offset
.
y
;
value
=
y
-
offset
.
y
;
break
;
break
;
case
'r'
:
case
'r'
:
value
=
parent
Width
-
(
x
-
offset
.
x
)
-
width
;
value
=
stage
Width
-
(
x
-
offset
.
x
)
-
width
;
break
;
break
;
case
'b'
:
case
'b'
:
value
=
parent
Height
-
(
y
-
offset
.
y
)
-
height
;
value
=
stage
Height
-
(
y
-
offset
.
y
)
-
height
;
break
;
break
;
case
'h'
:
case
'h'
:
value
=
x
+
width
/
2
-
parentWidth
/
2
;
value
=
x
+
width
/
2
-
stageWidthOrigin
/
2
;
break
;
break
;
case
'v'
:
case
'v'
:
value
=
y
+
height
/
2
-
parentHeight
/
2
;
value
=
y
+
height
/
2
-
stageHeightOrigin
/
2
;
break
;
break
;
}
}
}
}
...
@@ -166,11 +180,11 @@ async function execute(psdFile, options) {
...
@@ -166,11 +180,11 @@ async function execute(psdFile, options) {
switch
(
fieldChar
)
{
switch
(
fieldChar
)
{
case
'l'
:
case
'l'
:
case
'r'
:
case
'r'
:
value
/=
parent
Width
;
value
/=
stage
Width
;
break
;
break
;
case
't'
:
case
't'
:
case
'b'
:
case
'b'
:
value
/=
parent
Height
;
value
/=
stage
Height
;
break
;
break
;
}
}
value
=
Math
.
floor
(
value
*
100
);
value
=
Math
.
floor
(
value
*
100
);
...
...
dist/index.es.js.map
View file @
9552a48b
This diff is collapsed.
Click to expand it.
dist/index.js
View file @
9552a48b
...
@@ -94,6 +94,10 @@ async function execute(psdFile, options) {
...
@@ -94,6 +94,10 @@ async function execute(psdFile, options) {
const
tree
=
await
getTree
(
psdFile
);
const
tree
=
await
getTree
(
psdFile
);
const
{
mode
=
'none'
,
singleView
=
true
}
=
options
;
const
{
mode
=
'none'
,
singleView
=
true
}
=
options
;
let
offset
=
{
x
:
0
,
y
:
0
};
let
offset
=
{
x
:
0
,
y
:
0
};
let
cutSize
=
{
x
:
0
,
y
:
0
};
if
(
mode
!==
'none'
)
{
cutSize
.
y
=
offsetAll
;
}
switch
(
mode
)
{
switch
(
mode
)
{
case
'top'
:
case
'top'
:
offset
.
y
=
offsetAll
;
offset
.
y
=
offsetAll
;
...
@@ -103,6 +107,8 @@ async function execute(psdFile, options) {
...
@@ -103,6 +107,8 @@ async function execute(psdFile, options) {
break
;
break
;
}
}
const
isCenter
=
mode
===
'center'
;
let
viewRoot
=
{
let
viewRoot
=
{
name
:
path
.
basename
(
psdFile
.
name
,
'.psd'
),
name
:
path
.
basename
(
psdFile
.
name
,
'.psd'
),
type
:
'node'
,
type
:
'node'
,
...
@@ -112,6 +118,10 @@ async function execute(psdFile, options) {
...
@@ -112,6 +118,10 @@ async function execute(psdFile, options) {
const
assets
=
[];
const
assets
=
[];
const
imageHashMap
=
{};
const
imageHashMap
=
{};
let
{
width
:
stageWidthOrigin
,
height
:
stageHeightOrigin
}
=
tree
;
const
stageWidth
=
stageWidthOrigin
-
cutSize
.
x
||
0
;
const
stageHeight
=
stageHeightOrigin
-
cutSize
.
y
||
0
;
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,17 +129,21 @@ async function execute(psdFile, options) {
...
@@ -119,17 +129,21 @@ async function execute(psdFile, options) {
let
properties
=
{
let
properties
=
{
width
,
height
,
alpha
,
visible
,
width
,
height
,
alpha
,
visible
,
};
};
const
isSecondLayer
=
!
parent
.
origin
.
parent
;
const
isSecondLayer
=
singleView
&&
!
parent
.
origin
.
parent
||
!
singleView
&&
parent
.
origin
.
parent
&&
!
parent
.
origin
.
parent
.
parent
;
const
shouldVerticalCenter
=
isSecondLayer
&&
isCenter
;
const
{
width
:
parentWidth
,
height
:
parentHeight
}
=
parent
;
if
(
name
.
includes
(
'|'
)
||
shouldVerticalCenter
)
{
if
(
name
.
includes
(
'|'
))
{
try
{
try
{
let
arr
=
name
.
split
(
'|'
);
let
arr
=
name
.
split
(
'|'
);
name
=
arr
[
0
];
name
=
arr
[
0
];
let
paramsStr
=
arr
[
1
];
let
paramsStr
=
arr
[
1
];
let
params
=
paramsStr
.
split
(
';'
);
let
relativePos
;
let
relativePos
=
params
[
0
];
if
(
paramsStr
){
let
params
=
paramsStr
.
split
(
';'
);
relativePos
=
params
[
0
];
}
else
if
(
shouldVerticalCenter
){
relativePos
=
'v'
;
}
if
(
relativePos
)
{
if
(
relativePos
)
{
let
items
=
relativePos
.
split
(
','
);
let
items
=
relativePos
.
split
(
','
);
for
(
let
item
of
items
)
{
for
(
let
item
of
items
)
{
...
@@ -153,16 +167,16 @@ async function execute(psdFile, options) {
...
@@ -153,16 +167,16 @@ async function execute(psdFile, options) {
value
=
y
-
offset
.
y
;
value
=
y
-
offset
.
y
;
break
;
break
;
case
'r'
:
case
'r'
:
value
=
parent
Width
-
(
x
-
offset
.
x
)
-
width
;
value
=
stage
Width
-
(
x
-
offset
.
x
)
-
width
;
break
;
break
;
case
'b'
:
case
'b'
:
value
=
parent
Height
-
(
y
-
offset
.
y
)
-
height
;
value
=
stage
Height
-
(
y
-
offset
.
y
)
-
height
;
break
;
break
;
case
'h'
:
case
'h'
:
value
=
x
+
width
/
2
-
parentWidth
/
2
;
value
=
x
+
width
/
2
-
stageWidthOrigin
/
2
;
break
;
break
;
case
'v'
:
case
'v'
:
value
=
y
+
height
/
2
-
parentHeight
/
2
;
value
=
y
+
height
/
2
-
stageHeightOrigin
/
2
;
break
;
break
;
}
}
}
}
...
@@ -172,11 +186,11 @@ async function execute(psdFile, options) {
...
@@ -172,11 +186,11 @@ async function execute(psdFile, options) {
switch
(
fieldChar
)
{
switch
(
fieldChar
)
{
case
'l'
:
case
'l'
:
case
'r'
:
case
'r'
:
value
/=
parent
Width
;
value
/=
stage
Width
;
break
;
break
;
case
't'
:
case
't'
:
case
'b'
:
case
'b'
:
value
/=
parent
Height
;
value
/=
stage
Height
;
break
;
break
;
}
}
value
=
Math
.
floor
(
value
*
100
);
value
=
Math
.
floor
(
value
*
100
);
...
...
dist/index.js.map
View file @
9552a48b
This diff is collapsed.
Click to expand it.
dist/index.umd.js
View file @
9552a48b
...
@@ -94,6 +94,10 @@
...
@@ -94,6 +94,10 @@
const
tree
=
await
getTree
(
psdFile
);
const
tree
=
await
getTree
(
psdFile
);
const
{
mode
=
'none'
,
singleView
=
true
}
=
options
;
const
{
mode
=
'none'
,
singleView
=
true
}
=
options
;
let
offset
=
{
x
:
0
,
y
:
0
};
let
offset
=
{
x
:
0
,
y
:
0
};
let
cutSize
=
{
x
:
0
,
y
:
0
};
if
(
mode
!==
'none'
)
{
cutSize
.
y
=
offsetAll
;
}
switch
(
mode
)
{
switch
(
mode
)
{
case
'top'
:
case
'top'
:
offset
.
y
=
offsetAll
;
offset
.
y
=
offsetAll
;
...
@@ -103,6 +107,8 @@
...
@@ -103,6 +107,8 @@
break
;
break
;
}
}
const
isCenter
=
mode
===
'center'
;
let
viewRoot
=
{
let
viewRoot
=
{
name
:
path
.
basename
(
psdFile
.
name
,
'.psd'
),
name
:
path
.
basename
(
psdFile
.
name
,
'.psd'
),
type
:
'node'
,
type
:
'node'
,
...
@@ -112,6 +118,10 @@
...
@@ -112,6 +118,10 @@
const
assets
=
[];
const
assets
=
[];
const
imageHashMap
=
{};
const
imageHashMap
=
{};
let
{
width
:
stageWidthOrigin
,
height
:
stageHeightOrigin
}
=
tree
;
const
stageWidth
=
stageWidthOrigin
-
cutSize
.
x
||
0
;
const
stageHeight
=
stageHeightOrigin
-
cutSize
.
y
||
0
;
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,17 +129,21 @@
...
@@ -119,17 +129,21 @@
let
properties
=
{
let
properties
=
{
width
,
height
,
alpha
,
visible
,
width
,
height
,
alpha
,
visible
,
};
};
const
isSecondLayer
=
!
parent
.
origin
.
parent
;
const
isSecondLayer
=
singleView
&&
!
parent
.
origin
.
parent
||
!
singleView
&&
parent
.
origin
.
parent
&&
!
parent
.
origin
.
parent
.
parent
;
const
shouldVerticalCenter
=
isSecondLayer
&&
isCenter
;
const
{
width
:
parentWidth
,
height
:
parentHeight
}
=
parent
;
if
(
name
.
includes
(
'|'
)
||
shouldVerticalCenter
)
{
if
(
name
.
includes
(
'|'
))
{
try
{
try
{
let
arr
=
name
.
split
(
'|'
);
let
arr
=
name
.
split
(
'|'
);
name
=
arr
[
0
];
name
=
arr
[
0
];
let
paramsStr
=
arr
[
1
];
let
paramsStr
=
arr
[
1
];
let
params
=
paramsStr
.
split
(
';'
);
let
relativePos
;
let
relativePos
=
params
[
0
];
if
(
paramsStr
){
let
params
=
paramsStr
.
split
(
';'
);
relativePos
=
params
[
0
];
}
else
if
(
shouldVerticalCenter
){
relativePos
=
'v'
;
}
if
(
relativePos
)
{
if
(
relativePos
)
{
let
items
=
relativePos
.
split
(
','
);
let
items
=
relativePos
.
split
(
','
);
for
(
let
item
of
items
)
{
for
(
let
item
of
items
)
{
...
@@ -153,16 +167,16 @@
...
@@ -153,16 +167,16 @@
value
=
y
-
offset
.
y
;
value
=
y
-
offset
.
y
;
break
;
break
;
case
'r'
:
case
'r'
:
value
=
parent
Width
-
(
x
-
offset
.
x
)
-
width
;
value
=
stage
Width
-
(
x
-
offset
.
x
)
-
width
;
break
;
break
;
case
'b'
:
case
'b'
:
value
=
parent
Height
-
(
y
-
offset
.
y
)
-
height
;
value
=
stage
Height
-
(
y
-
offset
.
y
)
-
height
;
break
;
break
;
case
'h'
:
case
'h'
:
value
=
x
+
width
/
2
-
parentWidth
/
2
;
value
=
x
+
width
/
2
-
stageWidthOrigin
/
2
;
break
;
break
;
case
'v'
:
case
'v'
:
value
=
y
+
height
/
2
-
parentHeight
/
2
;
value
=
y
+
height
/
2
-
stageHeightOrigin
/
2
;
break
;
break
;
}
}
}
}
...
@@ -172,11 +186,11 @@
...
@@ -172,11 +186,11 @@
switch
(
fieldChar
)
{
switch
(
fieldChar
)
{
case
'l'
:
case
'l'
:
case
'r'
:
case
'r'
:
value
/=
parent
Width
;
value
/=
stage
Width
;
break
;
break
;
case
't'
:
case
't'
:
case
'b'
:
case
'b'
:
value
/=
parent
Height
;
value
/=
stage
Height
;
break
;
break
;
}
}
value
=
Math
.
floor
(
value
*
100
);
value
=
Math
.
floor
(
value
*
100
);
...
...
dist/index.umd.js.map
View file @
9552a48b
This diff is collapsed.
Click to expand it.
src/zeroing.js
View file @
9552a48b
...
@@ -48,6 +48,8 @@ export async function execute(psdFile, options) {
...
@@ -48,6 +48,8 @@ export async function execute(psdFile, options) {
break
;
break
;
}
}
const
isCenter
=
mode
===
'center'
;
let
viewRoot
=
{
let
viewRoot
=
{
name
:
path
.
basename
(
psdFile
.
name
,
'.psd'
),
name
:
path
.
basename
(
psdFile
.
name
,
'.psd'
),
type
:
'node'
,
type
:
'node'
,
...
@@ -57,9 +59,9 @@ export async function execute(psdFile, options) {
...
@@ -57,9 +59,9 @@ export async function execute(psdFile, options) {
const
assets
=
[];
const
assets
=
[];
const
imageHashMap
=
{};
const
imageHashMap
=
{};
let
{
width
:
stageWidth
,
height
:
stageHeight
}
=
tree
;
let
{
width
:
stageWidth
Origin
,
height
:
stageHeightOrigin
}
=
tree
;
stageWidth
-=
cutSize
.
x
||
0
;
const
stageWidth
=
stageWidthOrigin
-
cutSize
.
x
||
0
;
stageHeight
-=
cutSize
.
y
||
0
;
const
stageHeight
=
stageHeightOrigin
-
cutSize
.
y
||
0
;
await
walkNode
(
tree
,
async
function
(
node
,
parent
)
{
await
walkNode
(
tree
,
async
function
(
node
,
parent
)
{
let
{
name
}
=
node
;
let
{
name
}
=
node
;
...
@@ -68,17 +70,23 @@ export async function execute(psdFile, options) {
...
@@ -68,17 +70,23 @@ export async function execute(psdFile, options) {
let
properties
=
{
let
properties
=
{
width
,
height
,
alpha
,
visible
,
width
,
height
,
alpha
,
visible
,
};
};
const
isSecondLayer
=
!
parent
.
origin
.
parent
;
const
isSecondLayer
=
singleView
&&
!
parent
.
origin
.
parent
||
!
singleView
&&
parent
.
origin
.
parent
&&
!
parent
.
origin
.
parent
.
parent
;
const
shouldVerticalCenter
=
isSecondLayer
&&
isCenter
;
const
{
width
:
parentWidth
,
height
:
parentHeight
}
=
parent
;
const
{
width
:
parentWidth
,
height
:
parentHeight
}
=
parent
;
if
(
name
.
includes
(
'|'
))
{
if
(
name
.
includes
(
'|'
)
||
shouldVerticalCenter
)
{
try
{
try
{
let
arr
=
name
.
split
(
'|'
);
let
arr
=
name
.
split
(
'|'
);
name
=
arr
[
0
];
name
=
arr
[
0
];
let
paramsStr
=
arr
[
1
];
let
paramsStr
=
arr
[
1
];
let
params
=
paramsStr
.
split
(
';'
);
let
relativePos
;
let
relativePos
=
params
[
0
];
if
(
paramsStr
){
let
params
=
paramsStr
.
split
(
';'
);
relativePos
=
params
[
0
];
}
else
if
(
shouldVerticalCenter
){
relativePos
=
'v'
;
}
if
(
relativePos
)
{
if
(
relativePos
)
{
let
items
=
relativePos
.
split
(
','
);
let
items
=
relativePos
.
split
(
','
);
for
(
let
item
of
items
)
{
for
(
let
item
of
items
)
{
...
@@ -102,16 +110,16 @@ export async function execute(psdFile, options) {
...
@@ -102,16 +110,16 @@ export async function execute(psdFile, options) {
value
=
y
-
offset
.
y
;
value
=
y
-
offset
.
y
;
break
;
break
;
case
'r'
:
case
'r'
:
value
=
parent
Width
-
(
x
-
offset
.
x
)
-
width
;
value
=
stage
Width
-
(
x
-
offset
.
x
)
-
width
;
break
;
break
;
case
'b'
:
case
'b'
:
value
=
parent
Height
-
(
y
-
offset
.
y
)
-
height
;
value
=
stage
Height
-
(
y
-
offset
.
y
)
-
height
;
break
;
break
;
case
'h'
:
case
'h'
:
value
=
x
+
width
/
2
-
parentWidth
/
2
;
value
=
x
+
width
/
2
-
stageWidthOrigin
/
2
;
break
;
break
;
case
'v'
:
case
'v'
:
value
=
y
+
height
/
2
-
parentHeight
/
2
;
value
=
y
+
height
/
2
-
stageHeightOrigin
/
2
;
break
;
break
;
}
}
}
}
...
@@ -121,11 +129,11 @@ export async function execute(psdFile, options) {
...
@@ -121,11 +129,11 @@ export async function execute(psdFile, options) {
switch
(
fieldChar
)
{
switch
(
fieldChar
)
{
case
'l'
:
case
'l'
:
case
'r'
:
case
'r'
:
value
/=
parent
Width
;
value
/=
stage
Width
;
break
;
break
;
case
't'
:
case
't'
:
case
'b'
:
case
'b'
:
value
/=
parent
Height
;
value
/=
stage
Height
;
break
;
break
;
}
}
value
=
Math
.
floor
(
value
*
100
);
value
=
Math
.
floor
(
value
*
100
);
...
...
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