|
@@ -55,6 +55,40 @@
|
55
|
55
|
return target || el;
|
56
|
56
|
}
|
57
|
57
|
|
|
58
|
+ function deleteSelection() {
|
|
59
|
+ var msgs = selected_els.map(function(el) {
|
|
60
|
+ return ({
|
|
61
|
+ "type": "delete",
|
|
62
|
+ "id": el.id
|
|
63
|
+ });
|
|
64
|
+ });
|
|
65
|
+ var data = {
|
|
66
|
+ _children: msgs
|
|
67
|
+ }
|
|
68
|
+ Tools.drawAndSend(data);
|
|
69
|
+ selected_els = [];
|
|
70
|
+ }
|
|
71
|
+
|
|
72
|
+ function duplicateSelection() {
|
|
73
|
+ if (!(selectorState == selectorStates.pointing)
|
|
74
|
+ || (selected_els.length == 0)) return;
|
|
75
|
+ var msgs = [];
|
|
76
|
+ var newids = [];
|
|
77
|
+ for (var i=0; i<selected_els.length; i++) {
|
|
78
|
+ var id = selected_els[i].id;
|
|
79
|
+ msgs[i] = {
|
|
80
|
+ type: "copy",
|
|
81
|
+ id: id,
|
|
82
|
+ newid: Tools.generateUID(id[0])
|
|
83
|
+ };
|
|
84
|
+ newids[i] = id;
|
|
85
|
+ }
|
|
86
|
+ Tools.drawAndSend({_children: msgs});
|
|
87
|
+ selected_els = newids.map(function(id) {
|
|
88
|
+ return Tools.svg.getElementById(id);
|
|
89
|
+ });
|
|
90
|
+ }
|
|
91
|
+
|
58
|
92
|
function createSelectorRect() {
|
59
|
93
|
var shape = Tools.createSVGElement("rect");
|
60
|
94
|
shape.id = "selectionRect";
|
|
@@ -181,6 +215,15 @@
|
181
|
215
|
tmatrix.e = data.deltax || 0;
|
182
|
216
|
tmatrix.f = data.deltay || 0;
|
183
|
217
|
break;
|
|
218
|
+ case "copy":
|
|
219
|
+ var newElement = Tools.svg.getElementById(data.id).cloneNode(true);
|
|
220
|
+ newElement.id = data.newid;
|
|
221
|
+ Tools.drawingArea.appendChild(newElement);
|
|
222
|
+ break;
|
|
223
|
+ case "delete":
|
|
224
|
+ data.tool = "Eraser";
|
|
225
|
+ messageForTool(data);
|
|
226
|
+ break;
|
184
|
227
|
default:
|
185
|
228
|
throw new Error("Mover: 'move' instruction with unknown type. ", data);
|
186
|
229
|
}
|
|
@@ -251,8 +294,28 @@
|
251
|
294
|
selected = null;
|
252
|
295
|
}
|
253
|
296
|
|
|
297
|
+ function deleteShortcut(e) {
|
|
298
|
+ if (e.key == "Delete" &&
|
|
299
|
+ !e.target.matches("input[type=text], textarea"))
|
|
300
|
+ deleteSelection();
|
|
301
|
+ }
|
|
302
|
+
|
|
303
|
+ function duplicateShortcut(e) {
|
|
304
|
+ if (e.key == "d" &&
|
|
305
|
+ !e.target.matches("input[type=text], textarea"))
|
|
306
|
+ duplicateSelection();
|
|
307
|
+ }
|
|
308
|
+
|
254
|
309
|
function switchTool() {
|
255
|
310
|
selected = null;
|
|
311
|
+ if (handTool.secondary.active) {
|
|
312
|
+ window.addEventListener("keydown", deleteShortcut);
|
|
313
|
+ window.addEventListener("keydown", duplicateShortcut);
|
|
314
|
+ }
|
|
315
|
+ else {
|
|
316
|
+ window.removeEventListener("keydown", deleteShortcut);
|
|
317
|
+ window.removeEventListener("keydown", duplicateShortcut);
|
|
318
|
+ }
|
256
|
319
|
}
|
257
|
320
|
|
258
|
321
|
var handTool = { //The new tool
|