Created
September 13, 2014 11:53
-
-
Save edjafarov/495d7675185f18772ec2 to your computer and use it in GitHub Desktop.
notification POC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| title - The title that must be shown within the notification | |
| options (Optional) - An object that allows to configure the notification. It can have the following properties: | |
| -dir : The direction of the notification; it can be auto, ltr, or rtl | |
| -lang: Specifiy the lang used within the notification. This string must be a valid BCP 47 language tag. | |
| body: A string representing an extra content to display within the notification | |
| tag: An ID for a given notification that allows to retrieve, replace or remove it if necessary | |
| icon: The URL of an image to be used as an icon by the notification | |
| ease: type of easin/out | |
| htmlBody: the body as HTML | |
| css: [] | |
| width: | |
| height: | |
| return Ojbect eventEmitter | |
| methods | |
| show(ease) | |
| close(ease) | |
| on | |
| off | |
| emit | |
| onclick | |
| onshow | |
| onerror | |
| onclose | |
| properties | |
| document | |
| events | |
| click | |
| show | |
| showStart | |
| error | |
| close | |
| closeStart | |
| */ | |
| var ease = { | |
| easeInQuad: function (t, b, c, d) { | |
| return c * (t /= d) * t + b; | |
| }, | |
| easeOutQuad: function (t, b, c, d) { | |
| return -c * (t /= d) * (t - 2) + b; | |
| }, | |
| easeInOutQuad: function (t, b, c, d) { | |
| if ((t /= d / 2) < 1) return c / 2 * t * t + b; | |
| return -c / 2 * ((--t) * (t - 2) - 1) + b; | |
| }, | |
| easeInCubic: function (t, b, c, d) { | |
| return c * (t /= d) * t * t + b; | |
| }, | |
| easeOutCubic: function (t, b, c, d) { | |
| return c * ((t = t / d - 1) * t * t + 1) + b; | |
| }, | |
| easeInOutCubic: function (t, b, c, d) { | |
| if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; | |
| return c / 2 * ((t -= 2) * t * t + 2) + b; | |
| }, | |
| easeInQuart: function (t, b, c, d) { | |
| return c * (t /= d) * t * t * t + b; | |
| }, | |
| easeOutQuart: function (t, b, c, d) { | |
| return -c * ((t = t / d - 1) * t * t * t - 1) + b; | |
| }, | |
| easeInOutQuart: function (t, b, c, d) { | |
| if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b; | |
| return -c / 2 * ((t -= 2) * t * t * t - 2) + b; | |
| }, | |
| easeInQuint: function (t, b, c, d) { | |
| return c * (t /= d) * t * t * t * t + b; | |
| }, | |
| easeOutQuint: function (t, b, c, d) { | |
| return c * ((t = t / d - 1) * t * t * t * t + 1) + b; | |
| }, | |
| easeInOutQuint: function (t, b, c, d) { | |
| if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b; | |
| return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; | |
| }, | |
| easeInSine: function (t, b, c, d) { | |
| return -c * Math.cos(t / d * (Math.PI / 2)) + c + b; | |
| }, | |
| easeOutSine: function (t, b, c, d) { | |
| return c * Math.sin(t / d * (Math.PI / 2)) + b; | |
| }, | |
| easeInOutSine: function (t, b, c, d) { | |
| return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; | |
| }, | |
| easeInExpo: function (t, b, c, d) { | |
| return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b; | |
| }, | |
| easeOutExpo: function (t, b, c, d) { | |
| return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; | |
| }, | |
| easeInOutExpo: function (t, b, c, d) { | |
| if (t == 0) return b; | |
| if (t == d) return b + c; | |
| if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; | |
| return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; | |
| }, | |
| easeInCirc: function (t, b, c, d) { | |
| return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b; | |
| }, | |
| easeOutCirc: function (t, b, c, d) { | |
| return c * Math.sqrt(1 - (t = t / d - 1) * t) + b; | |
| }, | |
| easeInOutCirc: function (t, b, c, d) { | |
| if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; | |
| return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; | |
| }, | |
| easeInElastic: function (t, b, c, d) { | |
| var s = 1.70158; | |
| var p = 0; | |
| var a = c; | |
| if (t == 0) return b; | |
| if ((t /= d) == 1) return b + c; | |
| if (!p) p = d * .3; | |
| if (a < Math.abs(c)) { | |
| a = c; | |
| var s = p / 4; | |
| } | |
| else var s = p / (2 * Math.PI) * Math.asin(c / a); | |
| return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; | |
| }, | |
| easeOutElastic: function (t, b, c, d) { | |
| var s = 1.70158; | |
| var p = 0; | |
| var a = c; | |
| if (t == 0) return b; | |
| if ((t /= d) == 1) return b + c; | |
| if (!p) p = d * .3; | |
| if (a < Math.abs(c)) { | |
| a = c; | |
| var s = p / 4; | |
| } | |
| else var s = p / (2 * Math.PI) * Math.asin(c / a); | |
| return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b; | |
| }, | |
| easeInOutElastic: function (t, b, c, d) { | |
| var s = 1.70158; | |
| var p = 0; | |
| var a = c; | |
| if (t == 0) return b; | |
| if ((t /= d / 2) == 2) return b + c; | |
| if (!p) p = d * (.3 * 1.5); | |
| if (a < Math.abs(c)) { | |
| a = c; | |
| var s = p / 4; | |
| } | |
| else var s = p / (2 * Math.PI) * Math.asin(c / a); | |
| if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; | |
| return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b; | |
| }, | |
| easeInBack: function (t, b, c, d, s) { | |
| if (s == undefined) s = 1.70158; | |
| return c * (t /= d) * t * ((s + 1) * t - s) + b; | |
| }, | |
| easeOutBack: function (t, b, c, d, s) { | |
| if (s == undefined) s = 1.70158; | |
| return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; | |
| }, | |
| easeInOutBack: function (t, b, c, d, s) { | |
| if (s == undefined) s = 1.70158; | |
| if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; | |
| return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; | |
| }, | |
| easeInBounce: function (t, b, c, d) { | |
| return c - easing.easeOutBounce(d - t, 0, c, d) + b; | |
| }, | |
| easeOutBounce: function (t, b, c, d) { | |
| if ((t /= d) < (1 / 2.75)) { | |
| return c * (7.5625 * t * t) + b; | |
| } else if (t < (2 / 2.75)) { | |
| return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b; | |
| } else if (t < (2.5 / 2.75)) { | |
| return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b; | |
| } else { | |
| return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b; | |
| } | |
| } | |
| } | |
| var defaultOptions = { | |
| width: 288, // max size of html5 notifications | |
| height: 96, // max size of html5 notifications | |
| body: null, | |
| icon: null, | |
| ease: ease.easeOutSine, | |
| htmlBody: null, | |
| javascript: [], | |
| css: [], | |
| frame: false, | |
| toolbar: false, | |
| 'always-on-top': true, | |
| show: false, | |
| resizable: false, | |
| easeTime: 125 | |
| }; | |
| var keyStep = 1000/120; | |
| module.exports = function(gui){ | |
| var screen = global.window.screen; | |
| function DesktopNotification(title, options){ | |
| this.win = gui.Window.open( | |
| './desktopNotifications/desktopNotification.html', defaultOptions); | |
| } | |
| function rightBorder(){ | |
| return screen.availLeft + screen.availWidth; | |
| } | |
| DesktopNotification.get = function(tag){ | |
| } | |
| DesktopNotification.prototype.show = function(cb){ | |
| this.win.moveTo(rightBorder(), screen.availTop + 10); | |
| this.win.show(); | |
| setTimeout(function(){ | |
| var steps = defaultOptions.easeTime/keyStep | |
| var m = 0; | |
| function mv(){ | |
| var x = Math.floor(defaultOptions.ease(m, rightBorder() + 10, -defaultOptions.width -20, steps)); | |
| this.win.moveTo(x, screen.availTop + 10); | |
| m++; | |
| if(m > steps) { | |
| clearInterval(engine); | |
| cb() | |
| } | |
| } | |
| var engine = setInterval(mv.bind(this), keyStep); | |
| }.bind(this), 200); | |
| } | |
| DesktopNotification.prototype.close = function(cb){ | |
| var start = this.win.x; | |
| this.win.moveTo(this.win.x, this.win.y); | |
| var steps = defaultOptions.easeTime/keyStep | |
| var m = 0; | |
| function mv(){ | |
| var x = Math.floor(defaultOptions.ease(m, start, defaultOptions.width + 20, steps)); | |
| this.win.moveTo(x, screen.availTop + 10); | |
| m++; | |
| if(m > steps) { | |
| clearInterval(engine); | |
| this.win.close(); | |
| cb(); | |
| } | |
| } | |
| var engine = setInterval(mv.bind(this), keyStep); | |
| } | |
| var not = new DesktopNotification(); | |
| not.show(function(){ | |
| setTimeout(not.close.bind(not), 500); | |
| }); | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment