@huawei-ide/codearts 0.0.9 → 1.0.1
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/README.md +27 -8
- package/index.js +95 -20
- package/package.json +1 -1
- package/util.js +30 -0
package/README.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# @huawei-ide/codearts
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
用于集成 CodeArts IDE Web
|
|
3
4
|
|
|
4
5
|
## 如何使用
|
|
5
6
|
|
|
@@ -9,15 +10,16 @@
|
|
|
9
10
|
2. 引入 @huawei-ide/codearts
|
|
10
11
|
`const ide = require('@huawei-ide/codearts');`
|
|
11
12
|
|
|
12
|
-
3. 预加载IDE, 返回Promise:
|
|
13
|
+
3. 预加载 IDE, 返回 Promise:
|
|
13
14
|
`await ide.preload();`
|
|
14
15
|
|
|
15
|
-
4. 展示IDE
|
|
16
|
-
其中id参数为挂载节点id
|
|
16
|
+
4. 展示 IDE
|
|
17
|
+
其中 id 参数为挂载节点 id, 返回 Promise:
|
|
17
18
|
`ide.show(id: string, {width:string,height: string}).then(() => {});`
|
|
18
19
|
|
|
19
|
-
5.
|
|
20
|
-
参数content为文件内容,类型为string,path是工程内文件的唯一路径,例如'src', 'src/tool', name为带后缀的文件名:
|
|
20
|
+
5. 打开文件,默认可编辑
|
|
21
|
+
参数 content 为文件内容,类型为 string,path 是工程内文件的唯一路径,例如'src', 'src/tool', name 为带后缀的文件名:
|
|
22
|
+
|
|
21
23
|
```
|
|
22
24
|
ide.openFile({
|
|
23
25
|
content: '## ReadME',
|
|
@@ -26,5 +28,22 @@
|
|
|
26
28
|
});
|
|
27
29
|
```
|
|
28
30
|
|
|
29
|
-
6.
|
|
30
|
-
`ide.
|
|
31
|
+
6. 设置文件是否为预览(只读)状态
|
|
32
|
+
`ide.setPreview(preview: boolean)`
|
|
33
|
+
|
|
34
|
+
7. 获取当前文件最新内容,返回 Promise:
|
|
35
|
+
`await ide.getContent();`
|
|
36
|
+
|
|
37
|
+
8. 设置 Token:
|
|
38
|
+
`ide.setToken();`
|
|
39
|
+
|
|
40
|
+
9. 监听当前文件变化
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
const event = ide.onDidChange(listener: (content: string) => {});
|
|
44
|
+
// 销毁监听
|
|
45
|
+
event.dispose();
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
10. 销毁 IDE
|
|
49
|
+
`ide.dispose();`
|
package/index.js
CHANGED
|
@@ -1,40 +1,75 @@
|
|
|
1
|
-
|
|
1
|
+
import { EventEmitter } from './util'
|
|
2
|
+
|
|
3
|
+
const hcOrigin = 'https://res.hc-cdn.com';
|
|
4
|
+
const iframe = document.createElement('iframe');
|
|
2
5
|
iframe.id = 'codeartside';
|
|
3
|
-
iframe.src = '
|
|
6
|
+
iframe.src = hcOrigin + '/codearts-core-web-static/1.0.17/resources/server/gitcode.html';
|
|
4
7
|
iframe.width = '1px';
|
|
5
8
|
iframe.height = '1px';
|
|
6
9
|
iframe.style.opacity = 0;
|
|
7
10
|
iframe.style.zIndex = -1;
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
12
|
+
const ON_DID_CHANGE = 'onDidChange';
|
|
13
|
+
const eventEmitter = new EventEmitter();
|
|
14
|
+
|
|
15
|
+
function ideLoading() {
|
|
11
16
|
return new Promise((resolve) => {
|
|
12
|
-
|
|
13
|
-
|
|
17
|
+
function handleMessage(event) {
|
|
18
|
+
console.log('-gitcode--receive message---', event.data);
|
|
19
|
+
if (event.origin !== hcOrigin) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
14
22
|
if (event.data === 'ide-loaded') {
|
|
15
23
|
resolve();
|
|
24
|
+
window.removeEventListener('message', handleMessage);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
window.addEventListener('message', handleMessage);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function ideContent() {
|
|
32
|
+
return new Promise((resolve) => {
|
|
33
|
+
function handleMessage(event) {
|
|
34
|
+
const { type, data } = event.data;
|
|
35
|
+
console.log('-gitcode--receive message---', event.data);
|
|
36
|
+
if (event.origin !== hcOrigin) {
|
|
37
|
+
return;
|
|
16
38
|
}
|
|
17
|
-
|
|
39
|
+
if (type === 'ide-content') {
|
|
40
|
+
resolve(data);
|
|
41
|
+
window.removeEventListener('message', handleMessage);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
window.addEventListener('message', handleMessage);
|
|
18
45
|
});
|
|
19
46
|
}
|
|
20
47
|
|
|
48
|
+
function onDidRecieveMessage(event) {
|
|
49
|
+
const { type, data } = event.data;
|
|
50
|
+
if (event.origin !== hcOrigin) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (type === 'ide-on-did-change-file') {
|
|
54
|
+
eventEmitter.emit(ON_DID_CHANGE, data);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function preload() {
|
|
59
|
+
document.body.appendChild(iframe);
|
|
60
|
+
return ideLoading();
|
|
61
|
+
}
|
|
62
|
+
|
|
21
63
|
// style: { width: string, height: string }
|
|
22
64
|
export function show(id, style) {
|
|
23
65
|
var targetNode = document.getElementById(id);
|
|
24
66
|
targetNode.appendChild(iframe);
|
|
25
|
-
const {width, height} = style;
|
|
26
|
-
iframe.width = width;
|
|
27
|
-
iframe.height = height;
|
|
67
|
+
const { width, height } = style;
|
|
68
|
+
iframe.width = width;
|
|
69
|
+
iframe.height = height;
|
|
28
70
|
iframe.style.opacity = 1;
|
|
29
71
|
iframe.style.zIndex = 1;
|
|
30
|
-
return
|
|
31
|
-
window.addEventListener('message', function(event) {
|
|
32
|
-
console.log('-gitcode--receive message---', event.data);
|
|
33
|
-
if (event.data === 'ide-loaded') {
|
|
34
|
-
resolve();
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
});
|
|
72
|
+
return ideLoading();
|
|
38
73
|
}
|
|
39
74
|
|
|
40
75
|
// file: { content: string, path: string, name: string }
|
|
@@ -47,9 +82,49 @@ export function openFile(file) {
|
|
|
47
82
|
}
|
|
48
83
|
|
|
49
84
|
export function dispose() {
|
|
50
|
-
|
|
85
|
+
window.removeEventListener('message', onDidRecieveMessage);
|
|
86
|
+
eventEmitter.clear();
|
|
87
|
+
iframe.remove();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function setPreview(preview) {
|
|
91
|
+
const message = {
|
|
92
|
+
type: 'setPreview',
|
|
93
|
+
data: preview
|
|
94
|
+
};
|
|
95
|
+
postMessage(message);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function getContent() {
|
|
99
|
+
const message = {
|
|
100
|
+
type: 'getContent'
|
|
101
|
+
};
|
|
102
|
+
postMessage(message);
|
|
103
|
+
return ideContent();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function setToken(token) {
|
|
107
|
+
const message = {
|
|
108
|
+
type: 'setToken',
|
|
109
|
+
data: token
|
|
110
|
+
};
|
|
111
|
+
postMessage(message);
|
|
51
112
|
}
|
|
52
113
|
|
|
53
114
|
function postMessage(message) {
|
|
54
|
-
iframe.contentWindow.postMessage(message,
|
|
115
|
+
iframe.contentWindow.postMessage(message, hcOrigin);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
let isRegisteredListener = false;
|
|
119
|
+
export function onDidChange(listener) {
|
|
120
|
+
if (!isRegisteredListener) {
|
|
121
|
+
window.addEventListener('message', onDidRecieveMessage);
|
|
122
|
+
isRegisteredListener = true;
|
|
123
|
+
}
|
|
124
|
+
eventEmitter.on(ON_DID_CHANGE, listener);
|
|
125
|
+
return {
|
|
126
|
+
dispose: () => {
|
|
127
|
+
eventEmitter.off(ON_DID_CHANGE, listener);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
55
130
|
}
|
package/package.json
CHANGED
package/util.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class EventEmitter {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.events = {};
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
on(event, listener) {
|
|
7
|
+
if (!this.events[event]) {
|
|
8
|
+
this.events[event] = [];
|
|
9
|
+
}
|
|
10
|
+
this.events[event].push(listener);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
emit(event, ...args) {
|
|
14
|
+
if (this.events[event]) {
|
|
15
|
+
this.events[event].forEach(listener => {
|
|
16
|
+
listener(...args);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
off(event, listener) {
|
|
22
|
+
if (this.events[event]) {
|
|
23
|
+
this.events[event] = this.events[event].filter(l => l !== listener);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
clear() {
|
|
28
|
+
this.events = {};
|
|
29
|
+
}
|
|
30
|
+
}
|