mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/MultimediaViewer
synced 2024-11-17 04:43:18 +00:00
198bf44c1a
Every patch we've submitted up until now has been magically very good at jshint, because I'm appropriately OCD about it, but now we can actually point at results. Also we'll enable voting very soon. Change-Id: I028fa78a47778c8a4050f6b77623c6bfdc4f9c5b
135 lines
2.6 KiB
JavaScript
135 lines
2.6 KiB
JavaScript
( function () {
|
|
var lightboxHooks, MLBP, HRP;
|
|
|
|
/**
|
|
* @class
|
|
* @constructor
|
|
* @param {LightboxImage[]} images
|
|
* @param {number} [start=0]
|
|
*/
|
|
function MultiLightbox( images, start ) {
|
|
var lightbox = this;
|
|
|
|
this.images = images;
|
|
this.currentIndex = start || 0;
|
|
this.onInterfaceReady = [];
|
|
|
|
lightbox.iface = new window.LightboxInterface();
|
|
lightbox.interfaceReady();
|
|
}
|
|
|
|
MLBP = MultiLightbox.prototype;
|
|
|
|
MLBP.onInterface = function ( func ) {
|
|
if ( this.onInterfaceReady !== undefined ) {
|
|
this.onInterfaceReady.push( func );
|
|
} else {
|
|
func();
|
|
}
|
|
};
|
|
|
|
MLBP.interfaceReady = function () {
|
|
var i;
|
|
|
|
for ( i = 0; i < this.onInterfaceReady.length; i++ ) {
|
|
this.onInterfaceReady[i]();
|
|
}
|
|
|
|
this.onInterfaceReady = undefined;
|
|
};
|
|
|
|
MLBP.next = function () {
|
|
var result;
|
|
|
|
if ( this.currentIndex >= this.images.length - 1 ) {
|
|
result = lightboxHooks.callAll( 'noNextImage', this );
|
|
|
|
if ( result === true ) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
result = lightboxHooks.callAll( 'nextImage', this );
|
|
|
|
if ( result === true ) {
|
|
this.iface.load( this.images[++this.currentIndex] );
|
|
}
|
|
};
|
|
|
|
MLBP.prev = function () {
|
|
var result;
|
|
|
|
if ( this.currentIndex <= 0 ) {
|
|
result = lightboxHooks.callAll( 'noPrevImage', this );
|
|
|
|
if ( result === true ) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
result = lightboxHooks.callAll( 'prevImage', this );
|
|
|
|
if ( result === true ) {
|
|
this.iface.load( this.images[--this.currentIndex] );
|
|
}
|
|
};
|
|
|
|
MLBP.open = function () {
|
|
this.iface.empty();
|
|
this.iface.attach();
|
|
this.iface.load( this.images[this.currentIndex] );
|
|
};
|
|
|
|
/**
|
|
* @class
|
|
* Simple hook registry
|
|
* @constructor
|
|
*/
|
|
function LightboxHookRegistry() {
|
|
this.hooks = {};
|
|
}
|
|
|
|
HRP = LightboxHookRegistry.prototype;
|
|
|
|
/**
|
|
* Call all hooks of a type, with the provided arguments.
|
|
* @param {string} type
|
|
* @param {Mixed} thisArg
|
|
* @return {boolean} true if all hooks ran, false if one of them is overriding the default behaviour
|
|
*/
|
|
HRP.callAll = function ( type, thisArg ) {
|
|
var result, i,
|
|
hooks = this.hooks[type],
|
|
otherArgs = Array.prototype.slice.call( arguments, 2 );
|
|
|
|
if ( hooks !== undefined ) {
|
|
for ( i = 0; i < hooks.length; i++ ) {
|
|
result = hooks[i].apply( thisArg, otherArgs );
|
|
if ( result === false ) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Register a hook of a type.
|
|
* @param {string} type
|
|
* @param {Function} hook
|
|
*/
|
|
HRP.register = function ( type, hook ) {
|
|
if ( this.hooks[type] === undefined ) {
|
|
this.hooks[type] = [];
|
|
}
|
|
|
|
this.hooks[type].push( hook );
|
|
};
|
|
|
|
lightboxHooks = new LightboxHookRegistry();
|
|
|
|
window.lightboxHooks = lightboxHooks;
|
|
window.MultiLightbox = MultiLightbox;
|
|
}() );
|