diff options
author | Olivier Gayot <og@satcom1.com> | 2016-04-10 08:46:01 +0200 |
---|---|---|
committer | Olivier Gayot <og@satcom1.com> | 2016-04-10 08:46:01 +0200 |
commit | d8343f962c3c882b09f6a8a157dae679a23cd493 (patch) | |
tree | 2ed688b6c6d18193ff0cda873a39e3c5df04b878 /webapp/js/jquery.notify.js | |
parent | ae2b94d7690059849ee4678c58dac624ea9ccda3 (diff) |
added the web part
Signed-off-by: Olivier Gayot <og@satcom1.com>
Diffstat (limited to 'webapp/js/jquery.notify.js')
-rw-r--r-- | webapp/js/jquery.notify.js | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/webapp/js/jquery.notify.js b/webapp/js/jquery.notify.js new file mode 100644 index 0000000..dd1d748 --- /dev/null +++ b/webapp/js/jquery.notify.js @@ -0,0 +1,156 @@ +/* jQuery Notify UI Widget 1.5 by Eric Hynds + * http://www.erichynds.com/jquery/a-jquery-ui-growl-ubuntu-notification-widget/ + * + * Depends: + * - jQuery 1.4+ + * - jQuery UI 1.8 widget factory + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html +*/ +(function($){ + + $.widget("ech.notify", { + + options: { + speed: 500, + expires: 5000, + stack: "below", + custom: false, + queue: false + }, + + _create: function(){ + var self = this; + this.templates = {}; + this.keys = []; + + // build and save templates + this.element.addClass("ui-notify").children().addClass("ui-notify-message ui-notify-message-style").each(function(i){ + var key = this.id || i; + self.keys.push(key); + self.templates[key] = $(this).removeAttr("id").wrap("<div></div>").parent().html(); // because $(this).andSelf().html() no workie + }).end().empty().show(); + }, + + create: function(template, msg, opts){ + if(typeof template === "object"){ + opts = msg; + msg = template; + template = null; + } + + var tpl = this.templates[ template || this.keys[0]]; + + // remove default styling class if rolling w/ custom classes + if(opts && opts.custom){ + tpl = $(tpl).removeClass("ui-notify-message-style").wrap("<div></div>").parent().html(); + } + + this.openNotifications = this.openNotifications || 0; + + // return a new notification instance + return new $.ech.notify.instance(this)._create(msg, $.extend({}, this.options, opts), tpl); + } + }); + + // instance constructor + $.extend($.ech.notify, { + instance: function(widget){ + this.__super = widget; + this.isOpen = false; + } + }); + + // instance methods + $.extend($.ech.notify.instance.prototype, { + + _create: function(params, options, template){ + this.options = options; + + var self = this, + + // build html template + html = template.replace(/#(?:\{|%7B)(.*?)(?:\}|%7D)/g, function($1, $2){ + return ($2 in params) ? params[$2] : ''; + }), + + // the actual message + m = (this.element = $(html)), + + // close link + closelink = m.find(".ui-notify-close"); + + // clickable? + if(typeof this.options.click === "function"){ + m.addClass("ui-notify-click").bind("click", function(e){ + self._trigger("click", e, self); + }); + } + + // show close link? + if(closelink.length){ + closelink.bind("click", function(){ + self.close(); + return false; + }); + } + + this.__super.element.queue("notify", function(){ + self.open(); + + // auto expire? + if(typeof options.expires === "number" && options.expires > 0){ + setTimeout($.proxy(self.close, self), options.expires); + } + }); + + if(!this.options.queue || this.__super.openNotifications <= this.options.queue - 1) { + this.__super.element.dequeue("notify"); + } + + return this; + }, + + close: function(){ + var speed = this.options.speed; + + this.element.fadeTo(speed, 0).slideUp(speed, $.proxy(function(){ + this._trigger("close"); + this.isOpen = false; + this.element.remove(); + this.__super.openNotifications -= 1; + this.__super.element.dequeue("notify"); + }, this)); + + return this; + }, + + open: function(){ + if(this.isOpen || this._trigger("beforeopen") === false){ + return this; + } + + var self = this; + + this.__super.openNotifications += 1; + + this.element[this.options.stack === "above" ? "prependTo" : "appendTo"](this.__super.element).css({ display:"none", opacity:"" }).fadeIn(this.options.speed, function(){ + self._trigger("open"); + self.isOpen = true; + }); + + return this; + }, + + widget: function(){ + return this.element; + }, + + _trigger: function(type, e, instance){ + return this.__super._trigger.call( this, type, e, instance ); + } + }); + +})(jQuery); |