/
jsx.html
85 lines (72 loc) 路 2.45 KB
/
jsx.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Example!</title>
</head>
<body>
<script type="module">
// expanded sample from htm (https://github.com/developit/htm#example)
import { html, Component, render } from 'https://unpkg.com/htm/preact/standalone.module.js'
import { trackingFactory } from 'https://unpkg.com/simpledomtracking?module'
/* -------------------------------------------------- */
const tracking = trackingFactory(
{
category: 'category',
label: 'label',
},
keys => keys.category
)
/* -------------------------------------------------- */
class App extends Component {
addTodo() {
const { todos = [] } = this.state
this.setState({ todos: todos.concat(`Item ${todos.length}`) })
}
render({ page }, { todos = [] }) {
return html`
<div class="app">
<${Header} name="ToDo's (${page})" />
<ul>
${todos.map(
todo => html`
<li
key="${todo}"
...${tracking.create(keys => ({
[keys.category]: 'todo-click',
[keys.label]: todo,
}))}
>
${todo}
</li>
`
)}
</ul>
<button
onClick=${() => this.addTodo()}
...${tracking.create(keys => ({
[keys.category]: 'add-todo-click',
[keys.label]: 'really really',
}))}
>
Add Todo
</button>
<${Footer}>footer content here<//>
</div>
`
}
}
const Header = ({ name }) => html`<h1>${name} List</h1>`
const Footer = props => html`<footer ...${props} />`
render(html`<${App} page="All" />`, document.body)
/* -------------------------------------------------- */
document.addEventListener('click', ({ target }) => {
if (!tracking.isTracking(target)) return
console.log('sending data!!', tracking.getTrackingData(target))
})
</script>
<script nomodule>
document.body.innerHTML = '<h1>GOD, Y U DO DIS??</h1>'
</script>
</body>
</html>