|
@@ -415,6 +415,7 @@
|
|
|
false,
|
|
|
'medium');
|
|
|
},
|
|
|
+ separator_after: true,
|
|
|
},
|
|
|
"cut": {
|
|
|
"label": "<span class='text-sm'>Cut</span>",
|
|
@@ -431,6 +432,11 @@
|
|
|
let selected = StatTree.selectedNode();
|
|
|
if(selected) {
|
|
|
StatTree.el.jstree(true).copy(selected.id);
|
|
|
+
|
|
|
+ // put into localStorage for paste_ext
|
|
|
+ let node = StatTree.el.jstree(true).get_json(selected.id);
|
|
|
+ localStorage.stPasteBuffer = JSON.stringify(StatTree.getPasteBufferForNode(node));
|
|
|
+
|
|
|
}
|
|
|
},
|
|
|
},
|
|
@@ -444,6 +450,25 @@
|
|
|
}
|
|
|
},
|
|
|
},
|
|
|
+ "paste_ext": {
|
|
|
+ "label": "<span class='text-sm'>Paste (external)</span>",
|
|
|
+ "_disabled": !localStorage.stPasteBuffer,
|
|
|
+ "action": function (obj) {
|
|
|
+ let selected = StatTree.selectedNode();
|
|
|
+ if(selected && !!localStorage.stPasteBuffer) {
|
|
|
+ try {
|
|
|
+ let parsed = JSON.parse(localStorage.stPasteBuffer);
|
|
|
+ StatTree.el.jstree(true).create_node(selected.id, parsed);
|
|
|
+ StatTree.el.jstree(true).open_node(selected.id);
|
|
|
+ }
|
|
|
+ catch (e) {
|
|
|
+ console.error(e);
|
|
|
+ console.error('Unable to paste. Invalid buffer.')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ separator_after: true,
|
|
|
+ },
|
|
|
"remove": {
|
|
|
"label": "<span class='text-sm'>Remove</span>",
|
|
|
"action": function (obj) {
|
|
@@ -596,6 +621,23 @@
|
|
|
}
|
|
|
},
|
|
|
|
|
|
+ getPasteBufferForNode(_node) {
|
|
|
+ let children = [];
|
|
|
+ for (let i = 0; i < _node.children.length; i++) {
|
|
|
+ children.push(this.getPasteBufferForNode(_node.children[i]));
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ "text": _node.text,
|
|
|
+ "state": {
|
|
|
+ "opened": true,
|
|
|
+ "disabled": false,
|
|
|
+ "selected": false,
|
|
|
+ },
|
|
|
+ "children": children,
|
|
|
+ "data": _node.data
|
|
|
+ };
|
|
|
+ },
|
|
|
+
|
|
|
payload: function() {
|
|
|
let raw = this.el.jstree('get_json');
|
|
|
let nodes = [];
|