summaryrefslogtreecommitdiff
path: root/webapp/js/jquery.notify.js
diff options
context:
space:
mode:
authorOlivier Gayot <og@satcom1.com>2016-04-10 08:46:01 +0200
committerOlivier Gayot <og@satcom1.com>2016-04-10 08:46:01 +0200
commitd8343f962c3c882b09f6a8a157dae679a23cd493 (patch)
tree2ed688b6c6d18193ff0cda873a39e3c5df04b878 /webapp/js/jquery.notify.js
parentae2b94d7690059849ee4678c58dac624ea9ccda3 (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.js156
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);