@aicupa/plugin-cut 1.0.1 → 1.0.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/package.json +3 -3
- package/service.js +40 -37
- package/.github/workflows/main.yml +0 -21
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aicupa/plugin-cut",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Cut and paste tree nodes",
|
|
5
5
|
"main": "./service",
|
|
6
6
|
"view": "./view",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
26
|
"license": "MIT",
|
|
27
|
-
"
|
|
28
|
-
"@aicupa/api": "^1.0.
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@aicupa/api": "^1.0.2"
|
|
29
29
|
}
|
|
30
30
|
}
|
package/service.js
CHANGED
|
@@ -1,79 +1,82 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @param {import('@aicupa/api').PluginApi} api
|
|
3
|
+
* @returns {import('@aicupa/api').Plugin}
|
|
4
|
+
*/
|
|
5
|
+
module.exports = (api) => {
|
|
6
|
+
let cutBuffer = null;
|
|
5
7
|
|
|
6
8
|
return {
|
|
7
9
|
cutNode({ node, filePath }) {
|
|
8
|
-
cutBuffer = { node, filePath }
|
|
9
|
-
return { ok: true }
|
|
10
|
+
cutBuffer = { node, filePath };
|
|
11
|
+
return { ok: true };
|
|
10
12
|
},
|
|
11
13
|
|
|
12
14
|
async pasteNode({ targetNode, filePath }) {
|
|
13
15
|
if (!cutBuffer) {
|
|
14
|
-
return { ok: false, error:
|
|
16
|
+
return { ok: false, error: "No node in cut buffer" };
|
|
15
17
|
}
|
|
16
18
|
|
|
17
|
-
const source = cutBuffer
|
|
18
|
-
cutBuffer = null
|
|
19
|
+
const source = cutBuffer;
|
|
20
|
+
cutBuffer = null;
|
|
19
21
|
|
|
20
|
-
const
|
|
21
|
-
if (!
|
|
22
|
-
return { ok: false, error:
|
|
22
|
+
const storeData = await api.getTree(filePath);
|
|
23
|
+
if (!storeData) {
|
|
24
|
+
return { ok: false, error: "Failed to read tree" };
|
|
23
25
|
}
|
|
24
26
|
|
|
25
|
-
const treeData = api.getArray(
|
|
27
|
+
const treeData = api.getArray(storeData.tree);
|
|
26
28
|
|
|
27
|
-
const removed = removeNodeByKey(treeData, source.node.key)
|
|
29
|
+
const removed = removeNodeByKey(treeData, source.node.key);
|
|
28
30
|
if (!removed) {
|
|
29
|
-
return { ok: false, error:
|
|
31
|
+
return { ok: false, error: "Source node not found" };
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
const target = findNode(treeData, targetNode.key)
|
|
34
|
+
const target = findNode(treeData, targetNode.key);
|
|
33
35
|
if (!target) {
|
|
34
|
-
return { ok: false, error:
|
|
36
|
+
return { ok: false, error: "Target node not found" };
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
if (!Array.isArray(target.children)) {
|
|
38
|
-
target.children = []
|
|
40
|
+
target.children = [];
|
|
39
41
|
}
|
|
40
|
-
target.children.push(removed)
|
|
42
|
+
target.children.push(removed);
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
api.
|
|
44
|
+
storeData.tree = treeData;
|
|
45
|
+
await api.store("todotree", storeData, filePath);
|
|
46
|
+
api.reload(filePath);
|
|
44
47
|
|
|
45
|
-
return { ok: true }
|
|
48
|
+
return { ok: true };
|
|
46
49
|
},
|
|
47
50
|
|
|
48
51
|
getCutBuffer() {
|
|
49
|
-
return { ok: true, node: cutBuffer?.node || null }
|
|
52
|
+
return { ok: true, node: cutBuffer?.node || null };
|
|
50
53
|
},
|
|
51
54
|
|
|
52
55
|
clearCutBuffer() {
|
|
53
|
-
cutBuffer = null
|
|
54
|
-
return { ok: true }
|
|
56
|
+
cutBuffer = null;
|
|
57
|
+
return { ok: true };
|
|
55
58
|
},
|
|
56
|
-
}
|
|
57
|
-
}
|
|
59
|
+
};
|
|
60
|
+
};
|
|
58
61
|
|
|
59
62
|
function findNode(tree, key) {
|
|
60
|
-
if (!Array.isArray(tree)) return null
|
|
63
|
+
if (!Array.isArray(tree)) return null;
|
|
61
64
|
for (const node of tree) {
|
|
62
|
-
if (node.key == key) return node
|
|
63
|
-
const found = findNode(node.children, key)
|
|
64
|
-
if (found) return found
|
|
65
|
+
if (node.key == key) return node;
|
|
66
|
+
const found = findNode(node.children, key);
|
|
67
|
+
if (found) return found;
|
|
65
68
|
}
|
|
66
|
-
return null
|
|
69
|
+
return null;
|
|
67
70
|
}
|
|
68
71
|
|
|
69
72
|
function removeNodeByKey(tree, key) {
|
|
70
|
-
if (!Array.isArray(tree)) return null
|
|
73
|
+
if (!Array.isArray(tree)) return null;
|
|
71
74
|
for (let i = 0; i < tree.length; i++) {
|
|
72
75
|
if (tree[i].key == key) {
|
|
73
|
-
return tree.splice(i, 1)[0]
|
|
76
|
+
return tree.splice(i, 1)[0];
|
|
74
77
|
}
|
|
75
|
-
const found = removeNodeByKey(tree[i].children, key)
|
|
76
|
-
if (found) return found
|
|
78
|
+
const found = removeNodeByKey(tree[i].children, key);
|
|
79
|
+
if (found) return found;
|
|
77
80
|
}
|
|
78
|
-
return null
|
|
81
|
+
return null;
|
|
79
82
|
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
name: Npm Publish
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
tags:
|
|
6
|
-
- 'v*.*.*'
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
Npm-Publish:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
steps:
|
|
12
|
-
- name: Checkout
|
|
13
|
-
uses: actions/checkout@v2.3.4
|
|
14
|
-
|
|
15
|
-
- name: Install Deps
|
|
16
|
-
run: yarn install
|
|
17
|
-
|
|
18
|
-
- name: publish with latest tag
|
|
19
|
-
uses: JS-DevTools/npm-publish@v1
|
|
20
|
-
with:
|
|
21
|
-
token: ${{ secrets.NPM_AUTH_TOKEN }}
|