| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 | <!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-String'>/**</span> * @class Ext.String * * A collection of useful static methods to deal with strings * @singleton */Ext.String = (function() {    var trimRegex     = /^[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+|[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+$/g,        escapeRe      = /('|\\)/g,        formatRe      = /\{(\d+)\}/g,        escapeRegexRe = /([-.*+?\^${}()|\[\]\/\\])/g,        basicTrimRe   = /^\s+|\s+$/g,        whitespaceRe  = /\s+/,        varReplace    = /(^[^a-z]*|[^\w])/gi,        charToEntity,        entityToChar,        charToEntityRegex,        entityToCharRegex,        htmlEncodeReplaceFn = function(match, capture) {            return charToEntity[capture];        },        htmlDecodeReplaceFn = function(match, capture) {            return (capture in entityToChar) ? entityToChar[capture] : String.fromCharCode(parseInt(capture.substr(2), 10));        };    return {<span id='Ext-String-method-createVarName'>        /**</span>         * Converts a string of characters into a legal, parseable Javascript `var` name as long as the passed         * string contains at least one alphabetic character. Non alphanumeric characters, and *leading* non alphabetic         * characters will be removed.         * @param {String} s A string to be converted into a `var` name.         * @return {String} A legal Javascript `var` name.         */        createVarName: function(s) {            return s.replace(varReplace, '');        },<span id='Ext-String-method-htmlEncode'>        /**</span>         * Convert certain characters (&, <, >, ', and ") to their HTML character equivalents for literal display in web pages.         * @param {String} value The string to encode         * @return {String} The encoded text         * @method         */        htmlEncode: function(value) {            return (!value) ? value : String(value).replace(charToEntityRegex, htmlEncodeReplaceFn);        },<span id='Ext-String-method-htmlDecode'>        /**</span>         * Convert certain characters (&, <, >, ', and ") from their HTML character equivalents.         * @param {String} value The string to decode         * @return {String} The decoded text         * @method         */        htmlDecode: function(value) {            return (!value) ? value : String(value).replace(entityToCharRegex, htmlDecodeReplaceFn);        },<span id='Ext-String-method-addCharacterEntities'>        /**</span>         * Adds a set of character entity definitions to the set used by         * {@link Ext.String#htmlEncode} and {@link Ext.String#htmlDecode}.         *         * This object should be keyed by the entity name sequence,         * with the value being the textual representation of the entity.         *         *      Ext.String.addCharacterEntities({         *          '&amp;Uuml;':'Ü',         *          '&amp;ccedil;':'ç',         *          '&amp;ntilde;':'ñ',         *          '&amp;egrave;':'è'         *      });         *      var s = Ext.String.htmlEncode("A string with entities: èÜçñ");         *         * Note: the values of the character entites defined on this object are expected         * to be single character values.  As such, the actual values represented by the         * characters are sensitive to the character encoding of the javascript source         * file when defined in string literal form. Script tasgs referencing server         * resources with character entities must ensure that the 'charset' attribute         * of the script node is consistent with the actual character encoding of the         * server resource.         *         * The set of character entities may be reset back to the default state by using         * the {@link Ext.String#resetCharacterEntities} method         *         * @param {Object} entities The set of character entities to add to the current         * definitions.         */        addCharacterEntities: function(newEntities) {            var charKeys = [],                entityKeys = [],                key, echar;            for (key in newEntities) {                echar = newEntities[key];                entityToChar[key] = echar;                charToEntity[echar] = key;                charKeys.push(echar);                entityKeys.push(key);            }            charToEntityRegex = new RegExp('(' + charKeys.join('|') + ')', 'g');            entityToCharRegex = new RegExp('(' + entityKeys.join('|') + '|&#[0-9]{1,5};' + ')', 'g');        },<span id='Ext-String-method-resetCharacterEntities'>        /**</span>         * Resets the set of character entity definitions used by         * {@link Ext.String#htmlEncode} and {@link Ext.String#htmlDecode} back to the         * default state.         */        resetCharacterEntities: function() {            charToEntity = {};            entityToChar = {};            // add the default set            this.addCharacterEntities({                '&amp;'     :   '&',                '&gt;'      :   '>',                '&lt;'      :   '<',                '&quot;'    :   '"',                '&#39;'     :   "'"            });        },<span id='Ext-String-method-urlAppend'>        /**</span>         * Appends content to the query string of a URL, handling logic for whether to place         * a question mark or ampersand.         * @param {String} url The URL to append to.         * @param {String} string The content to append to the URL.         * @return {String} The resulting URL         */        urlAppend : function(url, string) {            if (!Ext.isEmpty(string)) {                return url + (url.indexOf('?') === -1 ? '?' : '&') + string;            }            return url;        },<span id='Ext-String-method-trim'>        /**</span>         * Trims whitespace from either end of a string, leaving spaces within the string intact.  Example:         * @example    var s = '  foo bar  ';    alert('-' + s + '-');         //alerts "- foo bar -"    alert('-' + Ext.String.trim(s) + '-');  //alerts "-foo bar-"         * @param {String} string The string to escape         * @return {String} The trimmed string         */        trim: function(string) {            return string.replace(trimRegex, "");        },<span id='Ext-String-method-capitalize'>        /**</span>         * Capitalize the given string         * @param {String} string         * @return {String}         */        capitalize: function(string) {            return string.charAt(0).toUpperCase() + string.substr(1);        },<span id='Ext-String-method-uncapitalize'>        /**</span>         * Uncapitalize the given string         * @param {String} string         * @return {String}         */        uncapitalize: function(string) {            return string.charAt(0).toLowerCase() + string.substr(1);        },<span id='Ext-String-method-ellipsis'>        /**</span>         * Truncate a string and add an ellipsis ('...') to the end if it exceeds the specified length         * @param {String} value The string to truncate         * @param {Number} length The maximum length to allow before truncating         * @param {Boolean} word True to try to find a common word break         * @return {String} The converted text         */        ellipsis: function(value, len, word) {            if (value && value.length > len) {                if (word) {                    var vs = value.substr(0, len - 2),                    index = Math.max(vs.lastIndexOf(' '), vs.lastIndexOf('.'), vs.lastIndexOf('!'), vs.lastIndexOf('?'));                    if (index !== -1 && index >= (len - 15)) {                        return vs.substr(0, index) + "...";                    }                }                return value.substr(0, len - 3) + "...";            }            return value;        },<span id='Ext-String-method-escapeRegex'>        /**</span>         * Escapes the passed string for use in a regular expression         * @param {String} string         * @return {String}         */        escapeRegex: function(string) {            return string.replace(escapeRegexRe, "\\$1");        },<span id='Ext-String-method-escape'>        /**</span>         * Escapes the passed string for ' and \         * @param {String} string The string to escape         * @return {String} The escaped string         */        escape: function(string) {            return string.replace(escapeRe, "\\$1");        },<span id='Ext-String-method-toggle'>        /**</span>         * Utility function that allows you to easily switch a string between two alternating values.  The passed value         * is compared to the current string, and if they are equal, the other value that was passed in is returned.  If         * they are already different, the first value passed in is returned.  Note that this method returns the new value         * but does not change the current string.         * <pre><code>        // alternate sort directions        sort = Ext.String.toggle(sort, 'ASC', 'DESC');        // instead of conditional logic:        sort = (sort == 'ASC' ? 'DESC' : 'ASC');           </code></pre>         * @param {String} string The current string         * @param {String} value The value to compare to the current string         * @param {String} other The new value to use if the string already equals the first value passed in         * @return {String} The new value         */        toggle: function(string, value, other) {            return string === value ? other : value;        },<span id='Ext-String-method-leftPad'>        /**</span>         * Pads the left side of a string with a specified character.  This is especially useful         * for normalizing number and date strings.  Example usage:         *         * <pre><code>    var s = Ext.String.leftPad('123', 5, '0');    // s now contains the string: '00123'           </code></pre>         * @param {String} string The original string         * @param {Number} size The total length of the output string         * @param {String} character (optional) The character with which to pad the original string (defaults to empty string " ")         * @return {String} The padded string         */        leftPad: function(string, size, character) {            var result = String(string);            character = character || " ";            while (result.length < size) {                result = character + result;            }            return result;        },<span id='Ext-String-method-format'>        /**</span>         * Allows you to define a tokenized string and pass an arbitrary number of arguments to replace the tokens.  Each         * token must be unique, and must increment in the format {0}, {1}, etc.  Example usage:         * <pre><code>    var cls = 'my-class', text = 'Some text';    var s = Ext.String.format('&lt;div class="{0}">{1}&lt;/div>', cls, text);    // s now contains the string: '&lt;div class="my-class">Some text&lt;/div>'           </code></pre>         * @param {String} string The tokenized string to be formatted         * @param {String} value1 The value to replace token {0}         * @param {String} value2 Etc...         * @return {String} The formatted string         */        format: function(format) {            var args = Ext.Array.toArray(arguments, 1);            return format.replace(formatRe, function(m, i) {                return args[i];            });        },<span id='Ext-String-method-repeat'>        /**</span>         * Returns a string with a specified number of repititions a given string pattern.         * The pattern be separated by a different string.         *         *      var s = Ext.String.repeat('---', 4); // = '------------'         *      var t = Ext.String.repeat('--', 3, '/'); // = '--/--/--'         *         * @param {String} pattern The pattern to repeat.         * @param {Number} count The number of times to repeat the pattern (may be 0).         * @param {String} sep An option string to separate each pattern.         */        repeat: function(pattern, count, sep) {            for (var buf = [], i = count; i--; ) {                buf.push(pattern);            }            return buf.join(sep || '');        },<span id='Ext-String-method-splitWords'>        /**</span>         * Splits a string of space separated words into an array, trimming as needed. If the         * words are already an array, it is returned.         *         * @param {String/Array} words         */        splitWords: function (words) {            if (words && typeof words == 'string') {                return words.replace(basicTrimRe, '').split(whitespaceRe);            }            return words || [];        }    };}());// initialize the default encode / decode entitiesExt.String.resetCharacterEntities();<span id='Ext-method-htmlEncode'>/**</span> * Old alias to {@link Ext.String#htmlEncode} * @deprecated Use {@link Ext.String#htmlEncode} instead * @method * @member Ext * @inheritdoc Ext.String#htmlEncode */Ext.htmlEncode = Ext.String.htmlEncode;<span id='Ext-method-htmlDecode'>/**</span> * Old alias to {@link Ext.String#htmlDecode} * @deprecated Use {@link Ext.String#htmlDecode} instead * @method * @member Ext * @inheritdoc Ext.String#htmlDecode */Ext.htmlDecode = Ext.String.htmlDecode;<span id='Ext-method-urlAppend'>/**</span> * Old alias to {@link Ext.String#urlAppend} * @deprecated Use {@link Ext.String#urlAppend} instead * @method * @member Ext * @inheritdoc Ext.String#urlAppend */Ext.urlAppend = Ext.String.urlAppend;</pre></body></html>
 |