blob: e99720e1b18399ee192eba9303bb8b56feed33ca (
plain) (
blame)
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
|
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)
function Mascot () {
Component.call(this)
this.logo = metamaskLogo({
followMouse: true,
pxNotRatio: true,
width: 200,
height: 200,
})
if (!this.logo) return
this.refollowMouse = debounce(this.logo.setFollowMouse.bind(this.logo, true), 1000)
this.unfollowMouse = this.logo.setFollowMouse.bind(this.logo, false)
}
Mascot.prototype.render = function () {
// 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')
)
}
Mascot.prototype.componentDidMount = function () {
var targetDivId = 'metamask-mascot-container'
var container = document.getElementById(targetDivId)
if (!this.logo) {
var staticLogo = document.createElement('img')
staticLogo.src = 'images/icon-128.png'
staticLogo.style.marginBottom = '20px'
container.appendChild(staticLogo)
} else {
container.appendChild(this.logo.canvas)
}
}
Mascot.prototype.componentWillUnmount = function () {
if (!this.logo) return
this.logo.canvas.remove()
}
Mascot.prototype.handleAnimationEvents = function () {
if (!this.logo) return
// 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))
}
Mascot.prototype.lookAt = function (target) {
if (!this.logo) return
this.unfollowMouse()
this.logo.lookAt(target)
this.refollowMouse()
}
|