123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- angular.module('goApp.slider', [])
- .directive('wallopSlider', function () {
- "use strict";
- return {
- template: '<div class="wallop-slider {{animationClass}}"><ul class="wallop-slider__list"><li class="wallop-slider__item {{itemClasses[$index]}}" ng-repeat="i in images"><img src="{{i}}"></li></ul><button ng-show="images.length>1" class="st-button wallop-slider__btn wallop-slider__btn--previous btn btn--previous" ng-disabled="prevDisabled" ng-click="onPrevButtonClicked()">Anterior</button><button ng-show="images.length>1" class="st-button wallop-slider__btn wallop-slider__btn--next btn btn--next" ng-disabled="nextDisabled" ng-click="onNextButtonClicked()">Próximo</button></div>',
- restrict: 'EA',
- transclude: true,
- replace: false,
- scope: {
- images: '=',
- animation: '@',
- currentItemIndex: '=',
- onNext: '&',
- onPrevious: '&'
- },
- controller: function($scope, $timeout) {
- $scope.itemClasses = [];
- $scope.$watch('images', function(images) {
- if (images.length) {
- _goTo(0);
- }
- });
- $scope.$watch('itemClasses', function(itemClasses) {
- console.log('itemClasses', itemClasses);
- });
-
- if ($scope.animation) {
- $scope.animationClass = 'wallop-slider--' + $scope.animation;
- }
- var _displayOptions = {
- btnPreviousClass: 'wallop-slider__btn--previous',
- btnNextClass: 'wallop-slider__btn--next',
- itemClass: 'wallop-slider__item',
- currentItemClass: 'wallop-slider__item--current',
- showPreviousClass: 'wallop-slider__item--show-previous',
- showNextClass: 'wallop-slider__item--show-next',
- hidePreviousClass: 'wallop-slider__item--hide-previous',
- hideNextClass: 'wallop-slider__item--hide-next'
- };
- function updateClasses() {
- if ($scope.itemClasses.length !== $scope.images.length) {
- $scope.itemClasses = [];
- for (var i=0; i<$scope.images.length; i++) {
- $scope.itemClasses.push('');
- }
- }
- }
- function _nextDisabled() {
- console.log('$scope.currentItemIndex', $scope.currentItemIndex, $scope.images.length);
- return ($scope.currentItemIndex + 1) === $scope.images.length;
- }
- function _prevDisabled() {
- return !$scope.currentItemIndex;
- }
- function _updatePagination() {
- $scope.nextDisabled = _nextDisabled();
- $scope.prevDisabled = _prevDisabled();
- }
- function _clearClasses() {
- for (var i=0; i<$scope.images.length; i++) {
- $scope.itemClasses[i] = '';
- }
- }
-
- function _goTo(index) {
- console.log('_goTo', index);
- if (index >= $scope.images.length || index < 0 || index === $scope.currentItemIndex) {
- if (!index) {
- $scope.itemClasses[0] = _displayOptions.currentItemClass;
- }
- return;
- }
- _clearClasses();
- $scope.itemClasses[$scope.currentItemIndex] = (index > $scope.currentItemIndex) ? _displayOptions.hidePreviousClass : _displayOptions.hideNextClass;
- var currentClass = (index > $scope.currentItemIndex) ? _displayOptions.showNextClass : _displayOptions.showPreviousClass;
- $scope.itemClasses[index] = _displayOptions.currentItemClass + ' ' + currentClass;
- $scope.currentItemIndex = index;
- _updatePagination();
- }
-
-
- $scope.onPrevButtonClicked = function () {
- _goTo($scope.currentItemIndex - 1);
- };
- $scope.onNextButtonClicked = function () {
- _goTo($scope.currentItemIndex + 1);
- };
- $scope.$watch('currentItemIndex', function(newVal, oldVal) {
- if (oldVal > newVal) {
- if (typeof $scope.onPrevious === 'function') {
- $scope.onPrevious();
- }
- } else {
- if (typeof $scope.onNext === 'function') {
- $scope.onNext();
- }
- }
- });
- }
- };
- });
|