Format.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:13k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.1.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ /**
  2.  * @class Ext.util.Format
  3.  * Reusable data formatting functions
  4.  * @singleton
  5.  */
  6. Ext.util.Format = function(){
  7.     var trimRe = /^s+|s+$/g,
  8.         stripTagsRE = /</?[^>]+>/gi,
  9.         stripScriptsRe = /(?:<script.*?>)((n|r|.)*?)(?:</script>)/ig,
  10.         nl2brRe = /r?n/g;
  11.         
  12.     return {
  13.         /**
  14.          * Truncate a string and add an ellipsis ('...') to the end if it exceeds the specified length
  15.          * @param {String} value The string to truncate
  16.          * @param {Number} length The maximum length to allow before truncating
  17.          * @param {Boolean} word True to try to find a common work break
  18.          * @return {String} The converted text
  19.          */
  20.         ellipsis : function(value, len, word){
  21.             if(value && value.length > len){
  22.                 if(word){
  23.                     var vs = value.substr(0, len - 2),
  24.                         index = Math.max(vs.lastIndexOf(' '), vs.lastIndexOf('.'), vs.lastIndexOf('!'), vs.lastIndexOf('?'));
  25.                     if(index == -1 || index < (len - 15)){
  26.                         return value.substr(0, len - 3) + "...";
  27.                     }else{
  28.                         return vs.substr(0, index) + "...";
  29.                     }
  30.                 } else{
  31.                     return value.substr(0, len - 3) + "...";
  32.                 }
  33.             }
  34.             return value;
  35.         },
  36.         /**
  37.          * Checks a reference and converts it to empty string if it is undefined
  38.          * @param {Mixed} value Reference to check
  39.          * @return {Mixed} Empty string if converted, otherwise the original value
  40.          */
  41.         undef : function(value){
  42.             return value !== undefined ? value : "";
  43.         },
  44.         /**
  45.          * Checks a reference and converts it to the default value if it's empty
  46.          * @param {Mixed} value Reference to check
  47.          * @param {String} defaultValue The value to insert of it's undefined (defaults to "")
  48.          * @return {String}
  49.          */
  50.         defaultValue : function(value, defaultValue){
  51.             return value !== undefined && value !== '' ? value : defaultValue;
  52.         },
  53.         /**
  54.          * Convert certain characters (&, <, >, and ') to their HTML character equivalents for literal display in web pages.
  55.          * @param {String} value The string to encode
  56.          * @return {String} The encoded text
  57.          */
  58.         htmlEncode : function(value){
  59.             return !value ? value : String(value).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
  60.         },
  61.         /**
  62.          * Convert certain characters (&, <, >, and ') from their HTML character equivalents.
  63.          * @param {String} value The string to decode
  64.          * @return {String} The decoded text
  65.          */
  66.         htmlDecode : function(value){
  67.             return !value ? value : String(value).replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"').replace(/&amp;/g, "&");
  68.         },
  69.         /**
  70.          * Trims any whitespace from either side of a string
  71.          * @param {String} value The text to trim
  72.          * @return {String} The trimmed text
  73.          */
  74.         trim : function(value){
  75.             return String(value).replace(trimRe, "");
  76.         },
  77.         /**
  78.          * Returns a substring from within an original string
  79.          * @param {String} value The original text
  80.          * @param {Number} start The start index of the substring
  81.          * @param {Number} length The length of the substring
  82.          * @return {String} The substring
  83.          */
  84.         substr : function(value, start, length){
  85.             return String(value).substr(start, length);
  86.         },
  87.         /**
  88.          * Converts a string to all lower case letters
  89.          * @param {String} value The text to convert
  90.          * @return {String} The converted text
  91.          */
  92.         lowercase : function(value){
  93.             return String(value).toLowerCase();
  94.         },
  95.         /**
  96.          * Converts a string to all upper case letters
  97.          * @param {String} value The text to convert
  98.          * @return {String} The converted text
  99.          */
  100.         uppercase : function(value){
  101.             return String(value).toUpperCase();
  102.         },
  103.         /**
  104.          * Converts the first character only of a string to upper case
  105.          * @param {String} value The text to convert
  106.          * @return {String} The converted text
  107.          */
  108.         capitalize : function(value){
  109.             return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
  110.         },
  111.         // private
  112.         call : function(value, fn){
  113.             if(arguments.length > 2){
  114.                 var args = Array.prototype.slice.call(arguments, 2);
  115.                 args.unshift(value);
  116.                 return eval(fn).apply(window, args);
  117.             }else{
  118.                 return eval(fn).call(window, value);
  119.             }
  120.         },
  121.         /**
  122.          * Format a number as US currency
  123.          * @param {Number/String} value The numeric value to format
  124.          * @return {String} The formatted currency string
  125.          */
  126.         usMoney : function(v){
  127.             v = (Math.round((v-0)*100))/100;
  128.             v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
  129.             v = String(v);
  130.             var ps = v.split('.'),
  131.                 whole = ps[0],
  132.                 sub = ps[1] ? '.'+ ps[1] : '.00',
  133.                 r = /(d+)(d{3})/;
  134.             while (r.test(whole)) {
  135.                 whole = whole.replace(r, '$1' + ',' + '$2');
  136.             }
  137.             v = whole + sub;
  138.             if(v.charAt(0) == '-'){
  139.                 return '-$' + v.substr(1);
  140.             }
  141.             return "$" +  v;
  142.         },
  143.         /**
  144.          * Parse a value into a formatted date using the specified format pattern.
  145.          * @param {String/Date} value The value to format (Strings must conform to the format expected by the javascript Date object's <a href="http://www.w3schools.com/jsref/jsref_parse.asp">parse()</a> method)
  146.          * @param {String} format (optional) Any valid date format string (defaults to 'm/d/Y')
  147.          * @return {String} The formatted date string
  148.          */
  149.         date : function(v, format){
  150.             if(!v){
  151.                 return "";
  152.             }
  153.             if(!Ext.isDate(v)){
  154.                 v = new Date(Date.parse(v));
  155.             }
  156.             return v.dateFormat(format || "m/d/Y");
  157.         },
  158.         /**
  159.          * Returns a date rendering function that can be reused to apply a date format multiple times efficiently
  160.          * @param {String} format Any valid date format string
  161.          * @return {Function} The date formatting function
  162.          */
  163.         dateRenderer : function(format){
  164.             return function(v){
  165.                 return Ext.util.Format.date(v, format);
  166.             };
  167.         },
  168.         
  169.         /**
  170.          * Strips all HTML tags
  171.          * @param {Mixed} value The text from which to strip tags
  172.          * @return {String} The stripped text
  173.          */
  174.         stripTags : function(v){
  175.             return !v ? v : String(v).replace(stripTagsRE, "");
  176.         },
  177.         /**
  178.          * Strips all script tags
  179.          * @param {Mixed} value The text from which to strip script tags
  180.          * @return {String} The stripped text
  181.          */
  182.         stripScripts : function(v){
  183.             return !v ? v : String(v).replace(stripScriptsRe, "");
  184.         },
  185.         /**
  186.          * Simple format for a file size (xxx bytes, xxx KB, xxx MB)
  187.          * @param {Number/String} size The numeric value to format
  188.          * @return {String} The formatted file size
  189.          */
  190.         fileSize : function(size){
  191.             if(size < 1024) {
  192.                 return size + " bytes";
  193.             } else if(size < 1048576) {
  194.                 return (Math.round(((size*10) / 1024))/10) + " KB";
  195.             } else {
  196.                 return (Math.round(((size*10) / 1048576))/10) + " MB";
  197.             }
  198.         },
  199.         /**
  200.          * It does simple math for use in a template, for example:<pre><code>
  201.          * var tpl = new Ext.Template('{value} * 10 = {value:math("* 10")}');
  202.          * </code></pre>
  203.          * @return {Function} A function that operates on the passed value.
  204.          */
  205.         math : function(){
  206.             var fns = {};
  207.             return function(v, a){
  208.                 if(!fns[a]){
  209.                     fns[a] = new Function('v', 'return v ' + a + ';');
  210.                 }
  211.                 return fns[a](v);
  212.             }
  213.         }(),
  214.         /**
  215.          * Rounds the passed number to the required decimal precision.
  216.          * @param {Number/String} value The numeric value to round.
  217.          * @param {Number} precision The number of decimal places to which to round the first parameter's value.
  218.          * @return {Number} The rounded value.
  219.          */
  220.         round : function(value, precision) {
  221.             var result = Number(value);
  222.             if (typeof precision == 'number') {
  223.                 precision = Math.pow(10, precision);
  224.                 result = Math.round(value * precision) / precision;
  225.             }
  226.             return result;
  227.         },
  228.         /**
  229.          * Formats the number according to the format string.
  230.          * <div style="margin-left:40px">examples (123456.789):
  231.          * <div style="margin-left:10px">
  232.          * 0 - (123456) show only digits, no precision<br>
  233.          * 0.00 - (123456.78) show only digits, 2 precision<br>
  234.          * 0.0000 - (123456.7890) show only digits, 4 precision<br>
  235.          * 0,000 - (123,456) show comma and digits, no precision<br>
  236.          * 0,000.00 - (123,456.78) show comma and digits, 2 precision<br>
  237.          * 0,0.00 - (123,456.78) shortcut method, show comma and digits, 2 precision<br>
  238.          * To reverse the grouping (,) and decimal (.) for international numbers, add /i to the end.
  239.          * For example: 0.000,00/i
  240.          * </div></div>
  241.          * @param {Number} v The number to format.
  242.          * @param {String} format The way you would like to format this text.
  243.          * @return {String} The formatted number.
  244.          */
  245.         number: function(v, format) {
  246.             if(!format){
  247.         return v;
  248.     }
  249.     v = Ext.num(v, NaN);
  250.             if (isNaN(v)){
  251.                 return '';
  252.             }
  253.     var comma = ',',
  254.         dec = '.',
  255.         i18n = false,
  256.         neg = v < 0;
  257.     v = Math.abs(v);
  258.     if(format.substr(format.length - 2) == '/i'){
  259.         format = format.substr(0, format.length - 2);
  260.         i18n = true;
  261.         comma = '.';
  262.         dec = ',';
  263.     }
  264.     var hasComma = format.indexOf(comma) != -1, 
  265.         psplit = (i18n ? format.replace(/[^d,]/g, '') : format.replace(/[^d.]/g, '')).split(dec);
  266.     if(1 < psplit.length){
  267.         v = v.toFixed(psplit[1].length);
  268.     }else if(2 < psplit.length){
  269.         throw ('NumberFormatException: invalid format, formats should have no more than 1 period: ' + format);
  270.     }else{
  271.         v = v.toFixed(0);
  272.     }
  273.     var fnum = v.toString();
  274.     if(hasComma){
  275.         psplit = fnum.split('.');
  276.         var cnum = psplit[0], parr = [], j = cnum.length, m = Math.floor(j / 3), n = cnum.length % 3 || 3;
  277.         for(var i = 0; i < j; i += n){
  278.             if(i != 0){
  279.                 n = 3;
  280.             }
  281.             parr[parr.length] = cnum.substr(i, n);
  282.             m -= 1;
  283.         }
  284.         fnum = parr.join(comma);
  285.         if(psplit[1]){
  286.             fnum += dec + psplit[1];
  287.         }
  288.     }
  289.     return (neg ? '-' : '') + format.replace(/[d,?.?]+/, fnum);
  290.         },
  291.         /**
  292.          * Returns a number rendering function that can be reused to apply a number format multiple times efficiently
  293.          * @param {String} format Any valid number format string for {@link #number}
  294.          * @return {Function} The number formatting function
  295.          */
  296.         numberRenderer : function(format){
  297.             return function(v){
  298.                 return Ext.util.Format.number(v, format);
  299.             };
  300.         },
  301.         /**
  302.          * Selectively do a plural form of a word based on a numeric value. For example, in a template,
  303.          * {commentCount:plural("Comment")}  would result in "1 Comment" if commentCount was 1 or would be "x Comments"
  304.          * if the value is 0 or greater than 1.
  305.          * @param {Number} value The value to compare against
  306.          * @param {String} singular The singular form of the word
  307.          * @param {String} plural (optional) The plural form of the word (defaults to the singular with an "s")
  308.          */
  309.         plural : function(v, s, p){
  310.             return v +' ' + (v == 1 ? s : (p ? p : s+'s'));
  311.         },
  312.         
  313.         /**
  314.          * Converts newline characters to the HTML tag &lt;br/>
  315.          * @param {String} The string value to format.
  316.          * @return {String} The string with embedded &lt;br/> tags in place of newlines.
  317.          */
  318.         nl2br : function(v){
  319.             return Ext.isEmpty(v) ? '' : v.replace(nl2brRe, '<br/>');
  320.         }
  321.     }
  322. }();