From 3c8f22e98fa34bcd04f6207fe92cb6bed75b5fa0 Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Sat, 3 Oct 2015 09:39:08 -0700 Subject: [PATCH] fix(carousel): re-enable deprecated directives - Re-implement deprecated directives - Re-expose `CarouselController` with deprecation notice --- src/carousel/carousel.js | 31 ++++++++++++++++++++++++++---- src/carousel/test/carousel.spec.js | 24 ++++++++++++----------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/carousel/carousel.js b/src/carousel/carousel.js index 305e5293f6..274bb221ca 100644 --- a/src/carousel/carousel.js +++ b/src/carousel/carousel.js @@ -246,7 +246,6 @@ angular.module('ui.bootstrap.carousel', []) */ .directive('uibCarousel', [function() { return { - restrict: 'EA', transclude: true, replace: true, controller: 'UibCarouselController', @@ -421,11 +420,24 @@ angular.module('ui.bootstrap.carousel') .value('$carouselSuppressWarning', false) +.controller('CarouselController', ['$scope', '$element', '$controller', '$log', '$carouselSuppressWarning', function($scope, $element, $controller, $log, $carouselSuppressWarning) { + if (!$carouselSuppressWarning) { + $log.warn('CarouselController is now deprecated. Use UibCarouselController instead.'); + } + + return $controller('UibCarouselController', { + $scope: $scope, + $element: $element + }); +}]) + .directive('carousel', ['$log', '$carouselSuppressWarning', function($log, $carouselSuppressWarning) { return { - restrict: 'EA', transclude: true, replace: true, + controller: 'CarouselController', + controllerAs: 'carousel', + require: 'carousel', templateUrl: function(element, attrs) { return attrs.templateUrl || 'template/carousel/carousel.html'; }, @@ -445,8 +457,7 @@ angular.module('ui.bootstrap.carousel') .directive('slide', ['$log', '$carouselSuppressWarning', function($log, $carouselSuppressWarning) { return { - - restrict: 'EA', + require: '^carousel', transclude: true, replace: true, templateUrl: function(element, attrs) { @@ -461,6 +472,18 @@ angular.module('ui.bootstrap.carousel') if (!$carouselSuppressWarning) { $log.warn('slide is now deprecated. Use uib-slide instead.'); } + + carouselCtrl.addSlide(scope, element); + //when the scope is destroyed then remove the slide from the current slides array + scope.$on('$destroy', function() { + carouselCtrl.removeSlide(scope); + }); + + scope.$watch('active', function(active) { + if (active) { + carouselCtrl.select(scope); + } + }); } }; }]); \ No newline at end of file diff --git a/src/carousel/test/carousel.spec.js b/src/carousel/test/carousel.spec.js index 3a42ff24b5..022bcd247f 100644 --- a/src/carousel/test/carousel.spec.js +++ b/src/carousel/test/carousel.spec.js @@ -340,7 +340,6 @@ describe('carousel', function() { }); describe('slide order', function() { - beforeEach(function() { scope.slides = [ {active:false,content:'one', id:1}, @@ -551,27 +550,30 @@ describe('carousel deprecation', function() { spyOn($log, 'warn'); var element = '' + - '' + - '{{slide.content}}' + - '' + - ''; + '' + + '{{slide.content}}' + + '' + + ''; element = $compile(element)($rootScope); $rootScope.$digest(); - expect($log.warn.calls.count()).toBe(1); - expect($log.warn.calls.argsFor(0)).toEqual(['carousel is now deprecated. Use uib-carousel instead.']); + expect($log.warn.calls.count()).toBe(2); + expect($log.warn.calls.argsFor(0)).toEqual(['CarouselController is now deprecated. Use UibCarouselController instead.']); + expect($log.warn.calls.argsFor(1)).toEqual(['carousel is now deprecated. Use uib-carousel instead.']); })); it('should give warning by default for slider', inject(function($compile, $log, $rootScope) { spyOn($log, 'warn'); var element = '' + - '' + - ''; + '' + + ''; element = $compile(element)($rootScope); $rootScope.$digest(); - expect($log.warn.calls.count()).toBe(2); - expect($log.warn.calls.argsFor(0)).toEqual(['slide is now deprecated. Use uib-slide instead.']); + expect($log.warn.calls.count()).toBe(3); + expect($log.warn.calls.argsFor(0)).toEqual(['CarouselController is now deprecated. Use UibCarouselController instead.']); + expect($log.warn.calls.argsFor(1)).toEqual(['slide is now deprecated. Use uib-slide instead.']); + expect($log.warn.calls.argsFor(2)).toEqual(['carousel is now deprecated. Use uib-carousel instead.']); })); });