mirror of
https://github.com/slint-ui/slint.git
synced 2025-09-07 02:50:34 +00:00

Don't fix the canvas to 100/100 physical pixels, as not all examples fit into that. Instead let the GL backend resize according to constraints, and add some missing sizes to some examples.
66 lines
2.9 KiB
HTML
66 lines
2.9 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");
|
|
// The GL backend tries to preserve a previously set size on the canvas. Make sure that any default the
|
|
// browser sets for these attributes are not used, but instead the examples can resize according to their
|
|
// constraints.
|
|
canvas.width = 0;
|
|
canvas.height = 0;
|
|
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();
|
|
var elements = document.querySelectorAll("code.language-slint, .rustdoc pre.language-slint, div.highlight-slint");
|
|
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>
|