angular2
Version:
Angular 2 - a web framework for modern web apps
127 lines • 5.17 kB
JavaScript
;var lang_1 = require('angular2/src/facade/lang');
var collection_1 = require('angular2/src/facade/collection');
function paramParser(rawParams) {
if (rawParams === void 0) { rawParams = ''; }
var map = new collection_1.Map();
if (rawParams.length > 0) {
var params = rawParams.split('&');
params.forEach(function (param) {
var split = param.split('=');
var key = split[0];
var val = split[1];
var list = lang_1.isPresent(map.get(key)) ? map.get(key) : [];
list.push(val);
map.set(key, list);
});
}
return map;
}
/**
* Map-like representation of url search parameters, based on
* [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams) in the url living standard,
* with several extensions for merging URLSearchParams objects:
* - setAll()
* - appendAll()
* - replaceAll()
*/
var URLSearchParams = (function () {
function URLSearchParams(rawParams) {
if (rawParams === void 0) { rawParams = ''; }
this.rawParams = rawParams;
this.paramsMap = paramParser(rawParams);
}
URLSearchParams.prototype.clone = function () {
var clone = new URLSearchParams();
clone.appendAll(this);
return clone;
};
URLSearchParams.prototype.has = function (param) { return this.paramsMap.has(param); };
URLSearchParams.prototype.get = function (param) {
var storedParam = this.paramsMap.get(param);
if (collection_1.isListLikeIterable(storedParam)) {
return collection_1.ListWrapper.first(storedParam);
}
else {
return null;
}
};
URLSearchParams.prototype.getAll = function (param) {
var mapParam = this.paramsMap.get(param);
return lang_1.isPresent(mapParam) ? mapParam : [];
};
URLSearchParams.prototype.set = function (param, val) {
var mapParam = this.paramsMap.get(param);
var list = lang_1.isPresent(mapParam) ? mapParam : [];
collection_1.ListWrapper.clear(list);
list.push(val);
this.paramsMap.set(param, list);
};
// A merge operation
// For each name-values pair in `searchParams`, perform `set(name, values[0])`
//
// E.g: "a=[1,2,3], c=[8]" + "a=[4,5,6], b=[7]" = "a=[4], c=[8], b=[7]"
//
// TODO(@caitp): document this better
URLSearchParams.prototype.setAll = function (searchParams) {
var _this = this;
searchParams.paramsMap.forEach(function (value, param) {
var mapParam = _this.paramsMap.get(param);
var list = lang_1.isPresent(mapParam) ? mapParam : [];
collection_1.ListWrapper.clear(list);
list.push(value[0]);
_this.paramsMap.set(param, list);
});
};
URLSearchParams.prototype.append = function (param, val) {
var mapParam = this.paramsMap.get(param);
var list = lang_1.isPresent(mapParam) ? mapParam : [];
list.push(val);
this.paramsMap.set(param, list);
};
// A merge operation
// For each name-values pair in `searchParams`, perform `append(name, value)`
// for each value in `values`.
//
// E.g: "a=[1,2], c=[8]" + "a=[3,4], b=[7]" = "a=[1,2,3,4], c=[8], b=[7]"
//
// TODO(@caitp): document this better
URLSearchParams.prototype.appendAll = function (searchParams) {
var _this = this;
searchParams.paramsMap.forEach(function (value, param) {
var mapParam = _this.paramsMap.get(param);
var list = lang_1.isPresent(mapParam) ? mapParam : [];
for (var i = 0; i < value.length; ++i) {
list.push(value[i]);
}
_this.paramsMap.set(param, list);
});
};
// A merge operation
// For each name-values pair in `searchParams`, perform `delete(name)`,
// followed by `set(name, values)`
//
// E.g: "a=[1,2,3], c=[8]" + "a=[4,5,6], b=[7]" = "a=[4,5,6], c=[8], b=[7]"
//
// TODO(@caitp): document this better
URLSearchParams.prototype.replaceAll = function (searchParams) {
var _this = this;
searchParams.paramsMap.forEach(function (value, param) {
var mapParam = _this.paramsMap.get(param);
var list = lang_1.isPresent(mapParam) ? mapParam : [];
collection_1.ListWrapper.clear(list);
for (var i = 0; i < value.length; ++i) {
list.push(value[i]);
}
_this.paramsMap.set(param, list);
});
};
URLSearchParams.prototype.toString = function () {
var paramsList = [];
this.paramsMap.forEach(function (values, k) { values.forEach(function (v) { return paramsList.push(k + '=' + v); }); });
return paramsList.join('&');
};
URLSearchParams.prototype.delete = function (param) { this.paramsMap.delete(param); };
return URLSearchParams;
})();
exports.URLSearchParams = URLSearchParams;
//# sourceMappingURL=url_search_params.js.map