mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-09-30 05:36:48 +00:00
30f1ed4c75
In various places in the UI code, certain properties of config objects were overridden and in some cases the configurations were documented as private as a strange hack to prevent them from being advertised in the docs. I, Trevor, have been convinced of the error of my ways, and gladly reverse this situation, allowing all configurations to always be overridden when desired, while still allowing default values. Change-Id: I242e3b1902dec8e09eeea38fa64381e69ee04215
121 lines
2.5 KiB
JavaScript
121 lines
2.5 KiB
JavaScript
/*!
|
|
* VisualEditor UserInterface StackPanelLayout class.
|
|
*
|
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
/**
|
|
* Stack panel layout.
|
|
*
|
|
* @class
|
|
* @extends ve.ui.PanelLayout
|
|
* @mixins ve.ui.GroupElement
|
|
*
|
|
* @constructor
|
|
* @param {Object} [config] Config options
|
|
* @cfg {string} [icon=''] Symbolic icon name
|
|
*/
|
|
ve.ui.StackPanelLayout = function VeUiStackPanelLayout( config ) {
|
|
// Config initialization
|
|
config = ve.extendObject( { 'scrollable': true }, config );
|
|
|
|
// Parent constructor
|
|
ve.ui.PanelLayout.call( this, config );
|
|
|
|
// Mixin constructors
|
|
ve.ui.GroupElement.call( this, this.$, config );
|
|
|
|
// Properties
|
|
this.currentItem = null;
|
|
|
|
// Initialization
|
|
this.$.addClass( 've-ui-stackPanelLayout' );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
ve.inheritClass( ve.ui.StackPanelLayout, ve.ui.PanelLayout );
|
|
|
|
ve.mixinClass( ve.ui.StackPanelLayout, ve.ui.GroupElement );
|
|
|
|
/* Methods */
|
|
|
|
/**
|
|
* Add items.
|
|
*
|
|
* Adding an existing item (by value) will move it.
|
|
*
|
|
* @method
|
|
* @param {ve.ui.PanelLayout[]} items Items to add
|
|
* @param {number} [index] Index to insert items after
|
|
* @chainable
|
|
*/
|
|
ve.ui.StackPanelLayout.prototype.addItems = function ( items, index ) {
|
|
var i, len;
|
|
|
|
for ( i = 0, len = items.length; i < len; i++ ) {
|
|
if ( !this.currentItem ) {
|
|
this.showItem( items[i] );
|
|
} else {
|
|
items[i].$.hide();
|
|
}
|
|
}
|
|
ve.ui.GroupElement.prototype.addItems.call( this, items, index );
|
|
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Remove items.
|
|
*
|
|
* Items will be detached, not removed, so they can be used later.
|
|
*
|
|
* @method
|
|
* @param {ve.ui.PanelLayout[]} items Items to remove
|
|
* @chainable
|
|
*/
|
|
ve.ui.StackPanelLayout.prototype.removeItems = function ( items ) {
|
|
ve.ui.GroupElement.prototype.removeItems.call( this, items );
|
|
if ( items.indexOf( this.currentItem ) !== -1 ) {
|
|
this.currentItem = null;
|
|
if ( !this.currentItem && this.items.length ) {
|
|
this.showItem( this.items[0] );
|
|
}
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Clear all items.
|
|
*
|
|
* Items will be detached, not removed, so they can be used later.
|
|
*
|
|
* @method
|
|
* @chainable
|
|
*/
|
|
ve.ui.StackPanelLayout.prototype.clearItems = function () {
|
|
this.currentItem = null;
|
|
ve.ui.GroupElement.prototype.clearItems.call( this );
|
|
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Show item.
|
|
*
|
|
* Any currently shown item will be hidden.
|
|
*
|
|
* @method
|
|
* @param {ve.ui.PanelLayout} item Item to show
|
|
* @chainable
|
|
*/
|
|
ve.ui.StackPanelLayout.prototype.showItem = function ( item ) {
|
|
this.$items.hide();
|
|
item.$.show();
|
|
this.currentItem = item;
|
|
|
|
return this;
|
|
};
|