src/Tools/VSCode/extension/media/main.js
author paulson <lp15@cam.ac.uk>
Fri, 08 Aug 2025 16:46:03 +0100
changeset 82969 dedd9d13c79c
parent 81046 95f650a8ce08
permissions -rw-r--r--
Generalised a theorem about Lebesgue integration
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
81046
95f650a8ce08 vscode: reduced how often symbol width gets measured;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 81038
diff changeset
    28
    const test_string = "mix";
95f650a8ce08 vscode: reduced how often symbol width gets measured;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 81038
diff changeset
    29
    const test_span = document.createElement("span");
95f650a8ce08 vscode: reduced how often symbol width gets measured;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 81038
diff changeset
    30
    test_span.textContent = test_string;
95f650a8ce08 vscode: reduced how often symbol width gets measured;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 81038
diff changeset
    31
    document.body.appendChild(test_span);
95f650a8ce08 vscode: reduced how often symbol width gets measured;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 81038
diff changeset
    32
    const symbol_width = test_span.getBoundingClientRect().width / test_string.length;
95f650a8ce08 vscode: reduced how often symbol width gets measured;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 81038
diff changeset
    33
    document.body.removeChild(test_span);
95f650a8ce08 vscode: reduced how often symbol width gets measured;
Thomas Lindae <thomas.lindae@in.tum.de>
parents: 81038
diff changeset
    34
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
    35
    const 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
    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
}());