prototype.js
上传用户:szgaoree
上传日期:2009-01-05
资源大小:74k
文件大小:5k
源码类别:

Ajax

开发平台:

C#

  1. // JavaScript prototype extensions
  2. Object.extend = function(dest, source) {
  3. for(prop in source) {
  4. dest[prop] = source[prop];
  5. }
  6. return dest;
  7. }
  8. Object.extend(Function.prototype, {
  9. getArguments: function() {
  10. var args = [];
  11. for(var i=0; i<this.arguments.length; i++)
  12. args.push(this.arguments[i]);
  13. return args;
  14. },
  15. bind: function(o) {
  16. if(!window.__objs) {
  17. window.__objs = [];
  18. window.__funcs = [];
  19. }
  20. var objId = o.__oid;
  21. if(!objId)
  22. __objs[objId = o.__oid = __objs.length] = o;
  23. var me = this;
  24. var funcId = me.__fid;
  25. if(!funcId)
  26. __funcs[funcId = me.__fid = __funcs.length] = me;
  27. if(!o.__closures)
  28. o.__closures = [];
  29. var closure = o.__closures[funcId];
  30. if(closure)
  31. return closure;
  32. o = null;
  33. me = null;
  34. return __objs[objId].__closures[funcId] = function() {
  35. return __funcs[funcId].apply(__objs[objId], arguments);
  36. };
  37. },
  38. bindAsEventListener: function(o) {
  39. if(!window.__objs) {
  40. window.__objs = [];
  41. window.__funcs = [];
  42. }
  43. var objId = o.__oid;
  44. if(!objId)
  45. __objs[objId = o.__oid = __objs.length] = o;
  46. var me = this;
  47. var funcId = me.__fid;
  48. if(!funcId)
  49. __funcs[funcId = me.__fid = __funcs.length] = me;
  50. if(!o.__closures)
  51. o.__closures = [];
  52. var closure = o.__closures[funcId];
  53. if(closure)
  54. return closure;
  55. o = null;
  56. me = null;
  57. return __objs[objId].__closures[funcId] = function(event) {
  58. return __funcs[funcId].call(__objs[objId], event || window.event);
  59. };
  60. },
  61. bindToEvent: function(ele, evt, obj, useCapture) {
  62. if(useCapture == "undefined") useCapture = false;
  63. if(ele.attachEvent) {
  64. ele.attachEvent("on" + evt, this.bindAsEventListener(obj));
  65. }else if(ele.addEventListener) {
  66. ele.addEventListener(evt, this.bindAsEventListener(obj), useCapture);
  67. }
  68. },
  69. removeFromEvent: function(ele, evt, obj, useCapture) {
  70. if(useCapture == "undefined") useCapture = false;
  71. if(ele.detachEvent) {
  72. ele.detachEvent("on" + evt, this.bindAsEventListener(obj));
  73. }else if(ele.removeEventListener) {
  74. ele.removeEventListener(evt, this.bindAsEventListener(obj), useCapture);
  75. }
  76. }
  77. }, false);
  78. Object.extend(String.prototype, {
  79. endsWith: function(s) {
  80. return (this.substr(this.length - s.length) == s);
  81. },
  82. startsWith: function(s) {
  83. return (this.substr(0, s.length) == s);
  84. },
  85. trimLeft: function() {
  86. return this.replace(/^s*/,"");
  87. },
  88. trimRight: function() {
  89. return this.replace(/s*$/,"");
  90. },
  91. trim: function() {
  92. return this.trimRight().trimLeft();
  93. }
  94. }, false);
  95. String.format = function(s){
  96. for(var i=1; i<arguments.length; i++){
  97. s = s.replace("{" + (i -1) + "}", arguments[i]);
  98. }
  99. return s;
  100. }
  101. Object.extend(Array.prototype, {
  102. push: function(o) {
  103. this[this.length] = o;
  104. }
  105. }, false);
  106. // JavaScript namespaces
  107. if(!window.addNamespace) {
  108. window.addNamespace = function(ns) {
  109. var nsParts = ns.split(".");
  110. var root = window;
  111. for(var i=0; i<nsParts.length; i++) {
  112. if(typeof root[nsParts[i]] == "undefined")
  113. root[nsParts[i]] = {};
  114. root = root[nsParts[i]];
  115. }
  116. }
  117. }
  118. // Browser related properties
  119. addNamespace("MS.Browser");
  120. MS.Browser.isIE = (window.navigator.appName.toLowerCase().indexOf('explorer') != -1 || window.navigator.appName.toLowerCase().indexOf('msie') != -1 );
  121. // Debugging
  122. addNamespace("MS.Debug");
  123. MS.Debug.enabled = false;
  124. MS.Debug.trace = function(s){}
  125. var Class = {
  126. create: function() {
  127. return function() {
  128. if(typeof this.initialize == "function")
  129. this.initialize.apply(this, arguments);
  130. }
  131. }
  132. }
  133. addNamespace("MS.Position");
  134. MS.Position = {
  135. getLocation: function(ele) {
  136. var offsetX = 0;
  137. var offsetY = 0;
  138. var parent;
  139. for(parent=ele; parent; parent=parent.offsetParent) {
  140. if(parent.offsetLeft)
  141. offsetX += parent.offsetLeft;
  142. if(parent.offsetTop)
  143. offsetY += parent.offsetTop;
  144. }
  145. return {left:offsetX,top:offsetY};
  146. },
  147. getBounds: function(ele) {
  148. var offset = MS.Position.getLocation(ele);
  149. var width = ele.offsetWidth;
  150. var height = ele.offsetHeight;
  151. return {left:offset.left, top:offset.top, width:width, height:height};
  152. }
  153. };
  154. function addEvent(o, evType, f, capture) {
  155. if(o.addEventListener) {
  156. o.addEventListener(evType, f, capture);
  157. return true;
  158. } else if (o.attachEvent) {
  159. var r = o.attachEvent("on" + evType, f);
  160. return r;
  161. } else {
  162. // alert("Handler could not be attached");
  163. }
  164. function removeEvent(o, evType, f, capture) {
  165. if(o.removeEventListener) {
  166. o.removeEventListener(evType, f, capture);
  167. return true;
  168. } else if (o.detachEvent) {
  169. o.detachEvent("on" + evType, f);
  170. } else {
  171. // alert("Handler could not be removed");
  172. }
  173. }
  174. function $() {
  175.   var elements = new Array();
  176.   for (var i = 0; i < arguments.length; i++) {
  177.     var element = arguments[i];
  178.     if (typeof element == 'string')
  179.       element = document.getElementById(element);
  180.     if (arguments.length == 1)
  181.       return element;
  182.     elements.push(element);
  183.   }
  184.   return elements;
  185. }