-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathbrowser-entry.js
61 lines (53 loc) · 1.51 KB
/
browser-entry.js
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
// safari support
require('stereo-panner-node').polyfill()
window.AudioContext = window.AudioContext || window.webkitAudioContext
var insertCss = require('insert-css')
var watch = require('observ/watch')
var css = require('./styles')
insertCss(css)
var state = require('./state')
var LessonView = require('./views/lesson')
var IndexView = require('./views/index')
// set persistance prefix
state.workshop.set('web-audio')
var lastElement = null
var lastView = null
var lastLesson = null
watch(state, function refreshView () {
var element = null
if (state.view() === 'lesson') {
if (lastLesson !== state.selectedLesson() || lastView !== 'lesson') {
lastLesson = state.selectedLesson()
var lesson = state.getLesson(state.selectedLesson())
if (lesson) {
element = LessonView(state, lesson)
setView(element)
} else {
state.view.set('index')
}
}
} else if (state.view() !== lastView) {
element = IndexView(state)
setView(element)
scrollSelectedIntoView()
}
lastView = state.view()
})
function scrollSelectedIntoView () {
var selected = document.querySelector('.-selected')
if (selected) {
if (selected.scrollIntoViewIfNeeded) {
selected.scrollIntoViewIfNeeded()
} else if (selected.scrollIntoView) {
selected.scrollIntoView(false)
}
}
}
function setView (element) {
if (lastElement) {
lastElement.destroy && lastElement.destroy()
lastElement.remove()
}
document.body.appendChild(element)
lastElement = element
}