Spaces:
Sleeping
Sleeping
/** | |
* @fileoverview This file is to be used for testing the JSDoc parser | |
* It is not intended to be an example of good JavaScript OO-programming, | |
* nor is it intended to fulfill any specific purpose apart from | |
* demonstrating the functionality of the | |
* <a href='http://sourceforge.net/projects/jsdoc'>JSDoc</a> parser | |
* | |
* @author Gabriel Reid gab_reid@users.sourceforge.net | |
* @version 0.1 | |
*/ | |
/** | |
* Construct a new Shape object. | |
* @class This is the basic Shape class. | |
* It can be considered an abstract class, even though no such thing | |
* really existing in JavaScript | |
* @constructor | |
* @throws MemoryException if there is no more memory | |
* @throws GeneralShapeException rarely (if ever) | |
* @return {Shape|Coordinate} A new shape. | |
*/ | |
function Shape(){ | |
/** | |
* This is an example of a function that is not given as a property | |
* of a prototype, but instead it is assigned within a constructor. | |
* For inner functions like this to be picked up by the parser, the | |
* function that acts as a constructor <b>must</b> be denoted with | |
* the <b>@constructor</b> tag in its comment. | |
* @type String | |
*/ | |
this.getClassName = function(){ | |
return "Shape"; | |
} | |
/** | |
* This is an inner method, just used here as an example | |
* @since version 0.5 | |
* @author Sue Smart | |
*/ | |
function addReference(){ | |
// Do nothing... | |
} | |
} | |
/** | |
* Create a new Hexagon instance. | |
* @extends Shape | |
* @class Hexagon is a class that is a <i>logical</i> sublcass of | |
* {@link Shape} (thanks to the <code>@extends</code> tag), but in | |
* reality it is completely unrelated to Shape. | |
* @param {int} sideLength The length of one side for the new Hexagon | |
* @example | |
* var h = new Hexagon(2); | |
* @example | |
* if (hasHex) { | |
* hex = new Hexagon(5); | |
* color = hex.getColor(); | |
* } | |
*/ | |
function Hexagon(sideLength) { | |
} | |
/** | |
* This is an unattached (static) function that adds two integers together. | |
* @param {int} One The first number to add | |
* @param {int} Two The second number to add | |
* @author Gabriel Reid | |
* @deprecated So you shouldn't use it anymore! Use {@link Shape#getClassName} instead. | |
*/ | |
function Add(One, Two){ | |
return One + Two; | |
} | |
/** | |
* The color of this shape | |
* @type Color | |
*/ | |
Shape.prototype.color = null; | |
/** | |
* The border of this shape. | |
* @field | |
* @type int | |
*/ | |
Shape.prototype.border = function(){return border;}; | |
/* | |
* These are all the instance method implementations for Shape | |
*/ | |
/** | |
* Get the coordinates of this shape. It is assumed that we're always talking | |
* about shapes in a 2D location here. | |
* @requires The {@link Shape} class | |
* @returns A Coordinate object representing the location of this Shape | |
* @type Coordinate[] | |
*/ | |
Shape.prototype.getCoords = function(){ | |
return this.coords; | |
} | |
/** | |
* Get the color of this shape. | |
* @see #setColor | |
* @see The <a href="http://example.com">Color</a> library. | |
* @link Shape | |
* @type Color | |
*/ | |
Shape.prototype.getColor = function(){ | |
return this.color; | |
} | |
/** | |
* Set the coordinates for this Shape | |
* @param {Coordinate} coordinates The coordinates to set for this Shape | |
*/ | |
Shape.prototype.setCoords = function(coordinates){ | |
this.coords = coordinates; | |
} | |
/** | |
* Set the color for this Shape | |
* @param {Color} color The color to set for this Shape | |
* @param other There is no other param, but it can still be documented if | |
* optional parameters are used | |
* @throws NonExistantColorException (no, not really!) | |
* @see #getColor | |
*/ | |
Shape.prototype.setColor = function(color){ | |
this.color = color; | |
} | |
/** | |
* Clone this shape | |
* @returns A copy of this shape | |
* @type Shape | |
* @author Gabriel Reid | |
*/ | |
Shape.prototype.clone = function(){ | |
return new Shape(); | |
} | |
/** | |
* Create a new Rectangle instance. | |
* @class A basic rectangle class, inherits from Shape. | |
* This class could be considered a concrete implementation class | |
* @constructor | |
* @param {int} width The optional width for this Rectangle | |
* @param {int} height Thie optional height for this Rectangle | |
* @author Gabriel Reid | |
* @see Shape is the base class for this | |
* @augments Shape | |
* @hilited | |
*/ | |
function Rectangle(width, // This is the width | |
height // This is the height | |
){ | |
if (width){ | |
this.width = width; | |
if (height){ | |
this.height = height; | |
} | |
} | |
} | |
/* Inherit from Shape */ | |
Rectangle.prototype = new Shape(); | |
/** | |
* Value to represent the width of the Rectangle. | |
* <br>Text in <b>bold</b> and <i>italic</i> and a | |
* link to <a href="http://sf.net">SourceForge</a> | |
* @private | |
* @type int | |
*/ | |
Rectangle.prototype.width = 0; | |
/** | |
* Value to represent the height of the Rectangle | |
* @private | |
* @type int | |
*/ | |
Rectangle.prototype.height = 0; | |
/** | |
* Get the type of this object. | |
* @type String | |
*/ | |
Rectangle.prototype.getClassName= function(){ | |
return "Rectangle"; | |
} | |
/** | |
* Get the value of the width for the Rectangle | |
* @type int | |
* @see Rectangle#setWidth | |
*/ | |
Rectangle.prototype.getWidth = function(){ | |
return this.width; | |
} | |
/** | |
* Get the value of the height for the Rectangle. | |
* Another getter is the {@link Shape#getColor} method in the | |
* {@link Shape} base class. | |
* @return The height of this Rectangle | |
* @type int | |
* @see Rectangle#setHeight | |
*/ | |
Rectangle.prototype.getHeight = function(){ | |
return this.height; | |
} | |
/** | |
* Set the width value for this Rectangle. | |
* @param {int} width The width value to be set | |
* @see #setWidth | |
*/ | |
Rectangle.prototype.setWidth = function(width){ | |
this.width = width; | |
} | |
/** | |
* Set the height value for this Rectangle. | |
* @param {int} height The height value to be set | |
* @see #getHeight | |
*/ | |
Rectangle.prototype.setHeight = function(height){ | |
this.height = height; | |
} | |
/** | |
* Get the value for the total area of this Rectangle | |
* @return total area of this Rectangle | |
* @type int | |
*/ | |
Rectangle.prototype.getArea = function(){ | |
return width * height; | |
} | |
/** | |
* Create a new Square instance. | |
* @class A Square is a subclass of {@link Rectangle} | |
* @param {int} width The optional width for this Rectangle | |
* @param {int} height The optional height for this Rectangle | |
* @augments Rectangle | |
*/ | |
function Square(width, height){ | |
if (width){ | |
this.width = width; | |
if (height){ | |
this.height = height; | |
} | |
} | |
} | |
/* Square is a subclass of Rectangle */ | |
Square.prototype = new Rectangle(); | |
/** | |
* Set the width value for this Shape. | |
* @param {int} width The width value to be set | |
* @see #getWidth | |
*/ | |
Square.prototype.setWidth = function(width){ | |
this.width = this.height = width; | |
} | |
/** | |
* Set the height value for this Shape | |
* Sets the {@link Rectangle#height} attribute in the Rectangle. | |
* @param {int} height The height value to be set | |
*/ | |
Square.prototype.setHeight = function(height){ | |
this.height = this.width = height; | |
} | |
/** | |
* Create a new Circle instance based on a radius. | |
* @class Circle class is another subclass of Shape | |
* @extends Shape | |
* @param {int} radius The optional radius of this {@link Circle } | |
* @mixin Square.prototype.setWidth as this.setDiameter | |
*/ | |
function Circle(radius){ | |
if (radius) { | |
/** The radius of the this Circle. */ | |
this.radius = radius; | |
} | |
} | |
/* Circle inherits from {@link Shape} */ | |
Circle.prototype = new Shape(); | |
/** | |
* The radius value for this Circle | |
* @private | |
* @type int | |
*/ | |
Circle.prototype.radius = 0; | |
/** | |
* A very simple class (static) field that is also a constant | |
* @final | |
* @type float | |
*/ | |
Circle.PI = 3.14; | |
/** | |
* Get the radius value for this Circle | |
* @type int | |
* @see #setRadius | |
*/ | |
Circle.prototype.getRadius = function(){ | |
return this.radius; | |
} | |
/** | |
* Set the radius value for this Circle | |
* @param {int} radius The {@link Circle#radius} value to set | |
* @see #getRadius | |
*/ | |
Circle.prototype.setRadius = function(radius){ | |
this.radius = radius; | |
} | |
/** | |
* An example of a class (static) method that acts as a factory for Circle | |
* objects. Given a radius value, this method creates a new Circle. | |
* @param {int} radius The radius value to use for the new Circle. | |
* @type Circle | |
*/ | |
Circle.createCircle = function(radius){ | |
return new Circle(radius); | |
} | |
/** | |
* Create a new Coordinate instance based on x and y grid data. | |
* @class Coordinate is a class that can encapsulate location information. | |
* @param {int} [x=0] The optional x portion of the Coordinate | |
* @param {int} [y=0] The optinal y portion of the Coordinate | |
*/ | |
function Coordinate(x, y){ | |
if (x){ | |
this.x = x; | |
if (y){ | |
this.y = y; | |
} | |
} | |
} | |
/** | |
* The x portion of the Coordinate | |
* @type int | |
* @see #getX | |
* @see #setX | |
*/ | |
Coordinate.prototype.x = 0; | |
/** | |
* The y portion of the Coordinate | |
* @type int | |
* @see #getY | |
* @see #setY | |
*/ | |
Coordinate.prototype.y = 0; | |
/** | |
* Gets the x portion of the Coordinate. | |
* @type int | |
* @see #setX | |
*/ | |
Coordinate.prototype.getX = function(){ | |
return this.x; | |
} | |
/** | |
* Get the y portion of the Coordinate. | |
* @type int | |
* @see #setY | |
*/ | |
Coordinate.prototype.getY = function(){ | |
return this.y; | |
} | |
/** | |
* Sets the x portion of the Coordinate. | |
* @param {int} x The x value to set | |
* @see #getX | |
*/ | |
Coordinate.prototype.setX = function(x){ | |
this.x = x; | |
} | |
/** | |
* Sets the y portion of the Coordinate. | |
* @param {int} y The y value to set | |
* @see #getY | |
*/ | |
Coordinate.prototype.setY = function(y){ | |
this.y = y; | |
} | |
/** | |
* @class This class exists to demonstrate the assignment of a class prototype | |
* as an anonymous block. | |
*/ | |
function ShapeFactory(){ | |
} | |
ShapeFactory.prototype = { | |
/** | |
* Creates a new {@link Shape} instance. | |
* @return A new {@link Shape} | |
* @type Shape | |
*/ | |
createShape: function(){ | |
return new Shape(); | |
} | |
} | |
/** | |
* An example of a singleton class | |
* @param ... Arguments represent {@link coordinate}s in the shape. | |
* @constructor | |
*/ | |
MySingletonShapeFactory = function(){ | |
/** | |
* Get the next {@link Shape} | |
* @type Shape | |
* @return A new {@link Shape} | |
*/ | |
this.getShape = function(){ | |
return null; | |
} | |
} | |
/** | |
* Create a new Foo instance. | |
* @class This is the Foo class. It exists to demonstrate 'nested' classes. | |
* @constructor | |
* @see Foo.Bar | |
*/ | |
function Foo(){} | |
/** | |
* Creates a new instance of Bar. | |
* @class This class exists to demonstrate 'nested' classes. | |
* @constructor | |
* @see Foo.Bar | |
*/ | |
function Bar(){} | |
/** | |
* Nested class | |
* @constructor | |
*/ | |
Foo.Bar = function(){ | |
/** The x. */ this.x = 2; | |
} | |
Foo.Bar.prototype = new Bar(); | |
/** The y. */ | |
Foo.Bar.prototype.y = '3'; | |