@@ -3,7 +3,6 @@ import * as _ from "lodash";
3
3
import * as fs from "fs" ;
4
4
import * as path from "path" ;
5
5
import { marked } from 'marked' ;
6
- import { dispose } from "vscode-extension-telemetry-wrapper" ;
7
6
8
7
export class TerraformResDocProvider {
9
8
// public provideDefinition(document: TextDocument, position: Position, token: CancellationToken): Definition {
@@ -24,38 +23,30 @@ export class TerraformResDocProvider {
24
23
private readonly _extensionUri : vscode . Uri ;
25
24
private _disposables : vscode . Disposable [ ] = [ ] ;
26
25
public static readonly viewType = 'tcTerraform.doc.show.id' ;
26
+ private static tempFile : vscode . TextDocument | null = null ;
27
27
28
28
public static async createOrShow ( context : vscode . ExtensionContext , resType : string ) {
29
- const column = vscode . window . activeTextEditor
30
- ? vscode . window . activeTextEditor . viewColumn
31
- : undefined ;
32
-
33
-
34
- const targetColumn = column + 1 ;
35
- const rightEditor = vscode . window . visibleTextEditors . find ( ( editor ) => editor . viewColumn === targetColumn ) ;
36
-
37
- let newEditor = rightEditor ;
38
-
39
- if ( ! newEditor ) {
40
- // new editor to the right of the current editor
41
- const tempFile = await vscode . workspace . openTextDocument ( { content : '' , language : 'plaintext' } ) ;
42
- newEditor = await vscode . window . showTextDocument ( tempFile , { viewColumn : targetColumn , preview : false } ) ;
43
- }
44
-
45
- // If we already have a panel, show it.
29
+ // If we already have a panel, clean it.
46
30
if ( TerraformResDocProvider . currentProvider ) {
47
31
// TerraformResDocProvider.currentProvider._panel.reveal(targetColumn);
48
32
TerraformResDocProvider . currentProvider . dispose ( ) ;
49
- return ;
50
33
}
51
34
35
+ const column = vscode . window . activeTextEditor
36
+ ? vscode . window . activeTextEditor . viewColumn
37
+ : undefined ;
38
+
39
+ const targetColumn = column + 1 ;
40
+ // display the definition beside the current editor-begin++++++
52
41
// Otherwise, create a new panel.
53
42
const panel = vscode . window . createWebviewPanel (
54
43
TerraformResDocProvider . viewType ,
55
44
`Doc Definition: ${ resType } ` ,
56
- newEditor . viewColumn ,
45
+ targetColumn ,
57
46
getWebviewOptions ( context . extensionUri ) ,
58
47
) ;
48
+ // display the definition beside the current editor-end+++++++
49
+
59
50
// construct the _panel
60
51
TerraformResDocProvider . currentProvider = new TerraformResDocProvider ( panel , context . extensionUri ) ;
61
52
const current = TerraformResDocProvider . currentProvider ;
@@ -64,6 +55,7 @@ export class TerraformResDocProvider {
64
55
const markdownPath = path . join ( docsRoot , `${ mdResType } .html.markdown` ) ;
65
56
if ( ! fs . existsSync ( markdownPath ) ) {
66
57
console . error ( 'Can not find the markdownFile: %s' , markdownPath ) ;
58
+ TerraformResDocProvider . currentProvider . dispose ( ) ;
67
59
return ;
68
60
}
69
61
const markdownFile = fs . readFileSync ( markdownPath , 'utf8' ) ;
@@ -72,21 +64,25 @@ export class TerraformResDocProvider {
72
64
try {
73
65
const cleanedMarkdownFile = markdownFile . replace ( / - - - [ \s \S ] * ?- - - / , '' ) ;
74
66
markdown = marked ( cleanedMarkdownFile ) ;
75
- current . _panel . webview . html = markdown ;
67
+ const htmlMarkdown = htmlTemplate . replace ( '{{content}}' , markdown ) ;
68
+ current . _panel . webview . html = htmlMarkdown ;
76
69
} catch ( error ) {
77
70
console . error ( 'Error processing the Markdown file:' , error ) ;
78
71
return ;
79
72
}
80
73
// Listen for when the panel is disposed
81
- current . _panel . onDidDispose ( ( ) => current . dispose ( ) , null , current . _disposables ) ;
74
+ current . _panel . onDidDispose ( ( ) => {
75
+ current . dispose ( ) ;
76
+ } , null , current . _disposables ) ;
82
77
}
83
78
84
79
dispose ( ) {
85
- TerraformResDocProvider . currentProvider = undefined ;
86
-
80
+ // Close the WebviewPanel
81
+ if ( this . _panel ) {
82
+ this . _panel . dispose ( ) ;
83
+ }
87
84
// Clean up our resources
88
- this . _panel . dispose ( ) ;
89
-
85
+ TerraformResDocProvider . currentProvider = undefined ;
90
86
while ( this . _disposables . length ) {
91
87
const x = this . _disposables . pop ( ) ;
92
88
if ( x ) {
@@ -111,3 +107,44 @@ function getWebviewOptions(extensionUri: vscode.Uri): vscode.WebviewOptions {
111
107
} ;
112
108
}
113
109
110
+ const htmlTemplate = `
111
+ <!DOCTYPE html>
112
+ <html lang="en">
113
+ <head>
114
+ <meta charset="UTF-8">
115
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
116
+ <style>
117
+ body {
118
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
119
+ font-size: 14px;
120
+ line-height: 1.5;
121
+ word-wrap: break-word;
122
+ }
123
+ h2 {
124
+ font-size: 1.5em;
125
+ font-weight: 600;
126
+ padding-bottom: 0.3em;
127
+ border-bottom: 1px solid #ccc;
128
+ margin-bottom: 1em;
129
+ }
130
+ pre {
131
+ background-color: #333;
132
+ color: #fff; /* Change the font color to white for higher contrast */
133
+ padding: 16px;
134
+ overflow: auto;
135
+ font-size: 100%;
136
+ line-height: 1.45;
137
+ border-radius: 3px;
138
+ }
139
+ pre code.hcl {
140
+ background-color: transparent; /* Set the background color to transparent */
141
+ color: #fff;
142
+ }
143
+ </style>
144
+ </head>
145
+ <body>
146
+ {{content}}
147
+ </body>
148
+ </html>
149
+ ` ;
150
+
0 commit comments