Skip to content

Commit b9ebcd8

Browse files
committed
Much better slide box
1 parent 8bd8193 commit b9ebcd8

File tree

9 files changed

+1207
-408
lines changed

9 files changed

+1207
-408
lines changed

Gruntfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ module.exports = function(grunt) {
3030
'js/views/navBarView.js',
3131
'js/views/popupView.js',
3232
'js/views/sideMenuView.js',
33-
'js/views/slideBoxView.js',
33+
'js/views/sliderView.js',
3434
'js/views/tabBarView.js',
3535
'js/views/toggleView.js',
3636

dist/css/ionic.css

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright 2013 Drifty Co.
44
* http://drifty.com/
55
*
6-
* Ionic, v0.9.14
6+
* Ionic, v0.9.17
77
* A powerful HTML5 mobile app framework.
88
* http://ionicframework.com/
99
*
@@ -4408,44 +4408,40 @@ button.item-button-right:after {
44084408
* Slide Box
44094409
* --------------------------------------------------
44104410
*/
4411-
.slide-box {
4411+
.slider {
44124412
position: relative;
44134413
overflow: hidden;
4414+
visibility: hidden;
44144415
background-color: #000; }
44154416

4416-
.slide-box-slides {
4417+
.slider-slides {
44174418
position: relative;
44184419
white-space: nowrap;
4419-
font-size: 0;
4420-
-webkit-transition: -webkit-transform 0 ease-in-out;
4421-
-moz-transition: -moz-transform 0 ease-in-out;
4422-
transition: transform 0 ease-in-out; }
4423-
4424-
.slide-box-animating {
4425-
-webkit-transition-duration: 0.2s;
4426-
-moz-transition-duration: 0.2s;
4427-
transition-duration: 0.2s; }
4420+
font-size: 0; }
44284421

4429-
.slide {
4430-
display: inline-block;
4422+
.slider-slide {
4423+
display: block;
4424+
position: relative;
44314425
width: 100%;
4432-
height: 100%;
4426+
float: left;
44334427
vertical-align: top; }
4434-
.slide img {
4428+
.slider-slide img {
44354429
width: 100%; }
44364430

4437-
.slide-box-pager {
4431+
.slider-pager {
44384432
position: absolute;
44394433
bottom: 20px;
44404434
width: 100%;
4441-
text-align: center; }
4442-
.slide-box-pager > * {
4435+
text-align: center;
4436+
z-index: 1; }
4437+
.slider-pager .slider-pager-page {
44434438
display: inline-block;
4444-
margin: 0px 5px;
4439+
margin: 0px 3px;
4440+
width: 15px;
44454441
color: #fff;
44464442
text-decoration: none;
44474443
opacity: 0.3; }
4448-
.slide-box-pager > *.active {
4444+
.slider-pager .slider-pager-page.active {
44494445
opacity: 1;
44504446
-webkit-transition: opacity 0.4s ease-in;
44514447
-moz-transition: opacity 0.4s ease-in;

dist/js/ionic-angular.js

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright 2013 Drifty Co.
33
* http://drifty.com/
44
*
5-
* Ionic, v0.9.14
5+
* Ionic, v0.9.17
66
* A powerful HTML5 mobile app framework.
77
* http://ionicframework.com/
88
*
@@ -1811,41 +1811,48 @@ angular.module('ionic.ui.slideBox', [])
18111811
* some side menu stuff on the current scope.
18121812
*/
18131813

1814-
.directive('slideBox', ['$compile', function($compile) {
1814+
.directive('slideBox', ['$timeout', '$compile', function($timeout, $compile) {
18151815
return {
18161816
restrict: 'E',
18171817
replace: true,
18181818
transclude: true,
18191819
scope: {},
18201820
controller: ['$scope', '$element', function($scope, $element) {
1821-
$scope.slides = [];
1822-
this.slideAdded = function() {
1823-
$scope.slides.push({});
1824-
};
1825-
1826-
angular.extend(this, ionic.views.SlideBox.prototype);
1821+
var _this = this;
18271822

1828-
ionic.views.SlideBox.call(this, {
1823+
var slider = new ionic.views.Slider({
18291824
el: $element[0],
1830-
slideChanged: function(slideIndex) {
1825+
slidesChanged: function() {
1826+
$scope.currentSlide = slider.getPos();
1827+
$timeout(function() {});
1828+
},
1829+
callback: function(slideIndex) {
1830+
$scope.currentSlide = slideIndex;
18311831
$scope.$parent.$broadcast('slideBox.slideChanged', slideIndex);
18321832
$scope.$apply();
18331833
}
18341834
});
18351835

1836-
$scope.$parent.slideBox = this;
1836+
slider.load();
1837+
1838+
$scope.slider = slider;
1839+
1840+
$timeout(function() {
1841+
$scope.slider.setup();
1842+
});
18371843
}],
1838-
template: '<div class="slide-box">\
1839-
<div class="slide-box-slides" ng-transclude>\
1844+
template: '<div class="slider">\
1845+
<div class="slider-slides" ng-transclude>\
18401846
</div>\
18411847
</div>',
18421848

18431849
link: function($scope, $element, $attr, slideBoxCtrl) {
18441850
// If the pager should show, append it to the slide box
18451851
if($attr.showPager !== "false") {
18461852
var childScope = $scope.$new();
1847-
var pager = $compile('<pager></pager>')(childScope);
1853+
var pager = angular.element('<pager></pager>');
18481854
$element.append(pager);
1855+
$compile(pager)(childScope);
18491856
}
18501857
}
18511858
};
@@ -1857,10 +1864,9 @@ angular.module('ionic.ui.slideBox', [])
18571864
replace: true,
18581865
require: '^slideBox',
18591866
transclude: true,
1860-
template: '<div class="slide-box-slide" ng-transclude></div>',
1867+
template: '<div class="slider-slide" ng-transclude></div>',
18611868
compile: function(element, attr, transclude) {
18621869
return function($scope, $element, $attr, slideBoxCtrl) {
1863-
slideBoxCtrl.slideAdded();
18641870
};
18651871
}
18661872
};
@@ -1871,7 +1877,29 @@ angular.module('ionic.ui.slideBox', [])
18711877
restrict: 'E',
18721878
replace: true,
18731879
require: '^slideBox',
1874-
template: '<div class="slide-box-pager"><span ng-repeat="slide in slides"><i class="icon ion-record"></i></span></div>'
1880+
template: '<div class="slider-pager"><span class="slider-pager-page" ng-repeat="slide in numSlides() track by $index" ng-class="{active: $index == currentSlide}"><i class="icon ion-record"></i></span></div>',
1881+
link: function($scope, $element, $attr, slideBox) {
1882+
var selectPage = function(index) {
1883+
var children = $element[0].children;
1884+
var length = children.length;
1885+
for(var i = 0; i < length; i++) {
1886+
if(i == index) {
1887+
children[i].classList.add('active');
1888+
} else {
1889+
children[i].classList.remove('active');
1890+
}
1891+
}
1892+
};
1893+
1894+
$scope.numSlides = function() {
1895+
return new Array($scope.slider.getNumSlides());
1896+
};
1897+
1898+
$scope.$watch('currentSlide', function(v) {
1899+
console.log('Current slide', v);
1900+
selectPage(v);
1901+
});
1902+
}
18751903
};
18761904

18771905
});

0 commit comments

Comments
 (0)