~andreserl/maas/packaging_precise_rebase

« back to all changes in this revision

Viewing changes to debian/extras/jslibs/yui/datatype-number-format/datatype-number-format.js

  • Committer: Andres Rodriguez
  • Date: 2013-03-20 18:12:30 UTC
  • mfrom: (145.2.22 precise.sru)
  • Revision ID: andreserl@ubuntu.com-20130320181230-6l5guc0nhlv2z4p7
Re-base againts latest quantal released branch towards SRU

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
YUI 3.5.1 (build 22)
 
3
Copyright 2012 Yahoo! Inc. All rights reserved.
 
4
Licensed under the BSD License.
 
5
http://yuilibrary.com/license/
 
6
*/
 
7
YUI.add('datatype-number-format', function(Y) {
 
8
 
 
9
/**
 
10
 * Number submodule.
 
11
 *
 
12
 * @module datatype
 
13
 * @submodule datatype-number
 
14
 */
 
15
 
 
16
/**
 
17
 * Format number submodule.
 
18
 *
 
19
 * @module datatype
 
20
 * @submodule datatype-number-format
 
21
 */
 
22
 
 
23
/**
 
24
 * DataType.Number provides a set of utility functions to operate against Number objects.
 
25
 *
 
26
 * @class DataType.Number
 
27
 * @static
 
28
 */
 
29
var LANG = Y.Lang;
 
30
 
 
31
Y.mix(Y.namespace("DataType.Number"), {
 
32
     /**
 
33
     * Takes a Number and formats to string for display to user.
 
34
     *
 
35
     * @method format
 
36
     * @param data {Number} Number.
 
37
     * @param config {Object} (Optional) Optional configuration values:
 
38
     *  <dl>
 
39
     *   <dt>prefix {HTML}</dd>
 
40
     *   <dd>String prepended before each number, like a currency designator "$"</dd>
 
41
     *   <dt>decimalPlaces {Number}</dd>
 
42
     *   <dd>Number of decimal places to round. Must be a number 0 to 20.</dd>
 
43
     *   <dt>decimalSeparator {HTML}</dd>
 
44
     *   <dd>Decimal separator</dd>
 
45
     *   <dt>thousandsSeparator {HTML}</dd>
 
46
     *   <dd>Thousands separator</dd>
 
47
     *   <dt>suffix {HTML}</dd>
 
48
     *   <dd>String appended after each number, like " items" (note the space)</dd>
 
49
     *  </dl>
 
50
     * @return {HTML} Formatted number for display. Note, the following values
 
51
     * return as "": null, undefined, NaN, "".
 
52
     */
 
53
    format: function(data, config) {
 
54
        if(LANG.isNumber(data)) {
 
55
            config = config || {};
 
56
 
 
57
            var isNeg = (data < 0),
 
58
                output = data + "",
 
59
                decPlaces = config.decimalPlaces,
 
60
                decSep = config.decimalSeparator || ".",
 
61
                thouSep = config.thousandsSeparator,
 
62
                decIndex,
 
63
                newOutput, count, i;
 
64
 
 
65
            // Decimal precision
 
66
            if(LANG.isNumber(decPlaces) && (decPlaces >= 0) && (decPlaces <= 20)) {
 
67
                // Round to the correct decimal place
 
68
                output = data.toFixed(decPlaces);
 
69
            }
 
70
 
 
71
            // Decimal separator
 
72
            if(decSep !== "."){
 
73
                output = output.replace(".", decSep);
 
74
            }
 
75
 
 
76
            // Add the thousands separator
 
77
            if(thouSep) {
 
78
                // Find the dot or where it would be
 
79
                decIndex = output.lastIndexOf(decSep);
 
80
                decIndex = (decIndex > -1) ? decIndex : output.length;
 
81
                // Start with the dot and everything to the right
 
82
                newOutput = output.substring(decIndex);
 
83
                // Working left, every third time add a separator, every time add a digit
 
84
                for (count = 0, i=decIndex; i>0; i--) {
 
85
                    if ((count%3 === 0) && (i !== decIndex) && (!isNeg || (i > 1))) {
 
86
                        newOutput = thouSep + newOutput;
 
87
                    }
 
88
                    newOutput = output.charAt(i-1) + newOutput;
 
89
                    count++;
 
90
                }
 
91
                output = newOutput;
 
92
            }
 
93
 
 
94
            // Prepend prefix
 
95
            output = (config.prefix) ? config.prefix + output : output;
 
96
 
 
97
            // Append suffix
 
98
            output = (config.suffix) ? output + config.suffix : output;
 
99
 
 
100
            return output;
 
101
        }
 
102
        // Not a Number, just return as string
 
103
        else {
 
104
            return (LANG.isValue(data) && data.toString) ? data.toString() : "";
 
105
        }
 
106
    }
 
107
});
 
108
 
 
109
 
 
110
}, '3.5.1' );