diff --git a/frontend/src/lib/components/DisplayResult.svelte b/frontend/src/lib/components/DisplayResult.svelte index 7099ba9a43..7b6ca3f2fe 100644 --- a/frontend/src/lib/components/DisplayResult.svelte +++ b/frontend/src/lib/components/DisplayResult.svelte @@ -7,11 +7,13 @@ import autosize from 'svelte-autosize' export let result: any + export let requireHtmlApproval = false let resultKind: | 'json' | 'table-col' | 'table-row' + | 'html' | 'png' | 'file' | 'jpeg' @@ -19,9 +21,11 @@ | 'error' | 'approval' | undefined + $: resultKind = inferResultKind(result) let forceJson = false + let enableHtml = false function isRectangularArray(obj: any) { if (!Array.isArray(obj) || obj.length == 0) { @@ -53,6 +57,8 @@ return 'table-row' } else if (keys.map((k) => Array.isArray(result[k])).reduce((a, b) => a && b)) { return 'table-col' + } else if (keys.length == 1 && keys[0] == 'html') { + return 'html' } else if (keys.length == 1 && keys[0] == 'png') { return 'png' } else if (keys.length == 1 && keys[0] == 'jpeg') { @@ -119,6 +125,34 @@ + {:else if !forceJson && resultKind == 'html'} +
+ {#if !requireHtmlApproval || enableHtml} + {@html result.html} + {:else} +
+
+
+ Warning +
+

Rendering HTML can expose you to XSS attacks. +Only enable it if you trust the author of the script. +

+
+
+ +
+
+ {/if} +
{:else if !forceJson && resultKind == 'png'}
png rendered diff --git a/frontend/src/lib/components/apps/components/DisplayComponent.svelte b/frontend/src/lib/components/apps/components/DisplayComponent.svelte index 35757b9bf5..544f8c80ab 100644 --- a/frontend/src/lib/components/apps/components/DisplayComponent.svelte +++ b/frontend/src/lib/components/apps/components/DisplayComponent.svelte @@ -1,11 +1,14 @@