'use strict';
/**
* @ngdoc directive
* @name angular.module.ng.$compileProvider.directive.ng-switch
* @restrict EA
*
* @description
* Conditionally change the DOM structure.
*
* @usageContent
* ...
* ...
* ...
* ...
*
* @scope
* @param {*} ng-switch|on expression to match against ng-switch-when .
* @paramDescription
* On child elments add:
*
* * `ng-switch-when`: the case statement to match against. If match then this
* case will be displayed.
* * `ng-switch-default`: the default case when no other casses match.
*
* @example
selection={{selection}}
Settings Div
Home Span
default
it('should start in settings', function() {
expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Settings Div/);
});
it('should change to home', function() {
select('selection').option('home');
expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Home Span/);
});
it('should select deafault', function() {
select('selection').option('other');
expect(element('.doc-example-live [ng-switch]').text()).toMatch(/default/);
});
*/
var NG_SWITCH = 'ng-switch';
var ngSwitchDirective = valueFn({
restrict: 'EA',
compile: function(element, attr) {
var watchExpr = attr.ngSwitch || attr.on,
cases = {};
element.data(NG_SWITCH, cases);
return function(scope, element){
var selectedTransclude,
selectedElement;
scope.$watch(watchExpr, function(value) {
if (selectedElement) {
selectedElement.remove();
selectedElement = null;
}
if ((selectedTransclude = cases['!' + value] || cases['?'])) {
scope.$eval(attr.change);
selectedTransclude(scope.$new(), function(caseElement, scope) {
selectedElement = caseElement;
element.append(caseElement);
element.bind('$destroy', bind(scope, scope.$destroy));
});
}
});
};
}
});
var ngSwitchWhenDirective = ngDirective({
transclude: 'element',
priority: 500,
compile: function(element, attrs, transclude) {
var cases = element.inheritedData(NG_SWITCH);
assertArg(cases);
cases['!' + attrs.ngSwitchWhen] = transclude;
}
});
var ngSwitchDefaultDirective = ngDirective({
transclude: 'element',
priority: 500,
compile: function(element, attrs, transclude) {
var cases = element.inheritedData(NG_SWITCH);
assertArg(cases);
cases['?'] = transclude;
}
});