Add svelte as a view engine to swaf #33
@ -11,9 +11,11 @@
|
|||||||
|
|
||||||
const locals = %locals%;
|
const locals = %locals%;
|
||||||
localStore.set((key, args) => {
|
localStore.set((key, args) => {
|
||||||
return locals[args ?
|
const localKey = args ?
|
||||||
`'${key}', \`${args}\``
|
`'${key}', \`${args}\``
|
||||||
: `'${key}'`];
|
: `'${key}'`;
|
||||||
|
// console.debug(localKey + '=' + locals[localKey])
|
||||||
|
return locals[localKey];
|
||||||
});
|
});
|
||||||
|
|
||||||
new View({
|
new View({
|
||||||
|
34
test/assets/views/AllTests.svelte
Normal file
34
test/assets/views/AllTests.svelte
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<script>
|
||||||
|
import {locals} from "../ts/stores.js";
|
||||||
|
import LocalsTest from "./LocalsTest.svelte";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
:global(body) {
|
||||||
|
margin: 0;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.render-mode {
|
||||||
|
text-align: center;
|
||||||
|
background: gray;
|
||||||
|
padding: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="render-mode">{$locals.isPreRender ? 'SSR' : 'CSR'}</div>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Expected value</th>
|
||||||
|
<th>Actual value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<LocalsTest/>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
25
test/assets/views/LocalsTest.svelte
Normal file
25
test/assets/views/LocalsTest.svelte
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import {locals} from '../ts/stores.js';
|
||||||
|
import Test from "./Test.svelte";
|
||||||
|
|
||||||
|
//TODO: binding tests
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Test name="$locals" actualValue={$locals} not expectedValue={undefined}/>
|
||||||
|
<Test name="\$locals.route" actualValue={$locals.route} not expectedValue={undefined}/>
|
||||||
|
<Test name="$locals escaping" actualValue="\$locals.route" not expectedValue="$locals('route')"/>
|
||||||
|
<Test name="$locals not escaping" actualValue="$locals.route" expectedValue="$locals('route')"/>
|
||||||
|
<Test name="$locals escaping" actualValue={`{\\$locals.escaped}`} not expectedValue={`{$locals('escaped')}`}/>
|
||||||
|
<Test name="$locals not escaping" actualValue={`{$locals.escaped}`} expectedValue={`{$locals('escaped')}`}/>
|
||||||
|
|
||||||
|
<!-- Inspecting values -->
|
||||||
|
<Test name="\$locals.dump string" actualValue={$locals.dump('bonjour')} expectedValue="'bonjour'"/>
|
||||||
|
<Test name="\$locals.dump NaN" actualValue={$locals.dump(NaN)} expectedValue="NaN"/>
|
||||||
|
|
||||||
|
<!-- Nested locals calls -->
|
||||||
|
<Test name="\$locals.dump \$locals.name" actualValue={$locals.dump($locals.app)} not expectedValue={undefined}/>
|
||||||
|
<Test name="\$locals.dump \$locals.app.name" actualValue={$locals.dump($locals.app.name)} expectedValue="'Example App'"/>
|
||||||
|
|
||||||
|
<!-- Routes (url building) -->
|
||||||
|
<Test name="\$locals.route home" actualValue={$locals.route('home')} expectedValue="/"/>
|
||||||
|
<Test name="\$locals.route auth" actualValue={$locals.route('auth')} expectedValue="/auth/"/>
|
42
test/assets/views/Test.svelte
Normal file
42
test/assets/views/Test.svelte
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let name: string;
|
||||||
|
export let actualValue: any;
|
||||||
|
export let not: boolean = false;
|
||||||
|
export let expectedValue: any;
|
||||||
|
|
||||||
|
const success = not ?
|
||||||
|
expectedValue !== actualValue :
|
||||||
|
expectedValue === actualValue;
|
||||||
|
const failure = !success;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
tr {
|
||||||
|
font-family: monospace;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
td {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
border-left: 2px solid gray;
|
||||||
|
|
||||||
|
&.success > :first-child {
|
||||||
|
border-left: 8px solid green;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.failure > :first-child {
|
||||||
|
border-left: 8px solid red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.not {
|
||||||
|
color: gray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<tr class:success class:failure>
|
||||||
|
<td>{name}</td>
|
||||||
|
<td>{#if not}<span class="not">!</span>{/if}{expectedValue}</td>
|
||||||
|
<td>{actualValue}</td>
|
||||||
|
</tr>
|
@ -1,26 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import {locals} from "../ts/stores.js";
|
|
||||||
|
|
||||||
export let depTest = 'Success';
|
|
||||||
|
|
||||||
let locallyDefinedVar = 'correct value';
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
p {
|
|
||||||
color: brown;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
|
||||||
<p>Simple dep test</p>
|
|
||||||
<p>\$locals.</p>
|
|
||||||
<p>\$locals.</p>
|
|
||||||
|
|
||||||
<p>$locals: {$locals}</p>
|
|
||||||
<p>\$locals.route: {$locals.route} <br> {$locals.dump(typeof $locals.route)}</p>
|
|
||||||
<p>\$locals.dump: {$locals.dump('bonjour')}</p>
|
|
||||||
<p>\$locals.dump: {$locals.dump($locals.app)}</p>
|
|
||||||
<p>\$locals.dump: {$locals.dump(NaN)}</p>
|
|
||||||
<p>\$locals.route: {$locals.route('auth')}</p>
|
|
||||||
<p>\$locals.route: {$locals.route('home')}</p>
|
|
@ -1,61 +0,0 @@
|
|||||||
<script>
|
|
||||||
import {locals} from "../ts/stores.js";
|
|
||||||
import HomeDep from "./home_dep.svelte";
|
|
||||||
import Layout from "./layout.svelte";
|
|
||||||
|
|
||||||
let count = 5;
|
|
||||||
|
|
||||||
function handleClick() {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
let depTest;
|
|
||||||
|
|
||||||
let mode = ($locals).name === 'locals' ? 'RENDU' : 'PRE RENDU'
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
p:last-of-type {
|
|
||||||
color: blueviolet;
|
|
||||||
}
|
|
||||||
|
|
||||||
.style-test {
|
|
||||||
p {
|
|
||||||
color: blue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<h1 id="rendertest">{mode}</h1>
|
|
||||||
|
|
||||||
<Layout title="Home">
|
|
||||||
<svelte:fragment slot="body">
|
|
||||||
<h1>BONJOUR lol</h1>
|
|
||||||
</svelte:fragment>
|
|
||||||
</Layout>
|
|
||||||
|
|
||||||
<h1>Hello {count}!</h1>
|
|
||||||
|
|
||||||
<button on:click={handleClick}>More hellos!!</button>
|
|
||||||
|
|
||||||
<p>Direct access: {$locals.direct}</p>
|
|
||||||
|
|
||||||
{#if $locals.route('auth') === '/'}
|
|
||||||
We're home!
|
|
||||||
{:else}
|
|
||||||
We're somewhere else... {$locals.route('auth')}
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<p>The route to auth is {$locals.route('auth')}</p>
|
|
||||||
|
|
||||||
<p>\$locals.notcode</p>
|
|
||||||
|
|
||||||
<p>{`{\\$locals.escaped}`}</p>
|
|
||||||
|
|
||||||
<div class="style-test">
|
|
||||||
<p>Blue!</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<HomeDep bind:depTest={depTest}/>
|
|
||||||
|
|
||||||
<p>Dependency test: {depTest}</p>
|
|
Loading…
Reference in New Issue
Block a user