Преглед на файлове

StatTree - paste as root (for importing trees)

Vijayakrishnan преди 3 години
родител
ревизия
d3d8047de6
променени са 1 файла, в които са добавени 29 реда и са изтрити 5 реда
  1. 29 5
      resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

+ 29 - 5
resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

@@ -292,6 +292,8 @@
                                         <a href="#" id="refresh-counts" class="ml-3">Refresh Counts</a>
                                         <a href="#" class="tree-expand-all ml-3" title="Expand All"><i class="fa fa-angle-double-down text-secondary"></i></a>
                                         <a href="#" class="tree-collapse-all ml-2" title="Collapse All"><i class="fa fa-angle-double-up text-secondary"></i></a>
+                                        <a href="#" id="paste-as-root" class="ml-3">Paste as root</a>
+                                        <input type="text" id="paste-container" style="position: fixed; top: 0; left: 0;">
                                         <div class="ml-auto mr-2 d-none if-changed">
                                             <a href="#" class="btn btn-sm btn-primary text-white" id="btn-save-tree">Save</a>
                                             <a href="#" class="ml-1 btn btn-sm btn-default border text-dark bg-white" onclick="return fastReload()">Reset</a>
@@ -623,9 +625,10 @@
                                                                             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));
-
+                                                                            let node = StatTree.el.jstree(true).get_json(selected.id),
+                                                                                json = JSON.stringify(StatTree.getPasteBufferForNode(node));
+                                                                            localStorage.stPasteBuffer = json;
+                                                                            copyTextToClipboard(json);
                                                                         }
                                                                     },
                                                                 },
@@ -896,7 +899,7 @@
                                         if(!realNode.data) return;
                                         if(parent && parent.data.lastRefreshCount !== null && parent.data.lastRefreshCount !== -1) {
                                             if(node.data.lastRefreshCount !== null && node.data.lastRefreshCount !== -1) {
-                                                realNode.data.dropPercent = (((parent.data.lastRefreshCount - node.data.lastRefreshCount) / parent.data.lastRefreshCount) * 100);
+                                                realNode.data.dropPercent = 100 - ((node.data.lastRefreshCount / parent.data.lastRefreshCount) * 100);
                                                 if(realNode.data.dropPercent) {
                                                     let element = StatTree.el.jstree(true).get_node(node.id, true), cssClass = '';
                                                     if(realNode.data.dropPercent > 75) {
@@ -914,7 +917,7 @@
                                                     element.find('>a.jstree-anchor')
                                                         .addClass('has-drop-visualization')
                                                         .addClass(cssClass)
-                                                        .attr('data-drop-percent', (realNode.data.dropPercent.toFixed(1)) + '% ⤵');
+                                                        .attr('data-drop-percent', (realNode.data.dropPercent.toFixed(3)) + '% ⤵');
                                                 }
                                             }
                                         }
@@ -1361,6 +1364,27 @@
                                     return false;
                                 });
 
+                            $('#paste-as-root')
+                                .off('click')
+                                .on('click', function() {
+                                    let pasteInput = $('#paste-container');
+                                    pasteInput.empty().focus();
+                                    navigator.clipboard.readText().then(clipText => {
+                                        // check if valid json
+                                        try {
+                                            let parsed = JSON.parse(clipText);
+                                            // empty the tree
+                                            StatTree.el.jstree(true).delete_node(StatTree.el.jstree(true).get_node("#").children);
+
+                                            // paste it!
+                                            StatTree.el.jstree(true).create_node('#', parsed, 'first');
+                                        }
+                                        catch (e) {
+                                            toastr.error('Invalid paste buffer!');
+                                        }
+                                    })
+                                });
+
                             $(document)
                                 .off('click', '.mv-view-data-trigger')
                                 .on('click', '.mv-view-data-trigger', function() {