diff --git a/.bundlewatch.config.json b/.bundlewatch.config.json
index 85607587b..ca77cb92f 100644
--- a/.bundlewatch.config.json
+++ b/.bundlewatch.config.json
@@ -2,11 +2,11 @@
"files": [
{
"path": "./dist/css/adminlte.css",
- "maxSize": "81.5 kB"
+ "maxSize": "82 kB"
},
{
"path": "./dist/css/adminlte.min.css",
- "maxSize": "77.5 kB"
+ "maxSize": "77.8 kB"
},
{
"path": "./dist/css/alt/adminlte.components.css",
@@ -14,7 +14,7 @@
},
{
"path": "./dist/css/alt/adminlte.components.min.css",
- "maxSize": "15 kB"
+ "maxSize": "15.4 kB"
},
{
"path": "./dist/css/alt/adminlte.core.css",
@@ -46,15 +46,15 @@
},
{
"path": "./dist/css/alt/adminlte.plugins.min.css",
- "maxSize": "16 kB"
+ "maxSize": "16.6 kB"
},
{
"path": "./dist/js/adminlte.js",
- "maxSize": "12 kB"
+ "maxSize": "15 kB"
},
{
"path": "./dist/js/adminlte.min.js",
- "maxSize": "8 kB"
+ "maxSize": "10.5 kB"
}
]
}
diff --git a/build/js/AdminLTE.js b/build/js/AdminLTE.js
index 7f854ddf1..a6906ca98 100644
--- a/build/js/AdminLTE.js
+++ b/build/js/AdminLTE.js
@@ -5,6 +5,7 @@ import DirectChat from './DirectChat'
import Dropdown from './Dropdown'
import ExpandableTable from './ExpandableTable'
import Fullscreen from './Fullscreen'
+import IFrame from './IFrame'
import Layout from './Layout'
import PushMenu from './PushMenu'
import SidebarSearch from './SidebarSearch'
@@ -20,6 +21,7 @@ export {
Dropdown,
ExpandableTable,
Fullscreen,
+ IFrame,
Layout,
PushMenu,
SidebarSearch,
diff --git a/build/js/IFrame.js b/build/js/IFrame.js
new file mode 100644
index 000000000..de8c4a43e
--- /dev/null
+++ b/build/js/IFrame.js
@@ -0,0 +1,356 @@
+/**
+ * --------------------------------------------
+ * AdminLTE IFrame.js
+ * License MIT
+ * --------------------------------------------
+ */
+
+import $ from 'jquery'
+
+/**
+ * Constants
+ * ====================================================
+ */
+
+const NAME = 'IFrame'
+const DATA_KEY = 'lte.iframe'
+const JQUERY_NO_CONFLICT = $.fn[NAME]
+
+const SELECTOR_DATA_TOGGLE = '[data-widget="iframe"]'
+const SELECTOR_DATA_TOGGLE_CLOSE = '[data-widget="iframe-close"]'
+const SELECTOR_DATA_TOGGLE_SCROLL_LEFT = '[data-widget="iframe-scrollleft"]'
+const SELECTOR_DATA_TOGGLE_SCROLL_RIGHT = '[data-widget="iframe-scrollright"]'
+const SELECTOR_DATA_TOGGLE_FULLSCREEN = '[data-widget="iframe-fullscreen"]'
+const SELECTOR_CONTENT_WRAPPER = '.content-wrapper'
+const SELECTOR_CONTENT_IFRAME = `${SELECTOR_CONTENT_WRAPPER} iframe`
+const SELECTOR_TAB_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .nav`
+const SELECTOR_TAB_NAVBAR_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .navbar-nav`
+const SELECTOR_TAB_NAVBAR_NAV_ITEM = `${SELECTOR_TAB_NAVBAR_NAV} .nav-item`
+const SELECTOR_TAB_CONTENT = `${SELECTOR_DATA_TOGGLE}.iframe-mode .tab-content`
+const SELECTOR_TAB_EMPTY = `${SELECTOR_TAB_CONTENT} .tab-empty`
+const SELECTOR_TAB_LOADING = `${SELECTOR_TAB_CONTENT} .tab-loading`
+const SELECTOR_SIDEBAR_MENU_ITEM = '.main-sidebar .nav-item > a.nav-link'
+const SELECTOR_HEADER_MENU_ITEM = '.main-header .nav-item a.nav-link'
+const SELECTOR_HEADER_DROPDOWN_ITEM = '.main-header a.dropdown-item'
+const CLASS_NAME_IFRAME_MODE = 'iframe-mode'
+const CLASS_NAME_FULLSCREEN_MODE = 'iframe-mode-fullscreen'
+
+const Default = {
+ onTabClick(item) {
+ return item
+ },
+ onTabChanged(item) {
+ return item
+ },
+ onTabCreated(item) {
+ return item
+ },
+ autoIframeMode: true,
+ autoItemActive: true,
+ autoShowNewTab: true,
+ loadingScreen: true,
+ useNavbarItems: true,
+ scrollOffset: 40,
+ scrollBehaviorSwap: false,
+ iconMaximize: 'fa-expand',
+ iconMinimize: 'fa-compress'
+}
+
+/**
+ * Class Definition
+ * ====================================================
+ */
+
+class IFrame {
+ constructor(element, config) {
+ this._config = config
+ this._element = element
+
+ this._init()
+ }
+
+ // Public
+
+ onTabClick(item) {
+ this._config.onTabClick(item)
+ }
+
+ onTabChanged(item) {
+ this._config.onTabChanged(item)
+ }
+
+ onTabCreated(item) {
+ this._config.onTabCreated(item)
+ }
+
+ createTab(title, link, uniqueName, autoOpen) {
+ const tabId = `panel-${uniqueName}-${Math.floor(Math.random() * 1000)}`
+ const navId = `tab-${uniqueName}-${Math.floor(Math.random() * 1000)}`
+
+ const newNavItem = `
${title}`
+ $(SELECTOR_TAB_NAVBAR_NAV).append(newNavItem)
+
+ const newTabItem = ``
+ $(SELECTOR_TAB_CONTENT).append(newTabItem)
+
+ if (autoOpen) {
+ if (this._config.loadingScreen) {
+ const $loadingScreen = $(SELECTOR_TAB_LOADING)
+ $loadingScreen.fadeIn()
+ $(`${tabId} iframe`).ready(() => {
+ if (typeof this._config.loadingScreen === 'number') {
+ this.switchTab(`#${navId}`, this._config.loadingScreen)
+ setTimeout(() => {
+ $loadingScreen.fadeOut()
+ }, this._config.loadingScreen)
+ } else {
+ this.switchTab(`#${navId}`, this._config.loadingScreen)
+ $loadingScreen.fadeOut()
+ }
+ })
+ } else {
+ this.switchTab(`#${navId}`)
+ }
+ }
+
+ this.onTabCreated($(`#${navId}`))
+ }
+
+ openTabSidebar(item, autoOpen = this._config.autoShowNewTab) {
+ let $item = $(item).clone()
+ if ($item.attr('href') === undefined) {
+ $item = $(item).parent('a').clone()
+ }
+
+ $item.find('.right').remove()
+ let title = $item.find('p').text()
+ if (title === '') {
+ title = $item.text()
+ }
+
+ const link = $item.attr('href')
+ if (link === '#' || link === '' || link === undefined) {
+ return
+ }
+
+ this.createTab(title, link, link.replace('.html', '').replace('./', '').replaceAll('/', '-'), autoOpen)
+ }
+
+ switchTab(item) {
+ const $item = $(item)
+ const tabId = $item.attr('href')
+
+ $(SELECTOR_TAB_EMPTY).hide()
+ $(`${SELECTOR_TAB_NAVBAR_NAV} .active`).tab('dispose').removeClass('active')
+ this._fixHeight()
+
+ $item.tab('show')
+ $item.parents('li').addClass('active')
+ this.onTabChanged($item)
+
+ if (this._config.autoItemActive) {
+ this._setItemActive($(`${tabId} iframe`).attr('src'))
+ }
+ }
+
+ removeActiveTab() {
+ const $navItem = $(`${SELECTOR_TAB_NAVBAR_NAV_ITEM}.active`)
+ const $navItemParent = $navItem.parent()
+ const navItemIndex = $navItem.index()
+ $navItem.remove()
+ $('.tab-pane.active').remove()
+
+ if ($(SELECTOR_TAB_CONTENT).children().length == $(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).length) {
+ $(SELECTOR_TAB_EMPTY).show()
+ } else {
+ const prevNavItemIndex = navItemIndex - 1
+ this.switchTab($navItemParent.children().eq(prevNavItemIndex).find('a'))
+ }
+ }
+
+ toggleFullscreen() {
+ if ($('body').hasClass(CLASS_NAME_FULLSCREEN_MODE)) {
+ $(`${SELECTOR_DATA_TOGGLE_FULLSCREEN} i`).removeClass(this._config.iconMinimize).addClass(this._config.iconMaximize)
+ $('body').removeClass(CLASS_NAME_FULLSCREEN_MODE)
+ $(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height('auto')
+ $(SELECTOR_CONTENT_WRAPPER).height('auto')
+ $(SELECTOR_CONTENT_IFRAME).height('auto')
+ } else {
+ $(`${SELECTOR_DATA_TOGGLE_FULLSCREEN} i`).removeClass(this._config.iconMaximize).addClass(this._config.iconMinimize)
+ $('body').addClass(CLASS_NAME_FULLSCREEN_MODE)
+ }
+
+ $(window).trigger('resize')
+ this._fixHeight(true)
+ }
+
+ // Private
+
+ _init() {
+ if (window.frameElement && this._config.autoIframeMode) {
+ $('body').addClass(CLASS_NAME_IFRAME_MODE)
+ } else if ($(SELECTOR_CONTENT_WRAPPER).hasClass(CLASS_NAME_IFRAME_MODE)) {
+ this._setupListeners()
+ this._fixHeight(true)
+ }
+ }
+
+ _navScroll(offset) {
+ const leftPos = $(SELECTOR_TAB_NAVBAR_NAV).scrollLeft()
+ $(SELECTOR_TAB_NAVBAR_NAV).animate({ scrollLeft: (leftPos + offset) }, 250, 'linear')
+ }
+
+ _setupListeners() {
+ $(window).on('resize', () => {
+ setTimeout(() => {
+ this._fixHeight()
+ }, 1)
+ })
+ $(document).on('click', SELECTOR_SIDEBAR_MENU_ITEM, e => {
+ e.preventDefault()
+ this.openTabSidebar(e.target)
+ })
+
+ if (this._config.useNavbarItems) {
+ $(document).on('click', `${SELECTOR_HEADER_MENU_ITEM}, ${SELECTOR_HEADER_DROPDOWN_ITEM}`, e => {
+ e.preventDefault()
+ this.openTabSidebar(e.target)
+ })
+ }
+
+ $(document).on('click', SELECTOR_TAB_NAVBAR_NAV_ITEM, e => {
+ e.preventDefault()
+ this.onTabClick(e.target)
+ this.switchTab(e.target)
+ })
+ $(document).on('click', SELECTOR_DATA_TOGGLE_CLOSE, e => {
+ e.preventDefault()
+ this.removeActiveTab()
+ })
+ $(document).on('click', SELECTOR_DATA_TOGGLE_FULLSCREEN, e => {
+ e.preventDefault()
+ this.toggleFullscreen()
+ })
+ let mousedown = false
+ let mousedownInterval = null
+ $(document).on('mousedown', SELECTOR_DATA_TOGGLE_SCROLL_LEFT, e => {
+ e.preventDefault()
+ clearInterval(mousedownInterval)
+
+ let { scrollOffset } = this._config
+
+ if (!this._config.scrollBehaviorSwap) {
+ scrollOffset = -scrollOffset
+ }
+
+ mousedown = true
+ this._navScroll(scrollOffset)
+
+ mousedownInterval = setInterval(() => {
+ this._navScroll(scrollOffset)
+ }, 250)
+ })
+ $(document).on('mousedown', SELECTOR_DATA_TOGGLE_SCROLL_RIGHT, e => {
+ e.preventDefault()
+ clearInterval(mousedownInterval)
+
+ let { scrollOffset } = this._config
+
+ if (this._config.scrollBehaviorSwap) {
+ scrollOffset = -scrollOffset
+ }
+
+ mousedown = true
+ this._navScroll(scrollOffset)
+
+ mousedownInterval = setInterval(() => {
+ this._navScroll(scrollOffset)
+ }, 250)
+ })
+ $(document).on('mouseup', () => {
+ if (mousedown) {
+ mousedown = false
+ clearInterval(mousedownInterval)
+ mousedownInterval = null
+ }
+ })
+ }
+
+ _setItemActive(href) {
+ $(`${SELECTOR_SIDEBAR_MENU_ITEM}, ${SELECTOR_HEADER_DROPDOWN_ITEM}`).removeClass('active')
+ $(SELECTOR_HEADER_MENU_ITEM).parent().removeClass('active')
+
+ const $headerMenuItem = $(`${SELECTOR_HEADER_MENU_ITEM}[href$="${href}"]`)
+ const $headerDropdownItem = $(`${SELECTOR_HEADER_DROPDOWN_ITEM}[href$="${href}"]`)
+ const $sidebarMenuItem = $(`${SELECTOR_SIDEBAR_MENU_ITEM}[href$="${href}"]`)
+
+ $headerMenuItem.each((i, e) => {
+ $(e).parent().addClass('active')
+ })
+ $headerDropdownItem.each((i, e) => {
+ $(e).addClass('active')
+ })
+ $sidebarMenuItem.each((i, e) => {
+ $(e).addClass('active')
+ $(e).parents('.nav-treeview').prevAll('.nav-link').addClass('active')
+ })
+ }
+
+ _fixHeight(tabEmpty = false) {
+ if ($('body').hasClass(CLASS_NAME_FULLSCREEN_MODE)) {
+ const windowHeight = $(window).height()
+ $(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height(windowHeight)
+ $(SELECTOR_CONTENT_WRAPPER).height(windowHeight)
+ $(SELECTOR_CONTENT_IFRAME).height(windowHeight)
+ } else {
+ const contentWrapperHeight = parseFloat($(SELECTOR_CONTENT_WRAPPER).css('min-height'))
+ const navbarHeight = $(SELECTOR_TAB_NAV).outerHeight()
+ if (tabEmpty == true) {
+ setTimeout(() => {
+ $(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height(contentWrapperHeight - navbarHeight)
+ }, 50)
+ } else {
+ $(SELECTOR_CONTENT_IFRAME).height(contentWrapperHeight - navbarHeight)
+ }
+ }
+ }
+
+ // Static
+
+ static _jQueryInterface(operation, ...args) {
+ let data = $(this).data(DATA_KEY)
+ const _options = $.extend({}, Default, $(this).data())
+
+ if (!data) {
+ data = new IFrame(this, _options)
+ $(this).data(DATA_KEY, data)
+ }
+
+ if (typeof operation === 'string' && operation.match(/createTab|openTabSidebar|switchTab|removeActiveTab/)) {
+ data[operation](...args)
+ }
+ }
+}
+
+/**
+ * Data API
+ * ====================================================
+ */
+
+$(window).on('load', () => {
+ IFrame._jQueryInterface.call($(SELECTOR_DATA_TOGGLE))
+})
+
+/**
+ * jQuery API
+ * ====================================================
+ */
+
+$.fn[NAME] = IFrame._jQueryInterface
+$.fn[NAME].Constructor = IFrame
+$.fn[NAME].noConflict = function () {
+ $.fn[NAME] = JQUERY_NO_CONFLICT
+ return IFrame._jQueryInterface
+}
+
+export default IFrame
diff --git a/build/js/Layout.js b/build/js/Layout.js
index 773c4eb22..88b442653 100644
--- a/build/js/Layout.js
+++ b/build/js/Layout.js
@@ -36,6 +36,7 @@ const Default = {
scrollbarTheme: 'os-theme-light',
scrollbarAutoHide: 'l',
panelAutoHeight: true,
+ panelAutoHeightMode: 'min-height',
loginRegisterAutoHeight: true
}
@@ -81,15 +82,15 @@ class Layout {
if (offset !== false) {
if (max === heights.controlSidebar) {
- $contentSelector.css('min-height', (max + offset))
+ $contentSelector.css(this._config.panelAutoHeightMode, (max + offset))
} else if (max === heights.window) {
- $contentSelector.css('min-height', (max + offset) - heights.header - heights.footer)
+ $contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header - heights.footer)
} else {
- $contentSelector.css('min-height', (max + offset) - heights.header)
+ $contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header)
}
if (this._isFooterFixed()) {
- $contentSelector.css('min-height', parseFloat($contentSelector.css('min-height')) + heights.footer)
+ $contentSelector.css(this._config.panelAutoHeightMode, parseFloat($contentSelector.css(this._config.panelAutoHeightMode)) + heights.footer)
}
}
@@ -98,7 +99,7 @@ class Layout {
}
if (offset !== false) {
- $contentSelector.css('min-height', (max + offset) - heights.header - heights.footer)
+ $contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header - heights.footer)
}
if (typeof $.fn.overlayScrollbars !== 'undefined') {
@@ -123,8 +124,8 @@ class Layout {
} else {
const boxHeight = $selector.height()
- if ($body.css('min-height') !== boxHeight) {
- $body.css('min-height', boxHeight)
+ if ($body.css(this._config.panelAutoHeightMode) !== boxHeight) {
+ $body.css(this._config.panelAutoHeightMode, boxHeight)
}
}
}
diff --git a/build/scss/pages/_iframe.scss b/build/scss/pages/_iframe.scss
new file mode 100644
index 000000000..c0a2721f9
--- /dev/null
+++ b/build/scss/pages/_iframe.scss
@@ -0,0 +1,80 @@
+body.iframe-mode {
+ .main-sidebar {
+ display: none;
+ }
+ .content-wrapper {
+ margin-left: 0 !important;
+ margin-top: 0 !important;
+ padding-bottom: 0 !important;
+ }
+ .main-header,
+ .main-footer {
+ display: none;
+ }
+}
+
+body.iframe-mode-fullscreen {
+ overflow: hidden;
+}
+
+.content-wrapper {
+ height: 100%;
+
+ &.iframe-mode {
+ .navbar-nav {
+ overflow-y: auto;
+ width: 100%;
+
+ .nav-link {
+ white-space: nowrap;
+ }
+ }
+ .tab-content {
+ position: relative;
+ }
+ .tab-empty {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+ .tab-loading {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ display: none;
+ background-color: $main-bg;
+
+ > div {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ }
+ }
+
+ iframe {
+ border: 0;
+ width: 100%;
+ height: 100%;
+
+ .content-wrapper {
+ padding-bottom: 0 !important;
+ }
+ }
+
+ body.iframe-mode-fullscreen & {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ margin-left: 0 !important;
+ height: 100%;
+ min-height: 100%;
+ z-index: $zindex-main-sidebar + 10;
+ }
+ }
+}
diff --git a/build/scss/parts/_pages.scss b/build/scss/parts/_pages.scss
index 383e49762..35b4918bc 100644
--- a/build/scss/parts/_pages.scss
+++ b/build/scss/parts/_pages.scss
@@ -10,4 +10,5 @@
@import "../pages/profile";
@import "../pages/e-commerce";
@import "../pages/projects";
+@import "../pages/iframe";
@import "../pages/kanban";
diff --git a/docs/_config.yml b/docs/_config.yml
index 7bbe8e842..d2f98b4a1 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -69,6 +69,8 @@ navigation:
url: javascript/sidebar-search.html
- title: Expandable Tables
url: javascript/expandable-tables.html
+ - title: IFrame
+ url: javascript/iframe.html
- title: Browser Support
url: browser-support.html
icon: fab fa-chrome
diff --git a/docs/javascript/iframe.md b/docs/javascript/iframe.md
new file mode 100644
index 000000000..f959c1318
--- /dev/null
+++ b/docs/javascript/iframe.md
@@ -0,0 +1,91 @@
+---
+layout: page
+title: IFrame Plugin
+---
+
+The iframe plugin provides the functionality to open sidebar & navbar items in a tabbed iframe.
+
+##### Required Markup
+To get the iframe 100% working you need the following content-wrapper markup:
+
+```html
+
+
+
+
+
No tab selected!
+
+
+
+
+```
+
+##### Usage
+This plugin can be activated as a jQuery plugin or using the data api.
+
+###### Data API
+{: .text-bold }
+Activate the plugin by adding `data-widget="iframe"` to the `.content-wrapper`. If you need to provide onCheck and onUncheck methods, please use the jQuery API.
+
+###### jQuery
+{: .text-bold }
+The jQuery API provides more customizable options that allows the developer to handle checking and unchecking the todo list checkbox events.
+```js
+$('.content-wrapper').IFrame({
+ onTabClick(item) {
+ return item
+ },
+ onTabChanged(item) {
+ return item
+ },
+ onTabCreated(item) {
+ return item
+ },
+ autoIframeMode: true,
+ autoItemActive: true,
+ autoShowNewTab: true,
+ loadingScreen: 750,
+ useNavbarItems: true
+})
+```
+
+
+##### Options
+{: .mt-4}
+
+|---
+| Name | Type | Default | Description
+|-|-|-|-
+|onTabClick | Function | Anonymous Function | Handle tab click event.
+|onTabChanged | Function | Anonymous Function | Handle tab changed event.
+|onTabCreated | Function | Anonymous Function | Handle tab created event.
+|autoIframeMode | Boolean | true | Whether to automatically add `.iframe-mode` to `body` if page is loaded via iframe.
+|autoItemActive | Boolean | true | Whether to automatically set the sidebar menu item active based on the active iframe.
+|autoShowNewTab | Boolean | true | Whether to automatically display created tab.
+|loadingScreen | Boolean/Number | true | [Boolean] Whether to enable iframe loading screen; [Number] Set loading screen hide delay.
+|useNavbarItems | Boolean | true | Whether to open navbar menu items, instead of open only sidebar menu items.
+
+|---
+{: .table .table-bordered .bg-light}
+
+
+##### Methods
+{: .mt-4}
+
+|---
+| Method | Description
+|-|-
+|createTab| Create tab by title, link & uniqueName. Available arguments: title `String`, link `String`, uniqueName `String`, autoOpen `Boolean/Optional`.
+|openTabSidebar| Create tab by sidebar menu item. Available arguments: item `String|jQuery Object`, autoOpen `Boolean/Optional`.
+|switchTab| Switch tab by iframe tab navbar item. Available arguments: item `String|jQuery Object`.
+|removeActiveTab| Remove active iframe tab.
+{: .table .table-bordered .bg-light}
+
+Example: `$('.content-wrapper').IFrame('createTab', 'Home', 'index.html, 'index', true)`
diff --git a/docs/javascript/layout.md b/docs/javascript/layout.md
index 1b1e248c3..289ae9e9f 100644
--- a/docs/javascript/layout.md
+++ b/docs/javascript/layout.md
@@ -14,9 +14,10 @@ This plugin is activated automatically upon window load.
|---
| Name | Type | Default | Description
|-|-|-|-
-|scrollbarTheme | Boolean | `os-theme-light` | Scrollbar Theme used while SideBar Fixed
-|scrollbarAutoHide | Boolean | `l` | Scrollbar auto-hide trigger
+|scrollbarTheme | String | `os-theme-light` | Scrollbar Theme used while SideBar Fixed
+|scrollbarAutoHide | String | `l` | Scrollbar auto-hide trigger
|panelAutoHeight | Boolean\|Numeric | true | Panel Height Correction (`true` = default correction on load/resize; numeric = offset the correction on load/resize)
+|panelAutoHeightMode | String | `min-height` | Panel Height Mode (`min-height` = sets the `min-height`-attribute to the content-wrapper; `height` = sets `height`-attribute to the content-wrapper)
|loginRegisterAutoHeight | Boolean\|Integer | true | Login & Register Height Correction (`true` = single correction on load; integer = correction with a interval based on the interger)
|---
{: .table .table-bordered .bg-light}
diff --git a/iframe.html b/iframe.html
new file mode 100644
index 000000000..f0836451d
--- /dev/null
+++ b/iframe.html
@@ -0,0 +1,797 @@
+
+
+
+
+
+ AdminLTE 3 | Tabbed IFrames
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
No tab selected!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/index.html b/index.html
index ea2a6210b..99c517693 100644
--- a/index.html
+++ b/index.html
@@ -723,6 +723,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/index2.html b/index2.html
index e3fc25390..494067e2f 100644
--- a/index2.html
+++ b/index2.html
@@ -710,6 +710,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/index3.html b/index3.html
index 4af9c561f..07f858b87 100644
--- a/index3.html
+++ b/index3.html
@@ -719,6 +719,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/UI/buttons.html b/pages/UI/buttons.html
index d35f75158..8304808db 100644
--- a/pages/UI/buttons.html
+++ b/pages/UI/buttons.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/UI/general.html b/pages/UI/general.html
index c59560e06..fe632a70f 100644
--- a/pages/UI/general.html
+++ b/pages/UI/general.html
@@ -752,6 +752,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/UI/icons.html b/pages/UI/icons.html
index 005c4842d..9a0d70024 100644
--- a/pages/UI/icons.html
+++ b/pages/UI/icons.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/UI/modals.html b/pages/UI/modals.html
index 4327a70d5..3c769f700 100644
--- a/pages/UI/modals.html
+++ b/pages/UI/modals.html
@@ -712,6 +712,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/UI/navbar.html b/pages/UI/navbar.html
index b819c256c..2552b21b2 100644
--- a/pages/UI/navbar.html
+++ b/pages/UI/navbar.html
@@ -714,6 +714,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/UI/ribbons.html b/pages/UI/ribbons.html
index b36ada507..f84072b6c 100644
--- a/pages/UI/ribbons.html
+++ b/pages/UI/ribbons.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/UI/sliders.html b/pages/UI/sliders.html
index 0294c7b31..5dd0f986b 100644
--- a/pages/UI/sliders.html
+++ b/pages/UI/sliders.html
@@ -712,6 +712,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/UI/timeline.html b/pages/UI/timeline.html
index ccf92859d..3f9cb1559 100644
--- a/pages/UI/timeline.html
+++ b/pages/UI/timeline.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/calendar.html b/pages/calendar.html
index c1c28bdb3..eb249bfee 100644
--- a/pages/calendar.html
+++ b/pages/calendar.html
@@ -710,6 +710,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/charts/chartjs.html b/pages/charts/chartjs.html
index b778c499e..2d0071b3f 100644
--- a/pages/charts/chartjs.html
+++ b/pages/charts/chartjs.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/charts/flot.html b/pages/charts/flot.html
index 367becce2..39146143f 100644
--- a/pages/charts/flot.html
+++ b/pages/charts/flot.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/charts/inline.html b/pages/charts/inline.html
index 8f390735f..85702b854 100644
--- a/pages/charts/inline.html
+++ b/pages/charts/inline.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/404.html b/pages/examples/404.html
index d6650a672..acb543bd8 100644
--- a/pages/examples/404.html
+++ b/pages/examples/404.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/500.html b/pages/examples/500.html
index 2f2eb934f..afe827ba0 100644
--- a/pages/examples/500.html
+++ b/pages/examples/500.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/blank.html b/pages/examples/blank.html
index 450898993..b4e866f96 100644
--- a/pages/examples/blank.html
+++ b/pages/examples/blank.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/contact-us.html b/pages/examples/contact-us.html
index b7a29266b..ae2fe96ef 100644
--- a/pages/examples/contact-us.html
+++ b/pages/examples/contact-us.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/contacts.html b/pages/examples/contacts.html
index bc7dcd351..dc0422b8e 100644
--- a/pages/examples/contacts.html
+++ b/pages/examples/contacts.html
@@ -697,6 +697,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/e-commerce.html b/pages/examples/e-commerce.html
index 807c699bf..aaab4bcbc 100644
--- a/pages/examples/e-commerce.html
+++ b/pages/examples/e-commerce.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/faq.html b/pages/examples/faq.html
index e2724865b..d930c49d4 100644
--- a/pages/examples/faq.html
+++ b/pages/examples/faq.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/invoice.html b/pages/examples/invoice.html
index 160188872..070c7d828 100644
--- a/pages/examples/invoice.html
+++ b/pages/examples/invoice.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/language-menu.html b/pages/examples/language-menu.html
index e9123713b..ec487d879 100644
--- a/pages/examples/language-menu.html
+++ b/pages/examples/language-menu.html
@@ -721,6 +721,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/legacy-user-menu.html b/pages/examples/legacy-user-menu.html
index 935e45267..472b26f63 100644
--- a/pages/examples/legacy-user-menu.html
+++ b/pages/examples/legacy-user-menu.html
@@ -736,6 +736,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/pace.html b/pages/examples/pace.html
index 1f406a958..3e0581547 100644
--- a/pages/examples/pace.html
+++ b/pages/examples/pace.html
@@ -711,6 +711,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/profile.html b/pages/examples/profile.html
index 46e385d0c..2600f8d72 100644
--- a/pages/examples/profile.html
+++ b/pages/examples/profile.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/project-add.html b/pages/examples/project-add.html
index cac93fd60..c8d46f0ee 100644
--- a/pages/examples/project-add.html
+++ b/pages/examples/project-add.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/project-detail.html b/pages/examples/project-detail.html
index 0b956c04e..f340f9462 100644
--- a/pages/examples/project-detail.html
+++ b/pages/examples/project-detail.html
@@ -710,6 +710,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/project-edit.html b/pages/examples/project-edit.html
index 428932ef6..964b60fd6 100644
--- a/pages/examples/project-edit.html
+++ b/pages/examples/project-edit.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/examples/projects.html b/pages/examples/projects.html
index 439a7e405..3c8fc7656 100644
--- a/pages/examples/projects.html
+++ b/pages/examples/projects.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/forms/advanced.html b/pages/forms/advanced.html
index 6958665ff..61049a255 100644
--- a/pages/forms/advanced.html
+++ b/pages/forms/advanced.html
@@ -725,6 +725,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/forms/editors.html b/pages/forms/editors.html
index 9ad6ae2b2..76aa9a512 100644
--- a/pages/forms/editors.html
+++ b/pages/forms/editors.html
@@ -715,6 +715,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/forms/general.html b/pages/forms/general.html
index cb1023b2d..e54c31576 100644
--- a/pages/forms/general.html
+++ b/pages/forms/general.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/forms/validation.html b/pages/forms/validation.html
index fe65a845d..c710374a5 100644
--- a/pages/forms/validation.html
+++ b/pages/forms/validation.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/gallery.html b/pages/gallery.html
index 48ce8d8ee..ad9e67e74 100644
--- a/pages/gallery.html
+++ b/pages/gallery.html
@@ -710,6 +710,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/kanban.html b/pages/kanban.html
index 99485ea52..31b8e6b3c 100644
--- a/pages/kanban.html
+++ b/pages/kanban.html
@@ -710,6 +710,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/layout/boxed.html b/pages/layout/boxed.html
index 1f4616503..f5e77087f 100644
--- a/pages/layout/boxed.html
+++ b/pages/layout/boxed.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/layout/collapsed-sidebar.html b/pages/layout/collapsed-sidebar.html
index 15f43cccd..d38f45ba2 100644
--- a/pages/layout/collapsed-sidebar.html
+++ b/pages/layout/collapsed-sidebar.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/layout/fixed-footer.html b/pages/layout/fixed-footer.html
index e11234c2f..da6298716 100644
--- a/pages/layout/fixed-footer.html
+++ b/pages/layout/fixed-footer.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/layout/fixed-sidebar-custom.html b/pages/layout/fixed-sidebar-custom.html
index d3d34524d..8a9cc9bb9 100644
--- a/pages/layout/fixed-sidebar-custom.html
+++ b/pages/layout/fixed-sidebar-custom.html
@@ -711,6 +711,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/layout/fixed-sidebar.html b/pages/layout/fixed-sidebar.html
index 9e8addbdd..4dd15c76a 100644
--- a/pages/layout/fixed-sidebar.html
+++ b/pages/layout/fixed-sidebar.html
@@ -711,6 +711,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/layout/fixed-topnav.html b/pages/layout/fixed-topnav.html
index 98bafa714..de0673d9d 100644
--- a/pages/layout/fixed-topnav.html
+++ b/pages/layout/fixed-topnav.html
@@ -709,6 +709,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/layout/top-nav-sidebar.html b/pages/layout/top-nav-sidebar.html
index e77ed1719..7a27ddb94 100644
--- a/pages/layout/top-nav-sidebar.html
+++ b/pages/layout/top-nav-sidebar.html
@@ -754,6 +754,12 @@ scratch. This page gets rid of all links and provides the needed markup only.
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/mailbox/compose.html b/pages/mailbox/compose.html
index 9178aaa92..8e8300672 100644
--- a/pages/mailbox/compose.html
+++ b/pages/mailbox/compose.html
@@ -694,6 +694,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/mailbox/mailbox.html b/pages/mailbox/mailbox.html
index bf06fe524..c49eca8d2 100644
--- a/pages/mailbox/mailbox.html
+++ b/pages/mailbox/mailbox.html
@@ -694,6 +694,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/mailbox/read-mail.html b/pages/mailbox/read-mail.html
index fdd70a6af..7ccbcc62f 100644
--- a/pages/mailbox/read-mail.html
+++ b/pages/mailbox/read-mail.html
@@ -692,6 +692,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/search/enhanced-results.html b/pages/search/enhanced-results.html
index bb293a0cd..9f4bf6aff 100644
--- a/pages/search/enhanced-results.html
+++ b/pages/search/enhanced-results.html
@@ -710,6 +710,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/search/enhanced.html b/pages/search/enhanced.html
index 023321a57..9741cbc32 100644
--- a/pages/search/enhanced.html
+++ b/pages/search/enhanced.html
@@ -710,6 +710,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/search/simple-results.html b/pages/search/simple-results.html
index e6970bfc2..981daad3b 100644
--- a/pages/search/simple-results.html
+++ b/pages/search/simple-results.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/search/simple.html b/pages/search/simple.html
index c93179d97..368d97b2f 100644
--- a/pages/search/simple.html
+++ b/pages/search/simple.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/tables/data.html b/pages/tables/data.html
index 0c03d7b68..d0bf913ba 100644
--- a/pages/tables/data.html
+++ b/pages/tables/data.html
@@ -712,6 +712,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/tables/jsgrid.html b/pages/tables/jsgrid.html
index 8c8b43adb..1ae5c8474 100644
--- a/pages/tables/jsgrid.html
+++ b/pages/tables/jsgrid.html
@@ -711,6 +711,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/tables/simple.html b/pages/tables/simple.html
index ffc411555..b041380d9 100644
--- a/pages/tables/simple.html
+++ b/pages/tables/simple.html
@@ -708,6 +708,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+
diff --git a/pages/widgets.html b/pages/widgets.html
index 3fba64bbc..fea298b3a 100644
--- a/pages/widgets.html
+++ b/pages/widgets.html
@@ -710,6 +710,12 @@
+
+
+
+ Tabbed IFrame Plugin
+
+