/
dead-toast.js
54 lines (47 loc) · 1.46 KB
/
dead-toast.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
function DeadToast() {
this.bodyDOM = document.getElementsByTagName('body')[0];
}
DeadToast.makeText = function(message, duration) {
var duration = duration | 2000;
const deadToast = new DeadToast();
deadToast.message = message;
deadToast.duration = duration;
return deadToast;
};
DeadToast.prototype.show = function() {
if (this.timeoutId) {
clearTimeout(this.timeoutId);
this.timeoutId = null;
} else {
var deadToastDOM = document.createElement('div');
deadToastDOM.className = 'dead-toast';
this.deadToastDOM = deadToastDOM;
var deadToastContentDOM = document.createElement('div');
deadToastContentDOM.className = 'dead-toast-content';
deadToastContentDOM.innerHTML = this.message;
deadToastDOM.appendChild(deadToastContentDOM);
this.bodyDOM.appendChild(deadToastDOM);
setTimeout(function() {
deadToastDOM.className += ' show';
}, 10);
}
this.timeoutId = setTimeout((function() {
this.cancel();
}).bind(this), this.duration);
};
DeadToast.prototype.cancel = function(immediately) {
if (this.deadToastDOM) {
this.deadToastDOM.className = 'dead-toast';
this.timeoutId = null;
if (immediately === true) {
this.bodyDOM.removeChild(this.deadToastDOM);
return;
}
var self = this;
['transitionend', 'webkitTransitionEnd', 'mozTransitionEnd', 'MSTransitionEnd'].forEach(function(transition) {
self.deadToastDOM.addEventListener(transition, function() {
self.bodyDOM.removeChild(self.deadToastDOM);
}, false);
});
}
};