Show:
                            /**
                             * The Image Viewer Multiple module.
                             *
                             * @module aui-image-viewer-multiple
                             */
                            
                            /**
                             * Fired when one of the viewer's images was clicked.
                             *
                             * @event imageClicked
                             * @preventable _defImageClicked
                             */
                            /**
                             * Fired when the widget needs to make an image visible.
                             *
                             * @event makeImageVisible
                             * @preventable _defMakeImageVisible
                             */
                            
                            /**
                             * The base class for Image Viewer.
                             *
                             * @class A.ImageViewerMultiple
                             * @extends A.ImageViewerBase
                             * @param {Object} config Object literal specifying widget configuration
                             *     properties.
                             * @constructor
                             */
                            A.ImageViewerMultiple = A.Base.create('image-viewer-multiple', A.ImageViewerBase, [], {
                                VISIBLE_THRESHOLD: 5,
                            
                                /**
                                 * Constructor for the `A.ImageViewerMultiple`. Lifecycle.
                                 *
                                 * @method initializer
                                 * @protected
                                 */
                                initializer: function() {
                                    this._eventHandles.push(
                                        this.after({
                                            currentIndexChange: this._afterMultipleCurrentIndexChange,
                                            responsive: this._afterMultipleResponsive
                                        }),
                                        A.after(this._afterMultipleBindUI, this, 'bindUI'),
                                        A.after(this._afterMultipleRenderUI, this, 'renderUI')
                                    );
                            
                                    this.publish({
                                        imageClicked: {
                                            defaultFn: this._defImageClicked
                                        },
                                        makeImageVisible: {
                                            defaultFn: this._defMakeImageVisible
                                        }
                                    });
                                },
                            
                                /**
                                 * Fired after the `bindUI` method runs.
                                 *
                                 * @method _afterMultipleBindUI
                                 * @protected
                                 */
                                _afterMultipleBindUI: function() {
                                    this._bindClickImages();
                                },
                            
                                /**
                                 * Fired after the `renderUI` method runs.
                                 *
                                 * @method _afterMultipleRenderUI
                                 * @protected
                                 */
                                _afterMultipleRenderUI: function() {
                                    this._loadVisibleImages();
                                },
                            
                                /**
                                 * Fired after the `currentIndex` attribute is set.
                                 *
                                 * @method _afterMultipleCurrentIndexChange
                                 * @protected
                                 */
                                _afterMultipleCurrentIndexChange: function() {
                                    this.fire('makeImageVisible', {
                                        index: this.get('currentIndex')
                                    });
                                },
                            
                                /**
                                 * Fired after the `responsive` event is triggered.
                                 *
                                 * @method _afterMultipleResponsive
                                 * @protected
                                 */
                                _afterMultipleResponsive: function() {
                                    this._loadVisibleImages();
                                },
                            
                                /**
                                 * Binds the events for clicking images.
                                 *
                                 * @method _bindClickImages
                                 * @protected
                                 */
                                _bindClickImages: function() {
                                    this._eventHandles.push(
                                        this.get('contentBox').delegate(
                                            'click',
                                            this._onClickImage,
                                            '.image-viewer-base-image-container',
                                            this
                                        )
                                    );
                                },
                            
                                /**
                                 * Default behavior for the `imageClicked` event. The current index is updated
                                 * to point to the image that was clicked.
                                 *
                                 * @method _defImageClicked
                                 * @protected
                                 */
                                _defImageClicked: function(event) {
                                    this.set('currentIndex', event.index);
                                },
                            
                                /**
                                 * Default behavior for the `makeImageVisible` event. The scroll position is
                                 * updated to make the specified image visible.
                                 *
                                 * @method _defMakeImageVisible
                                 * @protected
                                 */
                                _defMakeImageVisible: function(event) {
                                    var imageRegion = this._getImageContainerAtIndex(event.index).get('region'),
                                        list = this.get('contentBox').one('.image-viewer-base-image-list'),
                                        listRegion = list.get('region');
                            
                                    if (imageRegion.left < listRegion.left) {
                                        list.set('scrollLeft', list.get('scrollLeft') - (listRegion.left - imageRegion.left));
                                    }
                                    else if (imageRegion.right > listRegion.right) {
                                        list.set('scrollLeft', list.get('scrollLeft') + imageRegion.right - listRegion.right);
                                    }
                            
                                    this._loadVisibleImages();
                                },
                            
                                /**
                                 * Checks if the image at the given index is visible in the viewer.
                                 *
                                 * @method _isImageVisible
                                 * @param {Node} image
                                 * @protected
                                 */
                                _isImageVisible: function(image) {
                                    var imageRegion = image.get('region'),
                                        listRegion = this.get('contentBox').one('.image-viewer-base-image-list').get('region');
                            
                                    return (imageRegion.left >= listRegion.left && imageRegion.left + this.VISIBLE_THRESHOLD <= listRegion.right) ||
                                        (imageRegion.right <= listRegion.right && imageRegion.right - this.VISIBLE_THRESHOLD >= listRegion.left);
                                },
                            
                                /**
                                 * Loads all images that are currently visible in the viewer.
                                 *
                                 * @method _loadVisibleImages
                                 * @protected
                                 */
                                _loadVisibleImages: function() {
                                    var containers = this.get('contentBox').all('.image-viewer-base-image-container');
                            
                                    for (var i = 0; i < containers.size(); i++) {
                                        if (this._isImageVisible(containers.item(i))) {
                                            this._loadImage(i);
                                        }
                                    }
                                },
                            
                                /**
                                 * Fired when one of the viewer's images is clicked.
                                 *
                                 * @method _onClickImage
                                 * @param {EventFacade} event
                                 * @protected
                                 */
                                _onClickImage: function(event) {
                                    var index = event.currentTarget.get('parentNode').get('children').indexOf(event.currentTarget);
                                    this.fire('imageClicked', {
                                        index: index
                                    });
                                }
                            }, {
                                ATTRS: {
                                    /**
                                     * The height of the image viewer.
                                     *
                                     * @attribute height
                                     * @default 100
                                     * @type Number | String
                                     */
                                    height: 100
                                },
                            
                                /**
                                 * Static property provides a string to identify the CSS prefix.
                                 *
                                 * @property CSS_PREFIX
                                 * @type String
                                 * @static
                                 */
                                CSS_PREFIX: A.getClassName('image-viewer-multiple')
                            });