--- a/labs/openlayers/lib/OpenLayers/BaseTypes/Class.js +++ b/labs/openlayers/lib/OpenLayers/BaseTypes/Class.js @@ -1,1 +1,117 @@ +/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for + * full list of contributors). Published under the Clear BSD license. + * See http://svn.openlayers.org/trunk/openlayers/license.txt for the + * full text of the license. */ +/** + * Constructor: OpenLayers.Class + * Base class used to construct all other classes. Includes support for + * multiple inheritance. + * + * This constructor is new in OpenLayers 2.5. At OpenLayers 3.0, the old + * syntax for creating classes and dealing with inheritance + * will be removed. + * + * To create a new OpenLayers-style class, use the following syntax: + * > var MyClass = OpenLayers.Class(prototype); + * + * To create a new OpenLayers-style class with multiple inheritance, use the + * following syntax: + * > var MyClass = OpenLayers.Class(Class1, Class2, prototype); + * Note that instanceof reflection will only reveil Class1 as superclass. + * Class2 ff are mixins. + * + */ +OpenLayers.Class = function() { + var Class = function() { + /** + * This following condition can be removed at 3.0 - this is only for + * backwards compatibility while the Class.inherit method is still + * in use. So at 3.0, the following three lines would be replaced with + * simply: + * this.initialize.apply(this, arguments); + */ + if (arguments && arguments[0] != OpenLayers.Class.isPrototype) { + this.initialize.apply(this, arguments); + } + }; + var extended = {}; + var parent, initialize, Type; + for(var i=0, len=arguments.length; i 1) { + initialize = Type.prototype.initialize; + // replace the initialize method with an empty function, + // because we do not want to create a real instance here + Type.prototype.initialize = function() {}; + // the line below makes sure that the new class has a + // superclass + extended = new Type(); + // restore the original initialize method + if(initialize === undefined) { + delete Type.prototype.initialize; + } else { + Type.prototype.initialize = initialize; + } + } + // get the prototype of the superclass + parent = Type.prototype; + } else { + // in this case we're extending with the prototype + parent = Type; + } + OpenLayers.Util.extend(extended, parent); + } + Class.prototype = extended; + return Class; +}; + +/** + * Property: isPrototype + * *Deprecated*. This is no longer needed and will be removed at 3.0. + */ +OpenLayers.Class.isPrototype = function () {}; + +/** + * APIFunction: OpenLayers.create + * *Deprecated*. Old method to create an OpenLayers style class. Use the + * constructor instead. + * + * Returns: + * An OpenLayers class + */ +OpenLayers.Class.create = function() { + return function() { + if (arguments && arguments[0] != OpenLayers.Class.isPrototype) { + this.initialize.apply(this, arguments); + } + }; +}; + + +/** + * APIFunction: inherit + * *Deprecated*. Old method to inherit from one or more OpenLayers style + * classes. Use the constructor instead. + * + * Parameters: + * class - One or more classes can be provided as arguments + * + * Returns: + * An object prototype + */ +OpenLayers.Class.inherit = function () { + var superClass = arguments[0]; + var proto = new superClass(OpenLayers.Class.isPrototype); + for (var i=1, len=arguments.length; i