-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathUrlManager.js
More file actions
103 lines (88 loc) · 2.05 KB
/
UrlManager.js
File metadata and controls
103 lines (88 loc) · 2.05 KB
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// manage reading and writing page url state
UrlManager = function() {
var self = this;
self.state = {};
self.setParam = function(field,value) {
if (field.match(/\[\]$/)) {
if (!self.state[field]) {
self.state[field] = {};
}
self.state[field][value] = 1;
} else {
self.state[field] = value;
}
self.updateUrl();
}
self.removeParam = function(field,value) {
if (field.match(/\[\]$/)) {
if (self.state[field] && self.state[field][value]) {
delete self.state[field][value];
}
} else {
delete self.state[field];
}
self.updateUrl();
}
self.clearParam = function(field) {
delete self.state[field];
self.updateUrl();
}
self.getParams = function() {
return self.state;
}
// get a specific field
self.getParam = function(field) {
if (field.match(/\[\]$/)) {
var list = [];
// return objects as a list
if (self.state[field]) {
for (key in self.state[field]) {
list.push(key);
}
return list;
}
} else {
return self.state[field];
}
}
self.readUrl = function() {
var vars = {}, hash;
var q = window.location.href.split('?')[1];
if(q != undefined && q.length){
q = q.replace(/#$/,'');
q = q.split('&');
for(var i = 0; i < q.length; i++){
pair = q[i].split('=');
var key = pair[0];
var val = decodeURIComponent(pair[1]);
if (typeof(key) === 'undefined' || typeof(val) === 'undefined') {
continue;
}
if (key.match(/\[\]$/)) {
if (!vars[key]) {
vars[key] = {};
}
vars[key][val] = 1;
} else {
vars[key] = val;
}
}
self.state = vars;
}
}
self.updateUrl = function() {
var params = [];
for (var field in self.state) {
if (Object.prototype.toString.call(self.state[field]) == '[object Object]') {
for (var value in self.state[field]) {
params.push(field+'='+encodeURIComponent(value));
}
} else {
params.push(field+'='+encodeURIComponent(self.state[field]));
}
}
var queryString = params.join('&');
history.pushState(null, queryString, '?' + queryString);
}
return self;
}