You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

625 lines
21 KiB

4 years ago
  1. /* Notify.js - http://notifyjs.com/ Copyright (c) 2015 MIT */
  2. (function (factory) {
  3. // UMD start
  4. // https://github.com/umdjs/umd/blob/master/jqueryPluginCommonjs.js
  5. if (typeof define === 'function' && define.amd) {
  6. // AMD. Register as an anonymous module.
  7. define(['jquery'], factory);
  8. } else if (typeof module === 'object' && module.exports) {
  9. // Node/CommonJS
  10. module.exports = function( root, jQuery ) {
  11. if ( jQuery === undefined ) {
  12. // require('jQuery') returns a factory that requires window to
  13. // build a jQuery instance, we normalize how we use modules
  14. // that require this pattern but the window provided is a noop
  15. // if it's defined (how jquery works)
  16. if ( typeof window !== 'undefined' ) {
  17. jQuery = require('jquery');
  18. }
  19. else {
  20. jQuery = require('jquery')(root);
  21. }
  22. }
  23. factory(jQuery);
  24. return jQuery;
  25. };
  26. } else {
  27. // Browser globals
  28. factory(jQuery);
  29. }
  30. }(function ($) {
  31. //IE8 indexOf polyfill
  32. var indexOf = [].indexOf || function(item) {
  33. for (var i = 0, l = this.length; i < l; i++) {
  34. if (i in this && this[i] === item) {
  35. return i;
  36. }
  37. }
  38. return -1;
  39. };
  40. var pluginName = "notify";
  41. var pluginClassName = pluginName + "js";
  42. var blankFieldName = pluginName + "!blank";
  43. var positions = {
  44. t: "top",
  45. m: "middle",
  46. b: "bottom",
  47. l: "left",
  48. c: "center",
  49. r: "right"
  50. };
  51. var hAligns = ["l", "c", "r"];
  52. var vAligns = ["t", "m", "b"];
  53. var mainPositions = ["t", "b", "l", "r"];
  54. var opposites = {
  55. t: "b",
  56. m: null,
  57. b: "t",
  58. l: "r",
  59. c: null,
  60. r: "l"
  61. };
  62. var parsePosition = function(str) {
  63. var pos;
  64. pos = [];
  65. $.each(str.split(/\W+/), function(i, word) {
  66. var w;
  67. w = word.toLowerCase().charAt(0);
  68. if (positions[w]) {
  69. return pos.push(w);
  70. }
  71. });
  72. return pos;
  73. };
  74. var styles = {};
  75. var coreStyle = {
  76. name: "core",
  77. html: "<div class=\"" + pluginClassName + "-wrapper\">\n <div class=\"" + pluginClassName + "-arrow\"></div>\n <div class=\"" + pluginClassName + "-container\"></div>\n</div>",
  78. css: "." + pluginClassName + "-corner {\n position: fixed;\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 margin: 3px;\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}\n\n." + pluginClassName + "-hidable {\n cursor: pointer;\n}\n\n[data-notify-text],[data-notify-html] {\n position: relative;\n}\n\n." + pluginClassName + "-arrow {\n position: absolute;\n z-index: 2;\n width: 0;\n height: 0;\n}"
  79. };
  80. var stylePrefixes = {
  81. "border-radius": ["-webkit-", "-moz-"]
  82. };
  83. var getStyle = function(name) {
  84. return styles[name];
  85. };
  86. var removeStyle = function(name) {
  87. if (!name) {
  88. throw "Missing Style name";
  89. }
  90. if (styles[name]) {
  91. delete styles[name];
  92. }
  93. };
  94. var addStyle = function(name, def) {
  95. if (!name) {
  96. throw "Missing Style name";
  97. }
  98. if (!def) {
  99. throw "Missing Style definition";
  100. }
  101. if (!def.html) {
  102. throw "Missing Style HTML";
  103. }
  104. //remove existing style
  105. var existing = styles[name];
  106. if (existing && existing.cssElem) {
  107. if (window.console) {
  108. console.warn(pluginName + ": overwriting style '" + name + "'");
  109. }
  110. styles[name].cssElem.remove();
  111. }
  112. def.name = name;
  113. styles[name] = def;
  114. var cssText = "";
  115. if (def.classes) {
  116. $.each(def.classes, function(className, props) {
  117. cssText += "." + pluginClassName + "-" + def.name + "-" + className + " {\n";
  118. $.each(props, function(name, val) {
  119. if (stylePrefixes[name]) {
  120. $.each(stylePrefixes[name], function(i, prefix) {
  121. return cssText += " " + prefix + name + ": " + val + ";\n";
  122. });
  123. }
  124. return cssText += " " + name + ": " + val + ";\n";
  125. });
  126. return cssText += "}\n";
  127. });
  128. }
  129. if (def.css) {
  130. cssText += "/* styles for " + def.name + " */\n" + def.css;
  131. }
  132. if (cssText) {
  133. def.cssElem = insertCSS(cssText);
  134. def.cssElem.attr("id", "notify-" + def.name);
  135. }
  136. var fields = {};
  137. var elem = $(def.html);
  138. findFields("html", elem, fields);
  139. findFields("text", elem, fields);
  140. def.fields = fields;
  141. };
  142. var insertCSS = function(cssText) {
  143. var e, elem, error;
  144. elem = createElem("style");
  145. elem.attr("type", 'text/css');
  146. $("head").append(elem);
  147. try {
  148. elem.html(cssText);
  149. } catch (_) {
  150. elem[0].styleSheet.cssText = cssText;
  151. }
  152. return elem;
  153. };
  154. var findFields = function(type, elem, fields) {
  155. var attr;
  156. if (type !== "html") {
  157. type = "text";
  158. }
  159. attr = "data-notify-" + type;
  160. return find(elem, "[" + attr + "]").each(function() {
  161. var name;
  162. name = $(this).attr(attr);
  163. if (!name) {
  164. name = blankFieldName;
  165. }
  166. fields[name] = type;
  167. });
  168. };
  169. var find = function(elem, selector) {
  170. if (elem.is(selector)) {
  171. return elem;
  172. } else {
  173. return elem.find(selector);
  174. }
  175. };
  176. var pluginOptions = {
  177. clickToHide: true,
  178. autoHide: true,
  179. autoHideDelay: 5000,
  180. arrowShow: true,
  181. arrowSize: 5,
  182. breakNewLines: true,
  183. elementPosition: "bottom",
  184. globalPosition: "top right",
  185. style: "bootstrap",
  186. className: "error",
  187. showAnimation: "slideDown",
  188. showDuration: 400,
  189. hideAnimation: "slideUp",
  190. hideDuration: 200,
  191. gap: 5
  192. };
  193. var inherit = function(a, b) {
  194. var F;
  195. F = function() {};
  196. F.prototype = a;
  197. return $.extend(true, new F(), b);
  198. };
  199. var defaults = function(opts) {
  200. return $.extend(pluginOptions, opts);
  201. };
  202. var createElem = function(tag) {
  203. return $("<" + tag + "></" + tag + ">");
  204. };
  205. var globalAnchors = {};
  206. var getAnchorElement = function(element) {
  207. var radios;
  208. if (element.is('[type=radio]')) {
  209. radios = element.parents('form:first').find('[type=radio]').filter(function(i, e) {
  210. return $(e).attr("name") === element.attr("name");
  211. });
  212. element = radios.first();
  213. }
  214. return element;
  215. };
  216. var incr = function(obj, pos, val) {
  217. var opp, temp;
  218. if (typeof val === "string") {
  219. val = parseInt(val, 10);
  220. } else if (typeof val !== "number") {
  221. return;
  222. }
  223. if (isNaN(val)) {
  224. return;
  225. }
  226. opp = positions[opposites[pos.charAt(0)]];
  227. temp = pos;
  228. if (obj[opp] !== undefined) {
  229. pos = positions[opp.charAt(0)];
  230. val = -val;
  231. }
  232. if (obj[pos] === undefined) {
  233. obj[pos] = val;
  234. } else {
  235. obj[pos] += val;
  236. }
  237. return null;
  238. };
  239. var realign = function(alignment, inner, outer) {
  240. if (alignment === "l" || alignment === "t") {
  241. return 0;
  242. } else if (alignment === "c" || alignment === "m") {
  243. return outer / 2 - inner / 2;
  244. } else if (alignment === "r" || alignment === "b") {
  245. return outer - inner;
  246. }
  247. throw "Invalid alignment";
  248. };
  249. var encode = function(text) {
  250. encode.e = encode.e || createElem("div");
  251. return encode.e.text(text).html();
  252. };
  253. function Notification(elem, data, options) {
  254. if (typeof options === "string") {
  255. options = {
  256. className: options
  257. };
  258. }
  259. this.options = inherit(pluginOptions, $.isPlainObject(options) ? options : {});
  260. this.loadHTML();
  261. this.wrapper = $(coreStyle.html);
  262. if (this.options.clickToHide) {
  263. this.wrapper.addClass(pluginClassName + "-hidable");
  264. }
  265. this.wrapper.data(pluginClassName, this);
  266. this.arrow = this.wrapper.find("." + pluginClassName + "-arrow");
  267. this.container = this.wrapper.find("." + pluginClassName + "-container");
  268. this.container.append(this.userContainer);
  269. if (elem && elem.length) {
  270. this.elementType = elem.attr("type");
  271. this.originalElement = elem;
  272. this.elem = getAnchorElement(elem);
  273. this.elem.data(pluginClassName, this);
  274. this.elem.before(this.wrapper);
  275. }
  276. this.container.hide();
  277. this.run(data);
  278. }
  279. Notification.prototype.loadHTML = function() {
  280. var style;
  281. style = this.getStyle();
  282. this.userContainer = $(style.html);
  283. this.userFields = style.fields;
  284. };
  285. Notification.prototype.show = function(show, userCallback) {
  286. var args, callback, elems, fn, hidden;
  287. callback = (function(_this) {
  288. return function() {
  289. if (!show && !_this.elem) {
  290. _this.destroy();
  291. }
  292. if (userCallback) {
  293. return userCallback();
  294. }
  295. };
  296. })(this);
  297. hidden = this.container.parent().parents(':hidden').length > 0;
  298. elems = this.container.add(this.arrow);
  299. args = [];
  300. if (hidden && show) {
  301. fn = "show";
  302. } else if (hidden && !show) {
  303. fn = "hide";
  304. } else if (!hidden && show) {
  305. fn = this.options.showAnimation;
  306. args.push(this.options.showDuration);
  307. } else if (!hidden && !show) {
  308. fn = this.options.hideAnimation;
  309. args.push(this.options.hideDuration);
  310. } else {
  311. return callback();
  312. }
  313. args.push(callback);
  314. return elems[fn].apply(elems, args);
  315. };
  316. Notification.prototype.setGlobalPosition = function() {
  317. var p = this.getPosition();
  318. var pMain = p[0];
  319. var pAlign = p[1];
  320. var main = positions[pMain];
  321. var align = positions[pAlign];
  322. var key = pMain + "|" + pAlign;
  323. var anchor = globalAnchors[key];
  324. if (!anchor || !document.body.contains(anchor[0])) {
  325. anchor = globalAnchors[key] = createElem("div");
  326. var css = {};
  327. css[main] = 0;
  328. if (align === "middle") {
  329. css.top = '45%';
  330. } else if (align === "center") {
  331. css.left = '45%';
  332. } else {
  333. css[align] = 0;
  334. }
  335. anchor.css(css).addClass(pluginClassName + "-corner");
  336. $("body").append(anchor);
  337. }
  338. return anchor.prepend(this.wrapper);
  339. };
  340. Notification.prototype.setElementPosition = function() {
  341. var arrowColor, arrowCss, arrowSize, color, contH, contW, css, elemH, elemIH, elemIW, elemPos, elemW, gap, j, k, len, len1, mainFull, margin, opp, oppFull, pAlign, pArrow, pMain, pos, posFull, position, ref, wrapPos;
  342. position = this.getPosition();
  343. pMain = position[0];
  344. pAlign = position[1];
  345. pArrow = position[2];
  346. elemPos = this.elem.position();
  347. elemH = this.elem.outerHeight();
  348. elemW = this.elem.outerWidth();
  349. elemIH = this.elem.innerHeight();
  350. elemIW = this.elem.innerWidth();
  351. wrapPos = this.wrapper.position();
  352. contH = this.container.height();
  353. contW = this.container.width();
  354. mainFull = positions[pMain];
  355. opp = opposites[pMain];
  356. oppFull = positions[opp];
  357. css = {};
  358. css[oppFull] = pMain === "b" ? elemH : pMain === "r" ? elemW : 0;
  359. incr(css, "top", elemPos.top - wrapPos.top);
  360. incr(css, "left", elemPos.left - wrapPos.left);
  361. ref = ["top", "left"];
  362. for (j = 0, len = ref.length; j < len; j++) {
  363. pos = ref[j];
  364. margin = parseInt(this.elem.css("margin-" + pos), 10);
  365. if (margin) {
  366. incr(css, pos, margin);
  367. }
  368. }
  369. gap = Math.max(0, this.options.gap - (this.options.arrowShow ? arrowSize : 0));
  370. incr(css, oppFull, gap);
  371. if (!this.options.arrowShow) {
  372. this.arrow.hide();
  373. } else {
  374. arrowSize = this.options.arrowSize;
  375. arrowCss = $.extend({}, css);
  376. arrowColor = this.userContainer.css("border-color") || this.userContainer.css("border-top-color") || this.userContainer.css("background-color") || "white";
  377. for (k = 0, len1 = mainPositions.length; k < len1; k++) {
  378. pos = mainPositions[k];
  379. posFull = positions[pos];
  380. if (pos === opp) {
  381. continue;
  382. }
  383. color = posFull === mainFull ? arrowColor : "transparent";
  384. arrowCss["border-" + posFull] = arrowSize + "px solid " + color;
  385. }
  386. incr(css, positions[opp], arrowSize);
  387. if (indexOf.call(mainPositions, pAlign) >= 0) {
  388. incr(arrowCss, positions[pAlign], arrowSize * 2);
  389. }
  390. }
  391. if (indexOf.call(vAligns, pMain) >= 0) {
  392. incr(css, "left", realign(pAlign, contW, elemW));
  393. if (arrowCss) {
  394. incr(arrowCss, "left", realign(pAlign, arrowSize, elemIW));
  395. }
  396. } else if (indexOf.call(hAligns, pMain) >= 0) {
  397. incr(css, "top", realign(pAlign, contH, elemH));
  398. if (arrowCss) {
  399. incr(arrowCss, "top", realign(pAlign, arrowSize, elemIH));
  400. }
  401. }
  402. if (this.container.is(":visible")) {
  403. css.display = "block";
  404. }
  405. this.container.removeAttr("style").css(css);
  406. if (arrowCss) {
  407. return this.arrow.removeAttr("style").css(arrowCss);
  408. }
  409. };
  410. Notification.prototype.getPosition = function() {
  411. var pos, ref, ref1, ref2, ref3, ref4, ref5, text;
  412. text = this.options.position || (this.elem ? this.options.elementPosition : this.options.globalPosition);
  413. pos = parsePosition(text);
  414. if (pos.length === 0) {
  415. pos[0] = "b";
  416. }
  417. if (ref = pos[0], indexOf.call(mainPositions, ref) < 0) {
  418. throw "Must be one of [" + mainPositions + "]";
  419. }
  420. if (pos.length === 1 || ((ref1 = pos[0], indexOf.call(vAligns, ref1) >= 0) && (ref2 = pos[1], indexOf.call(hAligns, ref2) < 0)) || ((ref3 = pos[0], indexOf.call(hAligns, ref3) >= 0) && (ref4 = pos[1], indexOf.call(vAligns, ref4) < 0))) {
  421. pos[1] = (ref5 = pos[0], indexOf.call(hAligns, ref5) >= 0) ? "m" : "l";
  422. }
  423. if (pos.length === 2) {
  424. pos[2] = pos[1];
  425. }
  426. return pos;
  427. };
  428. Notification.prototype.getStyle = function(name) {
  429. var style;
  430. if (!name) {
  431. name = this.options.style;
  432. }
  433. if (!name) {
  434. name = "default";
  435. }
  436. style = styles[name];
  437. if (!style) {
  438. throw "Missing style: " + name;
  439. }
  440. return style;
  441. };
  442. Notification.prototype.updateClasses = function() {
  443. var classes, style;
  444. classes = ["base"];
  445. if ($.isArray(this.options.className)) {
  446. classes = classes.concat(this.options.className);
  447. } else if (this.options.className) {
  448. classes.push(this.options.className);
  449. }
  450. style = this.getStyle();
  451. classes = $.map(classes, function(n) {
  452. return pluginClassName + "-" + style.name + "-" + n;
  453. }).join(" ");
  454. return this.userContainer.attr("class", classes);
  455. };
  456. Notification.prototype.run = function(data, options) {
  457. var d, datas, name, type, value;
  458. if ($.isPlainObject(options)) {
  459. $.extend(this.options, options);
  460. } else if ($.type(options) === "string") {
  461. this.options.className = options;
  462. }
  463. if (this.container && !data) {
  464. this.show(false);
  465. return;
  466. } else if (!this.container && !data) {
  467. return;
  468. }
  469. datas = {};
  470. if ($.isPlainObject(data)) {
  471. datas = data;
  472. } else {
  473. datas[blankFieldName] = data;
  474. }
  475. for (name in datas) {
  476. d = datas[name];
  477. type = this.userFields[name];
  478. if (!type) {
  479. continue;
  480. }
  481. if (type === "text") {
  482. d = encode(d);
  483. if (this.options.breakNewLines) {
  484. d = d.replace(/\n/g, '<br/>');
  485. }
  486. }
  487. value = name === blankFieldName ? '' : '=' + name;
  488. find(this.userContainer, "[data-notify-" + type + value + "]").html(d);
  489. }
  490. this.updateClasses();
  491. if (this.elem) {
  492. this.setElementPosition();
  493. } else {
  494. this.setGlobalPosition();
  495. }
  496. this.show(true);
  497. if (this.options.autoHide) {
  498. clearTimeout(this.autohideTimer);
  499. this.autohideTimer = setTimeout(this.show.bind(this, false), this.options.autoHideDelay);
  500. }
  501. };
  502. Notification.prototype.destroy = function() {
  503. this.wrapper.data(pluginClassName, null);
  504. this.wrapper.remove();
  505. };
  506. $[pluginName] = function(elem, data, options) {
  507. if ((elem && elem.nodeName) || elem.jquery) {
  508. $(elem)[pluginName](data, options);
  509. } else {
  510. options = data;
  511. data = elem;
  512. new Notification(null, data, options);
  513. }
  514. return elem;
  515. };
  516. $.fn[pluginName] = function(data, options) {
  517. $(this).each(function() {
  518. var prev = getAnchorElement($(this)).data(pluginClassName);
  519. if (prev) {
  520. prev.destroy();
  521. }
  522. var curr = new Notification($(this), data, options);
  523. });
  524. return this;
  525. };
  526. $.extend($[pluginName], {
  527. defaults: defaults,
  528. addStyle: addStyle,
  529. removeStyle: removeStyle,
  530. pluginOptions: pluginOptions,
  531. getStyle: getStyle,
  532. insertCSS: insertCSS
  533. });
  534. //always include the default bootstrap style
  535. addStyle("bootstrap", {
  536. html: "<div>\n<span data-notify-text></span>\n</div>",
  537. classes: {
  538. base: {
  539. "font-weight": "bold",
  540. "padding": "8px 15px 8px 14px",
  541. "text-shadow": "0 1px 0 rgba(255, 255, 255, 0.5)",
  542. "background-color": "#fcf8e3",
  543. "border": "1px solid #fbeed5",
  544. "border-radius": "4px",
  545. "white-space": "nowrap",
  546. "padding-left": "25px",
  547. "background-repeat": "no-repeat",
  548. "background-position": "3px 7px"
  549. },
  550. error: {
  551. "color": "#B94A48",
  552. "background-color": "#F2DEDE",
  553. "border-color": "#EED3D7",
  554. "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=)"
  555. },
  556. success: {
  557. "color": "#468847",
  558. "background-color": "#DFF0D8",
  559. "border-color": "#D6E9C6",
  560. "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==)"
  561. },
  562. info: {
  563. "color": "#3A87AD",
  564. "background-color": "#D9EDF7",
  565. "border-color": "#BCE8F1",
  566. "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYFAhkSsdes/QAAA8dJREFUOMvVlGtMW2UYx//POaWHXg6lLaW0ypAtw1UCgbniNOLcVOLmAjHZolOYlxmTGXVZdAnRfXQm+7SoU4mXaOaiZsEpC9FkiQs6Z6bdCnNYruM6KNBw6YWewzl9z+sHImEWv+vz7XmT95f/+3/+7wP814v+efDOV3/SoX3lHAA+6ODeUFfMfjOWMADgdk+eEKz0pF7aQdMAcOKLLjrcVMVX3xdWN29/GhYP7SvnP0cWfS8caSkfHZsPE9Fgnt02JNutQ0QYHB2dDz9/pKX8QjjuO9xUxd/66HdxTeCHZ3rojQObGQBcuNjfplkD3b19Y/6MrimSaKgSMmpGU5WevmE/swa6Oy73tQHA0Rdr2Mmv/6A1n9w9suQ7097Z9lM4FlTgTDrzZTu4StXVfpiI48rVcUDM5cmEksrFnHxfpTtU/3BFQzCQF/2bYVoNbH7zmItbSoMj40JSzmMyX5qDvriA7QdrIIpA+3cdsMpu0nXI8cV0MtKXCPZev+gCEM1S2NHPvWfP/hL+7FSr3+0p5RBEyhEN5JCKYr8XnASMT0xBNyzQGQeI8fjsGD39RMPk7se2bd5ZtTyoFYXftF6y37gx7NeUtJJOTFlAHDZLDuILU3j3+H5oOrD3yWbIztugaAzgnBKJuBLpGfQrS8wO4FZgV+c1IxaLgWVU0tMLEETCos4xMzEIv9cJXQcyagIwigDGwJgOAtHAwAhisQUjy0ORGERiELgG4iakkzo4MYAxcM5hAMi1WWG1yYCJIcMUaBkVRLdGeSU2995TLWzcUAzONJ7J6FBVBYIggMzmFbvdBV44Corg8vjhzC+EJEl8U1kJtgYrhCzgc/vvTwXKSib1paRFVRVORDAJAsw5FuTaJEhWM2SHB3mOAlhkNxwuLzeJsGwqWzf5TFNdKgtY5qHp6ZFf67Y/sAVadCaVY5YACDDb3Oi4NIjLnWMw2QthCBIsVhsUTU9tvXsjeq9+X1d75/KEs4LNOfcdf/+HthMnvwxOD0wmHaXr7ZItn2wuH2SnBzbZAbPJwpPx+VQuzcm7dgRCB57a1uBzUDRL4bfnI0RE0eaXd9W89mpjqHZnUI5Hh2l2dkZZUhOqpi2qSmpOmZ64Tuu9qlz/SEXo6MEHa3wOip46F1n7633eekV8ds8Wxjn37Wl63VVa+ej5oeEZ/82ZBETJjpJ1Rbij2D3Z/1trXUvLsblCK0XfOx0SX2kMsn9dX+d+7Kf6h8o4AIykuffjT8L20LU+w4AZd5VvEPY+XpWqLV327HR7DzXuDnD8r+ovkBehJ8i+y8YAAAAASUVORK5CYII=)"
  567. },
  568. warn: {
  569. "color": "#C09853",
  570. "background-color": "#FCF8E3",
  571. "border-color": "#FBEED5",
  572. "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABJlBMVEXr6eb/2oD/wi7/xjr/0mP/ykf/tQD/vBj/3o7/uQ//vyL/twebhgD/4pzX1K3z8e349vK6tHCilCWbiQymn0jGworr6dXQza3HxcKkn1vWvV/5uRfk4dXZ1bD18+/52YebiAmyr5S9mhCzrWq5t6ufjRH54aLs0oS+qD751XqPhAybhwXsujG3sm+Zk0PTwG6Shg+PhhObhwOPgQL4zV2nlyrf27uLfgCPhRHu7OmLgAafkyiWkD3l49ibiAfTs0C+lgCniwD4sgDJxqOilzDWowWFfAH08uebig6qpFHBvH/aw26FfQTQzsvy8OyEfz20r3jAvaKbhgG9q0nc2LbZxXanoUu/u5WSggCtp1anpJKdmFz/zlX/1nGJiYmuq5Dx7+sAAADoPUZSAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfdBgUBGhh4aah5AAAAlklEQVQY02NgoBIIE8EUcwn1FkIXM1Tj5dDUQhPU502Mi7XXQxGz5uVIjGOJUUUW81HnYEyMi2HVcUOICQZzMMYmxrEyMylJwgUt5BljWRLjmJm4pI1hYp5SQLGYxDgmLnZOVxuooClIDKgXKMbN5ggV1ACLJcaBxNgcoiGCBiZwdWxOETBDrTyEFey0jYJ4eHjMGWgEAIpRFRCUt08qAAAAAElFTkSuQmCC)"
  573. }
  574. }
  575. });
  576. $(function() {
  577. insertCSS(coreStyle.css).attr("id", "core-notify");
  578. $(document).on("click", "." + pluginClassName + "-hidable", function(e) {
  579. $(this).trigger("notify-hide");
  580. });
  581. $(document).on("notify-hide", "." + pluginClassName + "-wrapper", function(e) {
  582. var elem = $(this).data(pluginClassName);
  583. if(elem) {
  584. elem.show(false);
  585. }
  586. });
  587. });
  588. }));