Added OC.buidQueryString() utility function
Makes it possible to create query strings by passing a JavaScript hash map and automatically encodes the keys and values.
This commit is contained in:
parent
9fa788c452
commit
41b6d4b702
2 changed files with 65 additions and 0 deletions
|
@ -364,6 +364,34 @@ var OC={
|
|||
}
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* Builds a URL query from a JS map.
|
||||
* @param params parameter map
|
||||
* @return string containing a URL query (without question) mark
|
||||
*/
|
||||
buildQueryString: function(params) {
|
||||
var s = '';
|
||||
var first = true;
|
||||
if (!params) {
|
||||
return s;
|
||||
}
|
||||
for (var key in params) {
|
||||
var value = params[key];
|
||||
if (first) {
|
||||
first = false;
|
||||
}
|
||||
else {
|
||||
s += '&';
|
||||
}
|
||||
s += encodeURIComponent(key);
|
||||
if (value !== null && typeof(value) !== 'undefined') {
|
||||
s += '=' + encodeURIComponent(value);
|
||||
}
|
||||
}
|
||||
return s;
|
||||
},
|
||||
|
||||
/**
|
||||
* Opens a popup with the setting for an app.
|
||||
* @param appid String. The ID of the app e.g. 'calendar', 'contacts' or 'files'.
|
||||
|
|
|
@ -67,4 +67,41 @@ describe('Core base tests', function() {
|
|||
});
|
||||
});
|
||||
});
|
||||
describe('Query string building', function() {
|
||||
it('Returns empty string when empty params', function() {
|
||||
expect(OC.buildQueryString()).toEqual('');
|
||||
expect(OC.buildQueryString({})).toEqual('');
|
||||
});
|
||||
it('Encodes regular query strings', function() {
|
||||
expect(OC.buildQueryString({
|
||||
a: 'abc',
|
||||
b: 'def'
|
||||
})).toEqual('a=abc&b=def');
|
||||
});
|
||||
it('Encodes special characters', function() {
|
||||
expect(OC.buildQueryString({
|
||||
unicode: '汉字',
|
||||
})).toEqual('unicode=%E6%B1%89%E5%AD%97');
|
||||
expect(OC.buildQueryString({
|
||||
b: 'spaace value',
|
||||
'space key': 'normalvalue',
|
||||
'slash/this': 'amp&ersand'
|
||||
})).toEqual('b=spaace%20value&space%20key=normalvalue&slash%2Fthis=amp%26ersand');
|
||||
});
|
||||
it('Encodes data types and empty values', function() {
|
||||
expect(OC.buildQueryString({
|
||||
'keywithemptystring': '',
|
||||
'keywithnull': null,
|
||||
'keywithundefined': null,
|
||||
something: 'else'
|
||||
})).toEqual('keywithemptystring=&keywithnull&keywithundefined&something=else');
|
||||
expect(OC.buildQueryString({
|
||||
'booleanfalse': false,
|
||||
'booleantrue': true
|
||||
})).toEqual('booleanfalse=false&booleantrue=true');
|
||||
expect(OC.buildQueryString({
|
||||
'number': 123,
|
||||
})).toEqual('number=123');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue