feat(docs): show playground output as Prism-highlighted HTML code

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Yang Jun
2026-06-22 21:26:41 +08:00
co-authored by Cursor
parent 2568b95f6a
commit ac94a2b376
4 changed files with 40 additions and 9 deletions
+22
View File
@@ -68,6 +68,28 @@
overflow: hidden
@media mq-mobile
min-height: 240px
.output-preview
flex: 1 1 auto
min-height: 0
code-block-chrome()
overflow: auto
pre.highlight
margin: 0
min-height: 100%
padding: 16px
border: none
box-shadow: none
border-radius: 0
background: var(--highlight-background)
code
display: block
font-family: font-mono
font-size: 14px
line-height: 1.5
background: transparent
padding: 0
white-space: pre-wrap
word-break: break-word
.ace_editor
font-family: font-mono
font-size: 14px
+13 -8
View File
@@ -38,7 +38,7 @@
(function() {
// playground
/* global liquidjs, ace */
/* global liquidjs, ace, Prism */
if (!location.pathname.match(/playground.html$/)) return;
updateVersion(liquidjs.version);
const engine = new liquidjs.Liquid({
@@ -48,12 +48,9 @@
const colorScheme = window.matchMedia('(prefers-color-scheme: dark)');
const editor = createEditor('editorEl', 'liquid');
const dataEditor = createEditor('dataEl', 'json');
const preview = createEditor('previewEl', 'html');
preview.setReadOnly(true);
preview.renderer.setShowGutter(false);
preview.renderer.setPadding(16);
const previewCode = document.getElementById('previewCode');
const editors = [editor, dataEditor, preview];
const editors = [editor, dataEditor];
colorScheme.addEventListener('change', function() {
editors.forEach(applyEditorTheme);
});
@@ -118,15 +115,23 @@
return utoa(obj.tpl) + ',' + utoa(obj.data);
}
function setPreview (value) {
previewCode.textContent = value
if (window.Prism) {
delete previewCode.dataset.highlighted
window.Prism.highlightElement(previewCode)
}
}
async function update() {
const tpl = editor.getValue();
const data = dataEditor.getValue();
history.replaceState({}, '', '#' + serializeArgs({tpl, data}));
try {
const html = await engine.parseAndRender(tpl, JSON.parse(data));
preview.setValue(html, 1);
setPreview(html);
} catch (err) {
preview.setValue(err.stack, 1);
setPreview(err.stack);
throw err;
}
}