src/Tools/VSCode/extension/src/state_panel.ts
author wenzelm
Sat, 02 Sep 2017 17:21:52 +0200
changeset 66598 e2671e8c476f
parent 66395 14146fb264d8
child 71473 be84312a2d53
permissions -rw-r--r--
VSCode extension for official Isabelle release;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
66203
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     1
'use strict';
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     2
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     3
import * as library from './library'
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     4
import * as protocol from './protocol'
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     5
import { Content_Provider } from './content_provider'
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     6
import { LanguageClient } from 'vscode-languageclient';
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     7
import { Uri, ExtensionContext, workspace, commands, window } from 'vscode'
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     8
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     9
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    10
/* HTML content */
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    11
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    12
const content_provider = new Content_Provider("isabelle-state")
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    13
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    14
function encode_state(id: number | undefined): Uri | undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    15
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    16
  return id ? content_provider.uri_template.with({ fragment: id.toString() }) : undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    17
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    18
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    19
function decode_state(uri: Uri | undefined): number | undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    20
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    21
  if (uri && uri.scheme === content_provider.uri_scheme) {
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    22
    const id = parseInt(uri.fragment)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    23
    return id ? id : undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    24
  }
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    25
  else undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    26
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    27
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    28
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    29
/* setup */
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    30
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    31
let language_client: LanguageClient
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    32
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    33
export function setup(context: ExtensionContext, client: LanguageClient)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    34
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    35
  context.subscriptions.push(content_provider.register())
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    36
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    37
  language_client = client
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    38
  language_client.onNotification(protocol.state_output_type, params =>
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    39
    {
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    40
      const uri = encode_state(params.id)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    41
      if (uri) {
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    42
        content_provider.set_content(uri, params.content)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    43
        content_provider.update(uri)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    44
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    45
        const existing_document =
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    46
          workspace.textDocuments.find(document =>
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    47
            document.uri.scheme === uri.scheme &&
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    48
            document.uri.fragment === uri.fragment)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    49
        if (!existing_document) {
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    50
          const column = library.adjacent_editor_column(window.activeTextEditor, true)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    51
          commands.executeCommand("vscode.previewHtml", uri, column, "State")
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    52
        }
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    53
      }
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    54
    })
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    55
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    56
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    57
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    58
/* commands */
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    59
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    60
export function init(uri: Uri)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    61
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    62
  if (language_client) language_client.sendNotification(protocol.state_init_type)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    63
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    64
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    65
export function exit(id: number)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    66
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    67
  if (language_client) language_client.sendNotification(protocol.state_exit_type, { id: id })
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    68
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    69
66395
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    70
export function exit_uri(uri: Uri)
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    71
{
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    72
  const id = decode_state(uri)
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    73
  if (id) exit(id)
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    74
}
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    75
66203
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    76
export function locate(id: number)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    77
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    78
  if (language_client) language_client.sendNotification(protocol.state_locate_type, { id: id })
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    79
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    80
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    81
export function update(id: number)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    82
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    83
  if (language_client) language_client.sendNotification(protocol.state_update_type, { id: id })
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    84
}
66211
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    85
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    86
export function auto_update(id: number, enabled: boolean)
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    87
{
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    88
  if (language_client)
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    89
    language_client.sendNotification(protocol.state_auto_update_type, { id: id, enabled: enabled })
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    90
}