⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prototype.js

📁 用struts,ajax实现的聊天室
💻 JS
📖 第 1 页 / 共 5 页
字号:
/*  Prototype JavaScript framework, version 1.6.0_rc0 *  (c) 2005-2007 Sam Stephenson * *  Prototype is freely distributable under the terms of an MIT-style license. *  For details, see the Prototype web site: http://www.prototypejs.org/ * *--------------------------------------------------------------------------*/var Prototype = {  Version: '1.6.0_rc0',  Browser: {    IE:     !!(window.attachEvent && !window.opera),    Opera:  !!window.opera,    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,    MobileSafari: !!navigator.userAgent.match(/iPhone.*Mobile.*Safari/)  },  BrowserFeatures: {    XPath: !!document.evaluate,    ElementExtensions: !!window.HTMLElement,    SpecificElementExtensions:      document.createElement('div').__proto__ !==       document.createElement('form').__proto__  },  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,  emptyFunction: function() { },  K: function(x) { return x }};if (Prototype.Browser.MobileSafari)  Prototype.BrowserFeatures.SpecificElementExtensions = false;/* Based on Alex Arnell's inheritance implementation. */var Class = {  create: function(parent, methods) {    if (arguments.length == 1 && !Object.isFunction(parent))      methods = parent, parent = null;    var method = function() {      if (!Class.extending) this.initialize.apply(this, arguments);    };    method.superclass = parent;    method.subclasses = [];    if (Object.isFunction(parent)) {      Class.extending = true;      method.prototype = new parent();      parent.subclasses.push(method);      delete Class.extending;    }    if (methods) Class.extend(method, methods);    method.prototype.constructor = method;    return method;  },  extend: function(destination, source) {    for (var name in source) Class.inherit(destination, source, name);    return destination;  },  inherit: function(destination, source, name) {    var prototype = destination.prototype, ancestor = prototype[name],     descendant = source[name];    if (ancestor && Object.isFunction(descendant) &&        descendant.argumentNames().first() == "$super") {      var method = descendant, descendant = ancestor.wrap(method);      Object.extend(descendant, {        valueOf:  function() { return method },        toString: function() { return method.toString() }      });    }    prototype[name] = descendant;    if (destination.subclasses && destination.subclasses.length > 0) {      for (var i = 0, subclass; subclass = destination.subclasses[i]; i++) {        Class.extending = true;        Object.extend(subclass.prototype, new destination());        subclass.prototype.constructor = subclass;        delete Class.extending;        Class.inherit(subclass, destination.prototype, name);      }    }  },  mixin: function(destination, source) {    return Object.extend(destination, source);  }};var Abstract = { };Object.extend = function(destination, source) {  for (var property in source) {    destination[property] = source[property];  }  return destination;};Object.extend(Object, {  inspect: function(object) {    try {      if (object === undefined) return 'undefined';      if (object === null) return 'null';      return object.inspect ? object.inspect() : object.toString();    } catch (e) {      if (e instanceof RangeError) return '...';      throw e;    }  },  toJSON: function(object) {    var type = typeof object;    switch (type) {      case 'undefined':      case 'function':      case 'unknown': return;      case 'boolean': return object.toString();    }    if (object === null) return 'null';    if (object.toJSON) return object.toJSON();    if (Object.isElement(object)) return;    var results = [];    for (var property in object) {      var value = Object.toJSON(object[property]);      if (value !== undefined)        results.push(property.toJSON() + ': ' + value);    }    return '{' + results.join(', ') + '}';  },  toHTML: function(object) {    return object && object.toHTML ? object.toHTML() : String.interpret(object);  },  keys: function(object) {    var keys = [];    for (var property in object)      keys.push(property);    return keys;  },  values: function(object) {    var values = [];    for (var property in object)      values.push(object[property]);    return values;  },  clone: function(object) {    return Object.extend({ }, object);  },  isElement: function(object) {    return object && object.nodeType == 1;  },  isArray: function(object) {    return object && object.constructor === Array;  },  isFunction: function(object) {    return typeof object == "function";  },  isString: function(object) {    return typeof object == "string";  },  isNumber: function(object) {    return typeof object == "number";  },  isUndefined: function(object) {    return typeof object == "undefined";  }});Object.extend(Function.prototype, {  argumentNames: function() {    var names = this.toString().match(/^[\s\(]*function\s*\((.*?)\)/)[1].split(",").invoke("strip");    return names.length == 1 && !names[0] ? [] : names;  },  bind: function() {    if (arguments.length < 2 && arguments[0] === undefined) return this;    var __method = this, args = $A(arguments), object = args.shift();    return function() {      return __method.apply(object, args.concat($A(arguments)));    }  },  bindAsEventListener: function() {    var __method = this, args = $A(arguments), object = args.shift();    return function(event) {      return __method.apply(object, [event || window.event].concat(args));    }  },  curry: function() {    if (!arguments.length) return this;    var __method = this, args = $A(arguments);    return function() {      return __method.apply(this, args.concat($A(arguments)));    }  },  delay: function() {    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;    return window.setTimeout(function() {      return __method.apply(__method, args);    }, timeout);  },  wrap: function(wrapper) {    var __method = this;    return function() {      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));    }  },  methodize: function() {    if (this._methodized) return this._methodized;    var __method = this;    return this._methodized = function() {      return __method.apply(null, [this].concat($A(arguments)));    };  }});Function.prototype.defer = Function.prototype.delay.curry(0.01);Date.prototype.toJSON = function() {  return '"' + this.getFullYear() + '-' +    (this.getMonth() + 1).toPaddedString(2) + '-' +    this.getDate().toPaddedString(2) + 'T' +    this.getHours().toPaddedString(2) + ':' +    this.getMinutes().toPaddedString(2) + ':' +    this.getSeconds().toPaddedString(2) + '"';};var Try = {  these: function() {    var returnValue;    for (var i = 0, length = arguments.length; i < length; i++) {      var lambda = arguments[i];      try {        returnValue = lambda();        break;      } catch (e) { }    }    return returnValue;  }};RegExp.prototype.match = RegExp.prototype.test;RegExp.escape = function(str) {  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');};/*--------------------------------------------------------------------------*/var PeriodicalExecuter = Class.create({  initialize: function(callback, frequency) {    this.callback = callback;    this.frequency = frequency;    this.currentlyExecuting = false;    this.registerCallback();  },  registerCallback: function() {    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);  },  stop: function() {    if (!this.timer) return;    clearInterval(this.timer);    this.timer = null;  },  onTimerEvent: function() {    if (!this.currentlyExecuting) {      try {        this.currentlyExecuting = true;        this.callback(this);      } finally {        this.currentlyExecuting = false;      }    }  }});Object.extend(String, {  interpret: function(value) {    return value == null ? '' : String(value);  },  specialChar: {    '\b': '\\b',    '\t': '\\t',    '\n': '\\n',    '\f': '\\f',    '\r': '\\r',    '\\': '\\\\'  }});Object.extend(String.prototype, {  gsub: function(pattern, replacement) {    var result = '', source = this, match;    replacement = arguments.callee.prepareReplacement(replacement);    while (source.length > 0) {      if (match = source.match(pattern)) {        result += source.slice(0, match.index);        result += String.interpret(replacement(match));        source  = source.slice(match.index + match[0].length);      } else {        result += source, source = '';      }    }    return result;  },  sub: function(pattern, replacement, count) {    replacement = this.gsub.prepareReplacement(replacement);    count = count === undefined ? 1 : count;    return this.gsub(pattern, function(match) {      if (--count < 0) return match[0];      return replacement(match);    });  },  scan: function(pattern, iterator) {    this.gsub(pattern, iterator);    return String(this);  },  truncate: function(length, truncation) {    length = length || 30;    truncation = truncation === undefined ? '...' : truncation;    return this.length > length ?      this.slice(0, length - truncation.length) + truncation : String(this);  },  strip: function() {    return this.replace(/^\s+/, '').replace(/\s+$/, '');  },  stripTags: function() {    return this.replace(/<\/?[^>]+>/gi, '');  },  stripScripts: function() {    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');  },  extractScripts: function() {    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');    return (this.match(matchAll) || []).map(function(scriptTag) {      return (scriptTag.match(matchOne) || ['', ''])[1];    });  },  evalScripts: function() {    return this.extractScripts().map(function(script) { return eval(script) });  },  escapeHTML: function() {    var self = arguments.callee;    self.text.data = this;    return self.div.innerHTML;  },  unescapeHTML: function() {    var div = new Element('div');    div.innerHTML = this.stripTags();    return div.childNodes[0] ? (div.childNodes.length > 1 ?      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :      div.childNodes[0].nodeValue) : '';  },  toQueryParams: function(separator) {    var match = this.strip().match(/([^?#]*)(#.*)?$/);    if (!match) return { };    return match[1].split(separator || '&').inject({ }, function(hash, pair) {      if ((pair = pair.split('='))[0]) {        var key = decodeURIComponent(pair.shift());        var value = pair.length > 1 ? pair.join('=') : pair[0];        if (value != undefined) value = decodeURIComponent(value);        if (key in hash) {          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];          hash[key].push(value);        }        else hash[key] = value;      }      return hash;    });  },  toArray: function() {    return this.split('');  },  succ: function() {    return this.slice(0, this.length - 1) +      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);  },  times: function(count) {    var result = '';    for (var i = 0; i < count; i++) result += this;    return result;  },  camelize: function() {    var parts = this.split('-'), len = parts.length;    if (len == 1) return parts[0];    var camelized = this.charAt(0) == '-'      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)      : parts[0];    for (var i = 1; i < len; i++)      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);    return camelized;  },  capitalize: function() {    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();  },  underscore: function() {    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();  },  dasherize: function() {    return this.gsub(/_/,'-');  },

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -