JSFiddle - React, Tailwind, and code Playground
by rich_harris
HTML
<main></main>
<script id='template' type='text/ractive'>
<h2>input</h2>
<ul>
{{#each transforms:i}}
<li>
<input value='{{fn}}' placeholder='function name'/>
<input
twoway='false'
value='{{format(args)}}'
placeholder='function arguments'
on-input='updateArgs(i,event.node.value)'
/>
</li>
{{/each}}
</ul>
<h2>output</h2>
<ul>
{{#each transforms}}
<li>
<p>function name: <strong>{{fn}}</strong></p>
<p>args:</p>
<ul>
{{#each args}}
<p>{{JSON.stringify(this)}} ({{typeof this}})</p>
{{/each}}
</ul>
</li>
{{/each}}
</ul>
</script>
CSS
body {
font-family: 'Helvetica Neue', arial, sans-serif;
font-weight: 200;
color: #353535;
}
h1, h2, h3, h4, h5, h6 {
font-weight: 200;
}
.error {
color: #d00;
font-family: monospace;
}
JavaScript
var ractive = new Ractive({
el: 'main',
template: '#template',
data: {
transforms: [
{
fn: 'TheFunctionName',
args: [ 'arg1', 2, 'arg3' ]
},
{
fn: 'AnotherMethod',
args: [ 4.678 ]
}
],
format: function ( args ) {
return args.map( JSON.stringify ).join( ', ' );
}
},
updateArgs: function ( index, str ) {
var args;
try {
// or use JSON.parse, if you don't want to eval
args = eval( '([' + str + '])' );
this.set( 'transforms[' + index + '].args', args );
} catch ( err ) {
// probably still typing. ignore error
}
}
});