4 * Copyright(c) 2006-2007, Ext JS, LLC.
6 * Originally Released Under LGPL - original licence link has changed is not relivant.
9 * <script type="text/javascript">
13 * @class Roo.util.Format
14 * Reusable data formatting functions
17 Roo.util.Format = function(){
18 var trimRe = /^\s+|\s+$/g;
21 * Truncate a string and add an ellipsis ('...') to the end if it exceeds the specified length
22 * @param {String} value The string to truncate
23 * @param {Number} length The maximum length to allow before truncating
24 * @return {String} The converted text
26 ellipsis : function(value, len){
27 if(value && value.length > len){
28 return value.substr(0, len-3)+"...";
34 * Checks a reference and converts it to empty string if it is undefined
35 * @param {Mixed} value Reference to check
36 * @return {Mixed} Empty string if converted, otherwise the original value
38 undef : function(value){
39 return typeof value != "undefined" ? value : "";
43 * Convert certain characters (&, <, >, and ') to their HTML character equivalents for literal display in web pages.
44 * @param {String} value The string to encode
45 * @return {String} The encoded text
47 htmlEncode : function(value){
48 return !value ? value : String(value).replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """);
52 * Convert certain characters (&, <, >, and ') from their HTML character equivalents.
53 * @param {String} value The string to decode
54 * @return {String} The decoded text
56 htmlDecode : function(value){
57 return !value ? value : String(value).replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, '"');
61 * Trims any whitespace from either side of a string
62 * @param {String} value The text to trim
63 * @return {String} The trimmed text
65 trim : function(value){
66 return String(value).replace(trimRe, "");
70 * Returns a substring from within an original string
71 * @param {String} value The original text
72 * @param {Number} start The start index of the substring
73 * @param {Number} length The length of the substring
74 * @return {String} The substring
76 substr : function(value, start, length){
77 return String(value).substr(start, length);
81 * Converts a string to all lower case letters
82 * @param {String} value The text to convert
83 * @return {String} The converted text
85 lowercase : function(value){
86 return String(value).toLowerCase();
90 * Converts a string to all upper case letters
91 * @param {String} value The text to convert
92 * @return {String} The converted text
94 uppercase : function(value){
95 return String(value).toUpperCase();
99 * Converts the first character only of a string to upper case
100 * @param {String} value The text to convert
101 * @return {String} The converted text
103 capitalize : function(value){
104 return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
108 call : function(value, fn){
109 if(arguments.length > 2){
110 var args = Array.prototype.slice.call(arguments, 2);
113 return /** eval:var:value */ eval(fn).apply(window, args);
115 /** eval:var:value */
116 return /** eval:var:value */ eval(fn).call(window, value);
122 * safer version of Math.toFixed..??/
123 * @param {Number/String} value The numeric value to format
124 * @param {Number/String} value Decimal places
125 * @return {String} The formatted currency string
127 toFixed : function(v, n)
129 // why not use to fixed - precision is buggered???
131 return Math.round(v-0);
133 var fact = Math.pow(10,n+1);
134 v = (Math.round((v-0)*fact))/fact;
135 var z = (''+fact).substring(2);
136 if (v == Math.floor(v)) {
137 return Math.floor(v) + '.' + z;
140 // now just padd decimals..
141 var ps = String(v).split('.');
142 var fd = (ps[1] + z);
143 var r = fd.substring(0,n);
144 var rm = fd.substring(n);
146 return ps[0] + '.' + r;
148 r*=1; // turn it into a number;
150 if (String(r).length != n) {
153 r = String(r).substring(1); // chop the end off.
156 return ps[0] + '.' + r;
161 * Format a number as US currency
162 * @param {Number/String} value The numeric value to format
163 * @return {String} The formatted currency string
165 usMoney : function(v){
166 return '$' + Roo.util.Format.number(v);
171 * eventually this should probably emulate php's number_format
172 * @param {Number/String} value The numeric value to format
173 * @param {Number} decimals number of decimal places
174 * @return {String} The formatted currency string
176 number : function(v, decimals, thousandsDelimiter = ',')
178 // multiply and round.
179 decimals = typeof(decimals) == 'undefined' ? 2 : decimals;
180 var mul = Math.pow(10, decimals);
181 var zero = String(mul).substring(1);
182 v = (Math.round((v-0)*mul))/mul;
184 // if it's '0' number.. then
186 //v = (v == Math.floor(v)) ? v + "." + zero : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
188 var ps = v.split('.');
191 var r = /(\d+)(\d{3})/;
193 while (r.test(whole)) {
194 whole = whole.replace(r, '$1' + thousandsDelimiter + '$2');
200 (decimals ? ('.'+ ps[1] + zero.substring(ps[1].length)) : '') :
201 // does not have decimals
202 (decimals ? ('.' + zero) : '');
209 * Parse a value into a formatted date using the specified format pattern.
210 * @param {Mixed} value The value to format
211 * @param {String} format (optional) Any valid date format string (defaults to 'm/d/Y')
212 * @return {String} The formatted date string
214 date : function(v, format){
218 if(!(v instanceof Date)){
219 v = new Date(Date.parse(v));
221 return v.dateFormat(format || Roo.util.Format.defaults.date);
225 * Returns a date rendering function that can be reused to apply a date format multiple times efficiently
226 * @param {String} format Any valid date format string
227 * @return {Function} The date formatting function
229 dateRenderer : function(format){
231 return Roo.util.Format.date(v, format);
236 stripTagsRE : /<\/?[^>]+>/gi,
239 * Strips all HTML tags
240 * @param {Mixed} value The text from which to strip tags
241 * @return {String} The stripped text
243 stripTags : function(v){
244 return !v ? v : String(v).replace(this.stripTagsRE, "");
248 Roo.util.Format.defaults = {