/
Trait.Base.js
58 lines (54 loc) · 1.35 KB
/
Trait.Base.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
define(function(require) {
'use strict';
var _ = require('underscore');
return {
url: function() {
var encodedQuery = this.flattenQueryParams(this.getQueryParams());
return this.getService() + (encodedQuery ? '/?' + encodedQuery : '');
},
register: function(service, params) {
if(!this.hasRegistered) {
this.setService(service);
this.setQueryParams(params || {});
this.hasRegistered = true;
}
},
getService: function() {
return this.service;
},
setService: function(service) {
this.service = service;
},
getQueryParams: function() {
return this.queryParams;
},
setQueryParams: function(params) {
this.queryParams = params;
},
addQueryParams: function(params) {
_.extend(this.queryParams, params);
},
flattenQueryParams: function(params) {
var value;
var key;
var stack = [];
for(var unencodedKey in params) {
if(params.hasOwnProperty(unencodedKey)) {
key = encodeURIComponent(unencodedKey);
value = params[unencodedKey];
if(_.isNull(value) || _.isUndefined(value) || value === '') {
continue;
}
if(_.isArray(value)) {
_.each(_.compact(value), function(item) {
stack.push(key + '=' + encodeURIComponent(item));
});
} else {
stack.push(key + '=' + encodeURIComponent(value));
}
}
}
return stack.join('&');
}
};
});