-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathQuerystringKeyEnvironment.js
More file actions
56 lines (47 loc) · 1.72 KB
/
QuerystringKeyEnvironment.js
File metadata and controls
56 lines (47 loc) · 1.72 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
"use strict";
var qs = require('qs');
var PathnameEnvironment = require('./PathnameEnvironment');
/**
* Environment which keeps routing state in a specified key in a querystring.
*/
function QuerystringKeyEnvironment(key) {
this.key = key;
PathnameEnvironment.call(this);
}
QuerystringKeyEnvironment.prototype = Object.create(PathnameEnvironment.prototype);
QuerystringKeyEnvironment.prototype.constructor = QuerystringKeyEnvironment;
QuerystringKeyEnvironment.prototype.getPath = function() {
var query = qs.parse(window.location.search.slice(1));
return query[this.key] ? '/' + query[this.key] : '/';
};
QuerystringKeyEnvironment.prototype.pushState = function(path, navigation) {
path = this.updatedPath(path);
PathnameEnvironment.prototype.pushState.call(this, path, navigation);
};
QuerystringKeyEnvironment.prototype.replaceState = function(path, navigation) {
path = this.updatedPath(path);
PathnameEnvironment.prototype.replaceState.call(this, path, navigation);
};
QuerystringKeyEnvironment.prototype.updatedPath = function(value) {
var path = PathnameEnvironment.prototype.getPath.call(this);
var query;
if (path.indexOf('?') === -1) {
query = {};
query[this.key] = value.slice(1);
return '/?' + qs.stringify(query);
} else {
var splitted = path.split('?');
query = qs.parse(splitted[1] || '');
query[this.key] = value.slice(1);
return splitted[0] + '?' + qs.stringify(query);
}
};
var _environments = {};
function getEnvironment(key) {
if (_environments[key] === undefined) {
_environments[key] = new QuerystringKeyEnvironment(key);
}
return _environments[key];
}
module.exports = QuerystringKeyEnvironment;
module.exports.getEnvironment = getEnvironment;