diff options
Diffstat (limited to 'vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js')
-rw-r--r-- | vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js new file mode 100644 index 00000000..d792fee6 --- /dev/null +++ b/vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js @@ -0,0 +1,130 @@ +/** + * OutlineOptionWidget is an item in an {@link OO.ui.OutlineSelectWidget OutlineSelectWidget}. + * + * Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}, which contain + * {@link OO.ui.PageLayout page layouts}. See {@link OO.ui.BookletLayout BookletLayout} + * for an example. + * + * @class + * @extends OO.ui.DecoratedOptionWidget + * + * @constructor + * @param {Object} [config] Configuration options + * @cfg {number} [level] Indentation level + * @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}. + */ +OO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) { + // Configuration initialization + config = config || {}; + + // Parent constructor + OO.ui.OutlineOptionWidget.super.call( this, config ); + + // Properties + this.level = 0; + this.movable = !!config.movable; + this.removable = !!config.removable; + + // Initialization + this.$element.addClass( 'oo-ui-outlineOptionWidget' ); + this.setLevel( config.level ); +}; + +/* Setup */ + +OO.inheritClass( OO.ui.OutlineOptionWidget, OO.ui.DecoratedOptionWidget ); + +/* Static Properties */ + +OO.ui.OutlineOptionWidget.static.highlightable = false; + +OO.ui.OutlineOptionWidget.static.scrollIntoViewOnSelect = true; + +OO.ui.OutlineOptionWidget.static.levelClass = 'oo-ui-outlineOptionWidget-level-'; + +OO.ui.OutlineOptionWidget.static.levels = 3; + +/* Methods */ + +/** + * Check if item is movable. + * + * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}. + * + * @return {boolean} Item is movable + */ +OO.ui.OutlineOptionWidget.prototype.isMovable = function () { + return this.movable; +}; + +/** + * Check if item is removable. + * + * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}. + * + * @return {boolean} Item is removable + */ +OO.ui.OutlineOptionWidget.prototype.isRemovable = function () { + return this.removable; +}; + +/** + * Get indentation level. + * + * @return {number} Indentation level + */ +OO.ui.OutlineOptionWidget.prototype.getLevel = function () { + return this.level; +}; + +/** + * Set movability. + * + * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}. + * + * @param {boolean} movable Item is movable + * @chainable + */ +OO.ui.OutlineOptionWidget.prototype.setMovable = function ( movable ) { + this.movable = !!movable; + this.updateThemeClasses(); + return this; +}; + +/** + * Set removability. + * + * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}. + * + * @param {boolean} movable Item is removable + * @chainable + */ +OO.ui.OutlineOptionWidget.prototype.setRemovable = function ( removable ) { + this.removable = !!removable; + this.updateThemeClasses(); + return this; +}; + +/** + * Set indentation level. + * + * @param {number} [level=0] Indentation level, in the range of [0,#maxLevel] + * @chainable + */ +OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) { + var levels = this.constructor.static.levels, + levelClass = this.constructor.static.levelClass, + i = levels; + + this.level = level ? Math.max( 0, Math.min( levels - 1, level ) ) : 0; + while ( i-- ) { + if ( this.level === i ) { + this.$element.addClass( levelClass + i ); + } else { + this.$element.removeClass( levelClass + i ); + } + } + this.updateThemeClasses(); + + return this; +}; |