Expand all

OO.ui.MenuLayout

Extends

Constructor

MenuLayouts combine a menu and a content panel. The menu is positioned relative to the content (after, before, top, or bottom) and its size is customized with the #menuSize config. The content area will fill all remaining space.

If menu size needs to be overridden, it can be accomplished using CSS similar to the snippet below. MenuLayout's CSS will override the appropriate values with 'auto' or '0' to display the menu correctly. If menuPosition is known beforehand, CSS rules corresponding to other positions may be omitted.

.oo-ui-menuLayout-menu {
    width: 200px;
    height: 200px;
}

.oo-ui-menuLayout-content {
    top: 200px;
    left: 200px;
    right: 200px;
    bottom: 200px;
}

Example

let menuLayout;
    const menuPanel = new OO.ui.PanelLayout( {
            padded: true,
            expanded: true,
            scrollable: true
        } ),
        contentPanel = new OO.ui.PanelLayout( {
            padded: true,
            expanded: true,
            scrollable: true
        } ),
        select = new OO.ui.SelectWidget( {
            items: [
                new OO.ui.OptionWidget( {
                    data: 'before',
                    label: 'Before'
                } ),
                new OO.ui.OptionWidget( {
                    data: 'after',
                    label: 'After'
                } ),
                new OO.ui.OptionWidget( {
                    data: 'top',
                    label: 'Top'
                } ),
                new OO.ui.OptionWidget( {
                    data: 'bottom',
                    label: 'Bottom'
                } )
             ]
        } ).on( 'select', function ( item ) {
           menuLayout.setMenuPosition( item.getData() );
        } );

    menuLayout = new OO.ui.MenuLayout( {
        position: 'top',
        menuPanel: menuPanel,
        contentPanel: contentPanel
    } );
    menuLayout.$menu.append(
        menuPanel.$element.append( '<b>Menu panel</b>', select.$element )
    );
    menuLayout.$content.append(
        contentPanel.$element.append(
            '<b>Content panel</b>',
            '<p>Note that the menu is positioned relative to the content panel: ' +
            'top, bottom, after, before.</p>'
         )
    );
    $( document.body ).append( menuLayout.$element );

Parameters:

Name Type Attributes Description
config Object optional

Configuration options

Properties:
Name Type Attributes Default Description
menuPanel OO.ui.PanelLayout optional

Menu panel

contentPanel OO.ui.PanelLayout optional

Content panel

expanded boolean optional
true

Expand the layout to fill the entire parent element.

showMenu boolean optional
true

Show menu

menuPosition string optional
'before'

Position of menu: top, after, bottom or before

Source:
MenuLayouts combine a menu and a content panel.

Properties

$content #

Content DOM node

Properties:

Type Description
jQuery
Source:
Content DOM node

$menu #

Menu DOM node

Properties:

Type Description
jQuery
Source:
Menu DOM node

Methods

clearContentPanel() #

Clear the content panel.

Source:
Clear the content panel.

clearMenuPanel() #

Clear the menu panel.

Source:
Clear the menu panel.

getClosestScrollableElementContainer() → {HTMLElement} #

Get closest scrollable container.

Returns:

Closest scrollable container

Type
HTMLElement
Inherited from:
Source:
Get closest scrollable container.

getData() → {any} #

Get element data.

Returns:

Element data

Type
any
Inherited from:
Source:
Get element data.

getElementDocument() → {HTMLDocument} #

Get the DOM document.

Returns:

Document object

Type
HTMLDocument
Inherited from:
Source:
Get the DOM document.

getElementGroup() → {OO.ui.mixin.GroupElement|null} #

Get group element is in.

Returns:

Group element, null if none

Type
OO.ui.mixin.GroupElement | null
Inherited from:
Source:
Get group element is in.

getElementId() → {string} #

Ensure that the element has an 'id' attribute, setting it to an unique value if it's missing, and return its value.

Returns:

Type
string
Inherited from:
Source:

Ensure that the element has an 'id' attribute, setting it to an unique value if it's missing, and return its value.

getElementWindow() → {Window} #

Get the DOM window.

Returns:

Window object

Type
Window
Inherited from:
Source:
Get the DOM window.

getMenuPosition() → {string} #

