You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
830 B
38 lines
830 B
import {Display} from './display.js'
|
|
|
|
const target = document.createElement('div')
|
|
|
|
const state = {items: [], show: null }
|
|
for (let i = 0; i < 16; ++i) {
|
|
state.items.push({id: i, state: 'face-down', img: 'weben.svg'})
|
|
}
|
|
|
|
class Actions {
|
|
flip(id) {
|
|
state.items[id].state = 'face-up'
|
|
}
|
|
show(id) {
|
|
state.show = id
|
|
}
|
|
reset() {
|
|
state.show = null
|
|
}
|
|
}
|
|
const actions = new Actions
|
|
|
|
let display
|
|
const dispatch = target => {
|
|
const match = target.match(/\/([^/]+)\/([^/]+)/)
|
|
if (match && Object.hasOwnProperty.call(Actions.prototype, match[2])) {
|
|
actions[match[2]](match[1])
|
|
} else actions.reset()
|
|
display.render(state)
|
|
}
|
|
window.onpopstate = e => {
|
|
dispatch(document.location.search)
|
|
}
|
|
display = new Display('', dispatch, target)
|
|
|
|
dispatch(document.location.search)
|
|
document.body.appendChild(target)
|
|
|