datatype-number-debug.js revision a117fec44ca101d02a635021dea473c2bd341fb5
bf864749b438b8bf39e7c70164be096da9894bdbDav GlassYUI.add('datatype-number-parse', function(Y) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glassvar LANG = Y.Lang;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass/**
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * Parse number submodule.
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass *
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @module datatype
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @submodule datatype-number-parse
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @for DataType.Number
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass */
bf864749b438b8bf39e7c70164be096da9894bdbDav GlassY.mix(Y.namespace("DataType.Number"), {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass /**
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * Converts data to type Number.
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass *
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @method parse
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @param data {String | Number | Boolean} Data to convert. The following
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * values return as null: null, undefined, NaN, "".
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @return {Number} A number, or null.
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass */
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass parse: function(data) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass var number = (data === null) ? data : +data;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass if(LANG.isNumber(number)) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass return number;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass else {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass Y.log("Could not parse data " + Y.dump(data) + " to type Number", "warn", "datatype-number");
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass return null;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass});
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass// Add Parsers shortcut
bf864749b438b8bf39e7c70164be096da9894bdbDav GlassY.namespace("Parsers").number = Y.DataType.Number.parse;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass}, '@VERSION@' );
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav GlassYUI.add('datatype-number-format', function(Y) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass/**
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * DataType.Number provides a set of utility functions to operate against Number objects.
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass *
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @class DataType.Number
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @static
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass */
bf864749b438b8bf39e7c70164be096da9894bdbDav Glassvar LANG = Y.Lang;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass/**
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * Format number submodule.
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass *
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @module datatype
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @submodule datatype-number-format
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass */
bf864749b438b8bf39e7c70164be096da9894bdbDav GlassY.mix(Y.namespace("DataType.Number"), {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass /**
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * Takes a Number and formats to string for display to user.
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass *
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @method format
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @param data {Number} Number.
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @param config {Object} (Optional) Optional configuration values:
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dl>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dt>prefix {String}</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dd>String prepended before each number, like a currency designator "$"</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dt>decimalPlaces {Number}</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dd>Number of decimal places to round. Must be a number 0 to 20.</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dt>decimalSeparator {String}</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dd>Decimal separator</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dt>thousandsSeparator {String}</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dd>Thousands separator</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dt>suffix {String}</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * <dd>String appended after each number, like " items" (note the space)</dd>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * </dl>
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * @return {String} Formatted number for display. Note, the following values
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass * return as "": null, undefined, NaN, "".
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass */
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass format: function(data, config) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass if(LANG.isNumber(data)) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass config = config || {};
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass var isNeg = (data < 0),
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass output = data + "",
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass decPlaces = config.decimalPlaces,
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass decSep = config.decimalSeparator || ".",
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass thouSep = config.thousandsSeparator,
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass decIndex,
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass newOutput, count, i;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Decimal precision
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass if(LANG.isNumber(decPlaces) && (decPlaces >= 0) && (decPlaces <= 20)) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Round to the correct decimal place
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass output = data.toFixed(decPlaces);
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Decimal separator
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass if(decSep !== "."){
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass output = output.replace(".", decSep);
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Add the thousands separator
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass if(thouSep) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Find the dot or where it would be
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass decIndex = output.lastIndexOf(decSep);
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass decIndex = (decIndex > -1) ? decIndex : output.length;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Start with the dot and everything to the right
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass newOutput = output.substring(decIndex);
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Working left, every third time add a separator, every time add a digit
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass for (count = 0, i=decIndex; i>0; i--) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass if ((count%3 === 0) && (i !== decIndex) && (!isNeg || (i > 1))) {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass newOutput = thouSep + newOutput;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass newOutput = output.charAt(i-1) + newOutput;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass count++;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass output = newOutput;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Prepend prefix
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass output = (config.prefix) ? config.prefix + output : output;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Append suffix
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass output = (config.suffix) ? output + config.suffix : output;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass return output;
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass // Not a Number, just return as string
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass else {
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass Y.log("Could not format data " + Y.dump(data) + " from type Number", "warn", "datatype-number");
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass return (LANG.isValue(data) && data.toString) ? data.toString() : "";
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass }
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass});
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass}, '@VERSION@' );
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav GlassYUI.add('datatype-number', function(Y){}, '@VERSION@' ,{use:['datatype-number-parse', 'datatype-number-format']});
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass
bf864749b438b8bf39e7c70164be096da9894bdbDav Glass