Get menu position.

Returns:

Menu position

Type
string
Source:
Get menu position.

getTagName() → {string} #

Get the HTML tag name.

Override this method to base the result on instance information.

Returns:

HTML tag name

Type
string
Inherited from:
Source:
Get the HTML tag name.

isElementAttached() → {boolean} #

Check if the element is attached to the DOM

Returns:

The element is attached to the DOM

Type
boolean
Inherited from:
Source:
Check if the element is attached to the DOM

isMenuVisible() → {boolean} #

Check if menu is visible

Returns:

Menu is visible

Type
boolean
Source:
Check if menu is visible

isVisible() → {boolean} #

Check if element is visible.

Returns:

element is visible

Type
boolean
Inherited from:
Source:
Check if element is visible.

resetScroll() → {OO.ui.Layout}chainable #

Reset scroll offsets

Returns:

The layout, for chaining

Type
OO.ui.Layout
Overrides:
Source:
Reset scroll offsets

restorePreInfuseState(state)protected #

Restore the pre-infusion dynamic state for this widget.

This method is called after #$element has been inserted into DOM. The parameter is the return value of #gatherPreInfuseState.

Parameters:

Name Type Description
state Object
Inherited from:
Source:
Restore the pre-infusion dynamic state for this widget.

scrollElementIntoView([config]) → {jQuery.Promise} #

Scroll element into view.

Parameters:

Name Type Attributes Description
config Object optional

Configuration options

Returns:

Promise which resolves when the scroll is complete

Type
jQuery.Promise
Inherited from:
Source:
Scroll element into view.

setContentPanel(contentPanel) #

Set the content panel.

Parameters:

Name Type Description
contentPanel OO.ui.PanelLayout

Content panel

Source:
Set the content panel.

setData(data) → {OO.ui.Element}chainable #

Set element data.

Parameters:

Name Type Description
data any

Element data

Returns:

The element, for chaining

Type
OO.ui.Element
Inherited from:
Source:
Set element data.

setElementGroup(group) → {OO.ui.Element}chainable #

Set group element is in.

Parameters:

Name Type Description
group OO.ui.mixin.GroupElement | null

Group element, null if none

Returns:

The element, for chaining

Type
OO.ui.Element
Inherited from:
Source:
Set group element is in.

setElementId(id) → {OO.ui.Element}chainable #

Set the element has an 'id' attribute.

Parameters:

Name Type Description
id string

Returns:

The element, for chaining

Type
OO.ui.Element
Inherited from:
Source:
Set the element has an 'id' attribute.

setMenuPanel(menuPanel) #

Set the menu panel.

Parameters:

Name Type Description
menuPanel OO.ui.PanelLayout

Menu panel

Source:
Set the menu panel.

setMenuPosition(position) → {OO.ui.MenuLayout}chainable #

Set menu position.

Parameters:

Name Type Description
position string

Position of menu, either top, after, bottom or before

Returns:

The layout, for chaining

Type
OO.ui.MenuLayout
Source:
Set menu position.

supports(methods) → {boolean} #

Check if element supports one or more methods.

Parameters:

Name Type Description
methods string | Array.<string>

Method or list of methods to check

Returns:

All methods are supported

Type
boolean
Inherited from:
Source:
Check if element supports one or more methods.

toggle([show]) → {OO.ui.Element}chainable #

Toggle visibility of an element.

Parameters:

Name Type Attributes Description
show boolean optional

Make element visible, omit to toggle visibility

Returns:

The element, for chaining

Type
OO.ui.Element

Fires:

Inherited from:
Source:
Toggle visibility of an element.

toggleMenu([showMenu]) → {OO.ui.MenuLayout}chainable #

Toggle menu.

Parameters:

Name Type Attributes Description
showMenu boolean optional

Show menu, omit to toggle

Returns:

The layout, for chaining

Type
OO.ui.MenuLayout
Source:
Toggle menu.

updateThemeClasses() #

Update the theme-provided classes.

This is called in element mixins and widget classes any time state changes. Updating is debounced, minimizing overhead of changing multiple attributes and guaranteeing that theme updates do not occur within an element's constructor

Inherited from:
Source:
Update the theme-provided classes.