You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.2 KiB
96 lines
2.2 KiB
define(["./_base/lang"], function(lang){ |
|
|
|
// module: |
|
// dojo/io-query |
|
|
|
var backstop = {}; |
|
|
|
return { |
|
// summary: |
|
// This module defines query string processing functions. |
|
|
|
objectToQuery: function objectToQuery(/*Object*/ map){ |
|
// summary: |
|
// takes a name/value mapping object and returns a string representing |
|
// a URL-encoded version of that object. |
|
// example: |
|
// this object: |
|
// |
|
// | { |
|
// | blah: "blah", |
|
// | multi: [ |
|
// | "thud", |
|
// | "thonk" |
|
// | ] |
|
// | }; |
|
// |
|
// yields the following query string: |
|
// |
|
// | "blah=blah&multi=thud&multi=thonk" |
|
|
|
// FIXME: need to implement encodeAscii!! |
|
var enc = encodeURIComponent, pairs = []; |
|
for(var name in map){ |
|
var value = map[name]; |
|
if(value != backstop[name]){ |
|
var assign = enc(name) + "="; |
|
if(lang.isArray(value)){ |
|
for(var i = 0, l = value.length; i < l; ++i){ |
|
pairs.push(assign + enc(value[i])); |
|
} |
|
}else{ |
|
pairs.push(assign + enc(value)); |
|
} |
|
} |
|
} |
|
return pairs.join("&"); // String |
|
}, |
|
|
|
queryToObject: function queryToObject(/*String*/ str){ |
|
// summary: |
|
// Create an object representing a de-serialized query section of a |
|
// URL. Query keys with multiple values are returned in an array. |
|
// |
|
// example: |
|
// This string: |
|
// |
|
// | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" |
|
// |
|
// results in this object structure: |
|
// |
|
// | { |
|
// | foo: [ "bar", "baz" ], |
|
// | thinger: " spaces =blah", |
|
// | zonk: "blarg" |
|
// | } |
|
// |
|
// Note that spaces and other urlencoded entities are correctly |
|
// handled. |
|
|
|
var dec = decodeURIComponent, qp = str.split("&"), ret = {}, name, val; |
|
for(var i = 0, l = qp.length, item; i < l; ++i){ |
|
item = qp[i]; |
|
if(item.length){ |
|
var s = item.indexOf("="); |
|
if(s < 0){ |
|
name = dec(item); |
|
val = ""; |
|
}else{ |
|
name = dec(item.slice(0, s)); |
|
val = dec(item.slice(s + 1)); |
|
} |
|
if(typeof ret[name] == "string"){ // inline'd type check |
|
ret[name] = [ret[name]]; |
|
} |
|
|
|
if(lang.isArray(ret[name])){ |
|
ret[name].push(val); |
|
}else{ |
|
ret[name] = val; |
|
} |
|
} |
|
} |
|
return ret; // Object |
|
} |
|
}; |
|
}); |