updated, added css object, refactored

This commit is contained in:
Jaime Pillora committed 2013-06-04 17:01:03 +10:00
1 parent 37631df657
commit f523f31cae
3 files changed
+164 -109

No files matched your search

+75 -38
View File
@@ -1,16 +1,16 @@
/** Notify.js - v0.0.1 - 2013/06/03 /** Notify.js - v0.0.1 - 2013/06/04
* http://notifyjs.com/ * http://notifyjs.com/
* Copyright (c) 2013 Jaime Pillora - MIT * Copyright (c) 2013 Jaime Pillora - MIT
*/ */
(function(window,document,undefined) { (function(window,document,undefined) {
'use strict'; 'use strict';
var Notification, addStyle, className, coreStyle, cornerElem, createElem, defaultStyle, defaultStyleName, getAnchorElement, hAligns, incr, inherit, insertCSS, mainPositions, opposites, options, parsePosition, pluginName, pluginOptions, positions, realign, styles, vAligns, var Notification, addStyle, coreStyle, cornerElem, createElem, defaultStyle, defaultStyleName, getAnchorElement, hAligns, incr, inherit, insertCSS, mainPositions, opposites, options, parsePosition, pluginClassName, pluginName, pluginOptions, positions, realign, stylePrefixes, styles, vAligns,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
pluginName = 'notify'; pluginName = 'notify';
className = pluginName + 'js'; pluginClassName = pluginName + 'js';
positions = { positions = {
t: 'top', t: 'top',
@@ -53,8 +53,8 @@ styles = {};
coreStyle = { coreStyle = {
name: 'core', name: 'core',
html: "<div class=\"" + className + "-wrapper\">\n <div class=\"" + className + "-arrow\"></div>\n <div class=\"" + className + "-container\"></div>\n</div>", html: "<div class=\"" + pluginClassName + "-wrapper\">\n <div class=\"" + pluginClassName + "-arrow\"></div>\n <div class=\"" + pluginClassName + "-container\"></div>\n</div>",
css: "." + className + "-corner {\n position: fixed;\n top: 0;\n right: 0;\n margin: 5px;\n z-index: 1050;\n}\n\n." + className + "-corner ." + className + "-wrapper,\n." + className + "-corner ." + className + "-container {\n position: relative;\n display: block;\n height: inherit;\n width: inherit;\n}\n\n." + className + "-wrapper {\n z-index: 1;\n position: absolute;\n display: inline-block;\n height: 0;\n width: 0;\n}\n\n." + className + "-container {\n display: none;\n z-index: 1;\n position: absolute;\n cursor: pointer;\n}\n\n." + className + "-text {\n position: relative;\n}\n\n." + className + "-arrow {\n position: absolute;\n z-index: 2;\n width: 0;\n height: 0;\n}" css: "." + pluginClassName + "-corner {\n position: fixed;\n top: 0;\n right: 0;\n margin: 5px;\n z-index: 1050;\n}\n\n." + pluginClassName + "-corner ." + pluginClassName + "-wrapper,\n." + pluginClassName + "-corner ." + pluginClassName + "-container {\n position: relative;\n display: block;\n height: inherit;\n width: inherit;\n}\n\n." + pluginClassName + "-wrapper {\n z-index: 1;\n position: absolute;\n display: inline-block;\n height: 0;\n width: 0;\n}\n\n." + pluginClassName + "-container {\n display: none;\n z-index: 1;\n position: absolute;\n cursor: pointer;\n}\n\n." + pluginClassName + "-text {\n position: relative;\n}\n\n." + pluginClassName + "-arrow {\n position: absolute;\n z-index: 2;\n width: 0;\n height: 0;\n}"
}; };
defaultStyleName = "bootstrap"; defaultStyleName = "bootstrap";
@@ -62,13 +62,38 @@ defaultStyleName = "bootstrap";
defaultStyle = { defaultStyle = {
html: "<div>\n <span data-notify-text></span>\n</div>", html: "<div>\n <span data-notify-text></span>\n</div>",
classes: { classes: {
base: "padding: 8px 35px 8px 14px;\ntext-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\nbackground-color: #fcf8e3;\nborder: 1px solid #fbeed5;\n-webkit-border-radius: 4px;\n-moz-border-radius: 4px;\nborder-radius: 4px;\nwhite-space: nowrap;", base: {
error: "color: #B94A48;\nbackground-color: #F2DEDE;\nborder-color: #EED3D7;\npadding-left: 25px;\nbackground-repeat: no-repeat;\nbackground-position: 3px 7px;\nbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=);", "padding": "8px 15px 8px 14px",
info: "", "text-shadow": "0 1px 0 rgba(255, 255, 255, 0.5)",
warn: "" "background-color": "#fcf8e3",
"border": "1px solid #fbeed5",
"border-radius": "4px",
"white-space": "nowrap",
"padding-left": "25px",
"background-repeat": "no-repeat",
"background-position": "3px 7px"
},
error: {
"color": "#B94A48",
"background-color": "#F2DEDE",
"border-color": "#EED3D7",
"background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=)"
},
success: {
"color": "#468847",
"background-color": "#DFF0D8",
"border-color": "#D6E9C6",
"background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNq0lctPE0Ecx38zu/RFS1EryqtgJFA08YCiMZIAQQ4eRG8eDGdPJiYeTIwHTfwPiAcvXIwXLwoXPaDxkWgQ6islKlJLSQWLUraPLTv7Gme32zoF9KSTfLO7v53vZ3d/M7/fIth+IO6INt2jjoA7bjHCJoAlzCRw59YwHYjBnfMPqAKWQYKjGkfCJqAF0xwZjipQtA3MxeSG87VhOOYegVrUCy7UZM9S6TLIdAamySTclZdYhFhRHloGYg7mgZv1Zzztvgud7V1tbQ2twYA34LJmF4p5dXF1KTufnE+SxeJtuCZNsLDCQU0+RyKTF27Unw101l8e6hns3u0PBalORVVVkcaEKBJDgV3+cGM4tKKmI+ohlIGnygKX00rSBfszz/n2uXv81wd6+rt1orsZCHRdr1Imk2F2Kob3hutSxW8thsd8AXNaln9D7CTfA6O+0UgkMuwVvEFFUbbAcrkcTA8+AtOk8E6KiQiDmMFSDqZItAzEVQviRkdDdaFgPp8HSZKAEAL5Qh7Sq2lIJBJwv2scUqkUnKoZgNhcDKhKg5aH+1IkcouCAdFGAQsuWZYhOjwFHQ96oagWgRoUov1T9kRBEODAwxM2QtEUl+Wp+Ln9VRo6BcMw4ErHRYjH4/B26AlQoQQTRdHWwcd9AH57+UAXddvDD37DmrBBV34WfqiXPl61g+vr6xA9zsGeM9gOdsNXkgpEtTwVvwOklXLKm6+/p5ezwk4B+j6droBs2CsGa/gNs6RIxazl4Tc25mpTgw/apPR1LYlNRFAzgsOxkyXYLIM1V8NMwyAkJSctD1eGVKiq5wWjSPdjmeTkiKvVW4f2YPHWl3GAVq6ymcyCTgovM3FzyRiDe2TaKcEKsLpJvNHjZgPNqEtyi6mZIm4SRFyLMUsONSSdkPeFtY1n0mczoY3BHTLhwPRy9/lzcziCw9ACI+yql0VLzcGAZbYSM5CCSZg1/9oc/nn7+i8N9p/8An4JMADxhH+xHfuiKwAAAABJRU5ErkJggg==)"
},
info: {},
warn: {}
} }
}; };
stylePrefixes = {
"border-radius": ["-webkit-", "-moz-"]
};
addStyle = function(name, def) { addStyle = function(name, def) {
var cssText; var cssText;
if (styles[name]) { if (styles[name]) {
@@ -82,8 +107,17 @@ addStyle = function(name, def) {
} }
cssText = ""; cssText = "";
if (def.classes) { if (def.classes) {
$.each(def.classes, function(subClassName, css) { $.each(def.classes, function(className, props) {
return cssText += "." + className + "-" + def.name + "-" + subClassName + " {\n " + css + "\n}\n"; cssText += "." + pluginClassName + "-" + def.name + "-" + className + " {\n";
$.each(props, function(name, val) {
if (stylePrefixes[name]) {
$.each(stylePrefixes[name], function(i, prefix) {
return cssText += " " + prefix + name + ": " + val + ";\n";
});
}
return cssText += " " + name + ": " + val + ";\n";
});
return cssText += "}\n";
}); });
} }
if (def.css) { if (def.css) {
@@ -109,14 +143,13 @@ insertCSS = function(cssText) {
}; };
pluginOptions = { pluginOptions = {
autoHide: false, autoHide: true,
autoHideDelay: 2000, autoHideDelay: 5000,
arrowShow: true, arrowShow: true,
arrowSize: 5, arrowSize: 5,
arrowColor: 'border',
position: 'bottom', position: 'bottom',
style: 'bootstrap', style: 'bootstrap',
cls: 'error', className: 'error',
showAnimation: 'slideDown', showAnimation: 'slideDown',
showDuration: 400, showDuration: 400,
hideAnimation: 'slideUp', hideAnimation: 'slideUp',
@@ -140,7 +173,7 @@ createElem = function(tag) {
return $("<" + tag + "></" + tag + ">"); return $("<" + tag + "></" + tag + ">");
}; };
cornerElem = createElem("div").addClass("" + className + "-corner"); cornerElem = createElem("div").addClass("" + pluginClassName + "-corner");
getAnchorElement = function(element) { getAnchorElement = function(element) {
var radios; var radios;
@@ -193,21 +226,21 @@ Notification = (function() {
function Notification(elem, data, options) { function Notification(elem, data, options) {
if (typeof options === 'string') { if (typeof options === 'string') {
options = { options = {
color: options className: options
}; };
} }
this.options = inherit(pluginOptions, $.isPlainObject(options) ? options : {}); this.options = inherit(pluginOptions, $.isPlainObject(options) ? options : {});
this.loadHTML(); this.loadHTML();
this.wrapper = $(coreStyle.html); this.wrapper = $(coreStyle.html);
this.wrapper.data(className, this); this.wrapper.data(pluginClassName, this);
this.arrow = this.wrapper.find("." + className + "-arrow"); this.arrow = this.wrapper.find("." + pluginClassName + "-arrow");
this.container = this.wrapper.find("." + className + "-container"); this.container = this.wrapper.find("." + pluginClassName + "-container");
this.container.append(this.userContainer); this.container.append(this.userContainer);
if (elem && elem.length) { if (elem && elem.length) {
this.elementType = elem.attr('type'); this.elementType = elem.attr('type');
this.originalElement = elem; this.originalElement = elem;
this.elem = getAnchorElement(elem); this.elem = getAnchorElement(elem);
this.elem.data(className, this); this.elem.data(pluginClassName, this);
this.elem.before(this.wrapper); this.elem.before(this.wrapper);
} else { } else {
this.options.arrowShow = false; this.options.arrowShow = false;
@@ -223,9 +256,13 @@ Notification = (function() {
this.userContainer = $(style.html); this.userContainer = $(style.html);
this.text = this.userContainer.find('[data-notify-text]'); this.text = this.userContainer.find('[data-notify-text]');
if (this.text.length === 0) { if (this.text.length === 0) {
throw "style: " + name + " HTML is missing the: 'data-notify-text' attribute"; this.text = this.userContainer.find('[data-notify-html]');
this.rawText = true;
} }
return this.text.addClass("" + className + "-text"); if (this.text.length === 0) {
throw "style: '" + name + "' HTML is missing a: 'data-notify-text' or 'data-notify-html' attribute";
}
return this.text.addClass("" + pluginClassName + "-text");
}; };
Notification.prototype.show = function(show, callback) { Notification.prototype.show = function(show, callback) {
@@ -254,7 +291,7 @@ Notification = (function() {
}; };
Notification.prototype.updatePosition = function() { Notification.prototype.updatePosition = function() {
var arrowCss, arrowSize, color, contH, contW, css, elemH, elemIH, elemIW, elemPos, elemW, mainFull, margin, opp, oppFull, pAlign, pArrow, pMain, padding, pos, posFull, position, style, wrapPos, _i, _len; var arrowColor, arrowCss, arrowSize, color, contH, contW, css, elemH, elemIH, elemIW, elemPos, elemW, mainFull, margin, opp, oppFull, pAlign, pArrow, pMain, padding, pos, posFull, position, style, wrapPos, _i, _len;
if (!this.elem) { if (!this.elem) {
return; return;
} }
@@ -267,7 +304,6 @@ Notification = (function() {
contH = this.container.height(); contH = this.container.height();
contW = this.container.width(); contW = this.container.width();
position = this.getPosition(); position = this.getPosition();
console.log(position);
pMain = position[0]; pMain = position[0];
pAlign = position[1]; pAlign = position[1];
pArrow = position[2] || pAlign; pArrow = position[2] || pAlign;
@@ -295,13 +331,14 @@ Notification = (function() {
} else { } else {
arrowSize = this.options.arrowSize; arrowSize = this.options.arrowSize;
arrowCss = $.extend({}, css); arrowCss = $.extend({}, css);
arrowColor = this.userContainer.css("border-color") || this.userContainer.css("background-color") || 'white';
for (_i = 0, _len = mainPositions.length; _i < _len; _i++) { for (_i = 0, _len = mainPositions.length; _i < _len; _i++) {
pos = mainPositions[_i]; pos = mainPositions[_i];
posFull = positions[pos]; posFull = positions[pos];
if (pos === opp) { if (pos === opp) {
continue; continue;
} }
color = posFull === mainFull ? 'black' : 'transparent'; color = posFull === mainFull ? arrowColor : 'transparent';
arrowCss["border-" + posFull] = "" + arrowSize + "px solid " + color; arrowCss["border-" + posFull] = "" + arrowSize + "px solid " + color;
} }
incr(css, positions[opp], arrowSize); incr(css, positions[opp], arrowSize);
@@ -364,18 +401,18 @@ Notification = (function() {
}; };
Notification.prototype.updateStyleClasses = function() { Notification.prototype.updateStyleClasses = function() {
var cls, style; var classes, style;
cls = ['base']; classes = ['base'];
if ($.isArray(this.options.cls)) { if ($.isArray(this.options.className)) {
cls = cls.concat(this.options.cls); classes = classes.concat(this.options.className);
} else if (this.options.cls) { } else if (this.options.className) {
cls.push(this.options.cls); classes.push(this.options.className);
} }
style = this.getStyle(); style = this.getStyle();
cls = $.map(cls, function(n) { classes = $.map(classes, function(n) {
return "" + className + "-" + style.name + "-" + n; return "" + pluginClassName + "-" + style.name + "-" + n;
}).join(' '); }).join(' ');
return this.userContainer.attr('class', cls); return this.userContainer.attr('class', classes);
}; };
Notification.prototype.run = function(data, options) { Notification.prototype.run = function(data, options) {
@@ -432,7 +469,7 @@ $[pluginName] = function(elem, data, options) {
$.fn[pluginName] = function(data, options) { $.fn[pluginName] = function(data, options) {
$(this).each(function() { $(this).each(function() {
var inst; var inst;
inst = getAnchorElement($(this)).data(className); inst = getAnchorElement($(this)).data(pluginClassName);
if (inst) { if (inst) {
return inst.run(data, options); return inst.run(data, options);
} else { } else {
@@ -459,9 +496,9 @@ $(function() {
}); });
insertCSS(coreStyle.css).attr('data-notify-style', 'core'); insertCSS(coreStyle.css).attr('data-notify-style', 'core');
$[pluginName].addStyle(defaultStyleName, defaultStyle); $[pluginName].addStyle(defaultStyleName, defaultStyle);
return $(document).on('click', "." + className + "-wrapper", function() { return $(document).on('click', "." + pluginClassName + "-wrapper", function() {
var inst; var inst;
inst = $(this).data(className); inst = $(this).data(pluginClassName);
if (!inst) { if (!inst) {
return; return;
} }
+2 -2
View File
@@ -1,4 +1,4 @@
/** Notify.js - v0.0.1 - 2013/06/03 /** Notify.js - v0.0.1 - 2013/06/04
* http://notifyjs.com/ * http://notifyjs.com/
* Copyright (c) 2013 Jaime Pillora - MIT * Copyright (c) 2013 Jaime Pillora - MIT
*/(function(t,n,e){"use strict";var i,r,o,s,a,l,h,p,c,u,d,f,w,m,y,A,b,g,x,v,C,S,k,R=[].indexOf||function(t){for(var n=0,e=this.length;e>n;n++)if(n in this&&this[n]===t)return n;return-1};g="notify",o=g+"js",v={t:"top",m:"middle",b:"bottom",l:"left",c:"center",r:"right"},u=["l","c","r"],k=["t","m","b"],m=["t","b","l","r"],y={t:"b",m:null,b:"t",l:"r",c:null,r:"l"},b=function(t){var n;return n=[],$.each(t.split(/\W+/),function(t,i){var r;return r=i.toLowerCase().charAt(0),v[r]?n.push(r):e}),n},S={},s={name:"core",html:'<div class="'+o+'-wrapper">\n <div class="'+o+'-arrow"></div>\n <div class="'+o+'-container"></div>\n</div>',css:"."+o+"-corner {\n position: fixed;\n top: 0;\n right: 0;\n margin: 5px;\n z-index: 1050;\n}\n\n."+o+"-corner ."+o+"-wrapper,\n."+o+"-corner ."+o+"-container {\n position: relative;\n display: block;\n height: inherit;\n width: inherit;\n}\n\n."+o+"-wrapper {\n z-index: 1;\n position: absolute;\n display: inline-block;\n height: 0;\n width: 0;\n}\n\n."+o+"-container {\n display: none;\n z-index: 1;\n position: absolute;\n cursor: pointer;\n}\n\n."+o+"-text {\n position: relative;\n}\n\n."+o+"-arrow {\n position: absolute;\n z-index: 2;\n width: 0;\n height: 0;\n}"},p="bootstrap",h={html:"<div>\n <span data-notify-text></span>\n</div>",classes:{base:"padding: 8px 35px 8px 14px;\ntext-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\nbackground-color: #fcf8e3;\nborder: 1px solid #fbeed5;\n-webkit-border-radius: 4px;\n-moz-border-radius: 4px;\nborder-radius: 4px;\nwhite-space: nowrap;",error:"color: #B94A48;\nbackground-color: #F2DEDE;\nborder-color: #EED3D7;\npadding-left: 25px;\nbackground-repeat: no-repeat;\nbackground-position: 3px 7px;\nbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=);",info:"",warn:""}},r=function(t,n){var i;return S[t]?(alert(""+g+": style '"+t+"' already defined"),e):(n.name=t,S[t]=n,!n.cssElem&&(i="",n.classes&&$.each(n.classes,function(t,e){return i+="."+o+"-"+n.name+"-"+t+" {\n "+e+"\n}\n"}),n.css&&(i+="/* styles for "+n.name+" */\n"+n.css),i)?(n.cssElem=w(i),n.cssElem.attr("data-notify-style",n.name)):e)},w=function(t){var n;n=l("style"),$("head").append(n);try{n.html(t)}catch(e){n[0].styleSheet.cssText=t}return n},x={autoHide:!1,autoHideDelay:2e3,arrowShow:!0,arrowSize:5,arrowColor:"border",position:"bottom",style:"bootstrap",cls:"error",showAnimation:"slideDown",showDuration:400,hideAnimation:"slideUp",hideDuration:200,offsetY:0,offsetX:0},f=function(t,n){var e;return e=function(){},e.prototype=t,$.extend(!0,new e,n)},A=function(t){return $.extend(x,t)},l=function(t){return $("<"+t+"></"+t+">")},a=l("div").addClass(""+o+"-corner"),c=function(t){var n;return t.is("[type=radio]")&&(n=t.parents("form:first").find("[type=radio]").filter(function(n,e){return $(e).attr("name")===t.attr("name")}),t=n.first()),t},d=function(t,n,i){var r,o;if("string"==typeof i)i=parseInt(i,10);else if("number"!=typeof i)return;if(!isNaN(i))return r=v[y[n.charAt(0)]],o=n,t[r]!==e&&(n=v[r.charAt(0)],i*=-1),t[n]===e?t[n]=i:t[n]+=i,null},C=function(t,n,e){if("l"===t||"t"===t)return 0;if("c"===t||"m"===t)return e/2-n/2;if("r"===t||"b"===t)return e-n;throw"Invalid alignment"},i=function(){function t(t,n,e){"string"==typeof e&&(e={color:e}),this.options=f(x,$.isPlainObject(e)?e:{}),this.loadHTML(),this.wrapper=$(s.html),this.wrapper.data(o,this),this.arrow=this.wrapper.find("."+o+"-arrow"),this.container=this.wrapper.find("."+o+"-container"),this.container.append(this.userContainer),t&&t.length?(this.elementType=t.attr("type"),this.originalElement=t,this.elem=c(t),this.elem.data(o,this),this.elem.before(this.wrapper)):(this.options.arrowShow=!1,a.prepend(this.wrapper)),this.container.hide(),this.run(n)}return t.prototype.loadHTML=function(){var t;if(t=this.getStyle(),this.userContainer=$(t.html),this.text=this.userContainer.find("[data-notify-text]"),0===this.text.length)throw"style: "+name+" HTML iLine truncated */(function(t,e,n){"use strict";var i,r,o,s,a,l,h,p,c,d,u,f,A,w,m,g,y,b,x,v,R,C,S,k,F=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};b="notify",y=b+"js",v={t:"top",m:"middle",b:"bottom",l:"left",c:"center",r:"right"},c=["l","c","r"],k=["t","m","b"],A=["t","b","l","r"],w={t:"b",m:null,b:"t",l:"r",c:null,r:"l"},g=function(t){var e;return e=[],$.each(t.split(/\W+/),function(t,i){var r;return r=i.toLowerCase().charAt(0),v[r]?e.push(r):n}),e},S={},o={name:"core",html:'<div class="'+y+'-wrapper">\n <div class="'+y+'-arrow"></div>\n <div class="'+y+'-container"></div>\n</div>',css:"."+y+"-corner {\n position: fixed;\n top: 0;\n right: 0;\n margin: 5px;\n z-index: 1050;\n}\n\n."+y+"-corner ."+y+"-wrapper,\n."+y+"-corner ."+y+"-container {\n position: relative;\n display: block;\n height: inherit;\n width: inherit;\n}\n\n."+y+"-wrapper {\n z-index: 1;\n position: absolute;\n display: inline-block;\n height: 0;\n width: 0;\n}\n\n."+y+"-container {\n display: none;\n z-index: 1;\n position: absolute;\n cursor: pointer;\n}\n\n."+y+"-text {\n position: relative;\n}\n\n."+y+"-arrow {\n position: absolute;\n z-index: 2;\n width: 0;\n height: 0;\n}"},h="bootstrap",l={html:"<div>\n <span data-notify-text></span>\n</div>",classes:{base:{padding:"8px 15px 8px 14px","text-shadow":"0 1px 0 rgba(255, 255, 255, 0.5)","background-color":"#fcf8e3",border:"1px solid #fbeed5","border-radius":"4px","white-space":"nowrap","padding-left":"25px","background-repeat":"no-repeat","background-position":"3px 7px"},error:{color:"#B94A48","background-color":"#F2DEDE","border-color":"#EED3D7","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=)"},success:{color:"#468847","background-color":"#DFF0D8","border-color":"#D6E9C6","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNq0lctPE0Ecx38zu/RFS1EryqtgJFA08YCiMZIAQQ4eRG8eDGdPJiYeTIwHTfwPiAcvXIwXLwoXPaDxkWgQ6islKlJLSQWLUraPLTv7Gme32zoF9KSTfLO7v53vZ3d/M7/fIth+IO6INt2jjoA7bjHCJoAlzCRw59YwHYjBnfMPqAKWQYKjGkfCJqAF0xwZjipQtA3MxeSG87VhOOYegVrUCy7UZM9S6TLIdAamySTclZdYhFhRHloGYg7mgZv1Zzztvgud7V1tbQ2twYA34LJmF4p5dXF1KTufnE+SxeJtuCZNsLDCQU0+RyKTF27Unw101l8e6hns3u0PBalORVVVkcaEKBJDgV3+cGM4tKKmI+ohlIGnygKX00rSBfszz/n2uXv81wd6+rt1orsZCHRdr1Imk2F2Kob3hutSxW8thsd8AXNaln9D7CTfA6O+0UgkMuwVvEFFUbbAcrkcTA8+AtOk8E6KiQiDmMFSDqZItAzEVQviRkdDdaFgPp8HSZKAEAL5Qh7Sq2lIJBJwv2scUqkUnKoZgNhcDKhKg5aH+1IkcouCAdFGAQsuWZYhOjwFHQ96oagWgRoUov1T9kRBEODAwxM2QtEUl+Wp+Ln9VRo6BcMw4ErHRYjH4/B26AlQoQQTRdHWwcd9AH57+UAXddvDD37DmrBBV34WfqiXPl61g+vr6xA9zsGeM9gOdsNXkgpEtTwVvwOklXLKm6+/p5ezwk4B+j6droBs2CsGa/gNs6RIxazl4Tc25mpTgw/apPR1LYlNRFAzgsOxkyXYLIM1V8NMwyAkJSctD1eGVKiq5wWjSPdjmeTkiKvVW4f2YPHWl3GAVq6ymcyCTgovM3FzyRiDe2TaKcEKsLpJvNHjZgPNqEtyi6mZIm4SRFyLMUsONSSdkPeFtY1n0mczoY3BHTLhwPRy9/lzcziCw9ACI+yql0VLzcGAZbYSM5CCSZg1/9oc/nn7+i8N9p/8An4JMADxhH+xHfuiKwAAAABJRU5ErkJggg==)"},info:{},warn:{}}},C={"border-radius":["-webkit-","-moz-"]},r=function(t,e){var i;return S[t]?(alert(""+b+": style '"+t+"' already defined"),n):(e.name=t,S[t]=e,!e.cssElem&&(i="",e.classes&&$.each(e.classes,function(t,n){return i+="."+y+"-"+e.name+"-"+t+" {\n",$.each(n,function(t,e){return C[t]&&$.each(C[t],function(n,r){return i+=" "+r+t+": "+e+";\n"}),i+=" "+t+": "+e+";\n"}),i+="}\n"}),e.css&&(i+="/* styles for "+e.name+" */\n"+e.css),i)?(e.cssElem=f(i),e.cssElem.attr("data-notify-style",e.name)):n)},f=function(t){var e;e=a("style"),$("head").append(e);try{e.html(t)}catch(n){e[0].styleSheet.cssText=t}return e},x={autoHide:!0,autoHideDelay:5e3,arrowShow:!0,arrowSize:5,position:"bottom",style:"bootstrap",className:"error",showAnimation:"slideDown",showDuration:400,hideAnimation:"slideUp",hideDuration:200,offsetY:0,offsetX:0},u=function(t,e){var n;return n=function(){},n.prototype=t,$.extend(!0,new n,e)},m=function(t){return $Line truncated
+87 -69
View File
@@ -3,7 +3,7 @@
#plugin constants #plugin constants
pluginName = 'notify' pluginName = 'notify'
className = pluginName+'js' pluginClassName = pluginName+'js'
# ================================ # ================================
# POSITIONING # POSITIONING
@@ -43,15 +43,15 @@ styles = {}
coreStyle = coreStyle =
name: 'core' name: 'core'
html: """ html: """
<div class="#{className}-wrapper"> <div class="#{pluginClassName}-wrapper">
<div class="#{className}-arrow"></div> <div class="#{pluginClassName}-arrow"></div>
<div class="#{className}-container"></div> <div class="#{pluginClassName}-container"></div>
</div> </div>
""" """
# <div class="#{className}Debug"></div> # <div class="#{pluginClassName}Debug"></div>
# .#{className}Debug { # .#{pluginClassName}Debug {
# position: absolute; # position: absolute;
# border: 3px solid red; # border: 3px solid red;
# height: 0; # height: 0;
@@ -59,7 +59,7 @@ coreStyle =
# } # }
css: """ css: """
.#{className}-corner { .#{pluginClassName}-corner {
position: fixed; position: fixed;
top: 0; top: 0;
right: 0; right: 0;
@@ -67,15 +67,15 @@ coreStyle =
z-index: 1050; z-index: 1050;
} }
.#{className}-corner .#{className}-wrapper, .#{pluginClassName}-corner .#{pluginClassName}-wrapper,
.#{className}-corner .#{className}-container { .#{pluginClassName}-corner .#{pluginClassName}-container {
position: relative; position: relative;
display: block; display: block;
height: inherit; height: inherit;
width: inherit; width: inherit;
} }
.#{className}-wrapper { .#{pluginClassName}-wrapper {
z-index: 1; z-index: 1;
position: absolute; position: absolute;
display: inline-block; display: inline-block;
@@ -83,18 +83,18 @@ coreStyle =
width: 0; width: 0;
} }
.#{className}-container { .#{pluginClassName}-container {
display: none; display: none;
z-index: 1; z-index: 1;
position: absolute; position: absolute;
cursor: pointer; cursor: pointer;
} }
.#{className}-text { .#{pluginClassName}-text {
position: relative; position: relative;
} }
.#{className}-arrow { .#{pluginClassName}-arrow {
position: absolute; position: absolute;
z-index: 2; z-index: 2;
width: 0; width: 0;
@@ -111,27 +111,32 @@ defaultStyle =
""" """
classes: classes:
base: """ base:
padding: 8px 35px 8px 14px; "padding": "8px 15px 8px 14px"
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); "text-shadow": "0 1px 0 rgba(255, 255, 255, 0.5)"
background-color: #fcf8e3; "background-color": "#fcf8e3"
border: 1px solid #fbeed5; "border": "1px solid #fbeed5"
-webkit-border-radius: 4px; "border-radius": "4px"
-moz-border-radius: 4px; "white-space": "nowrap"
border-radius: 4px; #for background-image
white-space: nowrap; "padding-left": "25px"
""" "background-repeat": "no-repeat"
error: """ "background-position": "3px 7px"
color: #B94A48; error:
background-color: #F2DEDE; "color": "#B94A48"
border-color: #EED3D7; "background-color": "#F2DEDE"
padding-left: 25px; "border-color": "#EED3D7"
background-repeat: no-repeat; "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=)"
background-position: 3px 7px; success:
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=); "color": "#468847"
""" "background-color": "#DFF0D8"
info: "" "border-color": "#D6E9C6"
warn: "" "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNq0lctPE0Ecx38zu/RFS1EryqtgJFA08YCiMZIAQQ4eRG8eDGdPJiYeTIwHTfwPiAcvXIwXLwoXPaDxkWgQ6islKlJLSQWLUraPLTv7Gme32zoF9KSTfLO7v53vZ3d/M7/fIth+IO6INt2jjoA7bjHCJoAlzCRw59YwHYjBnfMPqAKWQYKjGkfCJqAF0xwZjipQtA3MxeSG87VhOOYegVrUCy7UZM9S6TLIdAamySTclZdYhFhRHloGYg7mgZv1Zzztvgud7V1tbQ2twYA34LJmF4p5dXF1KTufnE+SxeJtuCZNsLDCQU0+RyKTF27Unw101l8e6hns3u0PBalORVVVkcaEKBJDgV3+cGM4tKKmI+ohlIGnygKX00rSBfszz/n2uXv81wd6+rt1orsZCHRdr1Imk2F2Kob3hutSxW8thsd8AXNaln9D7CTfA6O+0UgkMuwVvEFFUbbAcrkcTA8+AtOk8E6KiQiDmMFSDqZItAzEVQviRkdDdaFgPp8HSZKAEAL5Qh7Sq2lIJBJwv2scUqkUnKoZgNhcDKhKg5aH+1IkcouCAdFGAQsuWZYhOjwFHQ96oagWgRoUov1T9kRBEODAwxM2QtEUl+Wp+Ln9VRo6BcMw4ErHRYjH4/B26AlQoQQTRdHWwcd9AH57+UAXddvDD37DmrBBV34WfqiXPl61g+vr6xA9zsGeM9gOdsNXkgpEtTwVvwOklXLKm6+/p5ezwk4B+j6droBs2CsGa/gNs6RIxazl4Tc25mpTgw/apPR1LYlNRFAzgsOxkyXYLIM1V8NMwyAkJSctD1eGVKiq5wWjSPdjmeTkiKvVW4f2YPHWl3GAVq6ymcyCTgovM3FzyRiDe2TaKcEKsLpJvNHjZgPNqEtyi6mZIm4SRFyLMUsONSSdkPeFtY1n0mczoY3BHTLhwPRy9/lzcziCw9ACI+yql0VLzcGAZbYSM5CCSZg1/9oc/nn7+i8N9p/8An4JMADxhH+xHfuiKwAAAABJRU5ErkJggg==)"
info: {}
warn: {}
stylePrefixes =
"border-radius": ["-webkit-", "-moz-"]
addStyle = (name, def) -> addStyle = (name, def) ->
if styles[name] if styles[name]
@@ -144,12 +149,16 @@ addStyle = (name, def) ->
cssText = "" cssText = ""
if def.classes if def.classes
$.each def.classes, (subClassName, css) -> $.each def.classes, (className, props) ->
cssText += """ cssText += ".#{pluginClassName}-#{def.name}-#{className} {\n"
.#{className}-#{def.name}-#{subClassName} { $.each props, (name, val) ->
#{css} #vendor prefixes
}\n if stylePrefixes[name]
""" $.each stylePrefixes[name], (i, prefix) ->
cssText += " #{prefix}#{name}: #{val};\n"
#add prop
cssText += " #{name}: #{val};\n"
cssText += "}\n"
if def.css if def.css
cssText += """ cssText += """
/* styles for #{def.name} */ /* styles for #{def.name} */
@@ -161,6 +170,7 @@ addStyle = (name, def) ->
def.cssElem.attr('data-notify-style', def.name) def.cssElem.attr('data-notify-style', def.name)
insertCSS = (cssText) -> insertCSS = (cssText) ->
elem = createElem("style") elem = createElem("style")
$("head").append elem $("head").append elem
try try
@@ -176,15 +186,14 @@ insertCSS = (cssText) ->
#overridable options #overridable options
pluginOptions = pluginOptions =
autoHide: false autoHide: true
autoHideDelay: 2000 autoHideDelay: 5000
arrowShow: true arrowShow: true
arrowSize: 5 arrowSize: 5
arrowColor: 'border'
position: 'bottom' position: 'bottom'
# Default style # Default style
style: 'bootstrap' style: 'bootstrap'
cls: 'error' className: 'error'
showAnimation: 'slideDown' showAnimation: 'slideDown'
showDuration: 400 showDuration: 400
hideAnimation: 'slideUp' hideAnimation: 'slideUp'
@@ -213,7 +222,7 @@ createElem = (tag) ->
$ "<#{tag}></#{tag}>" $ "<#{tag}></#{tag}>"
# container for element-less notifications # container for element-less notifications
cornerElem = createElem("div").addClass("#{className}-corner") cornerElem = createElem("div").addClass("#{pluginClassName}-corner")
#gets first on n radios, and gets the fancy stylised input for hidden inputs #gets first on n radios, and gets the fancy stylised input for hidden inputs
getAnchorElement = (element) -> getAnchorElement = (element) ->
@@ -267,23 +276,23 @@ class Notification
#setup instance variables #setup instance variables
constructor: (elem, data, options) -> constructor: (elem, data, options) ->
options = {color: options} if typeof options is 'string' options = {className: options} if typeof options is 'string'
@options = inherit pluginOptions, if $.isPlainObject(options) then options else {} @options = inherit pluginOptions, if $.isPlainObject(options) then options else {}
#load user html into @userContainer #load user html into @userContainer
@loadHTML() @loadHTML()
@wrapper = $(coreStyle.html) @wrapper = $(coreStyle.html)
@wrapper.data className, @ @wrapper.data pluginClassName, @
@arrow = @wrapper.find ".#{className}-arrow" @arrow = @wrapper.find ".#{pluginClassName}-arrow"
@container = @wrapper.find ".#{className}-container" @container = @wrapper.find ".#{pluginClassName}-container"
@container.append @userContainer @container.append @userContainer
if elem and elem.length if elem and elem.length
@elementType = elem.attr('type') @elementType = elem.attr('type')
@originalElement = elem @originalElement = elem
@elem = getAnchorElement(elem) @elem = getAnchorElement(elem)
@elem.data className, @ @elem.data pluginClassName, @
# add into dom above elem # add into dom above elem
@elem.before @wrapper @elem.before @wrapper
else else
@@ -299,8 +308,12 @@ class Notification
@userContainer = $(style.html) @userContainer = $(style.html)
@text = @userContainer.find '[data-notify-text]' @text = @userContainer.find '[data-notify-text]'
if @text.length is 0 if @text.length is 0
throw "style: #{name} HTML is missing the: 'data-notify-text' attribute" @text = @userContainer.find '[data-notify-html]'
@text.addClass "#{className}-text" @rawText = true
if @text.length is 0
throw "style: '#{name}' HTML is missing a: 'data-notify-text' or 'data-notify-html' attribute"
@text.addClass "#{pluginClassName}-text"
show: (show, callback = $.noop) -> show: (show, callback = $.noop) ->
@@ -341,8 +354,6 @@ class Notification
#get user defined position #get user defined position
position = @getPosition() position = @getPosition()
console.log position
pMain = position[0] pMain = position[0]
pAlign = position[1] pAlign = position[1]
@@ -354,8 +365,12 @@ class Notification
oppFull = positions[opp] oppFull = positions[opp]
#initial positioning #initial positioning
css = {} css = {}
css[oppFull] = if pMain is 'b' then elemH else css[oppFull] = if pMain is 'b'
if pMain is 'r' then elemW else 0 elemH
else if pMain is 'r'
elemW
else
0
#correct for elem-wrapper offset #correct for elem-wrapper offset
# unless navigator.userAgent.match /MSIE/ # unless navigator.userAgent.match /MSIE/
@@ -383,11 +398,14 @@ class Notification
else else
arrowSize = @options.arrowSize arrowSize = @options.arrowSize
arrowCss = $.extend {}, css arrowCss = $.extend {}, css
arrowColor = @userContainer.css("border-color") or
@userContainer.css("background-color") or
'white'
#build arrow #build arrow
for pos in mainPositions for pos in mainPositions
posFull = positions[pos] posFull = positions[pos]
continue if pos is opp continue if pos is opp
color = if posFull is mainFull then 'black' else 'transparent' color = if posFull is mainFull then arrowColor else 'transparent'
arrowCss["border-#{posFull}"] = "#{arrowSize}px solid #{color}" arrowCss["border-#{posFull}"] = "#{arrowSize}px solid #{color}"
#add some room for the arrow #add some room for the arrow
incr css, positions[opp], arrowSize incr css, positions[opp], arrowSize
@@ -402,8 +420,8 @@ class Notification
incr css, 'top', realign(pAlign, contH, elemH) incr css, 'top', realign(pAlign, contH, elemH)
incr arrowCss, 'top', realign(pAlign, arrowSize, elemIH) if arrowCss incr arrowCss, 'top', realign(pAlign, arrowSize, elemIH) if arrowCss
#apply css
css.display = 'block' if @container.is(":visible") css.display = 'block' if @container.is(":visible")
#apply css
@container.removeAttr('style').css css @container.removeAttr('style').css css
@arrow.removeAttr('style').css(arrowCss) if arrowCss @arrow.removeAttr('style').css(arrowCss) if arrowCss
@@ -434,21 +452,21 @@ class Notification
name = @options.style unless name name = @options.style unless name
name = 'default' unless name name = 'default' unless name
style = styles[name] style = styles[name]
throw "Missing style: #{name}" unless style throw "Missing style: #{name}"unless style
style style
updateStyleClasses: -> updateStyleClasses: ->
cls = ['base'] classes = ['base']
if $.isArray @options.cls if $.isArray @options.className
cls = cls.concat @options.cls classes = classes.concat @options.className
else if @options.cls else if @options.className
cls.push @options.cls classes.push @options.className
style = @getStyle() style = @getStyle()
cls = $.map(cls, (n) -> "#{className}-#{style.name}-#{n}").join ' ' classes = $.map(classes, (n) -> "#{pluginClassName}-#{style.name}-#{n}").join ' '
@userContainer.attr 'class', cls @userContainer.attr 'class', classes
#run plugin #run plugin
@@ -509,7 +527,7 @@ $[pluginName] = (elem, data, options) ->
# $( ... ).pluginName( { .. } ) creates a cached instance on each # $( ... ).pluginName( { .. } ) creates a cached instance on each
$.fn[pluginName] = (data, options) -> $.fn[pluginName] = (data, options) ->
$(@).each -> $(@).each ->
inst = getAnchorElement($(@)).data(className) inst = getAnchorElement($(@)).data(pluginClassName)
if inst if inst
inst.run data, options inst.run data, options
else else
@@ -537,8 +555,8 @@ $ ->
$[pluginName].addStyle(defaultStyleName, defaultStyle) $[pluginName].addStyle(defaultStyleName, defaultStyle)
#watch all notifications clicks #watch all notifications clicks
$(document).on 'click', ".#{className}-wrapper", -> $(document).on 'click', ".#{pluginClassName}-wrapper", ->
inst = $(@).data className inst = $(@).data pluginClassName
return unless inst return unless inst
if inst.elem if inst.elem
inst.show false inst.show false