2016-04-14 00:28:44 +02:00
|
|
|
const inherits = require('util').inherits
|
|
|
|
const Component = require('react').Component
|
|
|
|
const h = require('react-hyperscript')
|
|
|
|
const metamaskLogo = require('metamask-logo')
|
|
|
|
const debounce = require('debounce')
|
|
|
|
|
|
|
|
module.exports = Mascot
|
|
|
|
|
|
|
|
inherits(Mascot, Component)
|
2016-06-21 22:18:32 +02:00
|
|
|
function Mascot () {
|
2016-04-14 00:28:44 +02:00
|
|
|
Component.call(this)
|
|
|
|
this.logo = metamaskLogo({
|
|
|
|
followMouse: true,
|
|
|
|
pxNotRatio: true,
|
|
|
|
width: 200,
|
|
|
|
height: 200,
|
2016-08-23 23:32:12 +02:00
|
|
|
staticImage: './images/icon-512.png',
|
2016-04-14 00:28:44 +02:00
|
|
|
})
|
2016-08-20 01:59:04 +02:00
|
|
|
if (!this.logo.webGLSupport) return
|
2016-04-14 00:28:44 +02:00
|
|
|
this.refollowMouse = debounce(this.logo.setFollowMouse.bind(this.logo, true), 1000)
|
|
|
|
this.unfollowMouse = this.logo.setFollowMouse.bind(this.logo, false)
|
|
|
|
}
|
|
|
|
|
2016-06-21 22:18:32 +02:00
|
|
|
Mascot.prototype.render = function () {
|
2016-04-14 00:28:44 +02:00
|
|
|
// this is a bit hacky
|
|
|
|
// the event emitter is on `this.props`
|
|
|
|
// and we dont get that until render
|
|
|
|
this.handleAnimationEvents()
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
|
|
h('#metamask-mascot-container')
|
|
|
|
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2016-06-21 22:18:32 +02:00
|
|
|
Mascot.prototype.componentDidMount = function () {
|
2016-04-14 00:28:44 +02:00
|
|
|
var targetDivId = 'metamask-mascot-container'
|
|
|
|
var container = document.getElementById(targetDivId)
|
2016-08-20 01:59:04 +02:00
|
|
|
if (!this.logo.webGLSupport) {
|
|
|
|
var staticLogo = this.logo.staticLogo
|
|
|
|
staticLogo.style.marginBottom = '40px'
|
2016-08-19 23:47:49 +02:00
|
|
|
container.appendChild(staticLogo)
|
|
|
|
} else {
|
|
|
|
container.appendChild(this.logo.canvas)
|
|
|
|
}
|
2016-04-14 00:28:44 +02:00
|
|
|
}
|
|
|
|
|
2016-06-21 22:18:32 +02:00
|
|
|
Mascot.prototype.componentWillUnmount = function () {
|
2016-08-23 23:11:25 +02:00
|
|
|
if (!this.logo.webGLSupport) return
|
2016-04-14 00:28:44 +02:00
|
|
|
this.logo.canvas.remove()
|
|
|
|
}
|
|
|
|
|
2016-06-21 22:18:32 +02:00
|
|
|
Mascot.prototype.handleAnimationEvents = function () {
|
2016-08-23 23:11:25 +02:00
|
|
|
if (!this.logo.webGLSupport) return
|
2016-04-14 00:28:44 +02:00
|
|
|
// only setup listeners once
|
|
|
|
if (this.animations) return
|
|
|
|
this.animations = this.props.animationEventEmitter
|
|
|
|
this.animations.on('point', this.lookAt.bind(this))
|
|
|
|
this.animations.on('setFollowMouse', this.logo.setFollowMouse.bind(this.logo))
|
|
|
|
}
|
|
|
|
|
2016-06-21 22:18:32 +02:00
|
|
|
Mascot.prototype.lookAt = function (target) {
|
2016-08-23 23:11:25 +02:00
|
|
|
if (!this.logo.webGLSupport) return
|
2016-04-14 00:28:44 +02:00
|
|
|
this.unfollowMouse()
|
|
|
|
this.logo.lookAt(target)
|
|
|
|
this.refollowMouse()
|
|
|
|
}
|