From f54db2ccda399f2677e4ca7588018cb31545a2b4 Mon Sep 17 00:00:00 2001
From: Igor Minar
Date: Thu, 8 Mar 2012 15:00:38 -0800
Subject: chore(directives,widgets): reorg the code under directive/ dir
---
src/directive/ngSwitch.js | 110 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 110 insertions(+)
create mode 100644 src/directive/ngSwitch.js
(limited to 'src/directive/ngSwitch.js')
diff --git a/src/directive/ngSwitch.js b/src/directive/ngSwitch.js
new file mode 100644
index 00000000..0b2475f3
--- /dev/null
+++ b/src/directive/ngSwitch.js
@@ -0,0 +1,110 @@
+'use strict';
+
+/**
+ * @ngdoc directive
+ * @name angular.module.ng.$compileProvider.directive.ng:switch
+ * @restrict EA
+ *
+ * @description
+ * Conditionally change the DOM structure.
+ *
+ * @usageContent
+ * ...
+ * ...
+ * ...
+ * ...
+ *
+ * @scope
+ * @param {*} 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;
+ }
+});
--
cgit v1.2.3