Skip to content

Instantly share code, notes, and snippets.

@Kequc
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kequc/3ceac71962f9fdd9a883 to your computer and use it in GitHub Desktop.
Save Kequc/3ceac71962f9fdd9a883 to your computer and use it in GitHub Desktop.
For meteor
Router.query = (function(router) {
var current = function () {
return router.current();
};
var rawParams = function () {
return current().params.query;
};
var params = function () {
return EJSON.clone(rawParams());
};
var sanitize = function (query) {
_.each(query, function(v, k) {
if (!v)
delete query[k];
}); // Remove empty values
return query;
}
return {
set: function(query) {
query || (query = {});
router.go(current().route.getName(), current().params, { query: sanitize(query) });
},
isSet: function(name, value) {
var param = rawParams()[name];
if (!value) {
return !!param;
} else {
return param == value;
}
},
toggle: function(name, value) {
if (this.isSet(name, value)) {
this.remove(name);
} else {
this.add(name, value);
}
},
change: function (query) {
query || (query = {});
this.set(_.extend(params(), query));
},
add: function(name, value) {
var query = params();
query[name] = value;
this.set(query);
},
remove: function(name) {
var query = params();
delete query[name];
this.set(query);
},
clear: function() {
this.set();
},
path: function(query, route) {
query || (query = {});
route || (route = current().route);
return route.path(current().params, { query: sanitize(_.extend(params(), query)) });
}
};
})(Router);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment