slint/api/sixtyfps-rs/sixtyfps-docs-integration.html
Olivier Goffart 359f42c5f7 Prepare the compiler to be async
This will allow the online editor to load imports from URL asynchroniously later

Since currently the compiler is only working on a single thread, and that we
never await on a future that could block, it is allowed to use the spin_on executor
2020-10-30 15:00:04 +01:00

60 lines
No EOL
2.4 KiB
HTML

<!--
This file is used to add preview of the `.60` snippets in the generated rustdoc documentation.
It can be injected via the `--html-in-header sixtyfps-docs-integration.html` option of rustdoc.
-->
<script type="module">
"use strict";
import * as sixtyfps from 'https://sixtyfps.io/wasm-interpreter/sixtyfps_wasm_interpreter.js';
async function render_or_error(source, div) {
let canvas_id = 'canvas_' + Math.random().toString(36).substr(2, 9);
let canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 100;
canvas.id = canvas_id;
div.appendChild(canvas);
try {
var compiled_component = await sixtyfps.compile_from_string(source, "");
} catch (e) {
var text = document.createTextNode(e.message);
var p = document.createElement('pre');
p.appendChild(text);
div.innerHTML = "<pre style='color: red; background-color:#fee; margin:0'>" + p.innerHTML + "</pre>";
throw e;
}
compiled_component.run(canvas_id);
}
async function run() {
await sixtyfps.default();
var elements = document.querySelectorAll("code.language-60, div.highlight-60 div");
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;";
div.innerHTML = "<p>Preview:</p>";
elements[i].parentElement.insertBefore(div, elements[i])
setTimeout(function () { render_or_error(source, div); }, 1);
}
}
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>