1/***************************************************************************************** 2 * Firma: Hehner Reus Systems GmbH 3 * Projekt: com.cerno.basis 4 * Datei: URL.js 5 * Erstellung: 06.09.2013 6 * Verwendung: JavaScript-Klasse zur Bearbeitung von URLs. 7 * 8 * $Id: URL.js,v 1.9 2025/03/28 16:18:33 lpo Exp $ 9 *****************************************************************************************/ 10 11/** 12 * Konstruktor für das URL-Objekt. 13 * 14 * @param url Die zu untersuchende Url. 15 */ 16HRUrl = function(url) 17{ 18 try 19 { 20 this.m_Url = ''; 21 this.m_BaseUrl = ''; 22 this.m_IsAbsolut = false; 23 this.m_UrlParameter = ''; 24 this.m_KeyValueArray = []; 25 this.m_Fragment = ''; 26 27 // 28 // Url auseinander nehmen und auf die obigen globalen Variablen verteilen. 29 // 30 if (url && typeof(url) === 'string') 31 { 32 this.m_Url = url; 33 34 // Basis-Url bestimmen: Den Teil der Url ohne Parameter und Fragment. 35 var startParameter = this.m_Url.indexOf('?'); 36 this.m_BaseUrl = (startParameter >= 0 ? this.m_Url.substring(0, startParameter) : this.m_Url); 37 38 if (this.m_Url.toLowerCase().indexOf('http:') >= 0 || this.m_Url.toLowerCase().indexOf('https:') >= 0) 39 this.m_IsAbsolut = true; 40 41 // Das Fragment bestimmen 42 var startFragment = this.m_Url.indexOf('#'); 43 if (startFragment >= 0) 44 this.m_Fragment = this.m_Url.substring(startFragment + 1); 45 46 // Den Parameterquery bestimmen. 47 if (startParameter >= 0 && startParameter + 1 < this.m_Url.length) 48 { 49 this.m_UrlParameter = this.m_Url.substring(startParameter + 1); 50 if (startFragment >= 0) 51 { 52 this.m_UrlParameter = this.m_Url.substring(startParameter + 1, startFragment); 53 } 54 this.m_UrlParameterLowerCase = this.m_UrlParameter.toLowerCase(); 55 this.m_KeyValueArray = this.m_UrlParameter.split('&'); 56 } 57 } 58 } 59 catch (e) 60 { 61 if (typeof(HRLogError) === 'function') HRLogError(e); 62 } 63} 64 65/** 66 * Gibt alle Werte zum gesuchten Parameternamen wieder. 67 * 68 * Beachte: Ein und derselbe Parametername kann in einer Url mehrfach vergeben werden. 69 * 70 * @param name Der Name des gesuchten Parameters. 71 * @param ignoreCase true, falls Groß- und Kleinschreibung bei der Suche ignoriert werden sollen. 72 * @return: Ein Array mit den Werten des Parameters oder null, falls kein Parameter zum übergebenen Namen gefunden werden konnte. 73 */ 74HRUrl.prototype.getAllParameter = function(name, ignoreCase) 75{ 76 try 77 { 78 if (!name || typeof(name) !== 'string') 79 return null; 80 81 var parameterArray = new Array(); 82 for (let i = 0; i < this.m_KeyValueArray.length; i++) 83 { 84 if ((ignoreCase && this.m_KeyValueArray[i].toLowerCase().indexOf(name.toLowerCase() + '=') >= 0) || this.m_KeyValueArray[i].indexOf(name + '=') >= 0) 85 { 86 var ablage = this.m_KeyValueArray[i].split('='); 87 if (ablage.length > 1) 88 parameterArray.push(ablage[1]); 89 } 90 } 91 92 if (parameterArray.length > 0) 93 return parameterArray; 94 } 95 catch (e) 96 { 97 if (typeof(HRLogError) === 'function') HRLogError(e); 98 } 99 100 return null; 101} 102 103/** 104 * Gibt den Wert eines Parameters wieder. 105 * 106 * @param name Der Name des gesuchten Parameters. 107 * @param ignoreCase true, falls Groß- und Kleinschreibung bei der Suche ignoriert werden sollen. 108 * @return Der Wert des Parameters oder null, falls der Parameter zum übergebenen Namen nicht gefunden werden konnte. 109 */ 110HRUrl.prototype.getParameter = function(name, ignoreCase) 111{ 112 var parameterArray = this.getAllParameter(name, ignoreCase); 113 114 if (!parameterArray) 115 return null; 116 117 return (parameterArray.length > 0 ? parameterArray[0] : ''); 118} 119 120/** 121 * Prüft, ob die URL mit http/https beginnt oder nicht. 122 * 123 * @return: true, falls sie mit "http/https" beginnt. 124 */ 125HRUrl.prototype.isAbsolut = function() 126{ 127 return this.m_IsAbsolut; 128} 129 130/** 131 * Fügt der URL einen Parameter hinzu. 132 * 133 * @param name Name des Parameters. 134 * @param value Value des Parameters. 135 * @return true, falls der Parameter hinzugefügt wurde. 136 */ 137HRUrl.prototype.addParameter = function(name, value) 138{ 139 try 140 {
141 if (!name || typeof(name) !== 'string' || !value || (typeof(value) !== 'string' && typeof(value) !== 'number')) 142 return false; 143 144 this.m_KeyValueArray.push(name + '=' + value); 145 146 return true; 147 } 148 catch (e) 149 { 150 if (typeof(HRLogError) === 'function') HRLogError(e); 151 } 152 153 return false; 154} 155 156/** 157 * Löscht einen Parameter aus der URL. Falls mehrere Parameter 158 * 159 * @param name Name des zu löschenden Parameters. 160 * @param ignoreCase true, falls Groß- und Kleinschreibung bei der Suche ignoriert werden sollen. 161 * @return true, falls der Parameter gelöscht wurde. 162 */ 163HRUrl.prototype.removeParameter = function(name, ignoreCase) 164{ 165 try 166 { 167 var numberDeleted = 0; 168 169 if (!name || typeof(name) != 'string') 170 return false; 171 172 for (let i = 0; i < this.m_KeyValueArray.length; i++) 173 { 174 if ((ignoreCase && this.m_KeyValueArray[i].toLowerCase().indexOf(name.toLowerCase() + '=') >= 0) || this.m_KeyValueArray[i].indexOf(name + '=') >= 0) 175 { 176 this.m_KeyValueArray.splice(i, 1); 177 numberDeleted += 1; 178 } 179 } 180 181 return (numberDeleted > 0 ? true : false); 182 } 183 catch (e) 184 { 185 if (typeof(HRLogError) == 'function') HRLogError(e); 186 } 187 188 return false; 189} 190 191/** 192 * Setzt den Wert des Parameters auf den übergebenen Wert. Falls der Parameter noch nicht existiert, wird er hinzugefügt. 193 * 194 * @param name Name des Parameters. 195 * @param value Der Wert des zu Parameters. 196 * @param ignoreCase true, falls Groß- und Kleinschreibung bei der Suche ignoriert werden sollen. 197 */ 198HRUrl.prototype.setParameter = function(name, value, ignoreCase) 199{ 200 try 201 { 202 if (!name || typeof(name) != 'string') 203 return false; 204 205 for (let i = 0; i < this.m_KeyValueArray.length; i++) 206 { 207 if ((ignoreCase && this.m_KeyValueArray[i].toLowerCase().indexOf(name.toLowerCase() + '=') >= 0) || this.m_KeyValueArray[i].indexOf(name + '=') >= 0) 208 { 209 let key = this.m_KeyValueArray[i].substring(0, this.m_KeyValueArray[i].toLowerCase().indexOf('=')); 210 this.m_KeyValueArray[i] = `${key}=${value}`; 211 return; 212 } 213 } 214 215 // Falls kein alter, gleichnamiger Parameter gefunden wurde, fügen wir ihn neu hinzu. 216 this.addParameter(name, value); 217 } 218 catch (e) 219 { 220 if (typeof(HRLogError) == 'function') HRLogError(e); 221 } 222} 223 224/** 225 * Prüft, ob ein bestimmter Parameter in der Url vorhanden ist. 226 * 227 * @param name der Name des gesuchten Parameters. 228 * @param ignoreCase true, falls Groß- und Kleinschreibung bei der Suche ignoriert werden sollen. 229 * 230 * @return true, falls der Parameter in der Url vorhanden ist. 231 */ 232HRUrl.prototype.containsParameter = function(name, ignoreCase) 233{ 234 if (!name || typeof(name) != 'string') 235 return false; 236 237 for (let i = 0; i < this.m_KeyValueArray.length; i++) 238 { 239 if ((ignoreCase && this.m_KeyValueArray[i].toLowerCase().indexOf(name.toLowerCase() + '=') >= 0) || this.m_KeyValueArray[i].indexOf(name + '=') >= 0) 240 { 241 return true; 242 } 243 } 244 245 return false; 246} 247 248/** 249 * Prüft, ob in der URL ein bestimmter Parameter mit einem bestimmten Wert vorhanden ist. 250 * 251 * @param name ist der gesuchte Schlüssel. 252 * @param value Der gesuchte Wert. 253 * @param ignoreCase falls true, wird Groß- und Kleinschreibung ignoriert. 254 * @return true, falls der Parameter gefunden werden konnte. 255 */ 256HRUrl.prototype.containsParameterValue = function(name, value, ignoreCase) 257{ 258 if (!value || typeof(value) != 'string') 259 return false; 260 261 const values = this.getAllParameter(name, ignoreCase); 262 if (values) 263 { 264 for (let i = 0; i < values.length; i++) 265 { 266 if ((ignoreCase && values[i].equalsIgnoreCase(value)) || (!ignoreCase && values[i] == value)) 267 return true; 268 } 269 } 270 271 return false; 272} 273 274/** 275 * Rückgabe der Url als Zeichenkette. 276 * 277 * @return Die Url als Zeichenkette. 278 */ 279HRUrl.prototype.toString = function() 280{ 281 if (this.m_BaseUrl.length <= 0) 282 return ''; 283 284 var url = this.m_BaseUrl; 285 286 if (this.m_KeyValueArray.length > 0) 287 { 288 url += '?'; 289 } 290 291 for (i = 0; i < this.m_KeyValueArray.length; i++) 292 { 293 url += (this.m_KeyValueArray[i] + (i < this.m_KeyValueArray.length -1 ? '&' : '')); 294 } 295 296 if (this.m_Fragment) 297 url += '#' + this.m_Fragment; 298 299 return url; 300}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.