| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-Number'>/**
 
- </span> * @class Ext.Number
 
-  *
 
-  * A collection of useful static methods to deal with numbers
 
-  * @singleton
 
-  */
 
- Ext.Number = new function() {
 
-     var me = this,
 
-         isToFixedBroken = (0.9).toFixed() !== '1',
 
-         math = Math;
 
-     Ext.apply(this, {
 
- <span id='Ext-Number-method-constrain'>        /**
 
- </span>         * Checks whether or not the passed number is within a desired range.  If the number is already within the
 
-          * range it is returned, otherwise the min or max value is returned depending on which side of the range is
 
-          * exceeded. Note that this method returns the constrained value but does not change the current number.
 
-          * @param {Number} number The number to check
 
-          * @param {Number} min The minimum number in the range
 
-          * @param {Number} max The maximum number in the range
 
-          * @return {Number} The constrained value if outside the range, otherwise the current value
 
-          */
 
-         constrain: function(number, min, max) {
 
-             var x = parseFloat(number);
 
-             // Watch out for NaN in Chrome 18
 
-             // V8bug: http://code.google.com/p/v8/issues/detail?id=2056
 
-             // Operators are faster than Math.min/max. See http://jsperf.com/number-constrain
 
-             // ... and (x < Nan) || (x < undefined) == false
 
-             // ... same for (x > NaN) || (x > undefined)
 
-             // so if min or max are undefined or NaN, we never return them... sadly, this
 
-             // is not true of null (but even Math.max(-1,null)==0 and isNaN(null)==false)
 
-             return (x < min) ? min : ((x > max) ? max : x);
 
-         },
 
- <span id='Ext-Number-method-snap'>        /**
 
- </span>         * Snaps the passed number between stopping points based upon a passed increment value.
 
-          *
 
-          * The difference between this and {@link #snapInRange} is that {@link #snapInRange} uses the minValue
 
-          * when calculating snap points:
 
-          *
 
-          *     r = Ext.Number.snap(56, 2, 55, 65);        // Returns 56 - snap points are zero based
 
-          *
 
-          *     r = Ext.Number.snapInRange(56, 2, 55, 65); // Returns 57 - snap points are based from minValue
 
-          *
 
-          * @param {Number} value The unsnapped value.
 
-          * @param {Number} increment The increment by which the value must move.
 
-          * @param {Number} minValue The minimum value to which the returned value must be constrained. Overrides the increment.
 
-          * @param {Number} maxValue The maximum value to which the returned value must be constrained. Overrides the increment.
 
-          * @return {Number} The value of the nearest snap target.
 
-          */
 
-         snap : function(value, increment, minValue, maxValue) {
 
-             var m;
 
-             // If no value passed, or minValue was passed and value is less than minValue (anything < undefined is false)
 
-             // Then use the minValue (or zero if the value was undefined)
 
-             if (value === undefined || value < minValue) {
 
-                 return minValue || 0;
 
-             }
 
-             if (increment) {
 
-                 m = value % increment;
 
-                 if (m !== 0) {
 
-                     value -= m;
 
-                     if (m * 2 >= increment) {
 
-                         value += increment;
 
-                     } else if (m * 2 < -increment) {
 
-                         value -= increment;
 
-                     }
 
-                 }
 
-             }
 
-             return me.constrain(value, minValue,  maxValue);
 
-         },
 
- <span id='Ext-Number-method-snapInRange'>        /**
 
- </span>         * Snaps the passed number between stopping points based upon a passed increment value.
 
-          *
 
-          * The difference between this and {@link #snap} is that {@link #snap} does not use the minValue
 
-          * when calculating snap points:
 
-          *
 
-          *     r = Ext.Number.snap(56, 2, 55, 65);        // Returns 56 - snap points are zero based
 
-          *
 
-          *     r = Ext.Number.snapInRange(56, 2, 55, 65); // Returns 57 - snap points are based from minValue
 
-          *
 
-          * @param {Number} value The unsnapped value.
 
-          * @param {Number} increment The increment by which the value must move.
 
-          * @param {Number} [minValue=0] The minimum value to which the returned value must be constrained.
 
-          * @param {Number} [maxValue=Infinity] The maximum value to which the returned value must be constrained.
 
-          * @return {Number} The value of the nearest snap target.
 
-          */
 
-         snapInRange : function(value, increment, minValue, maxValue) {
 
-             var tween;
 
-             // default minValue to zero
 
-             minValue = (minValue || 0);
 
-             // If value is undefined, or less than minValue, use minValue
 
-             if (value === undefined || value < minValue) {
 
-                 return minValue;
 
-             }
 
-             // Calculate how many snap points from the minValue the passed value is.
 
-             if (increment && (tween = ((value - minValue) % increment))) {
 
-                 value -= tween;
 
-                 tween *= 2;
 
-                 if (tween >= increment) {
 
-                     value += increment;
 
-                 }
 
-             }
 
-             // If constraining within a maximum, ensure the maximum is on a snap point
 
-             if (maxValue !== undefined) {
 
-                 if (value > (maxValue = me.snapInRange(maxValue, increment, minValue))) {
 
-                     value = maxValue;
 
-                 }
 
-             }
 
-             return value;
 
-         },
 
- <span id='Ext-Number-method-toFixed'>        /**
 
- </span>         * Formats a number using fixed-point notation
 
-          * @param {Number} value The number to format
 
-          * @param {Number} precision The number of digits to show after the decimal point
 
-          */
 
-         toFixed: isToFixedBroken ? function(value, precision) {
 
-             precision = precision || 0;
 
-             var pow = math.pow(10, precision);
 
-             return (math.round(value * pow) / pow).toFixed(precision);
 
-         } : function(value, precision) {
 
-             return value.toFixed(precision);
 
-         },
 
- <span id='Ext-Number-method-from'>        /**
 
- </span>         * Validate that a value is numeric and convert it to a number if necessary. Returns the specified default value if
 
-          * it is not.
 
-     Ext.Number.from('1.23', 1); // returns 1.23
 
-     Ext.Number.from('abc', 1); // returns 1
 
-          * @param {Object} value
 
-          * @param {Number} defaultValue The value to return if the original value is non-numeric
 
-          * @return {Number} value, if numeric, defaultValue otherwise
 
-          */
 
-         from: function(value, defaultValue) {
 
-             if (isFinite(value)) {
 
-                 value = parseFloat(value);
 
-             }
 
-             return !isNaN(value) ? value : defaultValue;
 
-         },
 
- <span id='Ext-Number-method-randomInt'>        /**
 
- </span>         * Returns a random integer between the specified range (inclusive)
 
-          * @param {Number} from Lowest value to return.
 
-          * @param {Number} to Highst value to return.
 
-          * @return {Number} A random integer within the specified range.
 
-          */
 
-         randomInt: function (from, to) {
 
-            return math.floor(math.random() * (to - from + 1) + from);
 
-         }
 
-     });
 
- <span id='Ext-method-num'>    /**
 
- </span>     * @deprecated 4.0.0 Please use {@link Ext.Number#from} instead.
 
-      * @member Ext
 
-      * @method num
 
-      * @inheritdoc Ext.Number#from
 
-      */
 
-     Ext.num = function() {
 
-         return me.from.apply(this, arguments);
 
-     };
 
- };</pre>
 
- </body>
 
- </html>
 
 
  |