<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>John Lindquist</title>
<script>console.clear();</script>
<script src="https://npmcdn.com/systemjs/dist/system.js"></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<script src="systemjs.config.js"></script>
<script>System.import('app');</script>
</body>
</html>
import yo from 'yo-yo';
import {observable, autorun} from "mobx";
const appState = observable({
name: "Susan",
age: 42
});
const inputComp = state =>
yo`<input value="${state.name}" oninput=${ev => state.name = ev.target.value}>`
const buttonComp = state =>
yo`<button onclick=${ev => state.age++}>Age up!</button>`;
const appComp = state => yo`<div>
${inputComp(state)}
${buttonComp(state)}
<hr>
${state.name} is ${state.age}
</div>`;
const ref = document.body.appendChild(appComp(appState));
autorun(() => yo.update(ref, appComp(appState)));
:root{
font-family: Arial;
}
(function(global) {
const map = {
'app': 'app',
'bel': 'https://npmcdn.com/bel',
'global/document': 'https://npmcdn.com/global/document',
'hyperx': 'https://npmcdn.com/hyperx',
'hyperscript-attribute-to-property': 'https://npmcdn.com/hyperscript-attribute-to-property',
'min-document': 'https://npmcdn.com/min-document',
'mobx': 'https://npmcdn.com/mobx',
'morphdom': 'https://npmcdn.com/morphdom',
'ts': 'https://npmcdn.com/plugin-typescript@4.0.10/lib/plugin.js',
'typescript': 'https://npmcdn.com/typescript@1.8.10/lib/typescript.js',
'yo-yo': 'https://npmcdn.com/yo-yo@1.2.2'
};
const packages = {
'app': { main: 'main.ts', defaultExtension: 'ts' },
'symbol-observable': {main: 'index.js'},
'yo-yo': {main: 'index.js'}
};
const config = {
transpiler: 'typescript',
typescriptOptions: {
emitDecoratorMetadata: true
},
map: map,
packages: packages
}
System.config(config);
})(this);