@@ -12,34 +12,63 @@ import {
12
12
13
13
import { getUri } from '../utils/fileUtils' ;
14
14
15
+ /**
16
+ * Defines Table view class for managing state and behaviour of Table webview panels.
17
+ */
15
18
export class TableView {
16
19
public static currentView : TableView | undefined ;
17
20
private readonly _webviewPanel : WebviewPanel ;
18
21
private _disposables : Disposable [ ] = [ ] ;
19
22
23
+ /**
24
+ * Creates new TableView instance for the initial table data rendering.
25
+ *
26
+ * @param webviewPanel Reference to the webview panel
27
+ * @param extensionUri Extension directory Uri
28
+ */
20
29
private constructor ( webviewPanel : WebviewPanel , extensionUri : Uri ) {
21
30
this . _webviewPanel = webviewPanel ;
31
+
32
+ // dispose table view resources when table view panel is closed by the user or via vscode apis
22
33
this . _webviewPanel . onDidDispose ( this . dispose , null , this . _disposables ) ;
34
+
35
+ // set table view html content for the webview panel
23
36
this . _webviewPanel . webview . html = this . getWebviewContent ( this . _webviewPanel . webview , extensionUri ) ;
37
+
38
+ // add webview messaging and commands handler
39
+ this . addWebviewMessageListener ( this . _webviewPanel . webview ) ;
24
40
}
25
41
42
+ /**
43
+ * Reveals current table view or creates new table webview panel for table data display.
44
+ *
45
+ * @param extensionUri Extension directory Uri
46
+ */
26
47
public static render ( extensionUri : Uri ) {
27
48
if ( TableView . currentView ) {
49
+ // show current table webview panel
28
50
TableView . currentView . _webviewPanel . reveal ( ViewColumn . Active ) ;
29
51
}
30
52
else {
31
- const webviewPanel = window . createWebviewPanel ( 'tableView' , 'Table View' , {
32
- viewColumn : ViewColumn . Active ,
53
+ const webviewPanel = window . createWebviewPanel (
54
+ 'tableView' , // webview panel type
55
+ 'Table View' , // webview panel title
56
+ {
57
+ viewColumn : ViewColumn . Active , // use active view column for display
33
58
preserveFocus : true
34
- } , { // weview panel options
35
- enableScripts : true ,
36
- enableCommandUris : true
59
+ } ,
60
+ { // weview panel options
61
+ enableScripts : true , // enable JavaScript in webview
62
+ enableCommandUris : true // ???
37
63
}
38
64
) ;
39
65
TableView . currentView = new TableView ( webviewPanel , extensionUri ) ;
40
66
}
41
67
}
42
68
69
+ /**
70
+ * Disposes table view resources when webview panel is closed.
71
+ */
43
72
public dispose ( ) {
44
73
TableView . currentView = undefined ;
45
74
this . _webviewPanel . dispose ( ) ;
@@ -51,22 +80,34 @@ export class TableView {
51
80
}
52
81
}
53
82
54
- private getWebviewContent ( webview : Webview , extensionUri : Uri ) {
55
- const toolkitUri : Uri = getUri ( webview , extensionUri , [
83
+ /**
84
+ * Creates webview html content for the webview panel display.
85
+ *
86
+ * @param webview Reference to the extensions webview
87
+ * @param extensionUri Extension directory Uri
88
+ * @returns Html string for the webview content
89
+ */
90
+ private getWebviewContent ( webview : Webview , extensionUri : Uri ) : string {
91
+ const webviewUiToolkitUri : Uri = getUri ( webview , extensionUri , [
56
92
'node_modules' ,
57
93
'@vscode' ,
58
94
'webview-ui-toolkit' ,
59
95
'dist' ,
60
96
'toolkit.js' ,
61
97
] ) ;
62
98
99
+ const tableViewUri : Uri = getUri ( webview , extensionUri , [ 'web' , 'scripts' , 'tableView.js' ] ) ;
100
+
101
+ // Tip: Install the es6-string-html VS Code extension
102
+ // to enable html code highlighting below
63
103
return /*html*/ `
64
104
<!DOCTYPE html>
65
105
<html lang="en">
66
106
<head>
67
107
<meta charset="UTF-8">
68
108
<meta name="viewport" content="width=device-width, initial-scale=1.0">
69
- <script type="module" src="${ toolkitUri } "></script>
109
+ <script type="module" src="${ webviewUiToolkitUri } "></script>
110
+ <script type="module" src="${ tableViewUri } "></script>
70
111
<title>Table View</title>
71
112
</head>
72
113
<body>
@@ -76,4 +117,25 @@ export class TableView {
76
117
</html>
77
118
` ;
78
119
}
79
- }
120
+
121
+ /**
122
+ * Adds webivew messaging support and executes commands
123
+ * based on the message command received.
124
+ *
125
+ * @param webview Reference to the extension webview
126
+ */
127
+ private addWebviewMessageListener ( webview : Webview ) {
128
+ webview . onDidReceiveMessage ( ( message : any ) => {
129
+ const command : string = message . command ;
130
+ const text = message . text ;
131
+ switch ( command ) {
132
+ case 'hello' :
133
+ window . showInformationMessage ( text ) ;
134
+ break ;
135
+ }
136
+ } ,
137
+ undefined , // args
138
+ this . _disposables
139
+ ) ;
140
+ }
141
+ }
0 commit comments