@@ -5,15 +5,15 @@ export class ProteinViewerPanel {
5
5
private readonly _panel : vscode . WebviewPanel ;
6
6
private _disposables : vscode . Disposable [ ] = [ ] ;
7
7
8
- private constructor ( panel : vscode . WebviewPanel , extensionUri : vscode . Uri , accession : string | undefined , clickedFile : vscode . Uri | undefined ) {
8
+ private constructor ( panel : vscode . WebviewPanel , extensionUri : vscode . Uri , accession : string | undefined , clickedFiles : vscode . Uri [ ] | undefined ) {
9
9
this . _panel = panel ;
10
10
this . _panel . onDidDispose ( this . dispose , null , this . _disposables ) ;
11
11
if ( accession != undefined ) {
12
12
this . _panel . webview . html = this . _getWebviewContent ( panel . webview , extensionUri , accession ) ;
13
13
} ;
14
14
15
- if ( clickedFile != undefined ) {
16
- this . _panel . webview . html = this . _getWebviewContentForFile ( panel . webview , extensionUri , clickedFile ) ;
15
+ if ( clickedFiles != undefined ) {
16
+ this . _panel . webview . html = this . _getWebviewContentForFiles ( panel . webview , extensionUri , clickedFiles ) ;
17
17
} ;
18
18
19
19
}
@@ -26,18 +26,17 @@ export class ProteinViewerPanel {
26
26
} ) ;
27
27
28
28
ProteinViewerPanel . currentPanel = new ProteinViewerPanel ( panel , extensionUri , accession , undefined ) ;
29
- }
29
+ }
30
30
31
- public static renderFromFile ( extensionUri : vscode . Uri , clickedFile : vscode . Uri ) {
32
- const fname = clickedFile . path . split ( '/' ) . pop ( ) ;
33
- const windowName = "Protein Viewer - " + fname ;
34
- const panel = vscode . window . createWebviewPanel ( "proteinviewer" , windowName , vscode . ViewColumn . One , {
35
- enableScripts : true ,
36
- retainContextWhenHidden : true
37
- } ) ;
31
+ public static renderFromFiles ( extensionUri : vscode . Uri , clickedFiles : vscode . Uri [ ] ) {
32
+ const fnames = clickedFiles . map ( ( clickedFile ) => clickedFile . path . split ( '/' ) . pop ( ) ) ;
33
+ const windowName = "Protein Viewer - " + fnames . join ( " - " ) ;
34
+ const panel = vscode . window . createWebviewPanel ( "proteinviewer" , windowName , vscode . ViewColumn . One , {
35
+ enableScripts : true ,
36
+ retainContextWhenHidden : true
37
+ } ) ;
38
38
39
- ProteinViewerPanel . currentPanel = new ProteinViewerPanel ( panel , extensionUri , undefined , clickedFile ) ;
40
- //}
39
+ ProteinViewerPanel . currentPanel = new ProteinViewerPanel ( panel , extensionUri , undefined , clickedFiles ) ;
41
40
}
42
41
43
42
public dispose ( ) {
@@ -102,16 +101,19 @@ export class ProteinViewerPanel {
102
101
` ;
103
102
}
104
103
105
- private _getWebviewContentForFile ( webview : vscode . Webview , extensionUri : vscode . Uri , clickedFile : vscode . Uri ) {
106
- //console.log(clickedFile);
107
-
104
+ private _getWebviewContentForFiles ( webview : vscode . Webview , extensionUri : vscode . Uri , clickedFiles : vscode . Uri [ ] ) {
108
105
const cssUri = webview . asWebviewUri ( vscode . Uri . joinPath ( extensionUri , 'node_modules' , 'molstar' , 'build/viewer' , 'molstar.css' ) ) ;
109
106
const jsUri = webview . asWebviewUri ( vscode . Uri . joinPath ( extensionUri , 'node_modules' , 'molstar' , 'build/viewer' , 'molstar.js' ) ) ;
110
- const pdb_contents = webview . asWebviewUri ( clickedFile ) ;
111
- const extension = clickedFile . path . split ( '.' ) . pop ( ) ;
112
-
113
- console . log ( pdb_contents ) ;
114
- console . log ( extension ) ;
107
+ const pdbContents = clickedFiles . map ( ( clickedFile ) => webview . asWebviewUri ( clickedFile ) ) ;
108
+ const extensions = clickedFiles . map ( ( clickedFile ) => clickedFile . path . split ( '.' ) . pop ( ) ) ;
109
+ let loadCommands : String [ ] = [ ] ;
110
+ for ( let i = 0 ; i < pdbContents . length ; i ++ ) {
111
+ const pdbContent = pdbContents [ i ] ;
112
+ const extension = extensions [ i ] ;
113
+ loadCommands . push (
114
+ `viewer.loadStructureFromUrl('${ pdbContent } ', format='${ extension } ');`
115
+ ) ;
116
+ }
115
117
// Tip: Install the es6-string-html VS Code extension to enable code highlighting below
116
118
return /*html*/ `
117
119
<!DOCTYPE html>
@@ -149,7 +151,7 @@ export class ProteinViewerPanel {
149
151
pdbProvider: 'rcsb',
150
152
emdbProvider: 'rcsb',
151
153
});
152
- viewer.loadStructureFromUrl(' ${ pdb_contents } ', format=' ${ extension } ');
154
+ ${ loadCommands . join ( "" ) }
153
155
// viewer.loadAllModelsOrAssemblyFromUrl('https://cs.litemol.org/5ire/full', 'mmcif', false, { representationParams: { theme: { globalName: 'operator-name' } } })
154
156
</script>
155
157
</body>
0 commit comments