whole_func_string: function(element, parent, options) {
        options = options || {};
  
        $mdUtil.disableScrollAround._count = Math.max(0, $mdUtil.disableScrollAround._count || 0);
        $mdUtil.disableScrollAround._count++;
  
        if ($mdUtil.disableScrollAround._restoreScroll) {
          return $mdUtil.disableScrollAround._restoreScroll;
        }
  
        var body = $document[0].body;
        var restoreBody = disableBodyScroll();
        var restoreElement = disableElementScroll(parent);
  
        return $mdUtil.disableScrollAround._restoreScroll = function() {
          if (--$mdUtil.disableScrollAround._count <= 0) {
            restoreBody();
            restoreElement();
            delete $mdUtil.disableScrollAround._restoreScroll;
          }
        };
  
        /**
         * Creates a virtual scrolling mask to prevent touchmove, keyboard, scrollbar clicking,
         * and wheel events
         */
        function disableElementScroll(element) {
          element = angular.element(element || body);
  
          var scrollMask;
  
          if (options.disableScrollMask) {
            scrollMask = element;
          } else {
            scrollMask = angular.element(
              '<div class="md-scroll-mask">' +
              '  <div class="md-scroll-mask-bar"></div>' +
              '</div>');
            element.append(scrollMask);
          }
  
          scrollMask.on('wheel', preventDefault);
          scrollMask.on('touchmove', preventDefault);
  
          return function restoreElementScroll() {
            scrollMask.off('wheel');
            scrollMask.off('touchmove');
  
            if (!options.disableScrollMask && scrollMask[0].parentNode ) {
              scrollMask[0].parentNode.removeChild(scrollMask[0]);
            }
          };
  
          function preventDefault(e) {
            e.preventDefault();
          }
        }
  
        // Converts the body to a position fixed block and translate it to the proper scroll position
        function disableBodyScroll() {
          var documentElement = $document[0].documentElement;
  
          var prevDocumentStyle = documentElement.style.cssText || '';
          var prevBodyStyle = body.style.cssText || '';
  
          var viewportTop = $mdUtil.getViewportTop();
          var clientWidth = body.clientWidth;
          var hasVerticalScrollbar = body.scrollHeight > body.clientHeight + 1;
  
          // Scroll may be set on <html> element (for example by overflow-y: scroll)
          // but Chrome is reporting the scrollTop position always on <body>.
          // scrollElement will allow to restore the scrollTop position to proper target.
          var scrollElement = documentElement.scrollTop > 0 ? documentElement : body;
  
          if (hasVerticalScrollbar) {
            angular.element(body).css({
              position: 'fixed',
              width: '100%',
              top: -viewportTop + 'px'
            });
          }
  
          if (body.clientWidth < clientWidth) {
            body.style.overflow = 'hidden';
          }
  
          // This should be applied after the manipulation to the body, because
          // adding a scrollbar can potentially resize it, causing the measurement
          // to change.
          if (hasVerticalScrollbar) {
            documentElement.style.overflowY = 'scroll';
          }
  
          return function restoreScroll() {
            // Reset the inline style CSS to the previous.
            body.style.cssText = prevBodyStyle;
            documentElement.style.cssText = prevDocumentStyle;
  
            // The scroll position while being fixed
            scrollElement.scrollTop = viewportTop;
          };
        }
  
      }
func_code_string: function(element, parent, options) {
        options = options || {};
  
        $mdUtil.disableScrollAround._count = Math.max(0, $mdUtil.disableScrollAround._count || 0);
        $mdUtil.disableScrollAround._count++;
  
        if ($mdUtil.disableScrollAround._restoreScroll) {
          return $mdUtil.disableScrollAround._restoreScroll;
        }
  
        var body = $document[0].body;
        var restoreBody = disableBodyScroll();
        var restoreElement = disableElementScroll(parent);
  
        return $mdUtil.disableScrollAround._restoreScroll = function() {
          if (--$mdUtil.disableScrollAround._count <= 0) {
            restoreBody();
            restoreElement();
            delete $mdUtil.disableScrollAround._restoreScroll;
          }
        };
  
        /**
         * Creates a virtual scrolling mask to prevent touchmove, keyboard, scrollbar clicking,
         * and wheel events
         */
        function disableElementScroll(element) {
          element = angular.element(element || body);
  
          var scrollMask;
  
          if (options.disableScrollMask) {
            scrollMask = element;
          } else {
            scrollMask = angular.element(
              '<div class="md-scroll-mask">' +
              '  <div class="md-scroll-mask-bar"></div>' +
              '</div>');
            element.append(scrollMask);
          }
  
          scrollMask.on('wheel', preventDefault);
          scrollMask.on('touchmove', preventDefault);
  
          return function restoreElementScroll() {
            scrollMask.off('wheel');
            scrollMask.off('touchmove');
  
            if (!options.disableScrollMask && scrollMask[0].parentNode ) {
              scrollMask[0].parentNode.removeChild(scrollMask[0]);
            }
          };
  
          function preventDefault(e) {
            e.preventDefault();
          }
        }
  
        // Converts the body to a position fixed block and translate it to the proper scroll position
        function disableBodyScroll() {
          var documentElement = $document[0].documentElement;
  
          var prevDocumentStyle = documentElement.style.cssText || '';
          var prevBodyStyle = body.style.cssText || '';
  
          var viewportTop = $mdUtil.getViewportTop();
          var clientWidth = body.clientWidth;
          var hasVerticalScrollbar = body.scrollHeight > body.clientHeight + 1;
  
          // Scroll may be set on <html> element (for example by overflow-y: scroll)
          // but Chrome is reporting the scrollTop position always on <body>.
          // scrollElement will allow to restore the scrollTop position to proper target.
          var scrollElement = documentElement.scrollTop > 0 ? documentElement : body;
  
          if (hasVerticalScrollbar) {
            angular.element(body).css({
              position: 'fixed',
              width: '100%',
              top: -viewportTop + 'px'
            });
          }
  
          if (body.clientWidth < clientWidth) {
            body.style.overflow = 'hidden';
          }
  
          // This should be applied after the manipulation to the body, because
          // adding a scrollbar can potentially resize it, causing the measurement
          // to change.
          if (hasVerticalScrollbar) {
            documentElement.style.overflowY = 'scroll';
          }
  
          return function restoreScroll() {
            // Reset the inline style CSS to the previous.
            body.style.cssText = prevBodyStyle;
            documentElement.style.cssText = prevDocumentStyle;
  
            // The scroll position while being fixed
            scrollElement.scrollTop = viewportTop;
          };
        }
  
      }
func_documentation_string: Disables scroll around the passed parent element.
  @param element Unused
  @param {!Element|!angular.JQLite} parent Element to disable scrolling within.
  Defaults to body if none supplied.
  @param options Object of options to modify functionality
  - disableScrollMask Boolean of whether or not to create a scroll mask element or
  use the passed parent element.