API Docs for: 1.4.0
Show:

File: src\utils\Common.ts

/**
* Utils is a space that holds a wide varity of useful methods.
*
* @module Kiwi
* @submodule Utils
* @main Utils
*/

module Kiwi.Utils {

	/**
	* Methods to assist in working with Structs.
	* A lot of the functions in this class are Copyright 2012 Mauricio Santos and used with permission.
	* His work is licensed under the Apache License, Version 2.0 (the "License")
	*
	* @class Common
	* @namespace Kiwi.Utils
	* @static
	*
	* @author Mauricio Santos
	*/
	export class Common {

		/**
		* Default function to compare element order.
		* @method defaultCompare
		* @param {Any} a.
		* @param {Any} b.
		* @return {Number}
		* @static
		*/
		public static defaultCompare(a, b) {

			if (a < b)
			{
				return -1;
			}
			else if (a === b)
			{
				return 0;
			}
			else
			{
				return 1;
			}

		}

		/**
		* The type of object that this is.
		* @method objType
		* @return {String} "Common"
		* @public
		*/
		public objType() {
			return "Common";
		}

		/**
		* Default function to test equality.
		* @method defaultEquals
		* @param {Any} a
		* @param {Any} b
		* @return {boolean}
		* @static
		* @public
		*/
		public static defaultEquals(a, b) {

			return a === b;

		}

		/**
		* Default function to convert an object to a string.
		* @method defaultToString
		* @param item {Any}
		* @return {Any}
		* @static
		* @public
		*/
		public static defaultToString(item) {

			if (item === null)
			{
				return 'KIWI_NULL';
			}
			else if (Kiwi.Utils.Common.isUndefined(item))
			{
				return 'KIWI_UNDEFINED';
			}
			else if (Kiwi.Utils.Common.isString(item))
			{
				return item;
			}
			else
			{
				return item.toString();
			}

		}

		/**
		* Returns a boolean indicating whether x is between two parameters passed.
		*
		* @method isBetween
		* @param x {Number} The values to be checked
		* @param min {Number} The minimum value 
		* @param max {Number} The maximum value
		* @return {Boolean} 
		* @static
		* @public
		*/
		public static isBetween(x, min, max):boolean {

			return (x > min && x < max);

		}

		/**
		* Checks if the given argument is a function.
		* @method isFunction
		* @param {Any} func.
		* @return {boolean}
		* @static
		* @public
		*/
		public static isFunction(func) {

			return (typeof func) === 'function';

		}

		/**
		* Checks if the given value is numeric.
		* @method isNumeric
		* @param value {Any}
		* @return {Boolean}
		* @static
		* @public
		*/
		public static isNumeric(value) {

			return !isNaN(value);

		}

		/**
		* Checks if the given argument is undefined.
		* @method isUndefined
		* @param {Any} obj
		* @return {boolean}
		* @static
		* @public
		*/
		public static isUndefined(obj) {

			return (typeof obj) === 'undefined';

		}

		/**
		* Checks if the given argument is a string.
		* @method isString
		* @param {Any} obj
		* @return {boolean}
		* @static
		* @public
		*/
		public static isString(obj) {

			return Object.prototype.toString.call(obj) === '[object String]';

		}

		/**
		* Checks if the given argument is a array.
		* @method isArray
		* @param {Any} obj
		* @return {boolean}
		* @static
		* @public
		*/
		public static isArray(obj) {

			return Object.prototype.toString.call(obj) === "[object Array]";

		}

		/**
		* Checks if the given argument is an object.
		* @method isObject 
		* @param {Any} obj
		* @return {boolean}
		* @static
		* @public
		*/
		public static isObject(obj) {
			return Object.prototype.toString.call(obj) === "[object Object]";
		}

		/**
		* Reverses a compare function.
		* @method reverseCompareFunction
		* @param {Any} compareFunction
		* @return {Number}
		* @static
		* @public
		*/
		public static reverseCompareFunction(compareFunction) {

			if (!Kiwi.Utils.Common.isFunction(compareFunction))
			{
				return function (a, b) {
					if (a < b)
					{
						return 1;
					}
					else if (a === b)
					{
						return 0;
					}
					else
					{
						return -1;
					}
				};
			}
			else
			{
				return function (d, v) {
					return compareFunction(d, v) * -1;
				};
			}

		}

		/**
		* Returns an equal function given a compare function.
		* @method compareToEquals
		* @param {Any} compareFunction
		* @return {boolean}
		* @static
		* @public
		*/
		public static compareToEquals(compareFunction) {

			return function (a, b) {
				return compareFunction(a, b) === 0;
			};

		}

		/**
		* Shuffles the contents of an array given into a random order.
		* @method shuffleArray
		* @param array {Any}
		* @return {Any} What you passed but the with the contents in a new order.
		* @static
		* @public
		*/
		public static shuffleArray(array) {

			for (var i = array.length - 1; i > 0; i--)
			{
				var j = Math.floor(Math.random() * (i + 1));
				var temp = array[i];
				array[i] = array[j];
				array[j] = temp;
			}

			return array;

		}

		/**
		* An array containing all of the base2sizes that are allowed.
		* This is used when creating a new TextureAtlas/or resizing a Image to be rendered in WebGL.
		* @property base2Sizes
		* @type number[]
		* @public
		* @static
		*/
		public static base2Sizes: number[] = [2, 4, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096];

		/**
		* A method that checks to see if an Image or Canvas that is passed has base2 proportions. 
		* If it doesn't the image is created on a Canvas and that Canvas is returned.
		* Used mainly when creating TextureAtlases for WebGL. 
		* @method convertToBase2
		* @param imageFile {HTMLImageElement/HTMLCanvasElement} The image or canvas element that is to be converted into a base2size. 
		* @return {HTMLImageElement/HTMLCanvasElement} The image that was passed (if it was already at base2 dimensions) or a new canvas element if it wasn't.
		* @static
		* @public
		*/
		public static convertToBase2(image: any): any {
			
			//Get the width/height
			var width = image.width;
			var height = image.height

			//Check to see if the width is base2
			if (this.base2Sizes.indexOf(width) == -1) {
				var i = 0;
				while (width > this.base2Sizes[i]) i++;
				width = this.base2Sizes[i];
			}

			//Check to see if the height is base2
			if (this.base2Sizes.indexOf(height) == -1) {
				var i = 0;
				while (height > this.base2Sizes[i]) i++;
				height = this.base2Sizes[i];
			}


			//If either of them did not have a base2 size then create a canvas and create a new canvas.
			if (image.width !== width || image.height !== height) {

				//Is it already a canvas?
				var canvas = document.createElement('canvas');
				canvas.width = width;
				canvas.height = height;
				canvas.getContext("2d").drawImage(image, 0, 0);

				return canvas;
			}

			return image;
		}

	}

}