Skip to content
Snippets Groups Projects
Select Git revision
  • 9e8dc3f588e5133ba3d7117b9c5a6dfce37df25b
  • master default protected
  • docs-improve_user_path_description
  • fix-pipeline
  • ci-change_exercises_image_registry
  • feat-merge_recorder_in_extension
  • feat-default_folder
  • feat-change_user
  • develop protected
  • refactor-mission
  • feat-exercise_automatic_save
  • docs-improve_documentation
  • feat-create_little_container_for_developer
  • feat-local-dev
  • 0.1.12
  • 0.1.11
  • 0.1.10
  • 0.1.5
18 results

README.md

Blame
  • webviewBase.ts 3.42 KiB
    'use strict';
    import {
    	commands,
    	Disposable,
    	Uri,
    	ViewColumn,
    	Webview,
    	WebviewPanel,
    	WebviewPanelOnDidChangeViewStateEvent,
    	window,
    } from 'vscode';
    import { Command } from '../theia/command';
    
    const emptyCommands: Disposable[] = [
    	{
    		dispose: function () {
    			/* noop */
    		},
    	},
    ];
    
    export function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) {
    	return webview.asWebviewUri(Uri.joinPath(extensionUri, ...pathList));
    }
    
    export abstract class WebviewBase implements Disposable {
    	protected disposable: Disposable;
    	private _disposablePanel: Disposable | undefined;
    	protected _panel: WebviewPanel | undefined;
    
    	constructor(private id: string, private title: string, command: Command, private readonly _column?: ViewColumn) {
    		this.disposable = Disposable.from(commands.registerCommand(command.cmd, this.onShowCommand, this));
    		this.load();
    	}
    
    	getExternalRessourcePath(extensionUri: Uri, pathList: string[]) {
    		return getUri(this._panel!.webview, extensionUri, pathList);
    	}
    
    	registerCommands(): Disposable[] {
    		return emptyCommands;
    	}
    
    	renderHead?(): string | Promise<string>;
    	renderBody?(): string | Promise<string>;
    	renderEndOfBody?(): string | Promise<string>;
    
    	dispose() {
    		this.disposable.dispose();
    		this._disposablePanel?.dispose();
    	}
    
    	protected onShowCommand() {
    		void this.show(this._column);
    	}
    
    	private onPanelDisposed() {
    		this._disposablePanel?.dispose();
    		this._panel = undefined;
    	}
    
    	private onViewStateChanged(e: WebviewPanelOnDidChangeViewStateEvent) {
    		console.log(
    			`Webview(${this.id}).onViewStateChanged`,
    			`active=${e.webviewPanel.active}, visible=${e.webviewPanel.visible}`,
    		);
    	}
    
    	get visible() {
    		return this._panel?.visible ?? false;