X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=ang%2FcrmRouteBinder.js;h=a8563fd0c1deaf17e41c8357eecc4b8cfbce051d;hb=ee80c8aed0838e03e2f24797bb297d19121111ac;hp=0dd232dd637c5a56f2060f80b4b9eb5ce19e99f0;hpb=25833519fc4c33bff4d5ffa1466d3f19821a8efe;p=civicrm-core.git diff --git a/ang/crmRouteBinder.js b/ang/crmRouteBinder.js index 0dd232dd63..a8563fd0c1 100644 --- a/ang/crmRouteBinder.js +++ b/ang/crmRouteBinder.js @@ -50,18 +50,18 @@ registerGlobalListener($injector); options.format = options.format || 'json'; - var fmt = formats[options.format]; + var fmt = _.clone(formats[options.format]); if (options.deep) { fmt.watcher = '$watch'; } if (options.default === undefined) { options.default = fmt.default; } - var _scope = this; + var value, + _scope = this, + $route = $injector.get('$route'), + $timeout = $injector.get('$timeout'); - var $route = $injector.get('$route'), $timeout = $injector.get('$timeout'); - - var value; if (options.param in $route.current.params) { value = fmt.decode($route.current.params[options.param]); } @@ -74,12 +74,25 @@ // Keep the URL bar up-to-date. _scope[fmt.watcher](options.expr, function (newValue) { var encValue = fmt.encode(newValue); - if ($route.current.params[options.param] === encValue) return; + if (!_.isEqual(newValue, options.default) && $route.current.params[options.param] === encValue) { + return; + } pendingUpdates = pendingUpdates || {}; pendingUpdates[options.param] = encValue; var p = angular.extend({}, $route.current.params, pendingUpdates); - angular.forEach(ignorable, function(v,k){ if (p[k] === v) delete p[k]; }); + + angular.forEach(ignorable, function(v, k) { + if (p[k] === v) { + delete p[k]; + } + }); + + // Remove params from url if they equal their defaults + if (_.isEqual(newValue, options.default)) { + p[options.param] = null; + } + $route.updateParams(p); if (activeTimer) $timeout.cancel(activeTimer);