Эх сурвалжийг харах

Stat tree edit - copy/paste

Vijayakrishnan 3 жил өмнө
parent
commit
9076eb8443

+ 3 - 0
public/css/style.css

@@ -2811,3 +2811,6 @@ body #vakata-dnd {
     font-size: 12px;
     background: rgba(240, 248, 255, 0.76);
 }
+body .vakata-context .vakata-context-separator>a {
+    margin: 0;
+}

+ 42 - 0
resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

@@ -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 = [];