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

📄 prototype.js

📁 应用泛型以及反射编写的单表操作框架
💻 JS
📖 第 1 页 / 共 4 页
字号:
/*  Prototype JavaScript framework, version 1.5.0_rc1 *  (c) 2005 Sam Stephenson <sam@conio.net> * *  Prototype is freely distributable under the terms of an MIT-style license. *  For details, see the Prototype web site: http://prototype.conio.net/ */*--------------------------------------------------------------------------*/var Prototype = {	Version: '1.5.0_rc1',	ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',	emptyFunction: function() {	},	K: function(x) {		return x	}}var Class = {	create: function() {		return function() {			this.initialize.apply(this, arguments);		}	}}var Abstract = new Object();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;		}	},	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);	}});Function.prototype.bind = function() {	var __method = this, args = $A(arguments), object = args.shift();	return function() {		return __method.apply(object, args.concat($A(arguments)));	}}Function.prototype.bindAsEventListener = function(object) {	var __method = this, args = $A(arguments), object = args.shift();	return function(event) {		return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));	}}Object.extend(Number.prototype, {	toColorPart: function() {		var digits = this.toString(16);		if (this < 16) return '0' + digits;		return digits;	},	succ: function() {		return this + 1;	},	times: function(iterator) {		$R(0, this, true).each(iterator);		return this;	}});var Try = {	these: function() {		var returnValue;		for (var i = 0; i < arguments.length; i++) {			var lambda = arguments[i];			try {				returnValue = lambda();				break;			} catch (e) {			}		}		return returnValue;	}}/*--------------------------------------------------------------------------*/var PeriodicalExecuter = Class.create();PeriodicalExecuter.prototype = {	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.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 += (replacement(match) || '').toString();				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 this;	},	truncate: function(length, truncation) {		length = length || 30;		truncation = truncation === undefined ? '...' : truncation;		return this.length > length ?			   this.slice(0, length - truncation.length) + truncation : 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 div = document.createElement('div');		var text = document.createTextNode(this);		div.appendChild(text);		return div.innerHTML;	},	unescapeHTML: function() {		var div = document.createElement('div');		div.innerHTML = this.stripTags();		return div.childNodes[0] ? div.childNodes[0].nodeValue : '';	},	toQueryParams: function() {		var pairs = this.match(/^\??(.*)$/)[1].split('&');		return pairs.inject({}, function(params, pairString) {			var pair = pairString.split('=');			var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;			params[decodeURIComponent(pair[0])] = value;			return params;		});	},	toArray: function() {		return this.split('');	},	camelize: function() {		var oStringList = this.split('-');		if (oStringList.length == 1) return oStringList[0];		var camelizedString = this.indexOf('-') == 0				? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)				: oStringList[0];		for (var i = 1, len = oStringList.length; i < len; i++) {			var s = oStringList[i];			camelizedString += s.charAt(0).toUpperCase() + s.substring(1);		}		return camelizedString;	},	inspect: function(useDoubleQuotes) {		var escapedString = this.replace(/\\/g, '\\\\');		if (useDoubleQuotes)			return '"' + escapedString.replace(/"/g, '\\"') + '"';		else			return "'" + escapedString.replace(/'/g, '\\\'') + "'";	}});String.prototype.gsub.prepareReplacement = function(replacement) {	if (typeof replacement == 'function') return replacement;	var template = new Template(replacement);	return function(match) {		return template.evaluate(match)	};}String.prototype.parseQuery = String.prototype.toQueryParams;var Template = Class.create();Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;Template.prototype = {	initialize: function(template, pattern) {		this.template = template.toString();		this.pattern = pattern || Template.Pattern;	},	evaluate: function(object) {		return this.template.gsub(this.pattern, function(match) {			var before = match[1];			if (before == '\\') return match[2];			return before + (object[match[3]] || '').toString();		});	}}var $break = new Object();var $continue = new Object();var Enumerable = {	each: function(iterator) {		var index = 0;		try {			this._each(function(value) {				try {					iterator(value, index++);				} catch (e) {					if (e != $continue) throw e;				}			});		} catch (e) {			if (e != $break) throw e;		}	},	all: function(iterator) {		var result = true;		this.each(function(value, index) {			result = result && !!(iterator || Prototype.K)(value, index);			if (!result) throw $break;		});		return result;	},	any: function(iterator) {		var result = false;		this.each(function(value, index) {			if (result = !!(iterator || Prototype.K)(value, index))				throw $break;		});		return result;	},	collect: function(iterator) {		var results = [];		this.each(function(value, index) {			results.push(iterator(value, index));		});		return results;	},	detect: function (iterator) {		var result;		this.each(function(value, index) {			if (iterator(value, index)) {				result = value;				throw $break;			}		});		return result;	},	findAll: function(iterator) {		var results = [];		this.each(function(value, index) {			if (iterator(value, index))				results.push(value);		});		return results;	},	grep: function(pattern, iterator) {		var results = [];		this.each(function(value, index) {			var stringValue = value.toString();			if (stringValue.match(pattern))				results.push((iterator || Prototype.K)(value, index));		})		return results;	},	include: function(object) {		var found = false;		this.each(function(value) {			if (value == object) {				found = true;				throw $break;			}		});		return found;	},	inject: function(memo, iterator) {		this.each(function(value, index) {			memo = iterator(memo, value, index);		});		return memo;	},	invoke: function(method) {		var args = $A(arguments).slice(1);		return this.collect(function(value) {			return value[method].apply(value, args);		});	},	max: function(iterator) {		var result;		this.each(function(value, index) {			value = (iterator || Prototype.K)(value, index);			if (result == undefined || value >= result)				result = value;		});		return result;	},	min: function(iterator) {		var result;		this.each(function(value, index) {			value = (iterator || Prototype.K)(value, index);			if (result == undefined || value < result)				result = value;		});		return result;	},	partition: function(iterator) {		var trues = [], falses = [];		this.each(function(value, index) {			((iterator || Prototype.K)(value, index) ?			 trues : falses).push(value);		});		return [trues, falses];	},	pluck: function(property) {		var results = [];		this.each(function(value, index) {			results.push(value[property]);		});		return results;	},	reject: function(iterator) {		var results = [];		this.each(function(value, index) {			if (!iterator(value, index))				results.push(value);		});		return results;	},	sortBy: function(iterator) {		return this.collect(function(value, index) {			return {value: value, criteria: iterator(value, index)};		}).sort(function(left, right) {			var a = left.criteria, b = right.criteria;			return a < b ? -1 : a > b ? 1 : 0;		}).pluck('value');	},	toArray: function() {		return this.collect(Prototype.K);	},	zip: function() {		var iterator = Prototype.K, args = $A(arguments);		if (typeof args.last() == 'function')			iterator = args.pop();		var collections = [this].concat(args).map($A);		return this.map(function(value, index) {			return iterator(collections.pluck(index));		});	},	inspect: function() {		return '#<Enumerable:' + this.toArray().inspect() + '>';	}}Object.extend(Enumerable, {	map:	 Enumerable.collect,	find:	Enumerable.detect,	select:  Enumerable.findAll,	member:  Enumerable.include,	entries: Enumerable.toArray});var $A = Array.from = function(iterable) {	if (!iterable) return [];	if (iterable.toArray) {		return iterable.toArray();	} else {		var results = [];		for (var i = 0; i < iterable.length; i++)			results.push(iterable[i]);		return results;	}}Object.extend(Array.prototype, Enumerable);if (!Array.prototype._reverse)	Array.prototype._reverse = Array.prototype.reverse;Object.extend(Array.prototype, {	_each: function(iterator) {		for (var i = 0; i < this.length; i++)			iterator(this[i]);	},	clear: function() {		this.length = 0;		return this;	},	first: function() {		return this[0];	},	last: function() {		return this[this.length - 1];	},	compact: function() {		return this.select(function(value) {			return value != undefined || value != null;		});	},	flatten: function() {		return this.inject([], function(array, value) {			return array.concat(value && value.constructor == Array ?								value.flatten() : [value]);		});	},	without: function() {		var values = $A(arguments);		return this.select(function(value) {			return !values.include(value);		});	},	indexOf: function(object) {		for (var i = 0; i < this.length; i++)			if (this[i] == object) return i;		return -1;	},	reverse: function(inline) {		return (inline !== false ? this : this.toArray())._reverse();	},	reduce: function() {		return this.length > 1 ? this : this[0];	},	uniq: function() {		return this.inject([], function(array, value) {			return array.include(value) ? array : array.concat([value]);		});	},	inspect: function() {		return '[' + this.map(Object.inspect).join(', ') + ']';	}});var Hash = {	_each: function(iterator) {		for (var key in this) {			var value = this[key];			if (typeof value == 'function') continue;			var pair = [key, value];			pair.key = key;			pair.value = value;			iterator(pair);		}	},	keys: function() {		return this.pluck('key');	},

⌨️ 快捷键说明

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