/**

* @ngdoc object
* @name ui.router.state.$uiViewScrollProvider
*
* @description
* Provider that returns the {@link ui.router.state.$uiViewScroll} service function.
*/

function $ViewScrollProvider() {

var useAnchorScroll = false;

/**
 * @ngdoc function
 * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll
 * @methodOf ui.router.state.$uiViewScrollProvider
 *
 * @description
 * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for
 * scrolling based on the url anchor.
 */
this.useAnchorScroll = function () {
  useAnchorScroll = true;
};

/**
 * @ngdoc object
 * @name ui.router.state.$uiViewScroll
 *
 * @requires $anchorScroll
 * @requires $timeout
 *
 * @description
 * When called with a jqLite element, it scrolls the element into view (after a
 * `$timeout` so the DOM has time to refresh).
 *
 * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,
 * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.
 */
this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {
  if (useAnchorScroll) {
    return $anchorScroll;
  }

  return function ($element) {
    $timeout(function () {
      $element[0].scrollIntoView();
    }, 0, false);
  };
}];

}

angular.module(‘ui.router.state’).provider(‘$uiViewScroll’, $ViewScrollProvider);