From b5ac634b1934bcd128223a246795eeef79cc87b9 Mon Sep 17 00:00:00 2001 From: mathix Date: Fri, 18 Mar 2016 15:09:46 +0100 Subject: [PATCH 1/2] Properly handling binding to empty collection of slides --- README.md | 2 +- angular-carousel.css | 4 +- angular-carousel.js | 120 ++++++++++++++++++++------------------- angular-carousel.min.css | 5 +- angular-carousel.min.js | 2 +- bower.json | 2 +- examples/demo.html | 19 ++++++- examples/demo.js | 19 ++++++- gulpfile.js | 8 ++- package.json | 2 +- 10 files changed, 109 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index d017aba..71b0ec5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# angular-carousel.js 1.2.0 +# angular-carousel.js 1.2.1 A simple very generic AngularJS carousel. Features: diff --git a/angular-carousel.css b/angular-carousel.css index 7e6de0a..fb9b856 100644 --- a/angular-carousel.css +++ b/angular-carousel.css @@ -1,5 +1,5 @@ -/** - * @license AngularJS v1.2.0 +/*! + * @license AngularJS v1.2.1 * (c) 2015 Lifely * License: MIT */ diff --git a/angular-carousel.js b/angular-carousel.js index 709ced3..4caf471 100644 --- a/angular-carousel.js +++ b/angular-carousel.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.2.0 + * @license AngularJS v1.2.1 * (c) 2015 Lifely * License: MIT */ @@ -215,80 +215,82 @@ angular.module('angular-carousel', []) removeOldVirtualSlides(); slides = element.find('slide'); - // Add slides before and after the current slides - if(slides.length > 0) { + // Create new carousel and duplicate slides + name = attrs.ngCarouselName; + currentCarousel = Carousel.add(slides.length, attrs.ngCarouselName, scope, attrs); + angular.forEach(savedCallbacks, function(savedCallback) { + currentCarousel.onSlideChange(savedCallback); + currentCarousel.unbindOnSlideChangeCallback(0); + }); - // Create new carousel and duplicate slides - name = attrs.ngCarouselName; - currentCarousel = Carousel.add(slides.length, attrs.ngCarouselName, scope, attrs); - angular.forEach(savedCallbacks, function(savedCallback) { - currentCarousel.onSlideChange(savedCallback); - currentCarousel.unbindOnSlideChangeCallback(0); - }); + // Duplicate first and last slide (for infinite effect) + var refreshVirtualSlides = function() { + removeOldVirtualSlides(); + + if(slides.length < 1){ + return; + } - // Duplicate first and last slide (for infinite effect) - var refreshVirtualSlides = function() { - removeOldVirtualSlides(); - slides = element.find('slide'); + slides = element.find('slide'); - if(looping) { - copyFirstAndLastSlide(); - } - else { - makeFirstAndLastSlideEmpty(); - } + if(looping) { + copyFirstAndLastSlide(); + } + else { + makeFirstAndLastSlideEmpty(); + } + + firstSlideCopy.addClass('carousel-slide-copy'); + lastSlideCopy.addClass('carousel-slide-copy'); + slideContainer.append(firstSlideCopy); + slideContainer.prepend(lastSlideCopy); + slideContainer.addClass('carousel-ignore-first-slide'); - firstSlideCopy.addClass('carousel-slide-copy'); - lastSlideCopy.addClass('carousel-slide-copy'); - slideContainer.append(firstSlideCopy); - slideContainer.prepend(lastSlideCopy); - slideContainer.addClass('carousel-ignore-first-slide'); + }; - }; + refreshVirtualSlides(); - refreshVirtualSlides(); + // On slide change, move the slideContainer + var onSlideChangeCallback = function(slideIndex, wrapping) { + var newSlideIndex = slideIndex + 1; // because the first slide doesn't count - // On slide change, move the slideContainer - var onSlideChangeCallback = function(slideIndex, wrapping) { - var newSlideIndex = slideIndex + 1; // because the first slide doesn't count + if(wrapping === 'left') { + newSlideIndex = 0; // first slide + } else if(wrapping === 'right') { + newSlideIndex = slides.length + 1; // last slide + } + move(newSlideIndex, true, function() { if(wrapping === 'left') { - newSlideIndex = 0; // first slide + move(slides.length, false); } else if(wrapping === 'right') { - newSlideIndex = slides.length + 1; // last slide + move(1, false); } + }); + + setNextSlideTimeout(); + refreshVirtualSlides(); + }; - move(newSlideIndex, true, function() { - if(wrapping === 'left') { - move(slides.length, false); - } else if(wrapping === 'right') { - move(1, false); - } - }); - - setNextSlideTimeout(); - refreshVirtualSlides(); - }; + if(currentCarousel.onSlideChange){ currentCarousel.onSlideChange(onSlideChangeCallback); + } - // If new slide was out of range, move to the new assigned one - if(savedSlideIndex !== false && currentCarousel.currentSlide !== savedSlideIndex) { - onSlideChangeCallback(currentCarousel.currentSlide, false); - currentCarousel.toIndex(savedSlideIndex); - } + // If new slide was out of range, move to the new assigned one + if(savedSlideIndex !== false && currentCarousel.currentSlide !== savedSlideIndex) { + onSlideChangeCallback(currentCarousel.currentSlide, false); + currentCarousel.toIndex(savedSlideIndex); + } - // Option: random - if(random) { - var randomSlide = Math.floor(Math.random() * currentCarousel.slidesCount); - currentCarousel.toIndex(randomSlide); - } + // Option: random + if(random) { + var randomSlide = Math.floor(Math.random() * currentCarousel.slidesCount); + currentCarousel.toIndex(randomSlide); + } - // Option: interval - if (interval && currentCarousel.slidesCount >= 2) { - setNextSlideTimeout(); - } - } else { - console.log('ng-carousel error: No slides found') + // Option: interval + if (interval && currentCarousel.slidesCount >= 2) { + setNextSlideTimeout(); } // Initialize Hammer diff --git a/angular-carousel.min.css b/angular-carousel.min.css index 136d377..35db9d7 100644 --- a/angular-carousel.min.css +++ b/angular-carousel.min.css @@ -1,6 +1,5 @@ -/** +/*! * @license AngularJS v1.2.0 * (c) 2015 Lifely * License: MIT - */ -.ng-carousel{display:block;width:100%;height:300px;white-space:nowrap;position:relative;overflow:hidden}.ng-carousel slidecontainer{display:block;position:absolute;top:0;width:100%;height:100%;z-index:1;font-size:0}.ng-carousel slidecontainer.carousel-ignore-first-slide{-webkit-transform:translate(-100%,0);-moz-transform:translate(-100%,0);-o-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}.ng-carousel slidecontainer.carousel-animate{-webkit-transition:-webkit-transform .5s ease-out 0s;-moz-transition:-moz-transform .5s ease-out 0s;-ms-transition:-ms-transform .5s ease-out 0s;-o-transition:-o-transform .5s ease-out 0s;transition:transform .5s ease-out 0s}.ng-carousel slide{position:relative;display:inline-block;vertical-align:top;font-size:16px;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:center}.ng-carousel .carousel-arrow{display:inline-block;position:absolute;top:0;bottom:0;z-index:1;width:100px;text-align:center}.ng-carousel .carousel-arrow.carousel-arrow-left{left:0}.ng-carousel .carousel-arrow.carousel-arrow-right{right:0} \ No newline at end of file + */.ng-carousel{display:block;width:100%;height:300px;white-space:nowrap;position:relative;overflow:hidden}.ng-carousel slidecontainer{display:block;position:absolute;top:0;width:100%;height:100%;z-index:1;font-size:0}.ng-carousel slidecontainer.carousel-ignore-first-slide{-webkit-transform:translate(-100%,0);-moz-transform:translate(-100%,0);-o-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}.ng-carousel slidecontainer.carousel-animate{-webkit-transition:-webkit-transform .5s ease-out 0s;-moz-transition:-moz-transform .5s ease-out 0s;-ms-transition:-ms-transform .5s ease-out 0s;-o-transition:-o-transform .5s ease-out 0s;transition:transform .5s ease-out 0s}.ng-carousel slide{position:relative;display:inline-block;vertical-align:top;font-size:16px;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:center}.ng-carousel .carousel-arrow{display:inline-block;position:absolute;top:0;bottom:0;z-index:1;width:100px;text-align:center}.ng-carousel .carousel-arrow.carousel-arrow-left{left:0}.ng-carousel .carousel-arrow.carousel-arrow-right{right:0} \ No newline at end of file diff --git a/angular-carousel.min.js b/angular-carousel.min.js index a6b6010..ca1c91e 100644 --- a/angular-carousel.min.js +++ b/angular-carousel.min.js @@ -3,4 +3,4 @@ * (c) 2015 Lifely * License: MIT */ -angular.module("angular-carousel",[]).factory("Carousel",function(){var n={};n.instances={},n.add=function(t,o,a,i){if(o=o||!1,!o)return"Error: no carousel name specified";t=t||0;var r=n.instances[o]||!1;if(r)return"Error: carousel instance already exists";var s=new e(t,a,i);return n.instances[o]=s,s},n.get=function(e){var t=n.instances[e]||!1;return t?t:"Error: carousel with name '"+e+"' does not exist"},n.remove=function(e){delete n.instances[e]};var e=function(n,e,t){var o=this,a=!("false"===t.ngCarouselLoop);this.slidesCount=n,this.currentSlide=0,this.onSlideChangeCallbacks=[],this.toIndex=function(n,t){t=t||!1,this.currentSlide=n%this.slidesCount,angular.forEach(this.onSlideChangeCallbacks,function(n){"function"==typeof n&&n(o.currentSlide,t)}),setTimeout(function(){e.$apply()},0)},this.next=function(){var n=this.currentSlide+1,e=!1;return n>this.slidesCount-1&&(a?(n=0,e="right"):n=this.slidesCount-1),this.toIndex(n,e),n},this.previous=function(){var n=this.currentSlide-1,e=!1;return 0>n&&(a?(n=this.slidesCount-1,e="left"):n=0),this.toIndex(n,e),n},this.onSlideChange=function(n){return this.onSlideChangeCallbacks.push(n),this.onSlideChangeCallbacks.indexOf(n)},this.unbindOnSlideChangeCallback=function(n){"undefined"!=typeof this.onSlideChangeCallbacks[n]&&this.onSlideChangeCallbacks.splice(n,1)}};return n}).directive("ngCarousel",["Carousel","$compile","$document","$timeout",function(n,e,t,o){function a(){return"ontouchstart"in document.documentElement}var i=25;return{restrict:"AE",replace:!0,scope:{ngCarouselWatch:"="},link:function(e,r,s){function l(){p=angular.element(C[0].outerHTML),v=angular.element(C[C.length-1].outerHTML)}function u(){p=angular.element(''),v=angular.element('')}var c=!1,d=!1,f=!1,h="",g=!1;c="undefined"!=typeof s.ngCarouselTimer&&parseInt(s.ngCarouselTimer,10)>0?parseInt(s.ngCarouselTimer,10):!1,f="undefined"!=typeof s.ngCarouselRandom,g=!("false"===s.ngCarouselLoop);var C,m,p,v,S,b,h,y=function(){r.addClass("ng-carousel"),r.addClass(a()?"carousel-touch":"carousel-no-touch"),S=r.find("slidecontainer");var t=!1,o=!1;h&&(t=n.get(h).currentSlide,o=n.get(h).onSlideChangeCallbacks,n.remove(h));var i=function(){var n=angular.element(r[0].querySelectorAll(".carousel-slide-copy"));n.length>0&&n.remove()};if(i(),C=r.find("slide"),C.length>0){h=s.ngCarouselName,m=n.add(C.length,s.ngCarouselName,e,s),angular.forEach(o,function(n){m.onSlideChange(n),m.unbindOnSlideChangeCallback(0)});var d=function(){i(),C=r.find("slide"),g?l():u(),p.addClass("carousel-slide-copy"),v.addClass("carousel-slide-copy"),S.append(p),S.prepend(v),S.addClass("carousel-ignore-first-slide")};d();var y=function(n,e){var t=n+1;"left"===e?t=0:"right"===e&&(t=C.length+1),E(t,!0,function(){"left"===e?E(C.length,!1):"right"===e&&E(1,!1)}),k(),d()};if(m.onSlideChange(y),t!==!1&&m.currentSlide!==t&&(y(m.currentSlide,!1),m.toIndex(t)),f){var T=Math.floor(Math.random()*m.slidesCount);m.toIndex(T)}c&&m.slidesCount>=2&&k()}else console.log("ng-carousel error: No slides found");S[0]?(b=new Hammer.Manager(S[0]),b.add(new Hammer.Pan({direction:Hammer.DIRECTION_HORIZONTAL,threshold:0})),b.on("panleft panright",function(n){n.isFinal||w(n.deltaX)})):console.log("ng-carousel error: No slidecontainer found")},k=function(){!c||m.slidesCount<2||(d&&o.cancel(d),d=o(function(){m.next()},c))},E=function(n,e,t){e?S.addClass("carousel-animate"):S.removeClass("carousel-animate");var o="translate(-"+100*n+"%, 0)";S.css({"-webkit-transform":o,"-moz-transform":o,"-ms-transform":o,"-o-transform":o,transform:o}),e&&S.on("transitionend oTransitionEnd webkitTransitionEnd",function(){"function"==typeof t&&t(),S.off("transitionend oTransitionEnd webkitTransitionEnd"),E(m.currentSlide+1,!1)})},T=0,x=0,w=function(n){T=n/x,T=T>1?1:-1>T?-1:T,E(m.currentSlide+1-T,!1)},I=function(){x=S[0].offsetWidth},$=function(){Math.abs(T)>i/100?(T>0?m.previous():m.next(),T=0):(T>0||0>T)&&E(m.currentSlide+1,!0,function(){T=0})},H=a()?"touchstart":"mousedown",M=a()?"touchend":"mouseup";t.on(H,I),t.on(M,$),r.on("mouseover",function(){d&&o.cancel(d)}),r.on("mouseout",k);var N=o(y,0);"undefined"!=typeof s.ngCarouselWatch&&e.$watch("ngCarouselWatch",function(){o(y)},!0),e.$on("$destroy",function(){o.cancel(N),r.off("mouseover mouseout"),t.off(H),t.off(M),S.off("transitionend oTransitionEnd webkitTransitionEnd"),m.onSlideChangeCallbacks=[],n.remove(h)})}}}]); \ No newline at end of file +angular.module("angular-carousel",[]).factory("Carousel",function(){var n={};n.instances={},n.add=function(t,o,a,i){if(o=o||!1,!o)return"Error: no carousel name specified";t=t||0;var r=n.instances[o]||!1;if(r)return"Error: carousel instance already exists";var s=new e(t,a,i);return n.instances[o]=s,s},n.get=function(e){var t=n.instances[e]||!1;return t?t:"Error: carousel with name '"+e+"' does not exist"},n.remove=function(e){delete n.instances[e]};var e=function(n,e,t){var o=this,a=!("false"===t.ngCarouselLoop);this.slidesCount=n,this.currentSlide=0,this.onSlideChangeCallbacks=[],this.toIndex=function(n,t){t=t||!1,this.currentSlide=n%this.slidesCount,angular.forEach(this.onSlideChangeCallbacks,function(n){"function"==typeof n&&n(o.currentSlide,t)}),setTimeout(function(){e.$apply()},0)},this.next=function(){var n=this.currentSlide+1,e=!1;return n>this.slidesCount-1&&(a?(n=0,e="right"):n=this.slidesCount-1),this.toIndex(n,e),n},this.previous=function(){var n=this.currentSlide-1,e=!1;return 0>n&&(a?(n=this.slidesCount-1,e="left"):n=0),this.toIndex(n,e),n},this.onSlideChange=function(n){return this.onSlideChangeCallbacks.push(n),this.onSlideChangeCallbacks.indexOf(n)},this.unbindOnSlideChangeCallback=function(n){"undefined"!=typeof this.onSlideChangeCallbacks[n]&&this.onSlideChangeCallbacks.splice(n,1)}};return n}).directive("ngCarousel",["Carousel","$compile","$document","$timeout",function(n,e,t,o){function a(){return"ontouchstart"in document.documentElement}var i=25;return{restrict:"AE",replace:!0,scope:{ngCarouselWatch:"="},link:function(e,r,s){function l(){p=angular.element(g[0].outerHTML),v=angular.element(g[g.length-1].outerHTML)}function u(){p=angular.element(''),v=angular.element('')}var c=!1,d=!1,f=!1,h="",C=!1;c="undefined"!=typeof s.ngCarouselTimer&&parseInt(s.ngCarouselTimer,10)>0?parseInt(s.ngCarouselTimer,10):!1,f="undefined"!=typeof s.ngCarouselRandom,C=!("false"===s.ngCarouselLoop);var g,m,p,v,S,b,h,y=function(){r.addClass("ng-carousel"),r.addClass(a()?"carousel-touch":"carousel-no-touch"),S=r.find("slidecontainer");var t=!1,o=!1;h&&(t=n.get(h).currentSlide,o=n.get(h).onSlideChangeCallbacks,n.remove(h));var i=function(){var n=angular.element(r[0].querySelectorAll(".carousel-slide-copy"));n.length>0&&n.remove()};i(),g=r.find("slide"),h=s.ngCarouselName,m=n.add(g.length,s.ngCarouselName,e,s),angular.forEach(o,function(n){m.onSlideChange(n),m.unbindOnSlideChangeCallback(0)});var d=function(){i(),g.length<1||(g=r.find("slide"),C?l():u(),p.addClass("carousel-slide-copy"),v.addClass("carousel-slide-copy"),S.append(p),S.prepend(v),S.addClass("carousel-ignore-first-slide"))};d();var y=function(n,e){var t=n+1;"left"===e?t=0:"right"===e&&(t=g.length+1),E(t,!0,function(){"left"===e?E(g.length,!1):"right"===e&&E(1,!1)}),k(),d()};if(m.onSlideChange&&m.onSlideChange(y),t!==!1&&m.currentSlide!==t&&(y(m.currentSlide,!1),m.toIndex(t)),f){var T=Math.floor(Math.random()*m.slidesCount);m.toIndex(T)}c&&m.slidesCount>=2&&k(),S[0]?(b=new Hammer.Manager(S[0]),b.add(new Hammer.Pan({direction:Hammer.DIRECTION_HORIZONTAL,threshold:0})),b.on("panleft panright",function(n){n.isFinal||w(n.deltaX)})):console.log("ng-carousel error: No slidecontainer found")},k=function(){!c||m.slidesCount<2||(d&&o.cancel(d),d=o(function(){m.next()},c))},E=function(n,e,t){e?S.addClass("carousel-animate"):S.removeClass("carousel-animate");var o="translate(-"+100*n+"%, 0)";S.css({"-webkit-transform":o,"-moz-transform":o,"-ms-transform":o,"-o-transform":o,transform:o}),e&&S.on("transitionend oTransitionEnd webkitTransitionEnd",function(){"function"==typeof t&&t(),S.off("transitionend oTransitionEnd webkitTransitionEnd"),E(m.currentSlide+1,!1)})},T=0,x=0,w=function(n){T=n/x,T=T>1?1:-1>T?-1:T,E(m.currentSlide+1-T,!1)},I=function(){x=S[0].offsetWidth},$=function(){Math.abs(T)>i/100?(T>0?m.previous():m.next(),T=0):(T>0||0>T)&&E(m.currentSlide+1,!0,function(){T=0})},H=a()?"touchstart":"mousedown",M=a()?"touchend":"mouseup";t.on(H,I),t.on(M,$),r.on("mouseover",function(){d&&o.cancel(d)}),r.on("mouseout",k);var O=o(y,0);"undefined"!=typeof s.ngCarouselWatch&&e.$watch("ngCarouselWatch",function(){o(y)},!0),e.$on("$destroy",function(){o.cancel(O),r.off("mouseover mouseout"),t.off(H),t.off(M),S.off("transitionend oTransitionEnd webkitTransitionEnd"),m.onSlideChangeCallbacks=[],n.remove(h)})}}}]); \ No newline at end of file diff --git a/bower.json b/bower.json index fe6b90a..4de50e2 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-carousel", "description": "Touch-optimized carousel for Angular", - "version": "1.2.0", + "version": "1.2.1", "keywords": [ "carousel", "angular", diff --git a/examples/demo.html b/examples/demo.html index 6403864..e2a5ea3 100644 --- a/examples/demo.html +++ b/examples/demo.html @@ -88,7 +88,7 @@

