2 Commits

Author SHA1 Message Date
8cdbb7285a Not tested 2025-03-31 10:29:15 -07:00
14332079cb ## 1.118.0 2025-03-06 22:25:34 -07:00
6 changed files with 178 additions and 94 deletions

View File

@ -220,3 +220,13 @@ None
-----------------------------------------------------------------------------------------------------------
- Close active after opening Sub-Kanban when directory found
## 1.118.0 1741303103654 = 638768999036540000 = 2025-0.Winter = Thu Mar 06 2025 16:18:23 GMT-0700 (Mountain Standard Time)
-----------------------------------------------------------------------------------------------------------
- Add search page for Backlog
## 1.119.0 1742607894338 = 638782046943380000 = 2025-1.Spring = Fri Mar 21 2025 18:44:53 GMT-0700 (Mountain Standard Time)
-----------------------------------------------------------------------------------------------------------
- Generic File-Folder-Helper call

View File

@ -2,9 +2,9 @@ $(document).ready(function () {
const fromHtml = true;
const username = _webviewUsername;
const machineId = _webviewMachineId;
const windowLocationHRef = window.location.href + '?site=' + _webviewSite + 'view=' + _webviewView;
const baseUri = 'https://eaf-dev.mes.infineon.com';
const apiUrl = 'https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/';
const apiUrl = 'https://eaf-dev.mes.infineon.com/api/v1/ado/';
const windowLocationHRef = window.location.href + '?site=' + _webviewSite + 'view=' + _webviewView;
const signalRUrl = baseUri + '/signalr';
const workItems = {
a: baseUri + '/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49',

View File

@ -52,6 +52,11 @@
"command": "promiseLinesHelper.codeGeneratorQuickPick",
"title": "Code Generator - Quick Pick"
},
{
"category": "Helper",
"command": "promiseLinesHelper.genericFileFolderHelper",
"title": "Generic - File-Folder-Helper"
},
{
"category": "Helper",
"command": "promiseLinesHelper.insertDateTime",
@ -87,6 +92,11 @@
"command": "kanban.openWithTextEditor",
"title": "Open with Text Editor Kanban"
},
{
"category": "Leominster",
"command": "webview.backlogLeominster",
"title": "Backlog (Bugs & Features with parents)"
},
{
"category": "Leominster",
"command": "webview.costOfDelayLeominster",
@ -112,6 +122,11 @@
"command": "markdown.newMarkdownFile",
"title": "New Markdown File"
},
{
"category": "Mesa",
"command": "webview.backlogMesa",
"title": "Backlog (Bugs & Features with parents)"
},
{
"category": "Mesa",
"command": "webview.costOfDelayMesa",
@ -323,5 +338,5 @@
"watch": "concurrently \"rollup -c -w\" \"webpack --watch --config ./build/node-extension.webpack.config.js\"",
"webpack": "webpack --config ./build/node-extension.webpack.config.js"
},
"version": "1.117.0"
"version": "1.119.0"
}

View File

@ -10,6 +10,7 @@ export class WebviewPanelCostOfDelay {
*/
public static _site: string;
public static _view: string;
public static _title: string;
public static currentPanel: WebviewPanelCostOfDelay | undefined;
public static readonly viewType = "web-view-panel";
@ -24,18 +25,20 @@ export class WebviewPanelCostOfDelay {
? vscode.window.activeTextEditor.viewColumn
: undefined;
// If we already have a panel, show it.
if (WebviewPanelCostOfDelay.currentPanel) {
WebviewPanelCostOfDelay.currentPanel._panel.reveal(column);
WebviewPanelCostOfDelay.currentPanel._update(site, view);
return;
}
const title = view === '' ? 'Cost of Delay (CoD)' :
view === 'EFFORT' ? 'Effort' :
view === 'LIVE' ? 'Cost of Delay (CoD) - Live Update' :
view === 'WSJF' ? 'Weightest Shortest Job First calculation (WSJF)' :
'CoD';
view === 'HTML' ? 'Backlog (Bugs & Features with parents)' :
view === 'WSJF' ? 'Weightest Shortest Job First calculation (WSJF)' :
'CoD';
this._title = title;
// If we already have a panel, show it.
if (WebviewPanelCostOfDelay.currentPanel) {
WebviewPanelCostOfDelay.currentPanel._panel.reveal(column);
WebviewPanelCostOfDelay.currentPanel._update(site, title, view);
return;
}
// Otherwise, create a new panel.
const panel = vscode.window.createWebviewPanel(
@ -54,7 +57,7 @@ export class WebviewPanelCostOfDelay {
}
);
WebviewPanelCostOfDelay.currentPanel = new WebviewPanelCostOfDelay(panel, extensionContext, site, view);
WebviewPanelCostOfDelay.currentPanel = new WebviewPanelCostOfDelay(extensionContext, panel, site, title, view);
}
public static kill() {
@ -63,13 +66,13 @@ export class WebviewPanelCostOfDelay {
}
public static revive(panel: vscode.WebviewPanel, extensionContext: vscode.ExtensionContext) {
WebviewPanelCostOfDelay.currentPanel = new WebviewPanelCostOfDelay(panel, extensionContext, this._site, this._view);
WebviewPanelCostOfDelay.currentPanel = new WebviewPanelCostOfDelay(extensionContext, panel, this._site, this._title, this._view);
}
private constructor(private readonly _panel: vscode.WebviewPanel, private readonly _extensionContext: vscode.ExtensionContext, site: string, view: string) {
private constructor(private readonly _extensionContext: vscode.ExtensionContext, private readonly _panel: vscode.WebviewPanel, site: string, title: string, view: string) {
// Set the webview's initial html content
this._update(site, view);
this._update(site, title, view);
// Listen for when the panel is disposed
// This happens when the user closes the panel or when the panel is closed programmatically
@ -103,10 +106,10 @@ export class WebviewPanelCostOfDelay {
}
}
private async _update(site: string, view: string) {
private async _update(site: string, title: string, view: string) {
const webview = this._panel.webview;
this._panel.webview.html = this._getHtmlForWebview(site, view, webview);
this._panel.webview.html = this._getHtmlForWebview(site, title, view, webview);
webview.onDidReceiveMessage(async (postMessage: PostMessage) => {
switch (postMessage.type) {
case "on-info":
@ -126,92 +129,108 @@ export class WebviewPanelCostOfDelay {
});
}
private _getHtmlForWebview(site: string, view: string, webview: vscode.Webview) {
private _getHtmlForWebview(site: string, title: string, view: string, webview: vscode.Webview) {
const baseUri = 'https://eaf-dev.mes.infineon.com';
const styleBootstrapUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "bootstrap.min.css")
);
const styleCostOfDelayUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "cod.css")
);
const scriptJQueryUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "jquery-1.6.4.min.js")
);
const scriptSignalRUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "jquery.signalR-2.4.3.min.js")
);
const scriptCostOfDelayUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "cost-of-delay.js")
);
if (view === 'HTML') {
return `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Infineon - ${title}</title>
</head>
<body>
<iframe width="100%" style="height: 100vh;" src="${baseUri}/html/mes.html?site=${site}" title="${title}">
</iframe>
</body>
</html>`;
}
else {
const styleBootstrapUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "bootstrap.min.css")
);
const styleCostOfDelayUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "cod.css")
);
const scriptJQueryUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "jquery-1.6.4.min.js")
);
const scriptSignalRUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "jquery.signalR-2.4.3.min.js")
);
const scriptCostOfDelayUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "cost-of-delay.js")
);
// Use a nonce to only allow a specific script to be run.
const nonce = getNonce();
// Use a nonce to only allow a specific script to be run.
const nonce = getNonce();
return `<!DOCTYPE html>
<html lang="en">
return `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Infineon - Cost of Delay (CoD) (see @SCALE formula)</title>
<link href="${styleBootstrapUri}" rel="stylesheet" />
<link href="${styleCostOfDelayUri}" rel="stylesheet" />
<script nonce="${nonce}" src="${scriptJQueryUri}"></script>
<script nonce="${nonce}" src="${scriptSignalRUri}"></script>
<script nonce="${nonce}" src="${baseUri}/signalr/hubs"></script>
<script nonce="${nonce}" src="${baseUri}/js/cod-b.js?v=2025-01-22-10-49" type="text/javascript"></script>
<script nonce="${nonce}">
const _webviewSite = '${site}';
const _webviewView = '${view}';
const acquiredVsCodeApi = acquireVsCodeApi();
const apiBaseUrl = ${JSON.stringify(apiBaseUrl)}
const _webviewUsername = '${process.env.USERNAME}';
const _webviewMachineId = '${vscode.env.machineId}';
</script>
</head>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Infineon - ${title}</title>
<link href="${styleBootstrapUri}" rel="stylesheet" />
<link href="${styleCostOfDelayUri}" rel="stylesheet" />
<script nonce="${nonce}" src="${scriptJQueryUri}"></script>
<script nonce="${nonce}" src="${scriptSignalRUri}"></script>
<script nonce="${nonce}" src="${baseUri}/signalr/hubs"></script>
<script nonce="${nonce}" src="${baseUri}/js/cod-b.js?v=2025-01-22-10-49" type="text/javascript"></script>
<script nonce="${nonce}">
const _webviewSite = '${site}';
const _webviewView = '${view}';
const acquiredVsCodeApi = acquireVsCodeApi();
const apiBaseUrl = ${JSON.stringify(apiBaseUrl)}
const _webviewUsername = '${process.env.USERNAME}';
const _webviewMachineId = '${vscode.env.machineId}';
</script>
</head>
<body>
<div class="navbar navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="navbar-brand">
<span id="siteHeader">&nbsp;</span> -
<span id="th-span">&nbsp;</span>
<button id="toggle">Toggle</button>
</div>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
</ul>
<p class="navbar-text navbar-right">
&nbsp;
</p>
</div>
</div>
</div>
<div class="container-fluid body-content" style="margin-top: 40px; margin-left: 15px;">
<div id="HeaderGridDiv">
<table id="HeaderGrid" border="1"></table>
</div>
<body>
<div class="navbar navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="navbar-brand">
<span id="siteHeader">&nbsp;</span> -
<span id="th-span">&nbsp;</span>
<button id="toggle">Toggle</button>
</div>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
</ul>
<p class="navbar-text navbar-right">
&nbsp;
</p>
</div>
</div>
</div>
<div class="container-fluid body-content" style="margin-top: 40px; margin-left: 15px;">
<div id="HeaderGridDiv">
<table id="HeaderGrid" border="1"></table>
</div>
<br />&nbsp;
<br />&nbsp;
<div id="AllGridDiv">
<table id="AllGrid"></table>
</div>
<div id="AllGridDiv">
<table id="AllGrid"></table>
</div>
<textarea id="AllTextarea" rows="20" cols="147"></textarea>
</div>
<textarea id="AllTextarea" rows="20" cols="147"></textarea>
</div>
<script nonce="${nonce}" src="${scriptCostOfDelayUri}"></script>
</body>
<script nonce="${nonce}" src="${scriptCostOfDelayUri}"></script>
</body>
</html>`;
</html>`;
}
}
}

