src/Tools/VSCode/extension/media/main.js
author Thomas Lindae <thomas.lindae@in.tum.de>
Wed, 15 May 2024 00:11:34 +0200
changeset 81038 07ed4ce5c6c9
parent 81035 56594fac1dab
child 81046 95f650a8ce08
permissions -rw-r--r--
vscode: changed test_string to "mix" to be consistent with jEdit;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
75126
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
     1
(function () {
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
     2
    const vscode = acquireVsCodeApi();
81035
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
     3
75126
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
     4
    for (const link of document.querySelectorAll('a[href^="file:"]')) {
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
     5
        link.addEventListener('click', () => {
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
     6
            vscode.postMessage({
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
     7
                command: "open",
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
     8
                link: link.getAttribute('href'),
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
     9
            });
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    10
        });
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    11
    }
81035
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    12
75126
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    13
    const auto_update = document.getElementById('auto_update');
81035
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    14
    auto_update && auto_update.addEventListener('change', e => {
75126
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    15
            vscode.postMessage({'command': 'auto_update', 'enabled': e.target.checked}) ;
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    16
        });
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    17
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    18
    const update_button = document.getElementById('update_button');
81035
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    19
    update_button && update_button.addEventListener('click', e => {
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    20
            vscode.postMessage({'command': 'update'})
75126
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    21
        });
81035
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    22
75126
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    23
    const locate_button = document.getElementById('locate_button');
81035
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    24
    locate_button && locate_button.addEventListener('click', e => {
75126
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    25
            vscode.postMessage({'command': 'locate'});
da1108a6d249 various improvements to Isabelle/VSCode (by Denis Paluca and Fabian Huch);
wenzelm
parents:
diff changeset
    26
        });
81035
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    27
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    28
    const get_window_margin = () => {
81038
07ed4ce5c6c9 vscode: changed test_string to "mix" to be consistent with jEdit;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 81035
diff changeset
    29
        const test_string = "mix";
81035
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    30
        const test_span = document.createElement("span");
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    31
        test_span.textContent = test_string;
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    32
        document.body.appendChild(test_span);
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    33
        const symbol_width = test_span.getBoundingClientRect().width / test_string.length;
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    34
        document.body.removeChild(test_span);
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    35
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    36
        const width = window.innerWidth / symbol_width;
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    37
        const result = Math.max(width - 16, 1); // extra headroom
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    38
        return result;
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    39
    }
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    40
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    41
    const update_window_width = () => {
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    42
        vscode.postMessage({'command': 'resize', 'margin': get_window_margin()})
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    43
    };
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    44
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    45
    var timeout;
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    46
    window.onresize = function() {
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    47
        clearTimeout(timeout);
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    48
        timeout = setTimeout(update_window_width, 500);
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    49
    };
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    50
    window.onload = update_window_width;
56594fac1dab vscode: added dynamic and state output set margin messages to vscode extension;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 75126
diff changeset
    51
}());