mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-19 22:40:48 -07:00
feat(docs): show playground output as Prism-highlighted HTML code
Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
{% if page.layout === 'playground' %}
|
{% if page.layout === 'playground' %}
|
||||||
{{ js('js/liquid.browser.min.js') }}
|
{{ js('js/liquid.browser.min.js') }}
|
||||||
<script src="https://cdn.jsdelivr.net/npm/[email protected]/src-min/ace.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/[email protected]/src-min/ace.js"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/[email protected]/prism.min.js"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/[email protected]/components/prism-markup.min.js"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ js('js/main') }}
|
{{ js('js/main') }}
|
||||||
|
|||||||
+3
-1
@@ -13,7 +13,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="area-output editor-wrapper">
|
<div class="area-output editor-wrapper">
|
||||||
<h2>Output</h2>
|
<h2>Output</h2>
|
||||||
<div class="editor" id="previewEl">{{__('playground.loading')}}</div>
|
<div class="output-preview" id="previewEl">
|
||||||
|
<pre class="highlight"><code class="language-markup" id="previewCode">{{__('playground.loading')}}</code></pre>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="inner version"></p>
|
<p class="inner version"></p>
|
||||||
|
|||||||
@@ -68,6 +68,28 @@
|
|||||||
overflow: hidden
|
overflow: hidden
|
||||||
@media mq-mobile
|
@media mq-mobile
|
||||||
min-height: 240px
|
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
|
.ace_editor
|
||||||
font-family: font-mono
|
font-family: font-mono
|
||||||
font-size: 14px
|
font-size: 14px
|
||||||
|
|||||||
Vendored
+13
-8
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
// playground
|
// playground
|
||||||
/* global liquidjs, ace */
|
/* global liquidjs, ace, Prism */
|
||||||
if (!location.pathname.match(/playground.html$/)) return;
|
if (!location.pathname.match(/playground.html$/)) return;
|
||||||
updateVersion(liquidjs.version);
|
updateVersion(liquidjs.version);
|
||||||
const engine = new liquidjs.Liquid({
|
const engine = new liquidjs.Liquid({
|
||||||
@@ -48,12 +48,9 @@
|
|||||||
const colorScheme = window.matchMedia('(prefers-color-scheme: dark)');
|
const colorScheme = window.matchMedia('(prefers-color-scheme: dark)');
|
||||||
const editor = createEditor('editorEl', 'liquid');
|
const editor = createEditor('editorEl', 'liquid');
|
||||||
const dataEditor = createEditor('dataEl', 'json');
|
const dataEditor = createEditor('dataEl', 'json');
|
||||||
const preview = createEditor('previewEl', 'html');
|
const previewCode = document.getElementById('previewCode');
|
||||||
preview.setReadOnly(true);
|
|
||||||
preview.renderer.setShowGutter(false);
|
|
||||||
preview.renderer.setPadding(16);
|
|
||||||
|
|
||||||
const editors = [editor, dataEditor, preview];
|
const editors = [editor, dataEditor];
|
||||||
colorScheme.addEventListener('change', function() {
|
colorScheme.addEventListener('change', function() {
|
||||||
editors.forEach(applyEditorTheme);
|
editors.forEach(applyEditorTheme);
|
||||||
});
|
});
|
||||||
@@ -118,15 +115,23 @@
|
|||||||
return utoa(obj.tpl) + ',' + utoa(obj.data);
|
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() {
|
async function update() {
|
||||||
const tpl = editor.getValue();
|
const tpl = editor.getValue();
|
||||||
const data = dataEditor.getValue();
|
const data = dataEditor.getValue();
|
||||||
history.replaceState({}, '', '#' + serializeArgs({tpl, data}));
|
history.replaceState({}, '', '#' + serializeArgs({tpl, data}));
|
||||||
try {
|
try {
|
||||||
const html = await engine.parseAndRender(tpl, JSON.parse(data));
|
const html = await engine.parseAndRender(tpl, JSON.parse(data));
|
||||||
preview.setValue(html, 1);
|
setPreview(html);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
preview.setValue(err.stack, 1);
|
setPreview(err.stack);
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user