dead-toast
Version:
Dead simple Javascript Toast like Android.
55 lines (47 loc) • 1.49 kB
JavaScript
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);
});
}
};