Responsive Draggable Resizable Windows Manager - Golden Layout
File Size: | 297 KB |
---|---|
Views Total: | 4929 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |

Golden Layout is a jQuery based windows manager that helps developers create responsive, draggable, resizable, themeable, interactive dialog popups for modern UI/UX design.
More features:
- 2 themes: dark and light.
- Touch-enabled and mobile-friendly.
- Allows you to store the layout state in the local storage.
- Supports nested & stacked windows.
- Allows you to sync two layouts by serialisation.
- Custom header controls: minimize, maximize, close, open in new window, etc.
- Compatible with ReactJS and AngularJS.
Table Of Contents:
Basic usage:
1. Load the base stylesheet and a theme CSS in the document.
<!-- Core Stylesheet --> <link rel="stylesheet" href="goldenlayout-base.css" /> <!-- Dark Theme --> <link rel="stylesheet" href="goldenlayout-dark-theme.css" /> <!-- Light Theme --> <link rel="stylesheet" href="goldenlayout-light-theme.css" />
2. Create windows (components) and specify the content type as follows. All possible types:
- 'row'
- 'column'
- 'stack'
- 'component'
- 'react-component'
var config = { content: [{ type: 'row', content: [{ type: 'component', componentName: 'example', componentState: { text: 'Component 1' } }, { type: 'component', componentName: 'example', componentState: { text: 'Component 2' } }, { type: 'component', componentName: 'example', componentState: { text: 'Component 3' } }] }] };
3. Create a new Golden Layout instance and pass the configs as follows:
var myLayout = new GoldenLayout(config);
4. Register the windows.
myLayout.registerComponent('example', function (container, state) { container.getElement().html('<h2>' + state.text + '</h2>'); });
5. Initialize the plugin. Done.
myLayout.init();
6. All possible options to config the windows.
var myLayout = new GoldenLayout({ openPopouts: [], settings: { // global settings hasHeaders: true, constrainDragToContainer: true, reorderEnabled: true, selectionEnabled: false, popoutWholeStack: false, blockedPopoutsThrowError: true, closePopoutsOnUnload: true, showPopoutIcon: true, showMaximiseIcon: true, showCloseIcon: true, responsiveMode: 'onload' // Can be onload, always, or none. }, dimensions: { borderWidth: 5, minItemHeight: 10, minItemWidth: 10, headerHeight: 20, dragProxyWidth: 300, dragProxyHeight: 200 }, labels: { // custm labels close: 'close', maximise: 'maximise', minimise: 'minimise', popout: 'open in new window', popin: 'pop in', tabDropdown: 'additional tabs' }, content: [{ type: 'component', componentName: 'someName', componentState: { some: 'value' }, content: [], // windows here id: 'some id', width: 30, height: 30, isClosable: true, title: 'some title', activeItemIndex: 1 }] });
7. All possible properties.
/* Props for GoldenLayout */ // the top item myLayout.root // DOM element containing the layout myLayout.rootcontainer // true if is initialized myLayout.isInitialised // configs myLayout.config // currently selected items myLayout.selectedItem // outer width of the layout myLayout.width // outer height of the layout myLayout.height // an array of BrowserWindow instances myLayout.openPopouts // true if the layout has been opened as a popout by another layout myLayout.isSubWindow // event hub myLayout.eventHub /* Props for Items (Layout content) */ // configs item.config // item type item.type // an array of child items item.contentItems // parent item item.parent // item id item.id // true if is initialized item.isInitialised // true if the item is maximised item.isMaximised // true if the item is the layout's root item item.isRoot // true if the item is a row item.isRow // true if the item is a column item.isColumn // true if the item is a stack item.isStack // true if the item is a component item.isComponent // a reference to the layoutManager that controls this item item.layoutManager // the item's outer element item.element // the item's inner element. item.childElementContainer /* Props for Container */ // container width item.width // container height item.height // parent container item.parent // tab control for this container item.tab // container title item.title // A reference to the GoldenLayout instance this container belongs to item.layoutManager // true if the item is currently hidden item.isHidden /* Props for Browser Window */ // true if is initialized window.isInitialised /* Props for Header */ // a reference to the LayoutManager instance header.layoutManager // parent element header.parent // an array of tabs header.tabs // currently selected activeContentItem header.activeContentItem // outer element of this Header header.element // tab container header.tabsContainer // element containing the close, maximise and popout button header.controlsContainer /* Props for Tabs */ // true if is the selected tab tab.isActive // a reference to the header tab.header // a reference to the content item tab.contentItem // outer element of this tab tab.element // title element tab.titleElement // true if is active tab.isActive
8. API methods.
/* Methods for GoldenLayout */ // Constructs a new layout myLayout = new GoldenLayout(configuration, container); // Registers a new component myLayout.registerComponent( name, component ); // Initialize the plugin myLayout.init(); // Returns the current state of the layout and its components as a serialisable object. myLayout.toConfig(); // Gets the component registered with registerComponent(). myLayout.getComponent(name); // Updates the size myLayout.updateSize(width, height); // Destroy the layout myLayout.destroy(); // Creates new windows myLayout.createContentItem(itemConfiguration, parent); // Creates a new popout myLayout.createPopout(configOrContentItem, dimensions, parentId, indexInParent); // Turns a DOM element into a dragSource, meaning that the user can drag the element directly onto the layout where it turns into a contentItem. myLayout.newDragSource(element, itemConfiguration); // Selects a contentItem myLayout.selectItem(contentItem); // Minify/unminify configs GoldenLayout.minifyConfig(config); GoldenLayout.unminifyConfig(minifiedConfig); /* Methods for Items (Layout content) */ // Adds child items item.addChild(itemOrItemConfig, index); // Removes an item item.removeChild(contentItem, keepChild); // Replaces an item item.replaceChild(oldChild, newChild); // Updates the item size item.setSize(); // Sets title item.setTitle(title); // Recursively call methods on items in a tree item.callDownwards(functionName, functionArguments, bottomUp, skipSelf); // Emits an event that bubbles up the item tree until it reaches the root element (and after a delay the layout manager); item.emitBubblingEvent(name); // Similar to the item.parent.removeChild(item) item.remove(); // Removes the item from its current position in the layout and opens it in a window item.popout(); // Maximizes the item item.toggleMaximise(); // Selects the item item.select(); // Deselects the item item.deselect(); // Checks if has ID item.hasId(id); // Sets active item item.setActiveContentItem(contentItem); // Gets active item item.getActiveContentItem(); // Add an unique ID to the item item.addId(id); // Removes the ID item.removeId(id); // Get items by a filter item.getItemsByFilter(filterFunction); // Gets items by ID item.getItemsById(id); // Gets items by content type item.getItemsByType(type); // Gets components by name item.getComponentsByName(componentName); /* Methods for Container */ // Gets container's elements container.getElement(); // Sets states container.setState(state); // Extends states container.extendState(state); // Gets states container.getState(); // Hides the container container.hide(); // Shows the container container.show(); // Sets container size container.setSize(width, height); // Sets container title container.setTitle(title); // Close the container container.close(); /* Methods for Header */ // Sets active item header.setActiveContentItem(contentItem); // Create a new tab header.createTab(contentItem, index); // Removes a tab header.removeTab(contentItem); /* Methods for Tab */ // Sets tab title tab.setTitle(title); // Sets active tab tab.setActive(isActive);
9. Event handlers.
on( eventName, callback, context ) emit( eventName, arg1, arg2, ...argN ) trigger( eventName, arg1, arg2, ...argN ) unbind( eventName, callback, context ) off( eventName, callback, context ) /* Methods for GoldenLayout */ myLayout.on('stateChanged', function(){ // do something }) myLayout.on('titleChanged', function(){ // do something }) myLayout.on('activeContentItemChanged', function(){ // do something }) myLayout.on('itemDestroyed', function(){ // do something }) myLayout.on('itemCreated', function(){ // do something }) myLayout.on('componentCreated', function(){ // do something }) myLayout.on('rowCreated', function(){ // do something }) myLayout.on('columnCreated', function(){ // do something }) myLayout.on('stackCreated', function(){ // do something }) /* Methods for Container */ container.on('open', function(){ // do something }) container.on('resize', function(){ // do something }) container.on('destroy', function(){ // do something }) container.on('close', function(){ // do something }) container.on('tab', function(){ // do something }) container.on('show', function(){ // do something }) container.on('hide', function(){ // do something }) /* Methods for Browser Window */ window.on('initialised', function(){ // do something }) window.on('closed', function(){ // do something })
Changelog:
v2.6.0 (2022-09-26)
- Fixed add component tab positioning
- Removed the height property from .lm_drop_tab_placeholder in goldenlayout-base.less (and .scss). If your application uses a copy or derivative of this file, you will need to make the same change in your copy/derivative.
- Improved handling of rounding when calculating areas
- Reworked unload handling
- Improved component sizing
- Updated dependencies
- Added support for proper ComponentItemConfig in DragSource
v2.5.0 (2022-03-06)
- Bugfixes
- Add Automatic Resizing
v2.4.0 (2021-10-24)
- A new binding method (embedding via events) which makes it even easier to integrate Golden-Layout into opinionated frameworks
- Fixes replaceComponent()
v2.3.0 (2021-07-20)
- Added virtual component.
v2.2.1 (2021-05-29)
- Add src into package
- Fix DragProxy resize isses
- Enable and add first tests
v2.2.0 (2021-05-16)
- Fix popout bugs
- Re-add EventHub facility for multi-window communication
- Fix DragProxy item sizing
v2.1.2 (2021-04-30)
- Fix nested golden-layout instances in popouts
- Fix splitter drag consumed by browser
- Fix dragging resizing
v2.1.1 (2021-04-16)
- Added touch support
v2.1.0 (2021-04-06)
- Readded popout functionality
- Added popInOnClose function
- Fixes deepExtend when run into multiple execution contexts
- Fixes sided headers
v2.0.3 (2021-03-30)
- Added "show" EventEmitter event which behaves the same as "shown"
- Marked the "shown" EventEmitter event as deprecated
v2.0.2 (2021-02-27)
- Fix dragging of first content item within a stack.
- Fix reorderEnabled can't be changed after initialization.
v2.0.1 (2021-02-24)
- Fix DragSource not working
- newComponent() and addComponent() type functions in LayoutManager, Stack and RowOrColumn have a new title parameter. This parameter is optional however it is not the last optional parameter.
- LayoutManager.createDragSource() has been renamed to LayoutManager.newDragSource(). This is to make it more obvious that it is paired with LayoutManager.removeDragSource()
- LayoutManager.newDragSource() now only will create a ComponentItem. Its parameters have been changed to reflect that.
- TypeScript definition has been updated to remove many private declarations which should not have been included.
This awesome jQuery plugin is developed by golden-layout. For more Advanced Usages, please check the demo page or visit the official website.