From e88d6179c3a6a137e75fa09de906fc83c6515db2 Mon Sep 17 00:00:00 2001
From: Lucas Galfasó
Date: Sun, 3 Mar 2013 22:23:29 -0300
Subject: feat(ng:switch): Preserve the order of the elements not in the
ng-switch
Preserve the order of the elements that are not part of a case nor default in
a ng-switch directive
BREAKING CHANGE: elements not in the ng-switch were rendered after the
ng-switch elements. Now they are rendered in-place.
Ng-switch directives should be updated with non ng-switch elements
in render-order. e.g.
The following was previously rendered with
1 after "2":
To keep the old behaviour, say:
Closes #1074
---
src/ng/directive/ngSwitch.js | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
(limited to 'src/ng/directive/ngSwitch.js')
diff --git a/src/ng/directive/ngSwitch.js b/src/ng/directive/ngSwitch.js
index aa04a998..88b1e701 100644
--- a/src/ng/directive/ngSwitch.js
+++ b/src/ng/directive/ngSwitch.js
@@ -6,13 +6,16 @@
* @restrict EA
*
* @description
- * Conditionally change the DOM structure.
+ * Conditionally change the DOM structure. Elements within ngSwitch but without
+ * ngSwitchWhen or ngSwitchDefault directives will be preserved at the location
+ * as specified in the template
*
* @usageContent
* ...
* ...
* ...
* ...
+ * ...
*
* @scope
* @param {*} ngSwitch|on expression to match against ng-switch-when.
@@ -26,6 +29,7 @@
* are multiple default cases, all of them will be displayed when no other
* case match.
*
+ *
* @example
@@ -90,9 +94,9 @@ var ngSwitchDirective = valueFn({
forEach(selectedTranscludes, function(selectedTransclude) {
var selectedScope = scope.$new();
selectedScopes.push(selectedScope);
- selectedTransclude(selectedScope, function(caseElement) {
+ selectedTransclude.transclude(selectedScope, function(caseElement) {
selectedElements.push(caseElement);
- element.append(caseElement);
+ selectedTransclude.element.after(caseElement);
});
});
}
@@ -107,7 +111,7 @@ var ngSwitchWhenDirective = ngDirective({
compile: function(element, attrs, transclude) {
return function(scope, element, attr, ctrl) {
ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
- ctrl.cases['!' + attrs.ngSwitchWhen].push(transclude);
+ ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: transclude, element: element });
};
}
});
@@ -119,7 +123,7 @@ var ngSwitchDefaultDirective = ngDirective({
compile: function(element, attrs, transclude) {
return function(scope, element, attr, ctrl) {
ctrl.cases['?'] = (ctrl.cases['?'] || []);
- ctrl.cases['?'].push(transclude);
+ ctrl.cases['?'].push({ transclude: transclude, element: element });
};
}
});
--
cgit v1.2.3