View File

@ -136,6 +136,7 @@ export async function activate(extensionContext: vscode.ExtensionContext) {
vscode.commands.registerCommand("kanban.openInNewWindow", kanbanHelper.openInNewWindow),
vscode.commands.registerCommand("markdown.newMarkdownFile", markdownHelper.newMarkdownFile),
vscode.commands.registerCommand('promiseLinesHelper.codeGeneratorQuickPick', promiseLinesHelper.codeGeneratorQuickPick),
vscode.commands.registerCommand('promiseLinesHelper.genericFileFolderHelper', promiseLinesHelper.genericFileFolderHelper),
vscode.commands.registerCommand('promiseLinesHelper.insertDateTime', promiseLinesHelper.insertDateTime),
vscode.commands.registerCommand("promiseLinesHelper.insertAllExtensions", promiseLinesHelper.insertAllExtensions),
vscode.commands.registerCommand('promiseLinesHelper.transformToPopperCase', promiseLinesHelper.transformToPopperCase),
@ -162,10 +163,12 @@ export async function activate(extensionContext: vscode.ExtensionContext) {
vscode.commands.registerCommand('replaceLinesHelper.unwrapSql', replaceLinesHelper.unwrapSql),
vscode.commands.registerCommand('replaceLinesHelper.wrapSqlCSharp', replaceLinesHelper.wrapSqlCSharp),
vscode.commands.registerCommand('replaceLinesHelper.wrapSqlVB', replaceLinesHelper.wrapSqlVB),
vscode.commands.registerCommand("webview.backlogMesa", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'MES', 'HTML'); }),
vscode.commands.registerCommand("webview.costOfDelayMesa", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'MES', ''); }),
vscode.commands.registerCommand("webview.costOfDelayEffortMesa", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'MES', 'EFFORT'); }),
vscode.commands.registerCommand("webview.costOfDelayLiveMesa", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'MES', 'LIVE'); }),
vscode.commands.registerCommand("webview.costOfDelayWSJFMesa", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'MES', 'WSJF'); }),
vscode.commands.registerCommand("webview.backlogLeominster", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'LEO', 'HTML'); }),
vscode.commands.registerCommand("webview.costOfDelayLeominster", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'LEO', ''); }),
vscode.commands.registerCommand("webview.costOfDelayEffortLeominster", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'LEO', 'EFFORT'); }),
vscode.commands.registerCommand("webview.costOfDelayLiveLeominster", () => { WebviewPanelCostOfDelay.WebviewPanelCostOfDelay.createOrShow(extensionContext, 'LEO', 'LIVE'); }),

