<!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 entities Ext.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>