From 8a3cad4946e275ea06089bc3a0de6c66ccb309d0 Mon Sep 17 00:00:00 2001 From: Tobias Werthmann Date: Wed, 4 Dec 2013 14:52:55 +0100 Subject: [PATCH 1/2] frontend: implements second parameter in ui-sref for options --- src/stateDirectives.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/stateDirectives.js b/src/stateDirectives.js index e6bba91cf..e89e33e41 100644 --- a/src/stateDirectives.js +++ b/src/stateDirectives.js @@ -1,7 +1,7 @@ function parseStateRef(ref) { - var parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); + var parsed = ref.replace(/\n/g, " ").match(/^([^(]+)(?:\s*(?:\(\s*(\{.*?\}){1}(?:\s*,\s*(\{.*?\}))?\s*\)){1})?$/); if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'"); - return { state: parsed[1], paramExpr: parsed[3] || null }; + return { state: parsed[1], paramExpr: parsed[2] || null, options: parsed[3] || {} }; } $StateRefDirective.$inject = ['$state']; @@ -10,7 +10,10 @@ function $StateRefDirective($state) { restrict: 'A', link: function(scope, element, attrs) { var ref = parseStateRef(attrs.uiSref); - var params = null, url = null, base = $state.$current; + var params = null, options = {}, url = null, base = $state.$current; + var defaults = { + relative : base + }; var isForm = element[0].nodeName === "FORM"; var attr = isForm ? "action" : "href", nav = true; @@ -24,7 +27,7 @@ function $StateRefDirective($state) { if (newVal) params = newVal; if (!nav) return; - var newHref = $state.href(ref.state, params, { relative: base }); + var newHref = $state.href(ref.state, params, options); if (!newHref) { nav = false; @@ -38,6 +41,7 @@ function $StateRefDirective($state) { if (newVal !== params) update(newVal); }, true); params = scope.$eval(ref.paramExpr); + options = angular.extend({}, defaults, scope.$eval(ref.options)); } update(); @@ -48,7 +52,7 @@ function $StateRefDirective($state) { if ((button === 0 || button == 1) && !e.ctrlKey && !e.metaKey && !e.shiftKey) { scope.$evalAsync(function() { - $state.go(ref.state, params, { relative: base }); + $state.go(ref.state, params, options); }); e.preventDefault(); } From d41da0ac5b6695d8b2e404243d72cf58ed5f4aa9 Mon Sep 17 00:00:00 2001 From: Tobias Werthmann Date: Wed, 4 Dec 2013 15:45:18 +0100 Subject: [PATCH 2/2] frontend: fixed initializing default options for ui-sref --- src/stateDirectives.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/stateDirectives.js b/src/stateDirectives.js index e89e33e41..a50dcebeb 100644 --- a/src/stateDirectives.js +++ b/src/stateDirectives.js @@ -11,9 +11,6 @@ function $StateRefDirective($state) { link: function(scope, element, attrs) { var ref = parseStateRef(attrs.uiSref); var params = null, options = {}, url = null, base = $state.$current; - var defaults = { - relative : base - }; var isForm = element[0].nodeName === "FORM"; var attr = isForm ? "action" : "href", nav = true; @@ -23,6 +20,10 @@ function $StateRefDirective($state) { base = stateData.state; } + var defaults = { + relative : base + }; + var update = function(newVal) { if (newVal) params = newVal; if (!nav) return;