add LibreJS licenses to all demo JS split browser build from node build add copyright info to license files update to use yarn v4.13.0 update to v0.9.2
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt
|
|
|
|
export default function formatSource(source, panelId) {
|
|
source = (source ?? "").trim();
|
|
|
|
if (!source || !panelId) return;
|
|
|
|
const sourceSplit = source.split(/\r?\n/);
|
|
const spaceCount = sourceSplit[sourceSplit.length - 1].search(/\S/);
|
|
if (spaceCount <= 0) return; // empty string
|
|
|
|
const trimRE = new RegExp(`^\\s{${spaceCount}}`);
|
|
|
|
const preDom = document.createElement("pre");
|
|
preDom.append(sourceSplit.map((val) => val.replace(trimRE, "")).join("\n"));
|
|
|
|
preDom.innerHTML = preDom.innerHTML
|
|
// strRegEx must be applied first to prevent false positives
|
|
.replace(/\"[^"]+\"/g, (val) =>
|
|
val !== '"module"' ? `<span class="code-str">${val}</span>` : val,
|
|
)
|
|
.replace(/\/\/.*/g, (val) => `<span class="code-cmnt">${val}</span>`)
|
|
.replace(/\`[^`]+\`/g, (val) => `<span class="code-str">${val}</span>`)
|
|
.replace(/\.\w+/g, (val) =>
|
|
val !== ".js" ? `<span class="code-func">${val}</span>` : val,
|
|
)
|
|
.replace(
|
|
/<\/?script[^&]*>/g,
|
|
(val) => `<span class="code-cmd">${val}</span>`,
|
|
);
|
|
|
|
const sourceHTML = `
|
|
<details class='js-sourceDetails' open="true">
|
|
<summary>Source</summary>
|
|
<div>
|
|
<figure>
|
|
${preDom.outerHTML}
|
|
</figure>
|
|
</div>
|
|
</details>
|
|
`.trim();
|
|
|
|
document
|
|
.getElementById(panelId)
|
|
.insertAdjacentHTML("beforeend", sourceHTML);
|
|
}
|
|
|
|
// @license-end
|