Carousel with timer (cancels on mouseover)

Carousel with looping disabled

-
+
Slide 1 Slide 2 @@ -98,6 +98,23 @@

Carousel with looping disabled

+
+

Carousel with adding/removing slides via ng-repeat

+ +

+ + + +

+ +
+ + {{slide}} + +
+
+ + diff --git a/examples/demo.js b/examples/demo.js index 4f8d893..1bc9060 100644 --- a/examples/demo.js +++ b/examples/demo.js @@ -1,4 +1,17 @@ var demoApp = angular.module('demoApp', ['angular-carousel']) -.controller('DemoCtrl', function($scope, Carousel) { - $scope.Carousel = Carousel; -}); \ No newline at end of file + .controller('DemoCtrl', function ($scope, Carousel) { + $scope.Carousel = Carousel; + + $scope.dynamicSlides = ['A', 'B', 'C']; + + $scope.addSlide = function(title){ + $scope.dynamicSlides.push(title); + }; + + $scope.removeSlide = function(title){ + var elementIndex = $scope.dynamicSlides.indexOf(title); + if(elementIndex >= 0) { + $scope.dynamicSlides.splice(elementIndex, 1); + } + }; + }); \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 7cae8b0..a019a2e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -11,7 +11,9 @@ gulp.task('clean', function(){ gulp.task('minify-css', function() { gulp .src('angular-carousel.css') - .pipe(cleanCSS()) + .pipe(cleanCSS({ + keepSpecialComments: '*' + })) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('.')); }); @@ -19,7 +21,9 @@ gulp.task('minify-css', function() { gulp.task('minify-js', function() { gulp .src('angular-carousel.js') - .pipe(uglify()) + .pipe(uglify({ + preserveComments: 'license' + })) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('.')); }); diff --git a/package.json b/package.json index 03d1b99..59137ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-carousel", - "version": "1.2.0", + "version": "1.2.1", "description": "Generic AngularJS carousel", "main": "angular-carousel.js", "scripts": { From cbe94078bb66257be7e0d5d5599c072e6256b049 Mon Sep 17 00:00:00 2001 From: mathix Date: Fri, 18 Mar 2016 15:32:52 +0100 Subject: [PATCH 2/2] Adding minified versions --- angular-carousel.min.css | 2 +- angular-carousel.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/angular-carousel.min.css b/angular-carousel.min.css index 35db9d7..cb6cc21 100644 --- a/angular-carousel.min.css +++ b/angular-carousel.min.css @@ -1,5 +1,5 @@ /*! - * @license AngularJS v1.2.0 + * @license AngularJS v1.2.1 * (c) 2015 Lifely * License: MIT */.ng-carousel{display:block;width:100%;height:300px;white-space:nowrap;position:relative;overflow:hidden}.ng-carousel slidecontainer{display:block;position:absolute;top:0;width:100%;height:100%;z-index:1;font-size:0}.ng-carousel slidecontainer.carousel-ignore-first-slide{-webkit-transform:translate(-100%,0);-moz-transform:translate(-100%,0);-o-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}.ng-carousel slidecontainer.carousel-animate{-webkit-transition:-webkit-transform .5s ease-out 0s;-moz-transition:-moz-transform .5s ease-out 0s;-ms-transition:-ms-transform .5s ease-out 0s;-o-transition:-o-transform .5s ease-out 0s;transition:transform .5s ease-out 0s}.ng-carousel slide{position:relative;display:inline-block;vertical-align:top;font-size:16px;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:center}.ng-carousel .carousel-arrow{display:inline-block;position:absolute;top:0;bottom:0;z-index:1;width:100px;text-align:center}.ng-carousel .carousel-arrow.carousel-arrow-left{left:0}.ng-carousel .carousel-arrow.carousel-arrow-right{right:0} \ No newline at end of file diff --git a/angular-carousel.min.js b/angular-carousel.min.js index ca1c91e..a472ef2 100644 --- a/angular-carousel.min.js +++ b/angular-carousel.min.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.2.0 + * @license AngularJS v1.2.1 * (c) 2015 Lifely * License: MIT */