author | wenzelm |
Tue, 25 Feb 2020 18:30:08 +0100 | |
changeset 71473 | be84312a2d53 |
parent 66395 | 14146fb264d8 |
child 71475 | 7a867a38712a |
permissions | -rw-r--r-- |
66203 | 1 |
'use strict'; |
2 |
||
3 |
import * as library from './library' |
|
4 |
import * as protocol from './protocol' |
|
5 |
import { Content_Provider } from './content_provider' |
|
71473
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
6 |
import { LanguageClient, VersionedTextDocumentIdentifier } from 'vscode-languageclient'; |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
7 |
import { Uri, ExtensionContext, workspace, commands, window, Webview, WebviewPanel } from 'vscode' |
66203 | 8 |
|
9 |
||
10 |
/* HTML content */ |
|
11 |
||
12 |
const content_provider = new Content_Provider("isabelle-state") |
|
13 |
||
14 |
function encode_state(id: number | undefined): Uri | undefined |
|
15 |
{ |
|
16 |
return id ? content_provider.uri_template.with({ fragment: id.toString() }) : undefined |
|
17 |
} |
|
18 |
||
19 |
function decode_state(uri: Uri | undefined): number | undefined |
|
20 |
{ |
|
21 |
if (uri && uri.scheme === content_provider.uri_scheme) { |
|
22 |
const id = parseInt(uri.fragment) |
|
23 |
return id ? id : undefined |
|
24 |
} |
|
25 |
else undefined |
|
26 |
} |
|
27 |
||
28 |
||
29 |
/* setup */ |
|
30 |
||
31 |
let language_client: LanguageClient |
|
32 |
||
33 |
export function setup(context: ExtensionContext, client: LanguageClient) |
|
34 |
{ |
|
35 |
context.subscriptions.push(content_provider.register()) |
|
36 |
||
71473
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
37 |
var panel: WebviewPanel |
66203 | 38 |
language_client = client |
39 |
language_client.onNotification(protocol.state_output_type, params => |
|
40 |
{ |
|
41 |
const uri = encode_state(params.id) |
|
71473
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
42 |
if (!panel) { |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
43 |
const column = library.adjacent_editor_column(window.activeTextEditor, true) |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
44 |
panel = window.createWebviewPanel( |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
45 |
uri.fsPath, |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
46 |
"State", |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
47 |
column, |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
48 |
{ |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
49 |
enableScripts: true, |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
50 |
retainContextWhenHidden: true |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
51 |
} |
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
52 |
); |
66203 | 53 |
} |
71473
be84312a2d53
update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents:
66395
diff
changeset
|
54 |
panel.webview.html = params.content; |
66203 | 55 |
}) |
56 |
} |
|
57 |
||
58 |
||
59 |
/* commands */ |
|
60 |
||
61 |
export function init(uri: Uri) |
|
62 |
{ |
|
63 |
if (language_client) language_client.sendNotification(protocol.state_init_type) |
|
64 |
} |
|
65 |
||
66 |
export function exit(id: number) |
|
67 |
{ |
|
68 |
if (language_client) language_client.sendNotification(protocol.state_exit_type, { id: id }) |
|
69 |
} |
|
70 |
||
66395 | 71 |
export function exit_uri(uri: Uri) |
72 |
{ |
|
73 |
const id = decode_state(uri) |
|
74 |
if (id) exit(id) |
|
75 |
} |
|
76 |
||
66203 | 77 |
export function locate(id: number) |
78 |
{ |
|
79 |
if (language_client) language_client.sendNotification(protocol.state_locate_type, { id: id }) |
|
80 |
} |
|
81 |
||
82 |
export function update(id: number) |
|
83 |
{ |
|
84 |
if (language_client) language_client.sendNotification(protocol.state_update_type, { id: id }) |
|
85 |
} |
|
66211 | 86 |
|
87 |
export function auto_update(id: number, enabled: boolean) |
|
88 |
{ |
|
89 |
if (language_client) |
|
90 |
language_client.sendNotification(protocol.state_auto_update_type, { id: id, enabled: enabled }) |
|
91 |
} |