@leafer-in/editor 1.5.1 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editor.cjs +87 -31
- package/dist/editor.cjs.map +1 -1
- package/dist/editor.esm.js +87 -31
- package/dist/editor.esm.js.map +1 -1
- package/dist/editor.esm.min.js +1 -1
- package/dist/editor.esm.min.js.map +1 -1
- package/dist/editor.js +87 -31
- package/dist/editor.js.map +1 -1
- package/dist/editor.min.cjs +1 -1
- package/dist/editor.min.cjs.map +1 -1
- package/dist/editor.min.js +1 -1
- package/dist/editor.min.js.map +1 -1
- package/package.json +5 -5
- package/src/Editor.ts +46 -18
- package/src/config.ts +1 -0
- package/src/decorator/data.ts +20 -4
- package/src/display/EditBox.ts +1 -0
- package/src/display/EditSelect.ts +4 -2
- package/src/editor/cursor.ts +1 -1
- package/src/editor/target.ts +2 -11
- package/src/helper/EditDataHelper.ts +4 -0
- package/src/helper/EditorHelper.ts +3 -2
package/dist/editor.cjs
CHANGED
|
@@ -90,9 +90,24 @@ function targetAttr(fn) {
|
|
|
90
90
|
set(value) {
|
|
91
91
|
const old = this[privateKey];
|
|
92
92
|
if (old !== value) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
if (this.config) {
|
|
94
|
+
const isSelect = key === 'target';
|
|
95
|
+
if (isSelect) {
|
|
96
|
+
if (value instanceof Array && value.length > 1 && value[0].locked)
|
|
97
|
+
value.splice(0, 1);
|
|
98
|
+
const { beforeSelect } = this.config;
|
|
99
|
+
if (beforeSelect) {
|
|
100
|
+
const check = beforeSelect({ target: value });
|
|
101
|
+
if (typeof check === 'object')
|
|
102
|
+
value = check;
|
|
103
|
+
else if (check === false)
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const type = isSelect ? EditorEvent.BEFORE_SELECT : EditorEvent.BEFORE_HOVER;
|
|
108
|
+
if (this.hasEvent(type))
|
|
109
|
+
this.emitEvent(new EditorEvent(type, { editor: this, value: value, oldValue: old }));
|
|
110
|
+
}
|
|
96
111
|
this[privateKey] = value, fn(this, old);
|
|
97
112
|
}
|
|
98
113
|
}
|
|
@@ -393,7 +408,8 @@ class EditSelect extends draw.Group {
|
|
|
393
408
|
return target.leafer !== this.editor.leafer;
|
|
394
409
|
}
|
|
395
410
|
allowDrag(e) {
|
|
396
|
-
|
|
411
|
+
const { boxSelect, multipleSelect } = this.editor.mergeConfig;
|
|
412
|
+
if (this.running && (multipleSelect && boxSelect) && !e.target.draggable) {
|
|
397
413
|
return (!this.editor.editing && this.allow(e.target)) || (e.shiftKey && !findOne(e.path));
|
|
398
414
|
}
|
|
399
415
|
else {
|
|
@@ -411,7 +427,8 @@ class EditSelect extends draw.Group {
|
|
|
411
427
|
return this.isMultipleSelect(e) ? this.findDeepOne(e) : findOne(e.path);
|
|
412
428
|
}
|
|
413
429
|
isMultipleSelect(e) {
|
|
414
|
-
|
|
430
|
+
const { multipleSelect, continuousSelect } = this.editor.mergeConfig;
|
|
431
|
+
return multipleSelect && (e.shiftKey || continuousSelect);
|
|
415
432
|
}
|
|
416
433
|
__listenEvents() {
|
|
417
434
|
const { editor } = this;
|
|
@@ -586,21 +603,25 @@ const EditDataHelper = {
|
|
|
586
603
|
let last;
|
|
587
604
|
switch (direction) {
|
|
588
605
|
case top:
|
|
606
|
+
case topLeft:
|
|
589
607
|
last = { x: 0.5, y: 0 };
|
|
590
608
|
align = 'bottom';
|
|
591
609
|
skewX = 1;
|
|
592
610
|
break;
|
|
593
611
|
case bottom:
|
|
612
|
+
case bottomRight:
|
|
594
613
|
last = { x: 0.5, y: 1 };
|
|
595
614
|
align = 'top';
|
|
596
615
|
skewX = 1;
|
|
597
616
|
break;
|
|
598
617
|
case left$1:
|
|
618
|
+
case bottomLeft:
|
|
599
619
|
last = { x: 0, y: 0.5 };
|
|
600
620
|
align = 'right';
|
|
601
621
|
skewY = 1;
|
|
602
622
|
break;
|
|
603
623
|
case right$1:
|
|
624
|
+
case topRight:
|
|
604
625
|
last = { x: 1, y: 0.5 };
|
|
605
626
|
align = 'left';
|
|
606
627
|
skewY = 1;
|
|
@@ -689,7 +710,7 @@ function updateCursor(editor, e) {
|
|
|
689
710
|
let showResize = pointType.includes('resize');
|
|
690
711
|
if (showResize && rotateable && (e.metaKey || e.ctrlKey || !resizeable))
|
|
691
712
|
showResize = false;
|
|
692
|
-
const showSkew = skewable && !showResize && point.name === 'resize-line';
|
|
713
|
+
const showSkew = skewable && !showResize && (point.name === 'resize-line' || pointType === 'skew');
|
|
693
714
|
const cursor = showSkew ? skewCursor : (showResize ? resizeCursor : rotateCursor);
|
|
694
715
|
rotation += (EditDataHelper.getFlipDirection(point.direction, flippedX, flippedY) + 1) * 45;
|
|
695
716
|
rotation = Math.round(draw.MathHelper.formatRotation(rotation, true) / 2) * 2;
|
|
@@ -911,6 +932,8 @@ class EditBox extends draw.Group {
|
|
|
911
932
|
editor.onRotate(e);
|
|
912
933
|
if (pointType.includes('resize'))
|
|
913
934
|
editor.onScale(e);
|
|
935
|
+
if (pointType === 'skew')
|
|
936
|
+
editor.onSkew(e);
|
|
914
937
|
updateCursor(editor, e);
|
|
915
938
|
}
|
|
916
939
|
onArrow(e) {
|
|
@@ -1092,6 +1115,7 @@ const config = {
|
|
|
1092
1115
|
hover: true,
|
|
1093
1116
|
select: 'press',
|
|
1094
1117
|
openInner: 'double',
|
|
1118
|
+
multipleSelect: true,
|
|
1095
1119
|
boxSelect: true,
|
|
1096
1120
|
moveable: true,
|
|
1097
1121
|
resizeable: true,
|
|
@@ -1118,11 +1142,7 @@ function simulate(editor) {
|
|
|
1118
1142
|
function onTarget(editor, oldValue) {
|
|
1119
1143
|
const { target } = editor;
|
|
1120
1144
|
if (target) {
|
|
1121
|
-
|
|
1122
|
-
if (!list.every(checkEditable)) {
|
|
1123
|
-
editor.target = list.filter(checkEditable);
|
|
1124
|
-
return;
|
|
1125
|
-
}
|
|
1145
|
+
editor.leafList = target instanceof draw.LeafList ? target : new draw.LeafList(target);
|
|
1126
1146
|
if (editor.multiple)
|
|
1127
1147
|
simulate(editor);
|
|
1128
1148
|
}
|
|
@@ -1149,9 +1169,6 @@ function onTarget(editor, oldValue) {
|
|
|
1149
1169
|
function onHover(editor, oldValue) {
|
|
1150
1170
|
editor.emitEvent(new EditorEvent(EditorEvent.HOVER, { editor, value: editor.hoverTarget, oldValue }));
|
|
1151
1171
|
}
|
|
1152
|
-
function checkEditable(item) {
|
|
1153
|
-
return item.editable && !item.locked;
|
|
1154
|
-
}
|
|
1155
1172
|
|
|
1156
1173
|
const order = (a, b) => a.parent.children.indexOf(a) - b.parent.children.indexOf(b);
|
|
1157
1174
|
const reverseOrder = (a, b) => b.parent.children.indexOf(b) - a.parent.children.indexOf(a);
|
|
@@ -1183,13 +1200,16 @@ const EditorHelper = {
|
|
|
1183
1200
|
const ungroupList = [];
|
|
1184
1201
|
app.lockLayout();
|
|
1185
1202
|
list.forEach(leaf => {
|
|
1186
|
-
if (leaf.isBranch
|
|
1203
|
+
if (leaf.isBranch) {
|
|
1187
1204
|
const { parent, children } = leaf;
|
|
1188
1205
|
while (children.length) {
|
|
1189
1206
|
ungroupList.push(children[0]);
|
|
1190
1207
|
children[0].dropTo(parent, parent.children.indexOf(leaf));
|
|
1191
1208
|
}
|
|
1192
|
-
leaf.
|
|
1209
|
+
if (leaf.isBranchLeaf)
|
|
1210
|
+
ungroupList.push(leaf);
|
|
1211
|
+
else
|
|
1212
|
+
leaf.remove();
|
|
1193
1213
|
}
|
|
1194
1214
|
else {
|
|
1195
1215
|
ungroupList.push(leaf);
|
|
@@ -1494,13 +1514,22 @@ class Editor extends draw.Group {
|
|
|
1494
1514
|
this.skewOf(origin, skewX, skewY);
|
|
1495
1515
|
}
|
|
1496
1516
|
move(x, y = 0) {
|
|
1497
|
-
const { element } = this;
|
|
1498
1517
|
if (!this.checkTransform('moveable'))
|
|
1499
1518
|
return;
|
|
1500
|
-
|
|
1519
|
+
if (typeof x === 'object')
|
|
1520
|
+
y = x.y, x = x.x;
|
|
1521
|
+
const { element: target } = this, { beforeMove } = this.mergeConfig;
|
|
1522
|
+
if (beforeMove) {
|
|
1523
|
+
const check = beforeMove({ target, x, y });
|
|
1524
|
+
if (typeof check === 'object')
|
|
1525
|
+
x = check.x, y = check.y;
|
|
1526
|
+
else if (check === false)
|
|
1527
|
+
return;
|
|
1528
|
+
}
|
|
1529
|
+
const world = target.getWorldPointByLocal({ x, y }, null, true);
|
|
1501
1530
|
if (this.multiple)
|
|
1502
|
-
|
|
1503
|
-
const data = { target
|
|
1531
|
+
target.safeChange(() => target.move(x, y));
|
|
1532
|
+
const data = { target, editor: this, moveX: world.x, moveY: world.y };
|
|
1504
1533
|
this.emitEvent(new EditorMoveEvent(EditorMoveEvent.BEFORE_MOVE, data));
|
|
1505
1534
|
const event = new EditorMoveEvent(EditorMoveEvent.MOVE, data);
|
|
1506
1535
|
this.editTool.onMove(event);
|
|
@@ -1509,8 +1538,14 @@ class Editor extends draw.Group {
|
|
|
1509
1538
|
scaleWithDrag(data) {
|
|
1510
1539
|
if (!this.checkTransform('resizeable'))
|
|
1511
1540
|
return;
|
|
1512
|
-
const { element } = this;
|
|
1513
|
-
|
|
1541
|
+
const { element: target } = this, { beforeScale } = this.mergeConfig;
|
|
1542
|
+
if (beforeScale) {
|
|
1543
|
+
const { origin, scaleX, scaleY, drag } = data;
|
|
1544
|
+
const check = beforeScale({ target, drag, origin, scaleX, scaleY });
|
|
1545
|
+
if (check === false)
|
|
1546
|
+
return;
|
|
1547
|
+
}
|
|
1548
|
+
data = Object.assign(Object.assign({}, data), { target, editor: this, worldOrigin: target.getWorldPoint(data.origin) });
|
|
1514
1549
|
this.emitEvent(new EditorScaleEvent(EditorScaleEvent.BEFORE_SCALE, data));
|
|
1515
1550
|
const event = new EditorScaleEvent(EditorScaleEvent.SCALE, data);
|
|
1516
1551
|
this.editTool.onScaleWithDrag(event);
|
|
@@ -1519,10 +1554,17 @@ class Editor extends draw.Group {
|
|
|
1519
1554
|
scaleOf(origin, scaleX, scaleY = scaleX, _resize) {
|
|
1520
1555
|
if (!this.checkTransform('resizeable'))
|
|
1521
1556
|
return;
|
|
1522
|
-
const { element } = this;
|
|
1557
|
+
const { element: target } = this, { beforeScale } = this.mergeConfig;
|
|
1558
|
+
if (beforeScale) {
|
|
1559
|
+
const check = beforeScale({ target, origin, scaleX, scaleY });
|
|
1560
|
+
if (typeof check === 'object')
|
|
1561
|
+
scaleX = check.scaleX, scaleY = check.scaleY;
|
|
1562
|
+
else if (check === false)
|
|
1563
|
+
return;
|
|
1564
|
+
}
|
|
1523
1565
|
const worldOrigin = this.getWorldOrigin(origin);
|
|
1524
|
-
const transform = this.multiple && this.getChangedTransform(() =>
|
|
1525
|
-
const data = { target
|
|
1566
|
+
const transform = this.multiple && this.getChangedTransform(() => target.safeChange(() => target.scaleOf(origin, scaleX, scaleY)));
|
|
1567
|
+
const data = { target, editor: this, worldOrigin, scaleX, scaleY, transform };
|
|
1526
1568
|
this.emitEvent(new EditorScaleEvent(EditorScaleEvent.BEFORE_SCALE, data));
|
|
1527
1569
|
const event = new EditorScaleEvent(EditorScaleEvent.SCALE, data);
|
|
1528
1570
|
this.editTool.onScale(event);
|
|
@@ -1543,10 +1585,17 @@ class Editor extends draw.Group {
|
|
|
1543
1585
|
rotateOf(origin, rotation) {
|
|
1544
1586
|
if (!this.checkTransform('rotateable'))
|
|
1545
1587
|
return;
|
|
1546
|
-
const { element } = this;
|
|
1588
|
+
const { element: target } = this, { beforeRotate } = this.mergeConfig;
|
|
1589
|
+
if (beforeRotate) {
|
|
1590
|
+
const check = beforeRotate({ target, origin, rotation });
|
|
1591
|
+
if (typeof check === 'number')
|
|
1592
|
+
rotation = check;
|
|
1593
|
+
else if (check === false)
|
|
1594
|
+
return;
|
|
1595
|
+
}
|
|
1547
1596
|
const worldOrigin = this.getWorldOrigin(origin);
|
|
1548
|
-
const transform = this.multiple && this.getChangedTransform(() =>
|
|
1549
|
-
const data = { target
|
|
1597
|
+
const transform = this.multiple && this.getChangedTransform(() => target.safeChange(() => target.rotateOf(origin, rotation)));
|
|
1598
|
+
const data = { target, editor: this, worldOrigin, rotation, transform };
|
|
1550
1599
|
this.emitEvent(new EditorRotateEvent(EditorRotateEvent.BEFORE_ROTATE, data));
|
|
1551
1600
|
const event = new EditorRotateEvent(EditorRotateEvent.ROTATE, data);
|
|
1552
1601
|
this.editTool.onRotate(event);
|
|
@@ -1555,10 +1604,17 @@ class Editor extends draw.Group {
|
|
|
1555
1604
|
skewOf(origin, skewX, skewY = 0, _resize) {
|
|
1556
1605
|
if (!this.checkTransform('skewable'))
|
|
1557
1606
|
return;
|
|
1558
|
-
const { element } = this;
|
|
1607
|
+
const { element: target } = this, { beforeSkew } = this.mergeConfig;
|
|
1608
|
+
if (beforeSkew) {
|
|
1609
|
+
const check = beforeSkew({ target, origin, skewX, skewY });
|
|
1610
|
+
if (typeof check === 'object')
|
|
1611
|
+
skewX = check.skewX, skewY = check.skewY;
|
|
1612
|
+
else if (check === false)
|
|
1613
|
+
return;
|
|
1614
|
+
}
|
|
1559
1615
|
const worldOrigin = this.getWorldOrigin(origin);
|
|
1560
|
-
const transform = this.multiple && this.getChangedTransform(() =>
|
|
1561
|
-
const data = { target
|
|
1616
|
+
const transform = this.multiple && this.getChangedTransform(() => target.safeChange(() => target.skewOf(origin, skewX, skewY)));
|
|
1617
|
+
const data = { target, editor: this, worldOrigin, skewX, skewY, transform };
|
|
1562
1618
|
this.emitEvent(new EditorSkewEvent(EditorSkewEvent.BEFORE_SKEW, data));
|
|
1563
1619
|
const event = new EditorSkewEvent(EditorSkewEvent.SKEW, data);
|
|
1564
1620
|
this.editTool.onSkew(event);
|