57 lines
2.1 KiB
JavaScript
57 lines
2.1 KiB
JavaScript
import { Template } from './template.js';
|
|
|
|
// 1. Basic variable
|
|
let t = new Template('Hello {{ name }}!');
|
|
console.log('1:', t.render({ name: 'World' }));
|
|
|
|
// 2. Format specifier
|
|
t = new Template('Price: {{ price:0.00 }}');
|
|
console.log('2:', t.render({ price: 9.5 }));
|
|
|
|
// 3. @let
|
|
t = new Template('@let short = user.name\nHello {{ short }}!');
|
|
console.log('3:', t.render({ user: { name: 'Alice' } }));
|
|
|
|
// 4. @for with separator via @if(!$first)
|
|
t = new Template('@for(item of items){@if(!$first){, }{{ item }}}');
|
|
console.log('4:', t.render({ items: ['a', 'b', 'c'] }));
|
|
|
|
// 5/6. @if / @else
|
|
t = new Template('@if(admin){Admin}@else{User}');
|
|
console.log('5:', t.render({ admin: true }));
|
|
console.log('6:', t.render({ admin: false }));
|
|
|
|
// 7. Expression
|
|
t = new Template('{{ name.toUpperCase() }}');
|
|
console.log('7:', t.render({ name: 'alice' }));
|
|
|
|
// 8. $index
|
|
t = new Template('@for(item of items){ {{ $index }}: {{ item }} }');
|
|
console.log('8:', t.render({ items: ['x', 'y'] }));
|
|
|
|
// 9. Multiple @let
|
|
t = new Template('@let a = first\n@let b = second\n{{ a }} and {{ b }}');
|
|
console.log('9:', t.render({ first: 'one', second: 'two' }));
|
|
|
|
// 10. Nested for
|
|
t = new Template('@for(group of groups){ @for(item of group.items){ {{ item }} } }');
|
|
console.log('10:', t.render({ groups: [{ items: [1, 2] }, { items: [3, 4] }] }));
|
|
|
|
// 11. @empty block
|
|
t = new Template('@for(item of items){ {{ item }} } @empty{No items}');
|
|
console.log('11a:', t.render({ items: [] }));
|
|
console.log('11b:', t.render({ items: ['x'] }));
|
|
|
|
// 12. $first, $last, $even, $odd, $count
|
|
t = new Template('@for(item of items){[{{ item }} first={{ $first }} last={{ $last }} even={{ $even }} odd={{ $odd }} count={{ $count }}]}');
|
|
console.log('12:', t.render({ items: ['a', 'b', 'c'] }));
|
|
|
|
|
|
// 13. $this to access the contexts root object
|
|
t = new Template('@for(item of $this){ {{ item }} } @empty{No items}');
|
|
console.log('13a:', t.render([]));
|
|
console.log('13b:', t.render(['x']));
|
|
|
|
// 14. @for with multiple variables (destructuring)
|
|
t = new Template('@for(key, value of Object.entries(obj)){@if(!$first){, }{{ key }}={{ value }}}');
|
|
console.log('14:', t.render({ obj: { a: 1, b: 2, c: 3 } })); |