dist/scripts/vendor.min.js
function VirtualRepeatModelArrayLike(model) {
  if (!angular.isFunction(model.getItemAtIndex) ||
      !angular.isFunction(model.getLength)) {
    throw Error('When md-on-demand is enabled, the Object passed to md-virtual-repeat must implement ' +
        'functions getItemAtIndex() and getLength() ');
  }

  this.model = model;
}
function VirtualRepeatModelArrayLike(model) {
  if (!angular.isFunction(model.getItemAtIndex) ||
      !angular.isFunction(model.getLength)) {
    throw Error('When md-on-demand is enabled, the Object passed to md-virtual-repeat must implement ' +
        'functions getItemAtIndex() and getLength() ');
  }

  this.model = model;
}
This VirtualRepeatModelArrayLike class enforces the interface requirements
for infinite scrolling within a mdVirtualRepeatContainer. An object with this
interface must implement the following interface with two (2) methods:

getItemAtIndex: function(index) -> item at that index or null if it is not yet
loaded (It should start downloading the item in that case).

getLength: function() -> number The data legnth to which the repeater container
should be sized. Ideally, when the count is known, this method should return it.
Otherwise, return a higher number than the currently loaded items to produce an
infinite-scroll behavior.

@usage
<hljs lang="html">
<md-virtual-repeat-container md-orient-horizontal>
<div md-virtual-repeat="i in items" md-on-demand>
Hello {{i}}!
</div>
</md-virtual-repeat-container>
</hljs>