Current File : /home/jvzmxxx/wiki1/extensions/RevisionSlider/modules/ext.RevisionSlider.Slider.js
( function ( mw, $ ) {
	/**
	 * Module handling the slider logic of the RevisionSlider
	 *
	 * @param {RevisionList} revisions
	 * @constructor
	 */
	var Slider = function ( revisions ) {
		this.revisions = revisions;
		this.view = new mw.libs.revisionSlider.SliderView( this );
	};

	$.extend( Slider.prototype, {
		/**
		 * @type {RevisionList}
		 */
		revisions: null,

		/**
		 * @type {number}
		 */
		firstVisibleRevisionIndex: 0,

		/**
		 * @type {number}
		 */
		revisionsPerWindow: 0,

		/**
		 * @type {SliderView}
		 */
		view: null,

		/**
		 * @return {RevisionList}
		 */
		getRevisions: function () {
			return this.revisions;
		},

		/**
		 * @return {SliderView}
		 */
		getView: function () {
			return this.view;
		},

		/**
		 * Sets the number of revisions that are visible at once (depending on browser window size)
		 *
		 * @param {number} n
		 */
		setRevisionsPerWindow: function ( n ) {
			this.revisionsPerWindow = n;
		},

		/**
		 * @return {number}
		 */
		getRevisionsPerWindow: function () {
			return this.revisionsPerWindow;
		},

		/**
		 * Returns the index of the first revision that is visible in the current window
		 *
		 * @return {number}
		 */
		getFirstVisibleRevisionIndex: function () {
			return this.firstVisibleRevisionIndex;
		},

		/**
		 * Returns the index of the last revision that is visible in the current window
		 *
		 * @return {number}
		 */
		getLastVisibleRevisionIndex: function () {
			return this.firstVisibleRevisionIndex + this.revisionsPerWindow - 1;
		},

		/**
		 * @return {boolean}
		 */
		isAtStart: function () {
			return this.getFirstVisibleRevisionIndex() === 0 || this.revisions.getLength() <= this.revisionsPerWindow;
		},

		/**
		 * @return {boolean}
		 */
		isAtEnd: function () {
			return this.getLastVisibleRevisionIndex() === this.revisions.getLength() - 1 || this.revisions.getLength() <= this.revisionsPerWindow;
		},

		/**
		 * Sets the index of the first revision that is visible in the current window
		 *
		 * @param {number} value
		 */
		setFirstVisibleRevisionIndex: function ( value ) {
			this.firstVisibleRevisionIndex = value;
		},

		/**
		 * Sets the new firstVisibleRevisionIndex after sliding in a direction
		 *
		 * @param {number} direction - Either -1 or 1
		 */
		slide: function ( direction ) {
			var highestPossibleFirstRev = this.revisions.getLength() - this.revisionsPerWindow;

			this.firstVisibleRevisionIndex += direction * this.revisionsPerWindow;
			this.firstVisibleRevisionIndex = Math.min( this.firstVisibleRevisionIndex, highestPossibleFirstRev );
			this.firstVisibleRevisionIndex = Math.max( 0, this.firstVisibleRevisionIndex );
		}
	} );

	mw.libs.revisionSlider = mw.libs.revisionSlider || {};
	mw.libs.revisionSlider.Slider = Slider;
}( mediaWiki, jQuery ) );