diff --git a/site/src/components/Repl/CodeMirror.svelte b/site/src/components/Repl/CodeMirror.svelte index 839665bbc6..a51b532565 100644 --- a/site/src/components/Repl/CodeMirror.svelte +++ b/site/src/components/Repl/CodeMirror.svelte @@ -13,12 +13,11 @@
@@ -113,7 +172,8 @@ >CSS output
-{#if view === 'result'} + +
-{:else if embedded} +
+ + +
+ {#if embedded} + + {:else} + +
+ +
+ +
+

Compiler options

+ + +
+
+ {/if} +
+ + +
-{:else} - -
- -
- -
-

Compiler options

- - -
-
-{/if} +
\ No newline at end of file diff --git a/site/src/components/Repl/index.svelte b/site/src/components/Repl/index.svelte index c58e3d22bc..6b351f8535 100644 --- a/site/src/components/Repl/index.svelte +++ b/site/src/components/Repl/index.svelte @@ -1,7 +1,6 @@ @@ -240,21 +216,12 @@ fixed_pos={50} >
- - + +
- +
diff --git a/site/src/routes/repl/embed.svelte b/site/src/routes/repl/embed.svelte index 305fabc7aa..fc74d8df5f 100644 --- a/site/src/routes/repl/embed.svelte +++ b/site/src/routes/repl/embed.svelte @@ -15,11 +15,7 @@ export let version, gist, demo; - let app = { - components: [], - values: {} - }; - + let repl; let name = 'loading...'; onMount(() => { @@ -67,7 +63,7 @@ return a.name < b.name ? -1 : 1; }); - app = { components, values }; + repl.set({ components, values }); }); } else if (demo) { const url = `api/examples/${demo}`; @@ -76,10 +72,10 @@ if (response.ok) { const data = await response.json(); - app = { + repl.set({ values: tryParseData(data.json5) || {}, // TODO make this more error-resistant components: data.components - }; + }); } }); } @@ -114,6 +110,6 @@
{#if process.browser} - + {/if}
diff --git a/site/src/routes/repl/index.svelte b/site/src/routes/repl/index.svelte index 90741ae8bb..4adf5368d0 100644 --- a/site/src/routes/repl/index.svelte +++ b/site/src/routes/repl/index.svelte @@ -18,16 +18,10 @@ export let version, demo, gist_id; + let repl; let gist; - - let app = { - components: [], - values: {} - }; - let name = 'loading...'; let zen_mode = false; - let repl; $: if (typeof history !== 'undefined') { const params = []; @@ -99,7 +93,7 @@ return a.name < b.name ? -1 : 1; }); - app = { components, values }; + repl.set({ components, values }); }); } }); @@ -117,10 +111,10 @@ console.log(data.components); - app = { + repl.set({ values: tryParseData(data.json5) || {}, // TODO make this more error-resistant components: data.components - }; + }); gist = null; } @@ -198,7 +192,6 @@
{#if process.browser} - + {/if}
diff --git a/site/src/routes/tutorial/[slug]/index.svelte b/site/src/routes/tutorial/[slug]/index.svelte index 514853177c..eb2ab246a4 100644 --- a/site/src/routes/tutorial/[slug]/index.svelte +++ b/site/src/routes/tutorial/[slug]/index.svelte @@ -24,8 +24,9 @@ const { sections } = getContext('tutorial'); - const lookup = new Map(); + let repl; let prev; + const lookup = new Map(); sections.forEach(section => { section.chapters.forEach(chapter => { @@ -52,27 +53,24 @@ $: selected = lookup.get(slug); $: improve_link = `${tutorial_repo_link}/${selected.chapter.section_dir}/${selected.chapter.chapter_dir}`; - // TODO once reactive values are fixed - // $: app = { - // components: chapter.app_a, - // values: {} - // }; - - let app; - $: start(chapter); + const clone = file => ({ + name: file.name, + type: file.type, + source: file.source + }); - function start(chapter) { - app = { - components: chapter.app_a, + $: if (repl) { + repl.set({ + components: chapter.app_a.map(clone), values: {} - }; + }); } function complete() { - app = { - components: chapter.app_b, + repl.update({ + components: chapter.app_b.map(clone), values: {} - }; + }); } @@ -232,6 +230,6 @@
- +
diff --git a/site/static/workers/compiler.js b/site/static/workers/compiler.js index 0583186dc7..d234c2a0bb 100644 --- a/site/static/workers/compiler.js +++ b/site/static/workers/compiler.js @@ -29,7 +29,7 @@ const commonCompilerOptions = { css: false }; -function compile({ source, options, entry }) { +function compile({ id, source, options, entry }) { try { const { js, css, stats, vars } = svelte.compile( source, @@ -40,11 +40,26 @@ function compile({ source, options, entry }) { ? (vars || stats.vars).map(v => v.writable && v.export_name).filter(Boolean) // TODO remove stats post-launch : null; - return { js: js.code, css: css.code, props }; + return { + id, + result: { + js: js.code, + css: css.code || `/* Add a tag to see compiled CSS */`, + props + } + }; } catch (err) { - let result = `/* Error compiling component\n\n${err.message}`; - if (err.frame) result += `\n${err.frame}`; - result += `\n\n*/`; - return { code: result, props: null }; + let message = `/* Error compiling component\n\n${err.message}`; + if (err.frame) message += `\n${err.frame}`; + message += `\n\n*/`; + + return { + id, + result: { + js: message, + css: message, + props: null + } + }; } }