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

📄 prototype.js

📁 用struts,ajax实现的聊天室
💻 JS
📖 第 1 页 / 共 5 页
字号:
  return -1;};if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;  var n = this.slice(0, i).reverse().indexOf(item);  return (n < 0) ? n : i - n - 1;};Array.prototype.toArray = Array.prototype.clone;function $w(string) {  string = string.strip();  return string ? string.split(/\s+/) : [];}if (Prototype.Browser.Opera){  Array.prototype.concat = function() {    var array = [];    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);    for (var i = 0, length = arguments.length; i < length; i++) {      if (Object.isArray(arguments[i])) {        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)          array.push(arguments[i][j]);      } else {        array.push(arguments[i]);      }    }    return array;  };}Object.extend(Number.prototype, {  toColorPart: function() {    return this.toPaddedString(2, 16);  },  succ: function() {    return this + 1;  },  times: function(iterator) {    $R(0, this, true).each(iterator);    return this;  },  toPaddedString: function(length, radix) {    var string = this.toString(radix || 10);    return '0'.times(length - string.length) + string;  },  toJSON: function() {    return isFinite(this) ? this.toString() : 'null';  }});$w('abs round ceil floor').each(function(method){  Number.prototype[method] = Math[method].methodize();});var Hash = function(object) {  if (object instanceof Hash) this.merge(object);  else Object.extend(this, object || { });};Object.extend(Hash, {  toQueryString: function(obj) {    var parts = [];    parts.add = arguments.callee.addPair;    this.prototype._each.call(obj, function(pair) {      if (!pair.key) return;      var value = pair.value;      if (value && typeof value == 'object') {        if (Object.isArray(value)) value.each(function(value) {          parts.add(pair.key, value);        });        return;      }      parts.add(pair.key, value);    });    return parts.join('&');  },  toJSON: function(object) {    var results = [];    this.prototype._each.call(object, function(pair) {      var value = Object.toJSON(pair.value);      if (value !== undefined) results.push(pair.key.toJSON() + ': ' + value);    });    return '{' + results.join(', ') + '}';  }});Hash.toQueryString.addPair = function(key, value, prefix) {  key = encodeURIComponent(key);  if (value === undefined) this.push(key);  else this.push(key + '=' + (value == null ? '' : encodeURIComponent(value)));};Object.extend(Hash.prototype, Enumerable);Object.extend(Hash.prototype, {  _each: function(iterator) {    for (var key in this) {      var value = this[key];      if (value && value == Hash.prototype[key]) continue;      var pair = [key, value];      pair.key = key;      pair.value = value;      iterator(pair);    }  },  keys: function() {    return this.pluck('key');  },  values: function() {    return this.pluck('value');  },  index: function(value) {    var match = this.detect(function(pair) {      return pair.value === value;    });    return match && match.key;  },  merge: function(hash) {    return $H(hash).inject(this, function(mergedHash, pair) {      mergedHash[pair.key] = pair.value;      return mergedHash;    });  },  remove: function() {    var result;    for(var i = 0, length = arguments.length; i < length; i++) {      var value = this[arguments[i]];      if (value !== undefined){        if (result === undefined) result = value;        else {          if (!Object.isArray(result)) result = [result];          result.push(value);        }      }      delete this[arguments[i]];    }    return result;  },  toQueryString: function() {    return Hash.toQueryString(this);  },  inspect: function() {    return '#<Hash:{' + this.map(function(pair) {      return pair.map(Object.inspect).join(': ');    }).join(', ') + '}>';  },  toJSON: function() {    return Hash.toJSON(this);  }});function $H(object) {  if (object instanceof Hash) return object;  return new Hash(object);};// Safari iterates over shadowed propertiesif (function() {  var i = 0, Test = function(value) { this.key = value };  Test.prototype.key = 'foo';  for (var property in new Test('bar')) i++;  return i > 1;}()) Hash.prototype._each = function(iterator) {  var cache = [];  for (var key in this) {    var value = this[key];    if ((value && value == Hash.prototype[key]) || cache.include(key)) continue;    cache.push(key);    var pair = [key, value];    pair.key = key;    pair.value = value;    iterator(pair);  }};ObjectRange = Class.create();Object.extend(ObjectRange.prototype, Enumerable);Object.extend(ObjectRange.prototype, {  initialize: function(start, end, exclusive) {    this.start = start;    this.end = end;    this.exclusive = exclusive;  },  _each: function(iterator) {    var value = this.start;    while (this.include(value)) {      iterator(value);      value = value.succ();    }  },  include: function(value) {    if (value < this.start)      return false;    if (this.exclusive)      return value < this.end;    return value <= this.end;  }});var $R = function(start, end, exclusive) {  return new ObjectRange(start, end, exclusive);};var Ajax = {  getTransport: function() {    return Try.these(      function() {return new XMLHttpRequest()},      function() {return new ActiveXObject('Msxml2.XMLHTTP')},      function() {return new ActiveXObject('Microsoft.XMLHTTP')}    ) || false;  },  activeRequestCount: 0};Ajax.Responders = {  responders: [],  _each: function(iterator) {    this.responders._each(iterator);  },  register: function(responder) {    if (!this.include(responder))      this.responders.push(responder);  },  unregister: function(responder) {    this.responders = this.responders.without(responder);  },  dispatch: function(callback, request, transport, json) {    this.each(function(responder) {      if (Object.isFunction(responder[callback])) {        try {          responder[callback].apply(responder, [request, transport, json]);        } catch (e) { }      }    });  }};Object.extend(Ajax.Responders, Enumerable);Ajax.Responders.register({  onCreate: function() {    Ajax.activeRequestCount++;  },  onComplete: function() {    Ajax.activeRequestCount--;  }});Ajax.Base = function() { };Ajax.Base.prototype = {  setOptions: function(options) {    this.options = {      method:       'post',      asynchronous: true,      contentType:  'application/x-www-form-urlencoded',      encoding:     'UTF-8',      parameters:   '',      evalJSON:     true,      evalJS:       true    };    Object.extend(this.options, options || { });    this.options.method = this.options.method.toLowerCase();    if (Object.isString(this.options.parameters))      this.options.parameters = this.options.parameters.toQueryParams();  }};Ajax.Request = Class.create();Ajax.Request.Events =  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];Ajax.Request.prototype = Object.extend(new Ajax.Base(), {  _complete: false,  initialize: function(url, options) {    this.transport = Ajax.getTransport();    this.setOptions(options);    this.request(url);  },  request: function(url) {    this.url = url;    this.method = this.options.method;    var params = Object.clone(this.options.parameters);    if (!['get', 'post'].include(this.method)) {      // simulate other verbs over post      params['_method'] = this.method;      this.method = 'post';    }    this.parameters = params;    if (params = Hash.toQueryString(params)) {      // when GET, append parameters to URL      if (this.method == 'get')        this.url += (this.url.include('?') ? '&' : '?') + params;      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))        params += '&_=';    }    try {      var response = new Ajax.Response(this);      if (this.options.onCreate) this.options.onCreate(response);      Ajax.Responders.dispatch('onCreate', this, response);      this.transport.open(this.method.toUpperCase(), this.url,        this.options.asynchronous);      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);      this.transport.onreadystatechange = this.onStateChange.bind(this);      this.setRequestHeaders();      this.body = this.method == 'post' ? (this.options.postBody || params) : null;      this.transport.send(this.body);      /* Force Firefox to handle ready state 4 for synchronous requests */      if (!this.options.asynchronous && this.transport.overrideMimeType)        this.onStateChange();    }    catch (e) {      this.dispatchException(e);    }  },  onStateChange: function() {    var readyState = this.transport.readyState;    if (readyState > 1 && !((readyState == 4) && this._complete))      this.respondToReadyState(this.transport.readyState);  },  setRequestHeaders: function() {    var headers = {      'X-Requested-With': 'XMLHttpRequest',      'X-Prototype-Version': Prototype.Version,      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'    };    if (this.method == 'post') {      headers['Content-type'] = this.options.contentType +        (this.options.encoding ? '; charset=' + this.options.encoding : '');      /* Force "Connection: close" for older Mozilla browsers to work       * around a bug where XMLHttpRequest sends an incorrect       * Content-length header. See Mozilla Bugzilla #246651.       */      if (this.transport.overrideMimeType &&          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)            headers['Connection'] = 'close';    }    // user-defined headers    if (typeof this.options.requestHeaders == 'object') {      var extras = this.options.requestHeaders;      if (Object.isFunction(extras.push))        for (var i = 0, length = extras.length; i < length; i += 2)          headers[extras[i]] = extras[i+1];      else        $H(extras).each(function(pair) { headers[pair.key] = pair.value });    }    for (var name in headers)      this.transport.setRequestHeader(name, headers[name]);  },  success: function() {    var status = this.getStatus();    return !status || (status >= 200 && status < 300);  },  getStatus: function() {    try {      return this.transport.status || 0;    } catch (e) { return 0 }  },  respondToReadyState: function(readyState) {    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);    if (state == 'Complete') {      try {        this._complete = true;        (this.options['on' + response.status]         || this.options['on' + (this.success() ? 'Success' : 'Failure')]         || Prototype.emptyFunction)(response, response.headerJSON);      } catch (e) {        this.dispatchException(e);      }      var contentType = response.getHeader('Content-type');      if (this.options.evalJS == 'force'          || (this.options.evalJS && contentType          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))        this.evalResponse();    }    try {      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);    } catch (e) {      this.dispatchException(e);    }    if (state == 'Complete') {      // avoid memory leak in MSIE: clean up      this.transport.onreadystatechange = Prototype.emptyFunction;    }  },  getHeader: function(name) {    try {      return this.transport.getResponseHeader(name);    } catch (e) { return null }  },  evalResponse: function() {    try {      return eval((this.transport.responseText || '').unfilterJSON());    } catch (e) {      this.dispatchException(e);    }  },  dispatchException: function(exception) {    (this.options.onException || Prototype.emptyFunction)(this, exception);    Ajax.Responders.dispatch('onException', this, exception);  }});Ajax.Response = Class.create();Ajax.Response.prototype = {  initialize: function(request){    this.request = request;    var transport  = this.transport  = request.transport,

⌨️ 快捷键说明

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