growler.js
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:7k
源码类别:

Ajax

开发平台:

Others

  1. /**
  2.  * k.Growler 1.0.0
  3.  *
  4.  * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
  5.  * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
  6.  *
  7.  * Written by Kevin Armstrong <kevin@kevinandre.com>
  8.  * Last updated: 2008.10.14
  9.  *
  10.  * Growler is a PrototypeJS based class that displays unobtrusive notices on a page. 
  11.  * It functions much like the Growl (http://growl.info) available on the Mac OS X. 
  12.  *
  13.  * Changes in 1.0.1:
  14.  * - 
  15.  *
  16.  * @todo
  17.  */
  18. window.k = window.k || {};
  19. ;(function(){
  20. var noticeOptions = {
  21. header:  '&nbsp;'
  22. ,speedin:  0.3
  23. ,speedout:  0.5
  24. ,outDirection:  { y: -20 }
  25. ,life:  5
  26. ,sticky:  false
  27. ,className:  ""
  28. };
  29. var growlerOptions = {
  30. location:  "tr"
  31. ,width:  "250px"
  32. };
  33. var IE = (Prototype.Browser.IE) ? parseFloat(navigator.appVersion.split("MSIE ")[1]) || 0 : 0;
  34. function removeNotice(n, o){
  35. o = o || noticeOptions;
  36. new Effect.Parallel([
  37. new Effect.Move(n, Object.extend({ sync: true, mode: 'relative' }, o.outDirection)),
  38. new Effect.Opacity(n, { sync: true, to: 0 }) 
  39. ], {
  40. duration: o.speedout
  41. ,afterFinish: function(){
  42. try {
  43. var ne = n.down("div.notice-exit");
  44. if(ne != undefined){
  45. ne.stopObserving("click", removeNotice);
  46. }
  47. if(o.created && Object.isFunction(o.created)){
  48. n.stopObserving("notice:created", o.created);
  49. }
  50. if(o.destroyed && Object.isFunction(o.destroyed)){
  51. n.fire("notice:destroyed");
  52. n.stopObserving("notice:destroyed", o.destroyed);
  53. }
  54. } catch(e){}
  55. try {
  56. n.remove();
  57. } catch(e){}
  58. }
  59. });
  60. }
  61. function createNotice(growler, msg, options){
  62. var opt = Object.clone(noticeOptions);
  63. options = options || {};
  64. Object.extend(opt, options);
  65. var notice;
  66. if (opt.className != ""){
  67. notice = new Element("div", {"class": opt.className}).setStyle({display: "block", opacity: 0});
  68. } else {
  69. notice = new Element("div", {"class": "Growler-notice"}).setStyle({display: "block", opacity: 0});
  70. }
  71. if(opt.created && Object.isFunction(opt.created)){
  72. notice.observe("notice:created", opt.created);
  73. }
  74. if(opt.destroyed && Object.isFunction(opt.destroyed)){
  75. notice.observe("notice:destroyed", opt.destroyed);
  76. }
  77. if (opt.sticky){
  78. var noticeExit = new Element("div", {"class": "Growler-notice-exit"}).update("&times;");
  79. noticeExit.observe("click", function(){ removeNotice(notice, opt); });
  80. notice.insert(noticeExit);
  81. }
  82. notice.insert(new Element("div", {"class": "Growler-notice-head"}).update(opt.header));
  83. notice.insert(new Element("div", {"class": "Growler-notice-body"}).update(msg));
  84. growler.insert(notice);
  85. new Effect.Opacity(notice, { to: 0.85, duration: opt.speedin });
  86. if (!opt.sticky){
  87. removeNotice.delay(opt.life, notice, opt);
  88. }
  89. notice.fire("notice:created");
  90. return notice;
  91. }
  92. function specialNotice(g, m, o, t, b, c){
  93. o.header = o.header || t;
  94. var n = createNotice(g, m, o);
  95. n.setStyle({ backgroundColor: b, color: c });
  96. return n;
  97. }
  98. k.Growler = Class.create({
  99. initialize: function(options){
  100. var opt = Object.clone(growlerOptions);
  101. options = options || {};
  102. Object.extend(opt, options);
  103. this.growler = new Element("div", { "class": "Growler", "id": "Growler" });
  104. this.growler.setStyle({ position: ((IE==6)?"absolute":"fixed"), padding: "10px", "width": opt.width, "z-index": "50000" });
  105. if(IE==6){
  106. var offset = { w: parseInt(this.growler.style.width)+parseInt(this.growler.style.padding)*3, h: parseInt(this.growler.style.height)+parseInt(this.growler.style.padding)*3 };
  107. switch(opt.location){
  108. case "br":
  109. this.growler.style.setExpression("left", "( 0 - Growler.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px'");
  110.    this.growler.style.setExpression("top", "( 0 - Growler.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px'");
  111. break;
  112. case "tl":
  113. this.growler.style.setExpression("left", "( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px'");
  114.    this.growler.style.setExpression("top", "( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px'");
  115. break;
  116. case "bl":
  117. this.growler.style.setExpression("left", "( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px'");
  118.    this.growler.style.setExpression("top", "( 0 - Growler.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px'");
  119. break;
  120. default:
  121. this.growler.setStyle({right: "auto", bottom: "auto"});
  122. this.growler.style.setExpression("left", "( 0 - Growler.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px'");
  123.    this.growler.style.setExpression("top", "( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px'");
  124. break;
  125. }
  126. } else {
  127. switch(opt.location){
  128. case "br":
  129. this.growler.setStyle({bottom: 0, right: 0});
  130. break;
  131. case "tl":
  132. this.growler.setStyle({top: 0, left: 0});
  133. break;
  134. case "bl":
  135. this.growler.setStyle({top: 0, right: 0});
  136. break;
  137. case "tc":
  138. this.growler.setStyle({top: 0, left: "25%", width: "50%"});
  139. break;
  140. case "bc":
  141. this.growler.setStyle({bottom: 0, left: "25%", width: "50%"});
  142. break;
  143. default:
  144. this.growler.setStyle({top: 0, right: 0});
  145. break;
  146. }
  147. }
  148. this.growler.wrap( document.body );
  149. }
  150. ,growl: function(msg, options) {
  151. return createNotice(this.growler, msg, options);
  152. }
  153. ,warn: function(msg, options){
  154. return specialNotice(this.growler, msg, options, "Warning!", "#F6BD6F", "#000");
  155. }
  156. ,error: function(msg, options){
  157. return specialNotice(this.growler, msg, options, "Critical!", "#F66F82", "#000");
  158. }
  159. ,info: function(msg, options){
  160. return specialNotice(this.growler, msg, options, "Information!", "#BBF66F", "#000");
  161. }
  162. ,ungrowl: function(n, o){
  163. removeNotice(n, o);
  164. }
  165. });
  166. })();