Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 811f849

Browse files
committed
Fix formatting
1 parent 8f85142 commit 811f849

File tree

1 file changed

+142
-154
lines changed

1 file changed

+142
-154
lines changed

src/webview/leetCodePreviewProvider.ts

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

1010
class LeetCodePreviewProvider extends LeetCodeWebview {
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-
};
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+
// }
4831
}
49-
}
5032

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');
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+
}
46+
}
47+
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');
5552
button.onclick = () => vscode.postMessage({
5653
command: 'ShowProblem',
5754
});`,
58-
style: `<style>
55+
style: `<style>
5956
#solve {
6057
position: fixed;
6158
bottom: 1rem;
@@ -73,41 +70,36 @@ class LeetCodePreviewProvider extends LeetCodeWebview {
7370
border: 0;
7471
}
7572
</style>`,
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 `
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 `
111103
<!DOCTYPE html>
112104
<html>
113105
<head>
@@ -134,91 +126,87 @@ class LeetCodePreviewProvider extends LeetCodeWebview {
134126
</body>
135127
</html>
136128
`;
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-
}
150129
}
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: descString.match(/\*.*/)?.[0]?.slice(2) || "??", // Category is the first element in list
170-
difficulty: descString.match(/.*\%.*/)?.[0]?.slice(2) || "??", // Difficulty is the first element in list with a percentage sign
171-
likes:
172-
descString
173-
.match(/Likes.*?\n/)?.[0]
174-
?.split(": ")[1]
175-
?.trim() || "0",
176-
dislikes:
177-
descString
178-
.match(/Dislikes.*?\n/)?.[0]
179-
?.split(": ")[1]
180-
?.trim() || "0",
181-
body: bodyRaw.replace(
182-
/<pre>[\r\n]*([^]+?)[\r\n]*<\/pre>/g,
183-
"<pre><code>$1</code></pre>"
184-
),
185-
};
186-
}
187-
188-
private getDiscussionLink(url: string): string {
189-
const endPoint: string = getLeetCodeEndpoint();
190-
if (endPoint === Endpoint.LeetCodeCN) {
191-
return url.replace("/description/", "/comments/");
192-
} else if (endPoint === Endpoint.LeetCode) {
193-
return url.replace(
194-
"/description/",
195-
"/discuss/?currentPage=1&orderBy=most_votes&query="
196-
);
130+
131+
protected onDidDisposeWebview(): void {
132+
super.onDidDisposeWebview();
133+
this.sideMode = false;
197134
}
198135

199-
return "https://leetcode.com";
200-
}
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+
}
143+
}
144+
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+
}
201189

202-
private getSolutionLink(url: string): string {
203-
return url.replace("/description/", "/solution/");
204-
}
190+
private getSolutionLink(url: string): string {
191+
return url.replace("/description/", "/solution/");
192+
}
205193
}
206194

207195
interface IDescription {
208-
title: string;
209-
url: string;
210-
tags: string[];
211-
companies: string[];
212-
category: string;
213-
difficulty: string;
214-
likes: string;
215-
dislikes: string;
216-
body: string;
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;
217205
}
218206

219207
interface IWebViewMessage {
220-
command: string;
208+
command: string;
221209
}
222210

223-
export const leetCodePreviewProvider: LeetCodePreviewProvider =
224-
new LeetCodePreviewProvider();
211+
export const leetCodePreviewProvider: LeetCodePreviewProvider = new LeetCodePreviewProvider();
212+

0 commit comments

Comments
 (0)