diff options
| author | wei <> | 2006-06-12 03:10:47 +0000 | 
|---|---|---|
| committer | wei <> | 2006-06-12 03:10:47 +0000 | 
| commit | 1c6f1f79d011579a158e87459040075331b636b7 (patch) | |
| tree | 75236e04a5e2aaf9685b34ed7bed0f82e591bbb4 /framework/Web/Javascripts/extended/base.js | |
| parent | f30c38fcc9d6cdfa7aafa5078a58645192c11974 (diff) | |
Minor updates.
Diffstat (limited to 'framework/Web/Javascripts/extended/base.js')
| -rw-r--r-- | framework/Web/Javascripts/extended/base.js | 97 | 
1 files changed, 96 insertions, 1 deletions
diff --git a/framework/Web/Javascripts/extended/base.js b/framework/Web/Javascripts/extended/base.js index 53856684..d7fabdd0 100644 --- a/framework/Web/Javascripts/extended/base.js +++ b/framework/Web/Javascripts/extended/base.js @@ -26,4 +26,99 @@ Class.extend = function(base, definition)  		if(definition) 
  			Object.extend(component.prototype, definition);
  		return component;
 -}
\ No newline at end of file +}
 +
 +/*
 +	Base, version 1.0.1
 +	Copyright 2006, Dean Edwards
 +	License: http://creativecommons.org/licenses/LGPL/2.1/
 +*/
 +
 +function Base() {
 +};
 +
 +Base.version = "1.0.1";
 +
 +Base.prototype = {
 +	extend: function(source, value) {
 +		var extend = Base.prototype.extend;
 +		if (arguments.length == 2) {
 +			var ancestor = this[source];
 +			// overriding?
 +			if ((ancestor instanceof Function) && (value instanceof Function) &&
 +				ancestor.valueOf() != value.valueOf() && /\binherit\b/.test(value)) {
 +				var method = value;
 +				value = function() {
 +					var previous = this.inherit;
 +					this.inherit = ancestor;
 +					var returnValue = method.apply(this, arguments);
 +					this.inherit = previous;
 +					return returnValue;
 +				};
 +				// point to the underlying method
 +				value.valueOf = function() {
 +					return method;
 +				};
 +				value.toString = function() {
 +					return String(method);
 +				};
 +			}
 +			return this[source] = value;
 +		} else if (source) {
 +			var _prototype = {toSource: null};
 +			// do the "toString" and other methods manually
 +			var _protected = ["toString", "valueOf"];
 +			// if we are prototyping then include the constructor
 +			if (Base._prototyping) _protected[2] = "constructor";
 +			for (var i = 0; (name = _protected[i]); i++) {
 +				if (source[name] != _prototype[name]) {
 +					extend.call(this, name, source[name]);
 +				}
 +			}
 +			// copy each of the source object's properties to this object
 +			for (var name in source) {
 +				if (!_prototype[name]) {
 +					extend.call(this, name, source[name]);
 +				}
 +			}
 +		}
 +		return this;
 +	},
 +
 +	inherit: function() {
 +		// call this method from any other method to invoke that method's ancestor
 +	}
 +};
 +
 +Base.extend = function(_instance, _static) {	
 +	var extend = Base.prototype.extend;
 +	if (!_instance) _instance = {};
 +	// create the constructor
 +	if (_instance.constructor == Object) {
 +		_instance.constructor = new Function;
 +	}
 +	// build the prototype
 +	Base._prototyping = true;
 +	var _prototype = new this;
 +	extend.call(_prototype, _instance);
 +	var constructor = _prototype.constructor;
 +	_prototype.constructor = this;
 +	delete Base._prototyping;
 +	// create the wrapper for the constructor function
 +	var klass = function() {
 +		if (!Base._prototyping) constructor.apply(this, arguments);
 +		this.constructor = klass;
 +	};
 +	klass.prototype = _prototype;
 +	// build the class interface
 +	klass.extend = this.extend;
 +	klass.toString = function() {
 +		return String(constructor);
 +	};
 +	extend.call(klass, _static);
 +	// support singletons
 +	var object = constructor ? klass : _prototype;
 +	// class initialisation
 +	if (object.init instanceof Function) object.init();
 +	return object;
 +};
\ No newline at end of file  | 
