fix(dimensions) removing redundant offset calc
fix(timepicker): initial value with ng-required attribute

When using ng-required attribute in timepicker element in Angular 1.3, the element was not passing validation because it was returning a date object from the $formatter. With the new 1.3 pipeline, the $formatter needs to return a string when using an input type="text" element.
chore(release): cut the v2.1.3 release
docs(version): update version
fix: revert removal of unnecessary timeouts to hookup events

The timeouts are needed to hookup the events to prevent event bubbling from being processed imediately. (reverted from commit fe967a8140bb76719ac87312417de1daaaff0220)
fix(datepicker): initial value with ng-required attribute

When using ng-required attribute in datepicker element in Angular 1.3, the element was not passing validation because it was returning a date object from the $formatter. With the new 1.3 pipeline, the $formatter needs to return a string when using an input type="text" element.

Same fix as was done for timepicker (f65fe9ff79c5fa5a3055d4fac82bed1d3bf9f1ca)
fix(datepicker): fix empty value parsing and validation

In AngularJS 1.3, if the $parsers callback returns an 'undefined' value, it causes the ngModelController to invalidate the ngModel and not run the validators. When the input is an empty string, the $parsers callback was changed to return 'null' instead of 'undefined', so we consider an empty string a valid value and allow for other validators to run and check the value.

This means a BREAKING CHANGE from previous versions, because the model value for an empty input is no longer 'undefined' but is now 'null'.
fix(timepicker): fix empty value parsing and validation

In AngularJS 1.3, if the $parsers callback returns an 'undefined' value, it causes the ngModelController to invalidate the ngModel and not run the validators. When the input is an empty string, the $parsers callback was changed to return 'null' instead of 'undefined', so we consider an empty string a valid value and allow for other validators to run and check the value.

This means a BREAKING CHANGE from previous versions, because the model value for an empty input is no longer 'undefined' but is now 'null'.
feat(tab): add bsActivePane attribute to bind active tab pane

Currently the tab directive is using ngModel to bind the active pane index. This causes the tab control to be included in the validation pipeline and when used inside a form, causes the form to be $dirty. (see issue #1233)

This commit deprecates usage of ngModel and adds a replacement bsActivePane attribute with the same functionality, so it should be a matter of replacing ngModel references with bsActivePane.
docs(tab): add bsActivePane helper attribute description
fix(select): fixed missing validation error when deselecting all values (select with required and multiple attributes)
fix(select): multi-select checkmark icon displays correctly without additional CSS

Reverts commit d167af80b5e055d8195559975216a1fde353230f and instead moves the checkmark icon element to before the label span. As the checkmark icon is "pull-right", it can be placed before the label.
fix(datepicker): correctly change view month when last day of month is selected

When the selected date corresponds to a day that doesn't exist in the next/previous month, the month change would not work correctly - either it would skip a month forward or it would not change to the previous month. This was caused by javascript date values rollover when changing month part of date because months have a different number of days.
This fix uses the first day of the month in the calculations to avoid the rollover.
fix(dropdown): clean up body click listeners upon destroy

Fixes JS exceptions and leaking event listeners as a result of 81235039438.

Clicking on the body calls hide(), which assumes $element is defined and tries to
remove an event handler. Calling destroy ultimately sets $element to null, which
causes subsequent calls to hide() to throw exceptions. Prior to this commit,
destroy() did not clean up event listeners on the body element, so the only way
those click handlers got removed was upon an actual click event which called
harmlessly through hide(). As a result of setting $element to null, however,
it could no longer harmlessly call through hide().

This resulted in both a lot of extra event listeners being registered on the
body element and never cleaned up, and also a lot of exceptions being thrown
any time a dropdown was removed by means of destroying its scope.
fix(tooltip): correctly bind/unbind events

Refactored events binding/unbinding code into separate methods to make it easier to identify events used.
Fixed unbinding of keyboard events when binded to 'element' instead of 'tipElement'.
Changed auto-close related event to not use anonymous handlers, so we can correctly unbind from the events.
docs(getting-started): add description for the two angular-strap files
fix(datepicker): add support to modelDateFormat for named date formats

The parsing of dates using named formats (shortDate, longDate, etc) was not working when used with modelDateFormat. Changed dateParser.parse to check and convert named formats to the corresponding token format before parsing date.

fix for #1249
docs(datepicker/timepicker): add modelDateFormat/modelTimeFormat description to docs
test(karma): setup SauceLabs testing
fix(scrollspy): replace 'this' with '$scrollspy' in callbacks

Using 'this' in callbacks causes errors in IE, so replaced them with explicit '$scrollspy' instance reference.