code: function () {
  		var center = -this.y + this.wrapperHeight / 2;
  
  		var minorPhase = Math.max(Math.floor(-this.y / this.infiniteElementHeight) - this.infiniteUpperBufferSize, 0),
  			majorPhase = Math.floor(minorPhase / this.infiniteLength),
  			phase = minorPhase - majorPhase * this.infiniteLength;
  
  		var top = 0;
  		var i = 0;
  		var update = [];
  
  		//var cachePhase = Math.floor((minorPhase + this.infiniteLength / 2) / this.infiniteCacheBuffer);
  		var cachePhase = Math.floor(minorPhase / this.infiniteCacheBuffer);
  
  		while ( i < this.infiniteLength ) {
  			top = i * this.infiniteElementHeight + majorPhase * this.infiniteHeight;
  
  			if ( phase > i ) {
  				top += this.infiniteElementHeight * this.infiniteLength;
  			}
  
  			if ( this.infiniteElements[i]._top !== top ) {
  				this.infiniteElements[i]._phase = top / this.infiniteElementHeight;
  
  				if ( this.infiniteElements[i]._phase < this.options.infiniteLimit ) {
  					this.infiniteElements[i]._top = top;
  					if ( this.options.infiniteUseTransform ) {
  						this.infiniteElements[i].style[utils.style.transform] = 'translate(0, ' + top + 'px)' + this.translateZ;
  					} else {
  						this.infiniteElements[i].style.top = top + 'px';
  					}
  					update.push(this.infiniteElements[i]);
  				}
  			}
  
  			i++;
  		}
  
  		if ( this.cachePhase != cachePhase && (cachePhase === 0 || minorPhase - this.infiniteCacheBuffer > 0) ) {
  			this.options.dataset.call(this, Math.max(cachePhase * this.infiniteCacheBuffer - this.infiniteCacheBuffer, 0), this.options.cacheSize);
  		}
  
  		this.cachePhase = cachePhase;
  
  		this.updateContent(update);
  	}
docs: TO-DO: clean up the mess