/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml */ dojo.provide("dojo.string.extras"); dojo.require("dojo.string.common"); dojo.require("dojo.lang"); /** * Performs parameterized substitutions on a string. For example, * dojo.string.substituteParams("File '%{0}' is not found in directory '%{1}'.","foo.html","/temp"); * returns * "File 'foo.html' is not found in directory '/temp'." * * @param template the original string template with %{values} to be replaced * @param hash name/value pairs (type object) to provide substitutions. Alternatively, substitutions may be * included as arguments 1..n to this function, corresponding to template parameters 0..n-1 * @return the completed string. Throws an exception if any parameter is unmatched */ //TODO: use ${} substitution syntax instead, like widgets do? dojo.string.substituteParams = function(template /*string */, hash /* object - optional or ... */) { var map = (typeof hash == 'object') ? hash : dojo.lang.toArray(arguments, 1); return template.replace(/\%\{(\w+)\}/g, function(match, key){ return map[key] || dojo.raise("Substitution not found: " + key); }); }; /** * Parameterized string function * str - formatted string with %{values} to be replaces * pairs - object of name: "value" value pairs * killExtra - remove all remaining %{values} after pairs are inserted */ dojo.string.paramString = function(str, pairs, killExtra) { dojo.deprecated("dojo.string.paramString", "use dojo.string.substituteParams instead", "0.4"); for(var name in pairs) { var re = new RegExp("\\%\\{" + name + "\\}", "g"); str = str.replace(re, pairs[name]); } if(killExtra) { str = str.replace(/%\{([^\}\s]+)\}/g, ""); } return str; } /** Uppercases the first letter of each word */ dojo.string.capitalize = function (str) { if (!dojo.lang.isString(str)) { return ""; } if (arguments.length == 0) { str = this; } var words = str.split(' '); for(var i=0; i/gm, ">").replace(/"/gm, """); if(!noSingleQuotes) { str = str.replace(/'/gm, "'"); } return str; } dojo.string.escapeSql = function(str) { return str.replace(/'/gm, "''"); } dojo.string.escapeRegExp = function(str) { return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1"); } dojo.string.escapeJavaScript = function(str) { return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1"); } dojo.string.escapeString = function(str){ return ('"' + str.replace(/(["\\])/g, '\\$1') + '"' ).replace(/[\f]/g, "\\f" ).replace(/[\b]/g, "\\b" ).replace(/[\n]/g, "\\n" ).replace(/[\t]/g, "\\t" ).replace(/[\r]/g, "\\r"); } // TODO: make an HTML version dojo.string.summary = function(str, len) { if(!len || str.length <= len) { return str; } else { return str.substring(0, len).replace(/\.+$/, "") + "..."; } } /** * Returns true if 'str' ends with 'end' */ dojo.string.endsWith = function(str, end, ignoreCase) { if(ignoreCase) { str = str.toLowerCase(); end = end.toLowerCase(); } if((str.length - end.length) < 0){ return false; } return str.lastIndexOf(end) == str.length - end.length; } /** * Returns true if 'str' ends with any of the arguments[2 -> n] */ dojo.string.endsWithAny = function(str /* , ... */) { for(var i = 1; i < arguments.length; i++) { if(dojo.string.endsWith(str, arguments[i])) { return true; } } return false; } /** * Returns true if 'str' starts with 'start' */ dojo.string.startsWith = function(str, start, ignoreCase) { if(ignoreCase) { str = str.toLowerCase(); start = start.toLowerCase(); } return str.indexOf(start) == 0; } /** * Returns true if 'str' starts with any of the arguments[2 -> n] */ dojo.string.startsWithAny = function(str /* , ... */) { for(var i = 1; i < arguments.length; i++) { if(dojo.string.startsWith(str, arguments[i])) { return true; } } return false; } /** * Returns true if 'str' contains any of the arguments 2 -> n */ dojo.string.has = function(str /* , ... */) { for(var i = 1; i < arguments.length; i++) { if(str.indexOf(arguments[i]) > -1){ return true; } } return false; } dojo.string.normalizeNewlines = function (text,newlineChar) { if (newlineChar == "\n") { text = text.replace(/\r\n/g, "\n"); text = text.replace(/\r/g, "\n"); } else if (newlineChar == "\r") { text = text.replace(/\r\n/g, "\r"); text = text.replace(/\n/g, "\r"); } else { text = text.replace(/([^\r])\n/g, "$1\r\n"); text = text.replace(/\r([^\n])/g, "\r\n$1"); } return text; } dojo.string.splitEscaped = function (str,charac) { var components = []; for (var i = 0, prevcomma = 0; i < str.length; i++) { if (str.charAt(i) == '\\') { i++; continue; } if (str.charAt(i) == charac) { components.push(str.substring(prevcomma, i)); prevcomma = i + 1; } } components.push(str.substr(prevcomma)); return components; }