[ADD] Added jquery ui notify plugin
authorFabien Meghazi <fme@openerp.com>
Tue, 5 Apr 2011 15:46:50 +0000 (17:46 +0200)
committerFabien Meghazi <fme@openerp.com>
Tue, 5 Apr 2011 15:46:50 +0000 (17:46 +0200)
bzr revid: fme@openerp.com-20110405154650-pkcpxj3pn6q3r7cv

addons/base/static/lib/jquery.ui.notify/css/ui.notify.css [new file with mode: 0644]
addons/base/static/lib/jquery.ui.notify/js/jquery.notify.js [new file with mode: 0644]

diff --git a/addons/base/static/lib/jquery.ui.notify/css/ui.notify.css b/addons/base/static/lib/jquery.ui.notify/css/ui.notify.css
new file mode 100644 (file)
index 0000000..dcd2823
--- /dev/null
@@ -0,0 +1,13 @@
+.ui-notify { width:350px; position:fixed; top:10px; right:10px; }
+.ui-notify-message { padding:10px; margin-bottom:15px; -moz-border-radius:8px; -webkit-border-radius:8px; border-radius:8px }
+.ui-notify-message h1 { font-size:14px; margin:0; padding:0 }
+.ui-notify-message p { margin:3px 0; padding:0; line-height:18px }
+.ui-notify-message:last-child { margin-bottom:0 }
+.ui-notify-message-style { background:#000; background:rgba(0,0,0,0.8); -moz-box-shadow: 0 0 6px #000; -webkit-box-shadow: 0 0 6px #000; box-shadow: 0 0 6px #000; }
+.ui-notify-message-style h1 { color:#fff; font-weight:bold }
+.ui-notify-message-style p { color:#fff }
+.ui-notify-close { color:#fff; text-decoration:underline }
+.ui-notify-click { cursor:pointer }
+.ui-notify-cross { margin-top:-4px; float:right; cursor:pointer; text-decoration:none; font-size:12px; font-weight:bold; text-shadow:0 1px 1px #fff; padding:2px }
+.ui-notify-cross:hover { color:#ffffab }
+.ui-notify-cross:active { position:relative; top:1px }
diff --git a/addons/base/static/lib/jquery.ui.notify/js/jquery.notify.js b/addons/base/static/lib/jquery.ui.notify/js/jquery.notify.js
new file mode 100644 (file)
index 0000000..c2c4657
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * jQuery Notify UI Widget 1.4
+ * Copyright (c) 2010 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
+       },
+       _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();
+               }
+               
+               // 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.parent = 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.open();
+               
+               // auto expire?
+               if(typeof options.expires === "number"){
+                       window.setTimeout(function(){
+                               self.close();
+                       }, options.expires);
+               }
+               
+               return this;
+       },
+       close: function(){
+               var self = this, speed = this.options.speed;
+               
+               this.element.fadeTo(speed, 0).slideUp(speed, function(){
+                       self._trigger("close");
+                       self.isOpen = false;
+               });
+               
+               return this;
+       },
+       open: function(){
+               if(this.isOpen || this._trigger("beforeopen") === false){
+                       return this;
+               }
+
+               var self = this;
+               
+               this.element[this.options.stack === 'above' ? 'prependTo' : 'appendTo'](this.parent.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.parent._trigger.call( this, type, e, instance );
+       }
+});
+
+})(jQuery);