00001 /* 00002 Copyright (c) 2004-2006, The Dojo Foundation 00003 All Rights Reserved. 00004 00005 Licensed under the Academic Free License version 2.1 or above OR the 00006 modified BSD license. For more information on Dojo licensing, see: 00007 00008 http://dojotoolkit.org/community/licensing.shtml 00009 */ 00010 00011 00012 00013 dojo.provide("dojo.string.extras"); 00014 dojo.require("dojo.string.common"); 00015 dojo.require("dojo.lang.common"); 00016 dojo.require("dojo.lang.array"); 00017 dojo.string.substituteParams = function (template, hash) { 00018 var map = (typeof hash == "object") ? hash : dojo.lang.toArray(arguments, 1); 00019 return template.replace(/\%\{(\w+)\}/g, function (match, key) { 00020 if (typeof (map[key]) != "undefined" && map[key] != null) { 00021 return map[key]; 00022 } 00023 dojo.raise("Substitution not found: " + key); 00024 }); 00025 }; 00026 dojo.string.capitalize = function (str) { 00027 if (!dojo.lang.isString(str)) { 00028 return ""; 00029 } 00030 if (arguments.length == 0) { 00031 str = this; 00032 } 00033 var words = str.split(" "); 00034 for (var i = 0; i < words.length; i++) { 00035 words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1); 00036 } 00037 return words.join(" "); 00038 }; 00039 dojo.string.isBlank = function (str) { 00040 if (!dojo.lang.isString(str)) { 00041 return true; 00042 } 00043 return (dojo.string.trim(str).length == 0); 00044 }; 00045 dojo.string.encodeAscii = function (str) { 00046 if (!dojo.lang.isString(str)) { 00047 return str; 00048 } 00049 var ret = ""; 00050 var value = escape(str); 00051 var match, re = /%u([0-9A-F]{4})/i; 00052 while ((match = value.match(re))) { 00053 var num = Number("0x" + match[1]); 00054 var newVal = escape("&#" + num + ";"); 00055 ret += value.substring(0, match.index) + newVal; 00056 value = value.substring(match.index + match[0].length); 00057 } 00058 ret += value.replace(/\+/g, "%2B"); 00059 return ret; 00060 }; 00061 dojo.string.escape = function (type, str) { 00062 var args = dojo.lang.toArray(arguments, 1); 00063 switch (type.toLowerCase()) { 00064 case "xml": 00065 case "html": 00066 case "xhtml": 00067 return dojo.string.escapeXml.apply(this, args); 00068 case "sql": 00069 return dojo.string.escapeSql.apply(this, args); 00070 case "regexp": 00071 case "regex": 00072 return dojo.string.escapeRegExp.apply(this, args); 00073 case "javascript": 00074 case "jscript": 00075 case "js": 00076 return dojo.string.escapeJavaScript.apply(this, args); 00077 case "ascii": 00078 return dojo.string.encodeAscii.apply(this, args); 00079 default: 00080 return str; 00081 } 00082 }; 00083 dojo.string.escapeXml = function (str, noSingleQuotes) { 00084 str = str.replace(/&/gm, "&").replace(/</gm, "<").replace(/>/gm, ">").replace(/"/gm, """); 00085 if (!noSingleQuotes) { 00086 str = str.replace(/'/gm, "'"); 00087 } 00088 return str; 00089 }; 00090 dojo.string.escapeSql = function (str) { 00091 return str.replace(/'/gm, "''"); 00092 }; 00093 dojo.string.escapeRegExp = function (str) { 00094 return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1"); 00095 }; 00096 dojo.string.escapeJavaScript = function (str) { 00097 return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1"); 00098 }; 00099 dojo.string.escapeString = function (str) { 00100 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"); 00101 }; 00102 dojo.string.summary = function (str, len) { 00103 if (!len || str.length <= len) { 00104 return str; 00105 } 00106 return str.substring(0, len).replace(/\.+$/, "") + "..."; 00107 }; 00108 dojo.string.endsWith = function (str, end, ignoreCase) { 00109 if (ignoreCase) { 00110 str = str.toLowerCase(); 00111 end = end.toLowerCase(); 00112 } 00113 if ((str.length - end.length) < 0) { 00114 return false; 00115 } 00116 return str.lastIndexOf(end) == str.length - end.length; 00117 }; 00118 dojo.string.endsWithAny = function (str) { 00119 for (var i = 1; i < arguments.length; i++) { 00120 if (dojo.string.endsWith(str, arguments[i])) { 00121 return true; 00122 } 00123 } 00124 return false; 00125 }; 00126 dojo.string.startsWith = function (str, start, ignoreCase) { 00127 if (ignoreCase) { 00128 str = str.toLowerCase(); 00129 start = start.toLowerCase(); 00130 } 00131 return str.indexOf(start) == 0; 00132 }; 00133 dojo.string.startsWithAny = function (str) { 00134 for (var i = 1; i < arguments.length; i++) { 00135 if (dojo.string.startsWith(str, arguments[i])) { 00136 return true; 00137 } 00138 } 00139 return false; 00140 }; 00141 dojo.string.has = function (str) { 00142 for (var i = 1; i < arguments.length; i++) { 00143 if (str.indexOf(arguments[i]) > -1) { 00144 return true; 00145 } 00146 } 00147 return false; 00148 }; 00149 dojo.string.normalizeNewlines = function (text, newlineChar) { 00150 if (newlineChar == "\n") { 00151 text = text.replace(/\r\n/g, "\n"); 00152 text = text.replace(/\r/g, "\n"); 00153 } else { 00154 if (newlineChar == "\r") { 00155 text = text.replace(/\r\n/g, "\r"); 00156 text = text.replace(/\n/g, "\r"); 00157 } else { 00158 text = text.replace(/([^\r])\n/g, "$1\r\n").replace(/\r([^\n])/g, "\r\n$1"); 00159 } 00160 } 00161 return text; 00162 }; 00163 dojo.string.splitEscaped = function (str, charac) { 00164 var components = []; 00165 for (var i = 0, prevcomma = 0; i < str.length; i++) { 00166 if (str.charAt(i) == "\\") { 00167 i++; 00168 continue; 00169 } 00170 if (str.charAt(i) == charac) { 00171 components.push(str.substring(prevcomma, i)); 00172 prevcomma = i + 1; 00173 } 00174 } 00175 components.push(str.substr(prevcomma)); 00176 return components; 00177 }; 00178
For more help developing with SiT! see http://sitracker.org/wiki/DevelopmentHowTo