mirror of
https://github.com/slint-ui/slint.git
synced 2025-11-02 21:03:00 +00:00
Highlight all Slint code and don't do the preview on snippets where it doesn't make sense. Some snippets, such as the bare statement or expression snippets, are now highlighted, but they are continued to be excluded from the doctest.
63 lines
2.8 KiB
HTML
63 lines
2.8 KiB
HTML
<!--
|
|
This file is used to add preview of the `.slint` snippets in the generated rustdoc documentation.
|
|
It can be injected via the `--html-in-header slint-docs-preview.html` option of rustdoc.
|
|
-->
|
|
<script type="module">
|
|
"use strict";
|
|
//import * as slint from 'https://slint-ui.com/releases/0.x.0/wasm-interpreter/slint_wasm_interpreter.js';
|
|
import * as slint from 'https://slint-ui.com/snapshots/master/wasm-interpreter/slint_wasm_interpreter.js';
|
|
// keep them alive
|
|
var all_instances = new Array;
|
|
|
|
async function render_or_error(source, div) {
|
|
let canvas_id = 'canvas_' + Math.random().toString(36).substr(2, 9);
|
|
let canvas = document.createElement("canvas");
|
|
canvas.id = canvas_id;
|
|
div.appendChild(canvas);
|
|
|
|
let { component, error_string } = await slint.compile_from_string(source, "");
|
|
if (error_string != "") {
|
|
var text = document.createTextNode(error_string);
|
|
var p = document.createElement('pre');
|
|
p.appendChild(text);
|
|
div.innerHTML = "<pre style='color: red; background-color:#fee; margin:0'>" + p.innerHTML + "</pre>";
|
|
}
|
|
if (component !== undefined) {
|
|
let instance = component.create(canvas_id);
|
|
instance.show();
|
|
all_instances.push(instance);
|
|
}
|
|
}
|
|
|
|
async function run() {
|
|
await slint.default();
|
|
let selector = ["code.language-slint", ".rustdoc pre.language-slint", "div.highlight-slint"]
|
|
.map((sel) => `${sel}:not([class*=slint\\,ignore]):not([class*=slint\\,no_run])`).join(",");
|
|
var elements = document.querySelectorAll(selector);
|
|
for (var i = 0; i < elements.length; ++i) {
|
|
let source = elements[i].innerText;
|
|
let div = document.createElement("div");
|
|
div.style = "float: right; padding:0; margin:0;";
|
|
elements[i].prepend(div);
|
|
await render_or_error(source, div);
|
|
}
|
|
slint.run_event_loop();
|
|
}
|
|
run();
|
|
|
|
// Included markdown files may have links to other markdown files, which may not have been
|
|
// resolved by rustdoc. This helper locates such links and resolves them, assuming that each
|
|
// .md file gets its own sub-directory with an index.html.
|
|
function fix_markdown_links() {
|
|
for (let anchor of document.querySelectorAll('a[href$=".md"]')) {
|
|
let url = new URL(anchor.href);
|
|
let dir_separator = Math.max(url.pathname.lastIndexOf("/"), 0);
|
|
let base_name = url.pathname.slice(dir_separator + 1, -3);
|
|
let base_path = url.pathname.slice(0, dir_separator);
|
|
url.pathname = base_path + "/../" + base_name + "/index.html";
|
|
anchor.setAttribute("href", url.pathname);
|
|
}
|
|
}
|
|
fix_markdown_links()
|
|
|
|
</script>
|