Format.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:13k
源码类别:

中间件编程

开发平台:

JavaScript

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