UNPKG

dojo

Version:

Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.

96 lines (88 loc) 2.26 kB
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 } }; });