1var Querystring = function (qs) { // optionally pass a querystring to parse 2 this.params = {}; 3 this.keys = []; 4 5 if (qs === null) qs = location.search.substring(1, location.search.length); 6 if (qs.length === 0) return; 7 8 // Turn <plus> back to <space> 9 // See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1 10 qs = qs.replace(/\+/g, ' '); 11 var args = qs.split('&'); // parse out name/value pairs separated via & 12 13 // split out each name=value pair 14 for (var i = 0; i < args.length; i++) { 15 var currentElement = args[i]; 16 var equalsIndex = currentElement.indexOf('='); 17 var name = currentElement.slice(0, equalsIndex); 18 var value = decodeURIComponent(currentElement.slice(equalsIndex + 1)); 19 20 this.params[name] = value; 21 this.keys[i] = name; 22 } 23}; 24 25Querystring.prototype = { 26 get: function (key, default_) { 27 var value = this.params[key.toLowerCase()]; 28 return (value !== null) ? value : default_; 29 }, 30 31 contains: function (key) { 32 var value = this.params[key.toLowerCase()]; 33 return (value !== null); 34 }, 35 36 set: function (key, value) { 37 var lowerKey = key.toLowerCase(); 38 if (this.keys.indexOf(lowerKey) == -1) { 39 this.keys.push(lowerKey); 40 } 41 this.params[lowerKey] = value; 42 }, 43 44 remove: function (key) { 45 var lowerKey = key.toLowerCase(); 46 var index = this.keys.indexOf(lowerKey); 47 if (index > -1) { 48 this.keys.splice(index, 1); 49 } 50 }, 51 52 toString: function (appendQuestionMark) { 53 if (this.keys.length > 0) { 54 var query = appendQuestionMark ? "?" : ""; 55 for (var i = 0; i < this.keys.length; i++) { 56 if (i > 0) 57 query += "&"; 58 query += this.keys[i] + "=" + this.params[this.keys[i]]; 59 } 60 return query; 61 } 62 return ""; 63 } 64};
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.