From 3d08631afe9dff9cf98c87d04339b6bca98c1041 Mon Sep 17 00:00:00 2001 From: Jarek Tomanek Date: Tue, 9 Aug 2016 15:14:09 +0200 Subject: [PATCH 1/3] chore(git): add .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7bf6eb1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bower_components +node_modules From 1ddb847407c7e2c0aa4ef1197bdb5d342ea9abb6 Mon Sep 17 00:00:00 2001 From: Jarek Tomanek Date: Tue, 9 Aug 2016 15:16:36 +0200 Subject: [PATCH 2/3] fix(items): ensure items are displayed in the correct order --- dist/js/multi-carousel.directive.js | 11 +++++++++++ src/js/multi-carousel.directive.js | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/dist/js/multi-carousel.directive.js b/dist/js/multi-carousel.directive.js index f22bbb0..e16efc3 100644 --- a/dist/js/multi-carousel.directive.js +++ b/dist/js/multi-carousel.directive.js @@ -23,6 +23,7 @@ var moving = false; var inner = angular.element(element[0].querySelector('inner')); var interval; + var initialized = false; // API scope.prev = prev; @@ -34,6 +35,16 @@ scope.$watch('items', start); function start() { + // avoid infinite loop when modifying items + if (initialized) { + return; + } + initialized = true; + + // DOM wrapper being shifted to the left requires + // that the last item is moved to the begining. + scope.items.unshift(scope.items.pop()); + $interval.cancel(interval); interval = $interval(function() { if (enabled && scope.items.length && scope.$eval(attrs.interval)) { diff --git a/src/js/multi-carousel.directive.js b/src/js/multi-carousel.directive.js index f22bbb0..e16efc3 100644 --- a/src/js/multi-carousel.directive.js +++ b/src/js/multi-carousel.directive.js @@ -23,6 +23,7 @@ var moving = false; var inner = angular.element(element[0].querySelector('inner')); var interval; + var initialized = false; // API scope.prev = prev; @@ -34,6 +35,16 @@ scope.$watch('items', start); function start() { + // avoid infinite loop when modifying items + if (initialized) { + return; + } + initialized = true; + + // DOM wrapper being shifted to the left requires + // that the last item is moved to the begining. + scope.items.unshift(scope.items.pop()); + $interval.cancel(interval); interval = $interval(function() { if (enabled && scope.items.length && scope.$eval(attrs.interval)) { From 93a3d6da13229866284ec3e159490370a1e4aa2c Mon Sep 17 00:00:00 2001 From: Jarek Tomanek Date: Tue, 9 Aug 2016 15:17:29 +0200 Subject: [PATCH 3/3] fix(items): ensure continuous animation when navigating back --- dist/js/multi-carousel.directive.js | 4 ++++ src/js/multi-carousel.directive.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/dist/js/multi-carousel.directive.js b/dist/js/multi-carousel.directive.js index e16efc3..f973042 100644 --- a/dist/js/multi-carousel.directive.js +++ b/dist/js/multi-carousel.directive.js @@ -45,6 +45,10 @@ // that the last item is moved to the begining. scope.items.unshift(scope.items.pop()); + // Ensures continuity during navigation + // when there's only one invisible item + scope.items = scope.items.concat(angular.copy(scope.items)); + $interval.cancel(interval); interval = $interval(function() { if (enabled && scope.items.length && scope.$eval(attrs.interval)) { diff --git a/src/js/multi-carousel.directive.js b/src/js/multi-carousel.directive.js index e16efc3..f973042 100644 --- a/src/js/multi-carousel.directive.js +++ b/src/js/multi-carousel.directive.js @@ -45,6 +45,10 @@ // that the last item is moved to the begining. scope.items.unshift(scope.items.pop()); + // Ensures continuity during navigation + // when there's only one invisible item + scope.items = scope.items.concat(angular.copy(scope.items)); + $interval.cancel(interval); interval = $interval(function() { if (enabled && scope.items.length && scope.$eval(attrs.interval)) {