Closes#2336. Closes#2317. Closes#2290. Closes#2228. Closes#2067.
Closes#1890. Closes#1865. Closes#1850. Closes#1755. Closes#1688.
Closes#1578. Closes#1501. Closes#1353. Closes#1342. Closes#782.
Closes#416. Closes#2288.
BREAKING CHANGE: The slideBox's API has undergone many changes.
- **`<ion-slide-box>`** attributes have changed (see
[documentation](http://ionicframework.com/docs/api/directive/ionSlideBox)):
* `active-slide` has changed to `selected`. Change your code from
this:
```html
<ion-slide-box active-slide="activeSlideIndex"></ion-slide-box>
```
To this:
```html
<ion-slide-box selected="activeSlideIndex"></ion-slide-box>
```
* `does-continue` has changed to `loop`. Change your code from this:
```html
<ion-slide-box does-continue="shouldLoop"></ion-slide-box>
```
To this:
```html
<ion-slide-box loop="shouldLoop"></ion-slide-box>
```
* `auto-play` and `slide-interval` have been merged into `auto-play`.
Change your code from this:
```html
<!-- autoPlay is on -->
<ion-slide-box auto-play="true" slide-interval="1000">
</ion-slide-box>
<!-- autoPlay is off -->
<ion-slide-box auto-play="false" slide-interval="1000">
</ion-slide-box>
```
To this:
```html
<!-- autoPlay is on -->
<ion-slide-box auto-play="1000"></ion-slide-box>
<!-- autoPlay is off -->
<ion-slide-box auto-play="false"></ion-slide-box>
```
* `show-pager` and `pager-click` have been removed. Use
a child `<ion-slide-pager>` element. See the [`ion-slide-pager`
documentation](http://ionicframework.com/docs/api/directive/ionSlidePager).
Change your code from this:
```html
<!-- pager using default click action -->
<ion-slide-box show-pager="true">
</ion-slide-box>
<!-- pager with custom click action -->
<ion-slide-box show-pager="true" pager-click="doSomething(index)">
</ion-slide-box>
```
To this:
```html
<ion-slide-box>
<!-- pager using default click action -->
<ion-slide-pager></ion-slide-pager>
</ion-slide-box>
<ion-slide-box>
<!-- pager with custom click action -->
<ion-slide-pager ng-click="doSomething(index)"></ion-slide-pager>
</ion-slide-box>
```
- **`$ionicSlideBoxDelegate`** methods have changed (see
[documentation](http://ionicframework.com/docs/api/service/$ionicSlideBoxDelegate)):
- `update()` has been removed. slideBox updates on its own now.
- `stop()` has been removed. See `autoPlay()` below.
- `start()` hass been removed. See `autoPlay()` below.
- `slide(newIndex[, speed])` has been renamed to `select(newIndex[,
speed]);
- `currentIndex()` has been renamed to `selected()`.
- `slidesCount()` has been renamed to `count()`.
- New method `$ionicSlideBoxDelegate.autoPlay()`. Change your code
from this:
```js
// stop auto sliding
$ionicSlideBoxDelegate.stop();
// later... start auto sliding
$ionicSlideBoxDelegate.start();
```
To this:
```js
var autoPlaySpeed = 3000; //wait 3000 seconds between changing slide
// stop auto sliding
$ionicSlideBoxDelegate.autoPlay(false);
// later... start auto sliding
$ionicSlideBoxDelegate.autoPlay(autoPlaySpeed);
```
- `previous()` now returns the index of the previous slide and does
not select. Change your code from this:
```js
// select previous slide
$ionicSlideBoxDelegate.previous();
```
To this:
```js
// select previous slide
$ionicSlideBoxDelegate.select( $ionicSlideBoxDelegate.previous() );
```
- `next()` now returns the index of the next slide and does
not select. Change your code from this:
```js
// select next slide
$ionicSlideBoxDelegate.next();
```
To this:
```js
// select next slide
$ionicSlideBoxDelegate.select( $ionicSlideBoxDelegate.next() );
```
When a state change happens, ensure the keyboard is hidden. When a
keyboard is hidden, ensure all pending timers our cleared. When
resetting scrollView, ensure it’s only doing it when it has to.
For testing: #1670#2192
Closes#1349, #1741
BREAKING CHANGE:
ion-toggle no longer has an isolate scope.
This will break your toggle only if you were relying upon the toggle
having an isolate scope: if you were referencing `$parent.value` as
the ng-disabled attribute, for example.
Change your code from this:
<ion-toggle ng-disabled="{{$parent.isDisabled}}"></ion-toggle>
To this:
<ion-toggle ng-disabled="{{isDisabled}}"></ion-toggle>
Closes#1668.
`<div class="modal">` will still work, but adding an `<ion-modal-view>`
element to wrap a modal template is a more "Ionic Looking" way of doing
the same thing.
Closes#1601.
BREAKING CHANGE: Reordering with ion-reorder-button no longer changes the order of the items in the DOM.
This change will only break your list if you were not using the
onReorder callback as described in the documentation.
Before, while reordering an element in a list Ionic would swap the
elements underneath as the reordering happened. This sometimes caused
errors with angular's ngRepeat directive.
Now, reordering an element in a list does not change the order of
elements in the DOM. It is expected that the end developer will use the
index changes given in the `onReorder` callback to reorder the items
in the list. This is simple to do, see the [examples in the
ionReorderButton
documentation](http://ionicframework.com/docs/api/directive/ionReorderButton/).
Addresses #1373.
Before: if an `<a>`, `ng-click`, or `<button>` inside of a .item,
was clicked, the activator would walk up .item and activate it.
Now: If an `<a>`, `ng-click`, or `<button>` inside of a
.item is clicked, the activator will activate that element.
Additionally, CSS was added so `a.item-content.activated` would look
activated.
Closes#1349. Closes#1361
BREAKING CHANGE: ion-checkbox no longer has an isolate scope.
This will break your checkbox only if you were relying upon the
checkbox having an isolate scope: if you were referencing
`$parent.value` as the ng-disabled attribute, for example.
Change your code from this:
```html
<ion-checkbox ng-disabled="{{$parent.isDisabled}}"></ion-checkbox>
```
To this:
```html
<ion-checkbox ng-disabled="{{isDisabled}}"></ion-checkbox>
```