From 415a1e35294b3bbdb6f4e6cd7ef77826831087a8 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Wed, 21 Jan 2015 14:37:33 -0600 Subject: [PATCH 01/21] Fixed initialization of active tab. The getActive/setActive code previously overwrote any user actions associated with clicking tabs w/ the initial "active" attr value(s). Now, attrs.active is truely used to initialize only. --- src/tabs/tabs.js | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 79ba1db..a9cf4cc 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -183,30 +183,20 @@ angular.module('mm.foundation.tabs', []) }, compile: function(elm, attrs, transclude) { return function postLink(scope, elm, attrs, tabsetCtrl) { - var getActive, setActive; + //if we've provided an active in attrs + //we're initializing which tab is selected + //once we use it once to initialize scope.active we don't + //want to watch it anymore or use it in overriding the selection + //behavior of end-users. + var getActive; + if (attrs.active) { getActive = $parse(attrs.active); - setActive = getActive.assign; - scope.$parent.$watch(getActive, function updateActive(value, oldVal) { - // Avoid re-initializing scope.active as it is already initialized - // below. (watcher is called async during init with value === - // oldVal) - if (value !== oldVal) { - scope.active = !!value; - } - }); scope.active = getActive(scope.$parent); - } else { - setActive = getActive = angular.noop; } scope.$watch('active', function(active) { - if( !angular.isFunction(setActive) ){ - return; - } - // Note this watcher also initializes and assigns scope.active to the - // attrs.active expression. - setActive(scope.$parent, active); + if (active) { tabsetCtrl.select(scope); scope.onSelect(); From 59bfb988ecb4e112386277732244f859012c3411 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 06:09:52 -0600 Subject: [PATCH 02/21] reverted inadvertant delete --- src/tabs/tabs.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index a9cf4cc..11353c9 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -193,7 +193,9 @@ angular.module('mm.foundation.tabs', []) if (attrs.active) { getActive = $parse(attrs.active); scope.active = getActive(scope.$parent); - } + } else { +- setActive = getActive = angular.noop; + } scope.$watch('active', function(active) { From 2d66bc92f234b8a3770fc6c767f0bb83561af72f Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 06:18:18 -0600 Subject: [PATCH 03/21] reverted previous commit --- src/tabs/tabs.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 11353c9..a29abee 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -193,10 +193,8 @@ angular.module('mm.foundation.tabs', []) if (attrs.active) { getActive = $parse(attrs.active); scope.active = getActive(scope.$parent); - } else { -- setActive = getActive = angular.noop; - } - + } + scope.$watch('active', function(active) { if (active) { From 05ee04d906dd4985ee6c4c6105fcd71a92400a40 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 08:46:15 -0600 Subject: [PATCH 04/21] updated if active is not set --- src/tabs/tabs.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index a29abee..98b3d9c 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -193,7 +193,11 @@ angular.module('mm.foundation.tabs', []) if (attrs.active) { getActive = $parse(attrs.active); scope.active = getActive(scope.$parent); - } + } else + { + getActive = angular.noop; + setActive = angular.noop; + } scope.$watch('active', function(active) { From f0bd745066b564ba5258a45afba1660f0edf7776 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 08:48:53 -0600 Subject: [PATCH 05/21] Fixed for ng-repeat --- src/tabs/tabs.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 98b3d9c..e346143 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -200,7 +200,10 @@ angular.module('mm.foundation.tabs', []) } scope.$watch('active', function(active) { - + if(typeof(active) == "undefined") + { + setActive(scope.$parent, active); + } if (active) { tabsetCtrl.select(scope); scope.onSelect(); From c040b99072e811e3aac0003d90c1180c5b5d5e9d Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 08:52:47 -0600 Subject: [PATCH 06/21] Need to set scope.active outside IS attrs.active --- src/tabs/tabs.js | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index e346143..c6e906c 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -192,18 +192,11 @@ angular.module('mm.foundation.tabs', []) if (attrs.active) { getActive = $parse(attrs.active); - scope.active = getActive(scope.$parent); - } else - { - getActive = angular.noop; - setActive = angular.noop; - } + } + + scope.active = getActive(scope.$parent); scope.$watch('active', function(active) { - if(typeof(active) == "undefined") - { - setActive(scope.$parent, active); - } if (active) { tabsetCtrl.select(scope); scope.onSelect(); From b5c5d8647e815a50be2f8175a64b15da5987a622 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 08:57:53 -0600 Subject: [PATCH 07/21] Reverted some changes to be more consistent --- src/tabs/tabs.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index c6e906c..32d2edf 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -188,15 +188,24 @@ angular.module('mm.foundation.tabs', []) //once we use it once to initialize scope.active we don't //want to watch it anymore or use it in overriding the selection //behavior of end-users. - var getActive; + var getActive, setActive; if (attrs.active) { getActive = $parse(attrs.active); - } - - scope.active = getActive(scope.$parent); - + setActive = getActive.assign; + scope.active = getActive(scope.$parent); + } else { +- setActive = getActive = angular.noop; + } + scope.$watch('active', function(active) { + if( !angular.isFunction(setActive) ){ +- return; +- } +- // Note this watcher also initializes and assigns scope.active to the +- // attrs.active expression. +- setActive(scope.$parent, active); + if (active) { tabsetCtrl.select(scope); scope.onSelect(); From f04afdc19f8f091d01bda38a8a573db603bc0a84 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:00:20 -0600 Subject: [PATCH 08/21] Changed for jsLint --- src/tabs/tabs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 32d2edf..4d0c224 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -195,7 +195,8 @@ angular.module('mm.foundation.tabs', []) setActive = getActive.assign; scope.active = getActive(scope.$parent); } else { -- setActive = getActive = angular.noop; +- getActive = angular.noop; + setActive = getActive; } scope.$watch('active', function(active) { From 842509e8bfb299e6900d9916303843f20e5aafbe Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:03:06 -0600 Subject: [PATCH 09/21] removed typo --- src/tabs/tabs.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 4d0c224..ac87b2e 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -195,17 +195,17 @@ angular.module('mm.foundation.tabs', []) setActive = getActive.assign; scope.active = getActive(scope.$parent); } else { -- getActive = angular.noop; + getActive = angular.noop; setActive = getActive; } scope.$watch('active', function(active) { if( !angular.isFunction(setActive) ){ -- return; -- } -- // Note this watcher also initializes and assigns scope.active to the -- // attrs.active expression. -- setActive(scope.$parent, active); + return; + } + // Note this watcher also initializes and assigns scope.active to the + // attrs.active expression. + setActive(scope.$parent, active); if (active) { tabsetCtrl.select(scope); From eec9e032d331f39ae72185817ec2596decf14cb8 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:07:14 -0600 Subject: [PATCH 10/21] To pass test 229 --- src/tabs/tabs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index ac87b2e..cbb2587 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -211,6 +211,7 @@ angular.module('mm.foundation.tabs', []) tabsetCtrl.select(scope); scope.onSelect(); } else { + tabsetCtrl.select({}); scope.onDeselect(); } }); From b37381d429a5f9850b12aa2e44a6e4a554fda01e Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:10:15 -0600 Subject: [PATCH 11/21] Update tabs.js --- src/tabs/tabs.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index cbb2587..93f45a0 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -13,6 +13,12 @@ angular.module('mm.foundation.tabs', []) var ctrl = this, tabs = ctrl.tabs = $scope.tabs = []; + ctrl.deselect = function(scope){ + angular.forEach(tabs, function(tab) { + tab.active = false; + }); + tab.active = false; + } ctrl.select = function(tab) { angular.forEach(tabs, function(tab) { tab.active = false; @@ -211,7 +217,7 @@ angular.module('mm.foundation.tabs', []) tabsetCtrl.select(scope); scope.onSelect(); } else { - tabsetCtrl.select({}); + tabsetCtrl.deselect(scope); scope.onDeselect(); } }); From 7fcb417c685d23855deb2f3952b1662c9db81965 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:12:20 -0600 Subject: [PATCH 12/21] Fixed typo --- src/tabs/tabs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 93f45a0..f0bfbdf 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -18,7 +18,8 @@ angular.module('mm.foundation.tabs', []) tab.active = false; }); tab.active = false; - } + }; + ctrl.select = function(tab) { angular.forEach(tabs, function(tab) { tab.active = false; From 3a1a7adb3f56cd078281b1a81aee5d2cee92ad6a Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:14:37 -0600 Subject: [PATCH 13/21] renamed param --- src/tabs/tabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index f0bfbdf..962e809 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -13,7 +13,7 @@ angular.module('mm.foundation.tabs', []) var ctrl = this, tabs = ctrl.tabs = $scope.tabs = []; - ctrl.deselect = function(scope){ + ctrl.deselect = function(tab){ angular.forEach(tabs, function(tab) { tab.active = false; }); From 77ac343e019e65936617e8ead36cf0df52bd3c51 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:17:54 -0600 Subject: [PATCH 14/21] fixed .deselect() --- src/tabs/tabs.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 962e809..072252a 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -13,11 +13,10 @@ angular.module('mm.foundation.tabs', []) var ctrl = this, tabs = ctrl.tabs = $scope.tabs = []; - ctrl.deselect = function(tab){ + ctrl.deselect = function(){ angular.forEach(tabs, function(tab) { tab.active = false; }); - tab.active = false; }; ctrl.select = function(tab) { @@ -218,7 +217,7 @@ angular.module('mm.foundation.tabs', []) tabsetCtrl.select(scope); scope.onSelect(); } else { - tabsetCtrl.deselect(scope); + tabsetCtrl.deselect(); scope.onDeselect(); } }); From 4372a589957a08c0a55e3cc500ab5b68d58c4921 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:26:37 -0600 Subject: [PATCH 15/21] Updates for tests --- src/tabs/tabs.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 072252a..adf3412 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -206,18 +206,17 @@ angular.module('mm.foundation.tabs', []) } scope.$watch('active', function(active) { - if( !angular.isFunction(setActive) ){ - return; - } - // Note this watcher also initializes and assigns scope.active to the + if(angular.isFunction(setActive) ){ + // Note this watcher also initializes and assigns scope.active to the // attrs.active expression. setActive(scope.$parent, active); - + } + if (active) { tabsetCtrl.select(scope); scope.onSelect(); } else { - tabsetCtrl.deselect(); + tabsetCtrl.select(scope); scope.onDeselect(); } }); From c49a445d2e7e30fc7c41b163f5e9aa1b63a1a82f Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:30:03 -0600 Subject: [PATCH 16/21] Tweaks for 231 & 233 --- src/tabs/tabs.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index adf3412..0c6eced 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -12,12 +12,6 @@ angular.module('mm.foundation.tabs', []) .controller('TabsetController', ['$scope', function TabsetCtrl($scope) { var ctrl = this, tabs = ctrl.tabs = $scope.tabs = []; - - ctrl.deselect = function(){ - angular.forEach(tabs, function(tab) { - tab.active = false; - }); - }; ctrl.select = function(tab) { angular.forEach(tabs, function(tab) { @@ -202,21 +196,21 @@ angular.module('mm.foundation.tabs', []) scope.active = getActive(scope.$parent); } else { getActive = angular.noop; - setActive = getActive; + setActive = getActive; } scope.$watch('active', function(active) { - if(angular.isFunction(setActive) ){ - // Note this watcher also initializes and assigns scope.active to the + if(!angular.isFunction(setActive) ){ + return; + } + // Note this watcher also initializes and assigns scope.active to the // attrs.active expression. setActive(scope.$parent, active); - } if (active) { tabsetCtrl.select(scope); scope.onSelect(); } else { - tabsetCtrl.select(scope); scope.onDeselect(); } }); From 0ab642771c88465325e9304e61cfcc58850ff441 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:33:34 -0600 Subject: [PATCH 17/21] fix for test 229 --- src/tabs/tabs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 0c6eced..f196e29 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -211,6 +211,7 @@ angular.module('mm.foundation.tabs', []) tabsetCtrl.select(scope); scope.onSelect(); } else { + scope.active = false; scope.onDeselect(); } }); From f32278f0dfd42fb73bc8b0c5c7737cb0ffb8b376 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:36:36 -0600 Subject: [PATCH 18/21] added deselect for callback --- src/tabs/tabs.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index f196e29..a49cd96 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -211,7 +211,6 @@ angular.module('mm.foundation.tabs', []) tabsetCtrl.select(scope); scope.onSelect(); } else { - scope.active = false; scope.onDeselect(); } }); @@ -223,6 +222,12 @@ angular.module('mm.foundation.tabs', []) }); } + scope.deselect = function(){ + if(!scope.disabled){ + scope.active = false; + } + }; + scope.select = function() { if ( ! scope.disabled ) { scope.active = true; From d815aee1bd8bf5d88beae3f16f8d34186dd3a1f4 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:44:50 -0600 Subject: [PATCH 19/21] added tabset .deselect(tab) --- src/tabs/tabs.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index a49cd96..96ab292 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -20,6 +20,13 @@ angular.module('mm.foundation.tabs', []) tab.active = true; }; + ctrl.deselect = function(tab){ + angular.forEach(tabs, function(tab){ + tab.active = false; + }); + tab.active = false; + }; + ctrl.addTab = function addTab(tab) { tabs.push(tab); if (tabs.length === 1 || tab.active) { @@ -211,6 +218,7 @@ angular.module('mm.foundation.tabs', []) tabsetCtrl.select(scope); scope.onSelect(); } else { + tabsetCtrl.deselect(scope); scope.onDeselect(); } }); From 95f6197c108ac71e9dd7eb77f33150cd4e66a2c2 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Tue, 17 Feb 2015 09:49:37 -0600 Subject: [PATCH 20/21] Update tab.deselect() for 229 --- src/tabs/tabs.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 96ab292..c5000b6 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -20,13 +20,6 @@ angular.module('mm.foundation.tabs', []) tab.active = true; }; - ctrl.deselect = function(tab){ - angular.forEach(tabs, function(tab){ - tab.active = false; - }); - tab.active = false; - }; - ctrl.addTab = function addTab(tab) { tabs.push(tab); if (tabs.length === 1 || tab.active) { @@ -218,7 +211,6 @@ angular.module('mm.foundation.tabs', []) tabsetCtrl.select(scope); scope.onSelect(); } else { - tabsetCtrl.deselect(scope); scope.onDeselect(); } }); @@ -232,6 +224,7 @@ angular.module('mm.foundation.tabs', []) scope.deselect = function(){ if(!scope.disabled){ + tabsetCtrl.select(scope); scope.active = false; } }; From b3f3b8b6531cf7cb1ea97a17a13b478e1c739292 Mon Sep 17 00:00:00 2001 From: Mike Angstadt Date: Fri, 20 Feb 2015 15:42:32 -0600 Subject: [PATCH 21/21] For final use. --- src/tabs/tabs.js | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index c5000b6..68da560 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -188,25 +188,15 @@ angular.module('mm.foundation.tabs', []) //once we use it once to initialize scope.active we don't //want to watch it anymore or use it in overriding the selection //behavior of end-users. - var getActive, setActive; + var getActive; if (attrs.active) { getActive = $parse(attrs.active); - setActive = getActive.assign; scope.active = getActive(scope.$parent); - } else { - getActive = angular.noop; - setActive = getActive; - } + } scope.$watch('active', function(active) { - if(!angular.isFunction(setActive) ){ - return; - } - // Note this watcher also initializes and assigns scope.active to the - // attrs.active expression. - setActive(scope.$parent, active); - + if (active) { tabsetCtrl.select(scope); scope.onSelect(); @@ -222,13 +212,6 @@ angular.module('mm.foundation.tabs', []) }); } - scope.deselect = function(){ - if(!scope.disabled){ - tabsetCtrl.select(scope); - scope.active = false; - } - }; - scope.select = function() { if ( ! scope.disabled ) { scope.active = true;