@@ -2,18 +2,21 @@ import * as path from 'path';
22import  *  as  vscode  from  'vscode' ; 
33import  resx  from  'resx' ; 
44import  {  getNonce  }  from  './utilities/getNonce' ; 
5+ import  {  printChannelOutput  }  from  './extension' ; 
56
67export  class  ResxProvider  implements  vscode . CustomTextEditorProvider  { 
78
89  public  static  register ( context : vscode . ExtensionContext ) : vscode . Disposable  { 
910    const  provider  =  new  ResxProvider ( context ) ; 
1011    const  providerRegistration  =  vscode . window . registerCustomEditorProvider ( ResxProvider . viewType ,  provider ) ; 
12+     printChannelOutput ( "ResX Editor custom editor provider registered." ,  true ) ;     
1113    return  providerRegistration ; 
1214  } 
1315
1416  private  static  readonly  viewType  =  'resx-editor.editor' ; 
1517  private  registered  =  false ; 
16- 
18+   private  currentPanel : vscode . WebviewPanel  |  undefined  =  undefined ; 
19+   
1720  constructor ( 
1821    private  readonly  context : vscode . ExtensionContext 
1922  )  {  } 
@@ -23,20 +26,32 @@ export class ResxProvider implements vscode.CustomTextEditorProvider {
2326    webviewPanel : vscode . WebviewPanel , 
2427    _token : vscode . CancellationToken 
2528  ) : Promise < void >  { 
29+     this . currentPanel  =  webviewPanel ; 
2630    webviewPanel . webview . options  =  { 
2731      enableScripts : true , 
2832      localResourceRoots : [ vscode . Uri . joinPath ( this . context . extensionUri ,  'out' ) ] 
2933    } ; 
3034    webviewPanel . webview . html  =  this . _getWebviewContent ( webviewPanel . webview ) ; 
3135
32-     let  disposable  =  vscode . commands . registerCommand ( 'resx-editor.deleteResource' ,  ( )  =>  { 
36+     try 
37+     { 
38+     if  ( ! this . registered )  { 
39+       printChannelOutput ( "deleteResource command registered" ,  true ) ; 
40+       this . registered  =  true ; 
41+       let  disposable  =  vscode . commands . registerCommand ( 'resx-editor.deleteResource' ,  ( )  =>  { 
3342
34-       webviewPanel . webview . postMessage ( { 
35-         type : 'delete' 
43+         this . currentPanel ?. webview . postMessage ( { 
44+           type : 'delete' 
45+         } ) ; 
3646      } ) ; 
37-     } ) ; 
3847
39-     this . context . subscriptions . push ( disposable ) ; 
48+       this . context . subscriptions . push ( disposable ) ; 
49+     } 
50+   } 
51+   catch  ( e ) 
52+   { 
53+     console . log ( e ) ; 
54+   } 
4055
4156    async  function  updateWebview ( )  { 
4257      webviewPanel . webview . postMessage ( { 
@@ -60,6 +75,9 @@ export class ResxProvider implements vscode.CustomTextEditorProvider {
6075        case  'update' :
6176          this . updateTextDocument ( document ,  e . json ) ; 
6277          return ; 
78+         case  'log' :
79+           printChannelOutput ( e . message ,  true ) ; 
80+           return ; 
6381      } 
6482    } ) ; 
6583
@@ -87,6 +105,10 @@ export class ResxProvider implements vscode.CustomTextEditorProvider {
87105                <head> 
88106                  <meta charset="UTF-8"> 
89107                  <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
108+                   <meta 
109+                     http-equiv="Content-Security-Policy" 
110+                     content="default-src 'none'; img-src ${ webview . cspSource }   https:; script-src ${ webview . cspSource }  ; style-src ${ webview . cspSource }  ;script-src 'nonce-${ nonce }  ';" 
111+                   /> 
90112                </head> 
91113                <body> 
92114                  <vscode-data-grid id="resource-table" aria-label="Basic" generate-header="sticky" aria-label="Sticky Header"></vscode-data-grid> 
0 commit comments