videomail-client
Version:
A wicked npm package to record videos directly in the browser, wohooo!
84 lines (64 loc) • 1.46 kB
JavaScript
import h from 'hyperscript'
import hidden from 'hidden'
export default function (visuals, options) {
const self = this
let countdownElement
let intervalId
let countdown
let paused
function fire(cb) {
self.unload()
self.hide()
// keep all callbacks async
setTimeout(function () {
cb()
}, 0)
}
function countBackward(cb) {
if (!paused) {
options.debug('Countdown', countdown)
countdown--
if (countdown < 1) {
fire(cb)
} else {
countdownElement.innerHTML = countdown
}
}
}
this.start = function (cb) {
countdownElement.innerHTML = countdown = options.video.countdown
this.show()
intervalId = setInterval(countBackward.bind(this, cb), 950)
}
this.pause = function () {
paused = true
}
this.resume = function () {
paused = false
}
this.build = function () {
countdownElement = visuals.querySelector('.countdown')
if (!countdownElement) {
countdownElement = h('p.countdown')
this.hide()
visuals.appendChild(countdownElement)
} else {
this.hide()
}
}
this.show = function () {
hidden(countdownElement, false)
}
this.isCountingDown = function () {
return !!intervalId
}
this.unload = function () {
clearInterval(intervalId)
paused = false
intervalId = null
}
this.hide = function () {
hidden(countdownElement, true)
this.unload()
}
}