in src/desktop/ci/pending_job_webview_controller.ts [146:181]
async createOrUpdateWebview(
jobItemModel: JobItemModel,
existingPanel?: PendingJobWebviewPanel,
): Promise<PendingJobWebviewPanel> {
assert(this.#context);
const { job } = jobItemModel;
const existingPanelStatus = existingPanel?.jobItemModel.job.status;
const panel = existingPanel ?? (await this.#createEmptyPanel());
panel.title = `Job ${job.id}`;
panel.jobItemModel = jobItemModel;
if (job.status !== existingPanelStatus) {
const status = getJobMetadata(job);
const imgTag = status.illustration?.image
? `<img src="${panel.webview.asWebviewUri(
vscode.Uri.file(path.join(this.#context.extensionPath, status.illustration?.image)),
)}" />`
: '';
const buttonTag = status.contextAction
? `<button id="button" onclick="onButtonPress()">${
buttonTexts[status.contextAction]
}</button>`
: '';
panel.webview.html = this.#htmlContent
.replace('{{title}}', status.illustration?.title ?? status.name)
.replace('{{description}}', status.illustration?.description ?? '')
.replace('{{image}}', imgTag)
.replace('{{button}}', buttonTag);
}
return panel;
}