Skip to content

Commit 55e5517

Browse files
committed
Move comments so they are on their own line
1 parent 811f849 commit 55e5517

File tree

1 file changed

+156
-141
lines changed

1 file changed

+156
-141
lines changed

src/webview/leetCodePreviewProvider.ts

Lines changed: 156 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -8,51 +8,54 @@ import { ILeetCodeWebviewOption, LeetCodeWebview } from "./LeetCodeWebview";
88
import { markdownEngine } from "./markdownEngine";
99

1010
class LeetCodePreviewProvider extends LeetCodeWebview {
11-
12-
protected readonly viewType: string = "leetcode.preview";
13-
private node: IProblem;
14-
private description: IDescription;
15-
private sideMode: boolean = false;
16-
17-
public isSideMode(): boolean {
18-
return this.sideMode;
19-
}
20-
21-
public show(descString: string, node: IProblem, isSideMode: boolean = false): void {
22-
this.description = this.parseDescription(descString, node);
23-
this.node = node;
24-
this.sideMode = isSideMode;
25-
this.showWebviewInternal();
26-
// Comment out this operation since it sometimes may cause the webview become empty.
27-
// Waiting for the progress of the VS Code side issue: https://github.com/microsoft/vscode/issues/3742
28-
// if (this.sideMode) {
29-
// this.hideSideBar(); // For better view area
30-
// }
31-
}
32-
33-
protected getWebviewOption(): ILeetCodeWebviewOption {
34-
if (!this.sideMode) {
35-
return {
36-
title: `${this.node.name}: Preview`,
37-
viewColumn: ViewColumn.One,
38-
};
39-
} else {
40-
return {
41-
title: "Description",
42-
viewColumn: ViewColumn.Two,
43-
preserveFocus: true,
44-
};
45-
}
11+
protected readonly viewType: string = "leetcode.preview";
12+
private node: IProblem;
13+
private description: IDescription;
14+
private sideMode: boolean = false;
15+
16+
public isSideMode(): boolean {
17+
return this.sideMode;
18+
}
19+
20+
public show(
21+
descString: string,
22+
node: IProblem,
23+
isSideMode: boolean = false
24+
): void {
25+
this.description = this.parseDescription(descString, node);
26+
this.node = node;
27+
this.sideMode = isSideMode;
28+
this.showWebviewInternal();
29+
// Comment out this operation since it sometimes may cause the webview become empty.
30+
// Waiting for the progress of the VS Code side issue: https://github.com/microsoft/vscode/issues/3742
31+
// if (this.sideMode) {
32+
// this.hideSideBar(); // For better view area
33+
// }
34+
}
35+
36+
protected getWebviewOption(): ILeetCodeWebviewOption {
37+
if (!this.sideMode) {
38+
return {
39+
title: `${this.node.name}: Preview`,
40+
viewColumn: ViewColumn.One,
41+
};
42+
} else {
43+
return {
44+
title: "Description",
45+
viewColumn: ViewColumn.Two,
46+
preserveFocus: true,
47+
};
4648
}
49+
}
4750

48-
protected getWebviewContent(): string {
49-
const button: { element: string, script: string, style: string } = {
50-
element: `<button id="solve">Code Now</button>`,
51-
script: `const button = document.getElementById('solve');
51+
protected getWebviewContent(): string {
52+
const button: { element: string; script: string; style: string } = {
53+
element: `<button id="solve">Code Now</button>`,
54+
script: `const button = document.getElementById('solve');
5255
button.onclick = () => vscode.postMessage({
5356
command: 'ShowProblem',
5457
});`,
55-
style: `<style>
58+
style: `<style>
5659
#solve {
5760
position: fixed;
5861
bottom: 1rem;
@@ -70,36 +73,41 @@ class LeetCodePreviewProvider extends LeetCodeWebview {
7073
border: 0;
7174
}
7275
</style>`,
73-
};
74-
const { title, url, category, difficulty, likes, dislikes, body } = this.description;
75-
const head: string = markdownEngine.render(`# [${title}](${url})`);
76-
const info: string = markdownEngine.render([
77-
`| Category | Difficulty | Likes | Dislikes |`,
78-
`| :------: | :--------: | :---: | :------: |`,
79-
`| ${category} | ${difficulty} | ${likes} | ${dislikes} |`,
80-
].join("\n"));
81-
const tags: string = [
82-
`<details>`,
83-
`<summary><strong>Tags</strong></summary>`,
84-
markdownEngine.render(
85-
this.description.tags
86-
.map((t: string) => `[\`${t}\`](https://leetcode.com/tag/${t})`)
87-
.join(" | "),
88-
),
89-
`</details>`,
90-
].join("\n");
91-
const companies: string = [
92-
`<details>`,
93-
`<summary><strong>Companies</strong></summary>`,
94-
markdownEngine.render(
95-
this.description.companies
96-
.map((c: string) => `\`${c}\``)
97-
.join(" | "),
98-
),
99-
`</details>`,
100-
].join("\n");
101-
const links: string = markdownEngine.render(`[Discussion](${this.getDiscussionLink(url)}) | [Solution](${this.getSolutionLink(url)})`);
102-
return `
76+
};
77+
const { title, url, category, difficulty, likes, dislikes, body } =
78+
this.description;
79+
const head: string = markdownEngine.render(`# [${title}](${url})`);
80+
const info: string = markdownEngine.render(
81+
[
82+
`| Category | Difficulty | Likes | Dislikes |`,
83+
`| :------: | :--------: | :---: | :------: |`,
84+
`| ${category} | ${difficulty} | ${likes} | ${dislikes} |`,
85+
].join("\n")
86+
);
87+
const tags: string = [
88+
`<details>`,
89+
`<summary><strong>Tags</strong></summary>`,
90+
markdownEngine.render(
91+
this.description.tags
92+
.map((t: string) => `[\`${t}\`](https://leetcode.com/tag/${t})`)
93+
.join(" | ")
94+
),
95+
`</details>`,
96+
].join("\n");
97+
const companies: string = [
98+
`<details>`,
99+
`<summary><strong>Companies</strong></summary>`,
100+
markdownEngine.render(
101+
this.description.companies.map((c: string) => `\`${c}\``).join(" | ")
102+
),
103+
`</details>`,
104+
].join("\n");
105+
const links: string = markdownEngine.render(
106+
`[Discussion](${this.getDiscussionLink(
107+
url
108+
)}) | [Solution](${this.getSolutionLink(url)})`
109+
);
110+
return `
103111
<!DOCTYPE html>
104112
<html>
105113
<head>
@@ -126,87 +134,94 @@ class LeetCodePreviewProvider extends LeetCodeWebview {
126134
</body>
127135
</html>
128136
`;
137+
}
138+
139+
protected onDidDisposeWebview(): void {
140+
super.onDidDisposeWebview();
141+
this.sideMode = false;
142+
}
143+
144+
protected async onDidReceiveMessage(message: IWebViewMessage): Promise<void> {
145+
switch (message.command) {
146+
case "ShowProblem": {
147+
await commands.executeCommand("leetcode.showProblem", this.node);
148+
break;
149+
}
129150
}
130-
131-
protected onDidDisposeWebview(): void {
132-
super.onDidDisposeWebview();
133-
this.sideMode = false;
134-
}
135-
136-
protected async onDidReceiveMessage(message: IWebViewMessage): Promise<void> {
137-
switch (message.command) {
138-
case "ShowProblem": {
139-
await commands.executeCommand("leetcode.showProblem", this.node);
140-
break;
141-
}
142-
}
151+
}
152+
153+
// private async hideSideBar(): Promise<void> {
154+
// await commands.executeCommand("workbench.action.focusSideBar");
155+
// await commands.executeCommand("workbench.action.toggleSidebarVisibility");
156+
// }
157+
158+
private parseDescription(descString, problem) {
159+
// Parse body by looking for the first html tag
160+
const bodyStartIdx = descString.search(/<.*>/);
161+
const bodyRaw = descString.substring(bodyStartIdx);
162+
163+
const { name: title, tags, companies } = problem;
164+
return {
165+
title,
166+
tags,
167+
companies,
168+
url: descString.match(/https:.*leetcode.*/)?.[0] || "??",
169+
// Category is the first element in list
170+
category: descString.match(/\*.*/)?.[0]?.slice(2) || "??",
171+
// Difficulty is the first element in list with a percentage sign
172+
difficulty: descString.match(/.*\%.*/)?.[0]?.slice(2) || "??",
173+
likes:
174+
descString
175+
.match(/Likes.*?\n/)?.[0]
176+
?.split(": ")[1]
177+
?.trim() || "0",
178+
dislikes:
179+
descString
180+
.match(/Dislikes.*?\n/)?.[0]
181+
?.split(": ")[1]
182+
?.trim() || "0",
183+
body: bodyRaw.replace(
184+
/<pre>[\r\n]*([^]+?)[\r\n]*<\/pre>/g,
185+
"<pre><code>$1</code></pre>"
186+
),
187+
};
188+
}
189+
190+
private getDiscussionLink(url: string): string {
191+
const endPoint: string = getLeetCodeEndpoint();
192+
if (endPoint === Endpoint.LeetCodeCN) {
193+
return url.replace("/description/", "/comments/");
194+
} else if (endPoint === Endpoint.LeetCode) {
195+
return url.replace(
196+
"/description/",
197+
"/discuss/?currentPage=1&orderBy=most_votes&query="
198+
);
143199
}
144200

145-
// private async hideSideBar(): Promise<void> {
146-
// await commands.executeCommand("workbench.action.focusSideBar");
147-
// await commands.executeCommand("workbench.action.toggleSidebarVisibility");
148-
// }
149-
150-
private parseDescription(descString, problem) {
151-
// Parse body by looking for the first html tag
152-
const bodyStartIdx = descString.search(/<.*>/);
153-
const bodyRaw = descString.substring(bodyStartIdx);
154-
155-
const { name: title, tags, companies } = problem;
156-
return {
157-
title,
158-
tags,
159-
companies,
160-
url: descString.match(/https:.*leetcode.*/)?.[0] || "??",
161-
category: descString.match(/\*.*/)?.[0]?.slice(2) || "??", // Category is the first element in list
162-
difficulty: descString.match(/.*\%.*/)?.[0]?.slice(2) || "??", // Difficulty is the first element in list with a percentage sign
163-
likes:
164-
descString
165-
.match(/Likes.*?\n/)?.[0]
166-
?.split(": ")[1]
167-
?.trim() || "0",
168-
dislikes:
169-
descString
170-
.match(/Dislikes.*?\n/)?.[0]
171-
?.split(": ")[1]
172-
?.trim() || "0",
173-
body: bodyRaw.replace(
174-
/<pre>[\r\n]*([^]+?)[\r\n]*<\/pre>/g,
175-
"<pre><code>$1</code></pre>"
176-
),
177-
};
178-
}
179-
private getDiscussionLink(url: string): string {
180-
const endPoint: string = getLeetCodeEndpoint();
181-
if (endPoint === Endpoint.LeetCodeCN) {
182-
return url.replace("/description/", "/comments/");
183-
} else if (endPoint === Endpoint.LeetCode) {
184-
return url.replace("/description/", "/discuss/?currentPage=1&orderBy=most_votes&query=");
185-
}
186-
187-
return "https://leetcode.com";
188-
}
201+
return "https://leetcode.com";
202+
}
189203

190-
private getSolutionLink(url: string): string {
191-
return url.replace("/description/", "/solution/");
192-
}
204+
private getSolutionLink(url: string): string {
205+
return url.replace("/description/", "/solution/");
206+
}
193207
}
194208

195209
interface IDescription {
196-
title: string;
197-
url: string;
198-
tags: string[];
199-
companies: string[];
200-
category: string;
201-
difficulty: string;
202-
likes: string;
203-
dislikes: string;
204-
body: string;
210+
title: string;
211+
url: string;
212+
tags: string[];
213+
companies: string[];
214+
category: string;
215+
difficulty: string;
216+
likes: string;
217+
dislikes: string;
218+
body: string;
205219
}
206220

207221
interface IWebViewMessage {
208-
command: string;
222+
command: string;
209223
}
210224

211-
export const leetCodePreviewProvider: LeetCodePreviewProvider = new LeetCodePreviewProvider();
225+
export const leetCodePreviewProvider: LeetCodePreviewProvider =
226+
new LeetCodePreviewProvider();
212227

0 commit comments

Comments
 (0)