## 1.5.1
This commit is contained in:
22
type-script-helper/src/Card.ts
Normal file
22
type-script-helper/src/Card.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { H2HexColor } from "./H2HexColor";
|
||||
import { LineNumber } from "./LineNumber";
|
||||
import { H2NoCheckboxes } from "./H2NoCheckboxes";
|
||||
import { H2WithCheckboxes } from "./H2WithCheckboxes";
|
||||
|
||||
export type Card = {
|
||||
Assignees: Array<string>;
|
||||
CreationDateTime: Date;
|
||||
Directory: string;
|
||||
Extension: string;
|
||||
File: string;
|
||||
FileName: string;
|
||||
FileNameWithoutExtension: string;
|
||||
H1: string;
|
||||
H2HexColorCollection: Array<H2HexColor>;
|
||||
H2NoCheckboxesCollection: Array<H2NoCheckboxes>;
|
||||
H2WithCheckboxesCollection: Array<H2WithCheckboxes>;
|
||||
LastWriteDateTime: Date;
|
||||
LineNumber: LineNumber;
|
||||
RequestedDateTime: string;
|
||||
Type: string;
|
||||
};
|
188
type-script-helper/src/ColumnsToCardsWebviewViewProvider.ts
Normal file
188
type-script-helper/src/ColumnsToCardsWebviewViewProvider.ts
Normal file
@ -0,0 +1,188 @@
|
||||
import { Card } from "./Card";
|
||||
import { readFile } from "fs";
|
||||
import * as vscode from "vscode";
|
||||
import { getNonce } from "./getNonce";
|
||||
import { PostMessage } from "./PostMessage";
|
||||
import { apiBaseUrl, key } from "./constants";
|
||||
import { ExecException, exec } from 'child_process';
|
||||
|
||||
export function refreshSidebarLogic(): undefined {
|
||||
vscode.commands.executeCommand("workbench.action.closeSidebar").then(_ => {
|
||||
vscode.commands.executeCommand("workbench.view.extension.columns-to-cards-sidebar-view");
|
||||
});
|
||||
}
|
||||
|
||||
function columnsToCardsRead(webviewView: vscode.WebviewView, columnsToCardsUri: vscode.Uri, err: NodeJS.ErrnoException | null, data: string | Buffer) {
|
||||
if (err)
|
||||
vscode.window.showInformationMessage(`<${columnsToCardsUri.fsPath}> doesn't exist! ${err.message}`);
|
||||
const columnsToCards: Record<string, Array<Card>> = {};
|
||||
const jsonObject: any = JSON.parse(data.toString('utf8'));
|
||||
for (const property in jsonObject) {
|
||||
columnsToCards[property] = jsonObject[property];
|
||||
}
|
||||
const postMessage: PostMessage = { type: "columns-to-cards", value: columnsToCards };
|
||||
webviewView.webview.postMessage(postMessage);
|
||||
}
|
||||
|
||||
function execCallback(webviewView: vscode.WebviewView, destination: vscode.Uri, error: ExecException | null, stdout: string, stderr: string) {
|
||||
if (error) {
|
||||
vscode.window.showInformationMessage(error.message);
|
||||
return;
|
||||
}
|
||||
if (stderr) {
|
||||
vscode.window.showInformationMessage(stderr);
|
||||
return;
|
||||
}
|
||||
console.log(`stdout: ${stdout}`);
|
||||
const columnsToCards = vscode.Uri.joinPath(destination, "columnsToCards.json");
|
||||
readFile(columnsToCards.fsPath, (err, data) =>
|
||||
columnsToCardsRead(webviewView, columnsToCards, err, data));
|
||||
};
|
||||
|
||||
async function postColumnsToCards(extensionUri: vscode.Uri, webviewView: vscode.WebviewView) {
|
||||
if (vscode.workspace.workspaceFolders === undefined)
|
||||
vscode.window.showInformationMessage("Open workspace first!");
|
||||
else {
|
||||
const workspaceFoldersZero = vscode.workspace.workspaceFolders[0].uri;
|
||||
const destination: vscode.Uri = vscode.Uri.joinPath(workspaceFoldersZero, ".vscode", "helper");
|
||||
const fileFolderHelper: vscode.Uri = vscode.Uri.joinPath(extensionUri, "net7.0", "win-x64", "publish", "File-Folder-Helper.exe");
|
||||
const command: string = `${fileFolderHelper.fsPath} s M ${workspaceFoldersZero.fsPath} -s ${workspaceFoldersZero.fsPath} -d ${destination.fsPath}`;
|
||||
exec(command, (error, stdout, stderr) =>
|
||||
execCallback(webviewView, destination, error, stdout, stderr));
|
||||
}
|
||||
}
|
||||
|
||||
function getToken(workspaceState: vscode.Memento, webviewView: vscode.WebviewView) {
|
||||
webviewView.webview.postMessage({
|
||||
type: "token",
|
||||
value: workspaceState.get(key),
|
||||
});
|
||||
}
|
||||
|
||||
function authenticate(workspaceState: vscode.Memento, webviewView: vscode.WebviewView) {
|
||||
webviewView.webview.postMessage({
|
||||
type: "token",
|
||||
value: workspaceState.get(key),
|
||||
});
|
||||
}
|
||||
|
||||
function logout(workspaceState: vscode.Memento) {
|
||||
workspaceState.update(key, "");
|
||||
}
|
||||
|
||||
async function openCard(value: any) {
|
||||
if (vscode.workspace.workspaceFolders === undefined)
|
||||
vscode.window.showInformationMessage("Open workspace first!");
|
||||
else {
|
||||
if (!value.File)
|
||||
vscode.window.showInformationMessage("File wasn't passed!");
|
||||
else {
|
||||
const textDocument: vscode.TextDocument = await vscode.workspace.openTextDocument(value.File);
|
||||
vscode.window.showTextDocument(textDocument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class ColumnsToCardsWebviewViewProvider implements vscode.WebviewViewProvider {
|
||||
_view?: vscode.WebviewView;
|
||||
|
||||
constructor(private readonly _extensionContext: vscode.ExtensionContext) {
|
||||
}
|
||||
|
||||
public revive(panel: vscode.WebviewView) {
|
||||
this._view = panel;
|
||||
}
|
||||
|
||||
public resolveWebviewView(webviewView: vscode.WebviewView) {
|
||||
this._view = webviewView;
|
||||
|
||||
webviewView.webview.options = {
|
||||
// Allow scripts in the webview
|
||||
enableScripts: true,
|
||||
|
||||
localResourceRoots: [this._extensionContext.extensionUri],
|
||||
};
|
||||
|
||||
webviewView.webview.html = this._getHtmlForWebview(webviewView.webview);
|
||||
|
||||
webviewView.webview.onDidReceiveMessage(async (postMessage: PostMessage) => {
|
||||
switch (postMessage.type) {
|
||||
case "logout":
|
||||
logout(this._extensionContext.workspaceState);
|
||||
break;
|
||||
case "authenticate":
|
||||
authenticate(this._extensionContext.workspaceState, webviewView);
|
||||
break;
|
||||
case "get-token":
|
||||
getToken(this._extensionContext.workspaceState, webviewView);
|
||||
break;
|
||||
case "get-columns-to-cards":
|
||||
postColumnsToCards(this._extensionContext.extensionUri, webviewView);
|
||||
break;
|
||||
case "open-card":
|
||||
openCard(postMessage.value);
|
||||
break;
|
||||
case "on-info":
|
||||
if (!postMessage.value)
|
||||
return;
|
||||
vscode.window.showInformationMessage(postMessage.value);
|
||||
break;
|
||||
case "on-error":
|
||||
if (!postMessage.value)
|
||||
return;
|
||||
vscode.window.showErrorMessage(postMessage.value);
|
||||
break;
|
||||
default:
|
||||
vscode.window.showErrorMessage(postMessage.type);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private _getHtmlForWebview(webview: vscode.Webview) {
|
||||
const styleResetUri = webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "reset.css")
|
||||
);
|
||||
const styleVSCodeUri = webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "vscode.css")
|
||||
);
|
||||
|
||||
const scriptUri = webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(this._extensionContext.extensionUri, "out", "compiled/ColumnsToCards.js")
|
||||
);
|
||||
const styleMainUri = webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(this._extensionContext.extensionUri, "out", "compiled/ColumnsToCards.css")
|
||||
);
|
||||
|
||||
// Use a nonce to only allow a specific script to be run.
|
||||
const nonce = getNonce();
|
||||
|
||||
return `<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<!--
|
||||
Use a content security policy to only allow loading images from https or from our extension directory,
|
||||
and only allow scripts that have a specific nonce.
|
||||
-->
|
||||
<meta http-equiv="Content-Security-Policy"
|
||||
content="img-src https: data:;
|
||||
style-src 'unsafe-inline' ${webview.cspSource};
|
||||
script-src 'nonce-${nonce}';">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link href="${styleResetUri}" rel="stylesheet">
|
||||
<link href="${styleVSCodeUri}" rel="stylesheet">
|
||||
<link href="${styleMainUri}" rel="stylesheet">
|
||||
<script nonce="${nonce}">
|
||||
const acquiredVsCodeApi = acquireVsCodeApi();
|
||||
const apiBaseUrl = ${JSON.stringify(apiBaseUrl)}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<script nonce="${nonce}" src="${scriptUri}"></script>
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
}
|
||||
|
||||
export const refreshSidebar = () => refreshSidebarLogic();
|
4
type-script-helper/src/H2HexColor.ts
Normal file
4
type-script-helper/src/H2HexColor.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export type H2HexColor = {
|
||||
H2: string;
|
||||
HexColor: string;
|
||||
};
|
5
type-script-helper/src/H2NoCheckboxes.ts
Normal file
5
type-script-helper/src/H2NoCheckboxes.ts
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
export type H2NoCheckboxes = {
|
||||
H2: string;
|
||||
Lines: Array<string>;
|
||||
};
|
7
type-script-helper/src/H2WithCheckboxes.ts
Normal file
7
type-script-helper/src/H2WithCheckboxes.ts
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
export type H2WithCheckboxes = {
|
||||
Completed: number;
|
||||
H2: string;
|
||||
NotCompleted: number;
|
||||
Total: number;
|
||||
};
|
9
type-script-helper/src/LineNumber.ts
Normal file
9
type-script-helper/src/LineNumber.ts
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
export type LineNumber = {
|
||||
Created: number;
|
||||
H1: number;
|
||||
FrontMatterYamlEnd: number;
|
||||
Status: number;
|
||||
Type: number;
|
||||
Updated: number;
|
||||
};
|
5
type-script-helper/src/PostMessage.ts
Normal file
5
type-script-helper/src/PostMessage.ts
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
export type PostMessage = {
|
||||
type: string;
|
||||
value: any;
|
||||
};
|
166
type-script-helper/src/WebViewPanel.ts
Normal file
166
type-script-helper/src/WebViewPanel.ts
Normal file
@ -0,0 +1,166 @@
|
||||
import * as vscode from "vscode";
|
||||
import { getNonce } from "./getNonce";
|
||||
import { apiBaseUrl } from "./constants";
|
||||
import { PostMessage } from "./PostMessage";
|
||||
|
||||
export function refreshWebView(extensionContext: vscode.ExtensionContext): undefined {
|
||||
WebViewPanel.kill();
|
||||
WebViewPanel.createOrShow(extensionContext);
|
||||
}
|
||||
|
||||
export class WebViewPanel {
|
||||
/**
|
||||
* Track the currently panel. Only allow a single panel to exist at a time.
|
||||
*/
|
||||
public static currentPanel: WebViewPanel | undefined;
|
||||
|
||||
public static readonly viewType = "web-view-panel";
|
||||
|
||||
private _disposables: vscode.Disposable[] = [];
|
||||
|
||||
public static createOrShow(extensionContext: vscode.ExtensionContext) {
|
||||
const column = vscode.window.activeTextEditor
|
||||
? vscode.window.activeTextEditor.viewColumn
|
||||
: undefined;
|
||||
|
||||
// If we already have a panel, show it.
|
||||
if (WebViewPanel.currentPanel) {
|
||||
WebViewPanel.currentPanel._panel.reveal(column);
|
||||
WebViewPanel.currentPanel._update();
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise, create a new panel.
|
||||
const panel = vscode.window.createWebviewPanel(
|
||||
WebViewPanel.viewType,
|
||||
"Web-View-Panel",
|
||||
column || vscode.ViewColumn.One,
|
||||
{
|
||||
// Enable javascript in the webview
|
||||
enableScripts: true,
|
||||
|
||||
// And restrict the webview to only loading content from our extension's `media` directory.
|
||||
localResourceRoots: [
|
||||
vscode.Uri.joinPath(extensionContext.extensionUri, "media"),
|
||||
vscode.Uri.joinPath(extensionContext.extensionUri, "out/compiled"),
|
||||
],
|
||||
}
|
||||
);
|
||||
|
||||
WebViewPanel.currentPanel = new WebViewPanel(panel, extensionContext);
|
||||
}
|
||||
|
||||
public static kill() {
|
||||
WebViewPanel.currentPanel?.dispose();
|
||||
WebViewPanel.currentPanel = undefined;
|
||||
}
|
||||
|
||||
public static revive(panel: vscode.WebviewPanel, extensionContext: vscode.ExtensionContext) {
|
||||
WebViewPanel.currentPanel = new WebViewPanel(panel, extensionContext);
|
||||
}
|
||||
|
||||
private constructor(private readonly _panel: vscode.WebviewPanel, private readonly _extensionContext: vscode.ExtensionContext) {
|
||||
|
||||
// Set the webview's initial html content
|
||||
this._update();
|
||||
|
||||
// Listen for when the panel is disposed
|
||||
// This happens when the user closes the panel or when the panel is closed programmatically
|
||||
this._panel.onDidDispose(() => this.dispose(), null, this._disposables);
|
||||
|
||||
// // Handle messages from the webview
|
||||
// this._panel.webview.onDidReceiveMessage(
|
||||
// (message) => {
|
||||
// switch (message.command) {
|
||||
// case "alert":
|
||||
// vscode.window.showErrorMessage(message.text);
|
||||
// return;
|
||||
// }
|
||||
// },
|
||||
// null,
|
||||
// this._disposables
|
||||
// );
|
||||
}
|
||||
|
||||
public dispose() {
|
||||
WebViewPanel.currentPanel = undefined;
|
||||
|
||||
// Clean up our resources
|
||||
this._panel.dispose();
|
||||
|
||||
while (this._disposables.length) {
|
||||
const x = this._disposables.pop();
|
||||
if (x) {
|
||||
x.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async _update() {
|
||||
const webview = this._panel.webview;
|
||||
|
||||
this._panel.webview.html = this._getHtmlForWebview(webview);
|
||||
webview.onDidReceiveMessage(async (postMessage: PostMessage) => {
|
||||
switch (postMessage.type) {
|
||||
case "on-info":
|
||||
if (!postMessage.value)
|
||||
return;
|
||||
vscode.window.showInformationMessage(postMessage.value);
|
||||
break;
|
||||
case "on-error":
|
||||
if (!postMessage.value)
|
||||
return;
|
||||
vscode.window.showErrorMessage(postMessage.value);
|
||||
break;
|
||||
default:
|
||||
vscode.window.showErrorMessage(postMessage.type);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private _getHtmlForWebview(webview: vscode.Webview) {
|
||||
const styleResetUri = webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "reset.css")
|
||||
);
|
||||
const styleVSCodeUri = webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "vscode.css")
|
||||
);
|
||||
|
||||
const scriptUri = webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(this._extensionContext.extensionUri, "out", "compiled/DisplayDate.js")
|
||||
);
|
||||
const styleMainUri = webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(this._extensionContext.extensionUri, "out", "compiled/DisplayDate.css")
|
||||
);
|
||||
|
||||
// Use a nonce to only allow a specific script to be run.
|
||||
const nonce = getNonce();
|
||||
|
||||
return `<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<!--
|
||||
Use a content security policy to only allow loading images from https or from our extension directory,
|
||||
and only allow scripts that have a specific nonce.
|
||||
-->
|
||||
<meta http-equiv="Content-Security-Policy"
|
||||
content="img-src https: data:;
|
||||
style-src 'unsafe-inline' ${webview.cspSource};
|
||||
script-src 'nonce-${nonce}';">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link href="${styleResetUri}" rel="stylesheet">
|
||||
<link href="${styleVSCodeUri}" rel="stylesheet">
|
||||
<link href="${styleMainUri}" rel="stylesheet">
|
||||
<script nonce="${nonce}">
|
||||
const acquiredVsCodeApi = acquireVsCodeApi();
|
||||
const apiBaseUrl = ${JSON.stringify(apiBaseUrl)}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<script nonce="${nonce}" src="${scriptUri}"></script>
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
}
|
2
type-script-helper/src/constants.ts
Normal file
2
type-script-helper/src/constants.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export const apiBaseUrl: string = "http://localhost:3002";
|
||||
export const key: string = "type-script-helper";
|
@ -1,13 +1,25 @@
|
||||
// The module 'vscode' contains the VS Code extensibility API
|
||||
// Import the module and reference it with the alias vscode in your code below
|
||||
import * as vscode from 'vscode';
|
||||
import * as kanbanHelper from './kanbanHelper';
|
||||
import * as markdownHelper from './markdownHelper';
|
||||
import * as promiseLinesHelper from './promiseLinesHelper';
|
||||
import * as replaceLinesHelper from './replaceLinesHelper';
|
||||
import * as readOnlyLinesHelper from './readOnlyLinesHelper';
|
||||
import * as promiseLinesHelper from './promiseLinesHelper';
|
||||
import { WebViewPanel, refreshWebView } from "./WebViewPanel";
|
||||
import { ColumnsToCardsWebviewViewProvider, refreshSidebar } from "./ColumnsToCardsWebviewViewProvider";
|
||||
|
||||
// This method is called when your extension is activated
|
||||
// Your extension is activated the very first time the command is executed
|
||||
export function activate(context: vscode.ExtensionContext) {
|
||||
export async function activate(extensionContext: vscode.ExtensionContext) {
|
||||
|
||||
const columnsToCardsWebviewViewProvider = new ColumnsToCardsWebviewViewProvider(extensionContext);
|
||||
|
||||
const item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right);
|
||||
item.text = "$(beaker) Show Kanban";
|
||||
// item.command = "kanban.show";
|
||||
item.show();
|
||||
extensionContext.subscriptions.push(vscode.window.registerWebviewViewProvider("columns-to-cards-webview-view-provider", columnsToCardsWebviewViewProvider));
|
||||
|
||||
// Use the console to output diagnostic information (console.log) and errors (console.error)
|
||||
// This line of code will only be executed once when your extension is activated
|
||||
@ -25,6 +37,10 @@ export function activate(context: vscode.ExtensionContext) {
|
||||
// context.subscriptions.push(disposable);
|
||||
|
||||
const commands = [
|
||||
vscode.commands.registerCommand("kanban.refreshBoth", () => { kanbanHelper.refreshBoth(extensionContext); }),
|
||||
vscode.commands.registerCommand("kanban.refreshSidebar", refreshSidebar),
|
||||
vscode.commands.registerCommand("kanban.refreshWebView", () => { refreshWebView(extensionContext); }),
|
||||
vscode.commands.registerCommand("markdown.newMarkdownFile", markdownHelper.newMarkdownFile),
|
||||
vscode.commands.registerCommand('promiseLinesHelper.codeGeneratorQuickPick', promiseLinesHelper.codeGeneratorQuickPick),
|
||||
vscode.commands.registerCommand('promiseLinesHelper.insertDateTime', promiseLinesHelper.insertDateTime),
|
||||
vscode.commands.registerCommand('promiseLinesHelper.transformToPopperCase', promiseLinesHelper.transformToPopperCase),
|
||||
@ -50,10 +66,11 @@ export function activate(context: vscode.ExtensionContext) {
|
||||
vscode.commands.registerCommand('replaceLinesHelper.splitBySpaceReverseJoinSort', replaceLinesHelper.splitBySpaceReverseJoinSort),
|
||||
vscode.commands.registerCommand('replaceLinesHelper.unwrapSql', replaceLinesHelper.unwrapSql),
|
||||
vscode.commands.registerCommand('replaceLinesHelper.wrapSqlCSharp', replaceLinesHelper.wrapSqlCSharp),
|
||||
vscode.commands.registerCommand('replaceLinesHelper.wrapSqlVB', replaceLinesHelper.wrapSqlVB)
|
||||
vscode.commands.registerCommand('replaceLinesHelper.wrapSqlVB', replaceLinesHelper.wrapSqlVB),
|
||||
vscode.commands.registerCommand("webView.webView", () => { WebViewPanel.createOrShow(extensionContext); })
|
||||
];
|
||||
|
||||
commands.forEach(command => context.subscriptions.push(command));
|
||||
commands.forEach(command => extensionContext.subscriptions.push(command));
|
||||
}
|
||||
|
||||
// This method is called when your extension is deactivated
|
||||
|
9
type-script-helper/src/getNonce.ts
Normal file
9
type-script-helper/src/getNonce.ts
Normal file
@ -0,0 +1,9 @@
|
||||
export function getNonce() {
|
||||
let text = "";
|
||||
const possible =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
for (let i = 0; i < 32; i++) {
|
||||
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
||||
}
|
||||
return text;
|
||||
}
|
9
type-script-helper/src/kanbanHelper.ts
Normal file
9
type-script-helper/src/kanbanHelper.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import * as vscode from 'vscode';
|
||||
import { refreshWebView } from './WebViewPanel';
|
||||
import { refreshSidebar } from './ColumnsToCardsWebviewViewProvider';
|
||||
|
||||
export function refreshBoth(extensionContext: vscode.ExtensionContext): undefined {
|
||||
refreshSidebar();
|
||||
refreshWebView(extensionContext);
|
||||
setTimeout(() => { vscode.commands.executeCommand("workbench.action.webview.openDeveloperTools"); }, 500);
|
||||
}
|
21
type-script-helper/src/markdownHelper.ts
Normal file
21
type-script-helper/src/markdownHelper.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import * as vscode from 'vscode';
|
||||
import { paramCase } from './promiseLinesHelper';
|
||||
|
||||
async function newMarkdownFileLogic(): Promise<undefined> {
|
||||
if (vscode.workspace.workspaceFolders === undefined) {
|
||||
vscode.window.showInformationMessage("Open workspace first!");
|
||||
return;
|
||||
}
|
||||
const workspaceFoldersZero = vscode.workspace.workspaceFolders[0].uri;
|
||||
const cardTitle = await vscode.window.showInputBox({ prompt: 'Provide title for card.' });
|
||||
if (cardTitle === undefined)
|
||||
return;
|
||||
const paramCaseCardTitle: string = paramCase(cardTitle);
|
||||
const fileUri: vscode.Uri = vscode.Uri.joinPath(workspaceFoldersZero, `${paramCaseCardTitle}.md`);
|
||||
const buffer: Buffer = Buffer.from(`# ${cardTitle}`, 'utf8');
|
||||
await vscode.workspace.fs.writeFile(fileUri, buffer);
|
||||
const textDocument: vscode.TextDocument = await vscode.workspace.openTextDocument(fileUri);
|
||||
vscode.window.showTextDocument(textDocument);
|
||||
}
|
||||
|
||||
export const newMarkdownFile = () => newMarkdownFileLogic();
|
@ -177,7 +177,7 @@ function transformToPopperCaseLogic(): undefined {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function paramCase(str: string) {
|
||||
export function paramCase(str: string) {
|
||||
return str
|
||||
.replace(
|
||||
/([A-Z]+(.))/g,
|
||||
|
Reference in New Issue
Block a user