View File

@ -198,6 +198,42 @@ function insertAllExtensionsLogic(): undefined {
return undefined;
}
function genericFileFolderHelperLogic(): undefined {
const textEditor = vscode.window.activeTextEditor;
if (!textEditor) {
vscode.window.showInformationMessage("Open a text editor first!");
return undefined;
}
else {
const selection = textEditor.selection;
if (selection.isEmpty) {
vscode.window.showInformationMessage("Highlight text to pass first!");
return undefined;
}
let range = new vscode.Range(selection.start, selection.end)
let text = textEditor.document.getText(range);
if (vscode.workspace.workspaceFolders === undefined) {
vscode.window.showInformationMessage("Open workspace first!");
return undefined;
}
const workspaceFoldersZero = vscode.workspace.workspaceFolders[0].uri;
const jsonFile: vscode.Uri = vscode.Uri.joinPath(workspaceFoldersZero, ".vscode", "helper", ".json");
let data = {
workspaceFoldersZero: workspaceFoldersZero.path,
text: text,
};
let json = JSON.stringify(data);
const buffer: Buffer = Buffer.from(json, 'utf8');
vscode.workspace.fs.writeFile(jsonFile, buffer);
textEditor.edit(editBuilder => {
let range = new vscode.Range(selection.start.line, selection.start.character, selection.end.line, selection.end.character);
editBuilder.replace(range, "");
});
textEditor.document.save();
}
return undefined;
}
function camelCase(str: string) {
return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) {
if (+match === 0) return "";
@ -260,6 +296,7 @@ function transformToParamCaseLogic(): undefined {
}
export const codeGeneratorQuickPick = () => codeGeneratorQuickPickLogic();
export const genericFileFolderHelper = () => genericFileFolderHelperLogic();
export const insertDateTime = () => insertDateTimeLogic();
export const insertAllExtensions = () => insertAllExtensionsLogic();
export const transformToPopperCase = () => transformToPopperCaseLogic();