diff --git a/CHANGES.rst b/CHANGES.rst
index 41855e7d..933b24a2 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,6 +4,10 @@ Changes
2.0a1 (unreleased)
------------------
+- Remove no longer used ``mainmenu_fluid`` and ``columns_fluid`` properties
+ from ``ILayoutConfig``. Replace with ``limit_content_width`` property.
+ [lenadax]
+
- Cleanup js widgets to prevent DOM memory leaks.
[lenadax]
diff --git a/docs/source/layout.rst b/docs/source/layout.rst
index 031ce6c4..9aac107f 100644
--- a/docs/source/layout.rst
+++ b/docs/source/layout.rst
@@ -58,39 +58,44 @@ one or more model classes with ``cone.app.layout_config`` decorator.
def __init__(self, model, request):
super(ExampleNodeLayoutConfig, self).__init__(model, request)
self.mainmenu = True
- self.mainmenu_fluid = False
self.livesearch = True
self.personaltools = True
- self.columns_fluid = False
+ self.limit_content_width = False
self.pathbar = True
self.sidebar_left = ['navtree']
self.sidebar_right = ['my_tile']
+ self.sidebar_left_min_width = 250
+ self.sidebar_right_min_width = 250
Provided layout settings:
- **mainmenu**: Flag whether to display mainmenu.
-- **mainmenu_fluid**: Flag whether mainmenu is fluid.
-
- **livesearch**: Flag whether to display livesearch.
- **personaltools**: Flag whether to display personaltools.
-- **columns_fluid**: Flag whether columns are fluid.
+- **limit_content_width**: Flag whether content width should be limited on large screens.
- **pathbar**: Flag whether to display pathbar.
-- **sidebar_left**: List of tiles by name which should be rendered in sidebar.
+- **sidebar_left**: List of tiles by name which should be rendered in left sidebar.
+
+- **sidebar_left_min_width**: Minimum left sidebar width as integer (in px).
-- **sidebar_left_grid_width**: Sidebar grid width as integer, total grid width
- is 12.
+- **sidebar_right**: List of tiles by name which should be rendered in right sidebar.
-- **content_grid_width**: Content grid width as integer, total grid width
- is 12.
+- **sidebar_right_min_width**: Minimum right sidebar width as integer (in px).
.. note::
- As of version 1.1, ``mainmenu_fluid`` defaults to ``True``.
+ As of version 2.0, ``limit_content_width`` defaults to ``False``.
+
+.. deprecated:: 2.0
+
+ ``mainmenu_fluid`` and ``columns_fluid`` have been removed in ``cone.app 2.0``.
+ The ``columns_fluid`` setting has been replaced with
+ ``limit_content_width``.
.. deprecated:: 1.1
diff --git a/js/src/sidebar.js b/js/src/sidebar.js
index 12885c69..84902983 100644
--- a/js/src/sidebar.js
+++ b/js/src/sidebar.js
@@ -97,6 +97,7 @@ export class Sidebar extends ResizeAware(ts.Motion) {
constructor(elem) {
super(elem);
this.elem = elem;
+ this.min_width = elem.data('min-width') || 115;
elem.css('width', this.sidebar_width + 'px');
this.moving = false;
@@ -234,7 +235,7 @@ export class Sidebar extends ResizeAware(ts.Motion) {
}
/**
- * Collapses the sidebar and.
+ * Collapses the sidebar.
*/
collapse() {
// Enable scroll to refresh page on mobile devices
@@ -392,10 +393,9 @@ export class SidebarLeft extends Sidebar {
if ($('#sidebar_right').length > 0) {
sidebar_w = $('#sidebar_right').outerWidth();
}
- const min_w = 115;
// Allow a minimal content area width of 300px.
const max_w = $(window).width() - sidebar_w - 300;
- width = Math.max(min_w, Math.min(width, max_w));
+ width = Math.max(this.min_width, Math.min(width, max_w));
return parseInt(width);
}
@@ -490,10 +490,9 @@ export class SidebarRight extends Sidebar {
if ($('#sidebar_left').length > 0) {
sidebar_w = $('#sidebar_left').outerWidth();
}
- const min_w = 115;
// Allow a minimal content area width of 300px.
const max_w = $(window).width() - sidebar_w - 300;
- width = Math.max(min_w, Math.min(width, max_w));
+ width = Math.max(this.min_width, Math.min(width, max_w));
return parseInt(width);
}
diff --git a/package.json b/package.json
index 7868e2d4..46068443 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,7 @@
"rollup": "^2.79.2",
"rollup-plugin-cleanup": "^3.2.1",
"rollup-plugin-postcss": "^4.0.2",
- "sass": "^1.94.2",
+ "sass": "^1.97.2",
"web-test-runner-qunit": "^2.0.0"
},
"packageManager": "pnpm@9.3.0+sha512.ee7b93e0c2bd11409c6424f92b866f31d3ea1bef5fbe47d3c7500cdc3c9668833d2e55681ad66df5b640c61fa9dc25d546efa54d76d7f8bf54b13614ac293631"
diff --git a/scss/colors.scss b/scss/colors.scss
index 67abbd1c..ef0c3d70 100644
--- a/scss/colors.scss
+++ b/scss/colors.scss
@@ -20,7 +20,7 @@ $color-mode-type: data;
/* dark mode */
@include color-mode(dark) {
- #content {
+ #content_area {
color: $light;
background-color: $dark;
}
@@ -36,7 +36,6 @@ $color-mode-type: data;
#footer {
color: $light;
- background-color: $black;
}
#contextmenu {
@@ -59,7 +58,7 @@ $color-mode-type: data;
/* light mode */
@include color-mode(light) {
- #content {
+ #content_area {
color: $dark;
background-color: $gray-100;
}
@@ -75,7 +74,6 @@ $color-mode-type: data;
#footer {
color: $dark;
- background-color: $light;
}
#contextmenu {
diff --git a/scss/content.scss b/scss/content.scss
index 8ab1eb11..7e543323 100644
--- a/scss/content.scss
+++ b/scss/content.scss
@@ -3,11 +3,19 @@
/* content */
#content {
container: main-content / inline-size;
- height: calc(100% - 40px);
+ height: 100%;
width: 100%;
position: relative;
}
+#content_area {
+ height: 100%;
+}
+// pathbar adds 40px height to layout
+#content_area.has-pathbar {
+ height: calc(100% - 40px);
+}
+
#main-area {
width: 0!important; /* prevent 'jumping' between 1400 and 1440px */
}
diff --git a/scss/sidebar.scss b/scss/sidebar.scss
index a28fec4c..aa140bf9 100644
--- a/scss/sidebar.scss
+++ b/scss/sidebar.scss
@@ -25,7 +25,7 @@
.lock-state {
position: relative;
- top: calc(100% - 4.5rem);
+ top: calc(100% - 2rem);
width: min-content;
height: 0; // required, as else it will take up space in flexbox
z-index: 100;
@@ -111,7 +111,7 @@
.collapse_btn {
position: absolute;
- bottom: 0px;
+ top: 100%;
border-radius: 100%;
z-index: 1000;
}
@@ -127,6 +127,14 @@
#sidebar_collapse .collapse_btn .btn-open {
display: none;
}
+ .sidebar-controls {
+ display: none;
+ }
+ }
+ &.responsive-collapsed:not(.expanded) {
+ .sidebar-controls {
+ display: none;
+ }
}
&.expanded {
#sidebar_collapse .collapse_btn .btn-closed {
diff --git a/scss/styles.scss b/scss/styles.scss
index 05117385..03be82f4 100644
--- a/scss/styles.scss
+++ b/scss/styles.scss
@@ -40,6 +40,35 @@ select.form-control.referencebrowser[multiple="multiple"] + .referencebrowser_tr
}
}
+// SCROLLBARS
+
+// WebKit (Chrome, Edge, Safari, Opera)
+::-webkit-scrollbar {
+ width: 6px;
+ height: 6px;
+}
+::-webkit-scrollbar-track {
+ background: transparent;
+}
+::-webkit-scrollbar-thumb {
+ background: var(--bs-primary);
+ border-radius: 3px;
+}
+
+// Firefox ONLY (prevent scrollbar-width from affecting chromium)
+@supports (-moz-appearance: none) {
+ * {
+ scrollbar-width: auto;
+ scrollbar-color: var(--bs-primary) transparent;
+ }
+}
+
+// FOOTER
+#footer-spacer {
+ flex: 1; // fill available space
+}
+
+
@import 'content.scss';
@import 'form.scss';
@import 'header.scss';
diff --git a/src/cone/app/__init__.py b/src/cone/app/__init__.py
index 91b4239a..a20b8918 100644
--- a/src/cone/app/__init__.py
+++ b/src/cone/app/__init__.py
@@ -68,10 +68,9 @@ class DefaultLayoutConfig(LayoutConfig):
def __init__(self, model=None, request=None):
super(DefaultLayoutConfig, self).__init__(model=model, request=request)
self.mainmenu = True
- self.mainmenu_fluid = True
self.livesearch = True
self.personaltools = True
- self.columns_fluid = True
+ self.limit_content_width = True
self.pathbar = True
self.sidebar_left_mode = 'stacked' # 'toggle' or 'stacked'
self.sidebar_left = ['navtree']
diff --git a/src/cone/app/browser/static/cone/cone.app.css b/src/cone/app/browser/static/cone/cone.app.css
index 4c7b2a78..035a85e6 100644
--- a/src/cone/app/browser/static/cone/cone.app.css
+++ b/src/cone/app/browser/static/cone/cone.app.css
@@ -6,7 +6,7 @@
/* sidebar colors */
/* dark mode */
-[data-bs-theme=dark] #content {
+[data-bs-theme=dark] #content_area {
color: #f8f9fa;
background-color: #212529;
}
@@ -19,7 +19,6 @@
}
[data-bs-theme=dark] #footer {
color: #f8f9fa;
- background-color: #000;
}
[data-bs-theme=dark] #contextmenu {
color: #f8f9fa;
@@ -36,7 +35,7 @@
}
/* light mode */
-[data-bs-theme=light] #content {
+[data-bs-theme=light] #content_area {
color: #212529;
background-color: #f8f9fa;
}
@@ -49,7 +48,6 @@
}
[data-bs-theme=light] #footer {
color: #212529;
- background-color: #f8f9fa;
}
[data-bs-theme=light] #contextmenu {
color: #212529;
@@ -107,14 +105,46 @@ select.form-control.referencebrowser[multiple=multiple] + .referencebrowser_trig
width: 100%;
}
+::-webkit-scrollbar {
+ width: 6px;
+ height: 6px;
+}
+
+::-webkit-scrollbar-track {
+ background: transparent;
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--bs-primary);
+ border-radius: 3px;
+}
+
+@supports (-moz-appearance: none) {
+ * {
+ scrollbar-width: auto;
+ scrollbar-color: var(--bs-primary) transparent;
+ }
+}
+#footer-spacer {
+ flex: 1;
+}
+
/* content */
#content {
container: main-content/inline-size;
- height: calc(100% - 40px);
+ height: 100%;
width: 100%;
position: relative;
}
+#content_area {
+ height: 100%;
+}
+
+#content_area.has-pathbar {
+ height: calc(100% - 40px);
+}
+
#main-area {
width: 0 !important; /* prevent 'jumping' between 1400 and 1440px */
}
@@ -356,7 +386,7 @@ tr.selectable td {
/* sidebar colors */
/* dark mode */
-[data-bs-theme=dark] #content {
+[data-bs-theme=dark] #content_area {
color: #f8f9fa;
background-color: #212529;
}
@@ -369,7 +399,6 @@ tr.selectable td {
}
[data-bs-theme=dark] #footer {
color: #f8f9fa;
- background-color: #000;
}
[data-bs-theme=dark] #contextmenu {
color: #f8f9fa;
@@ -386,7 +415,7 @@ tr.selectable td {
}
/* light mode */
-[data-bs-theme=light] #content {
+[data-bs-theme=light] #content_area {
color: #212529;
background-color: #f8f9fa;
}
@@ -399,7 +428,6 @@ tr.selectable td {
}
[data-bs-theme=light] #footer {
color: #212529;
- background-color: #f8f9fa;
}
[data-bs-theme=light] #contextmenu {
color: #212529;
@@ -437,7 +465,7 @@ tr.selectable td {
}
#sidebar_left .lock-state, #sidebar_right .lock-state {
position: relative;
- top: calc(100% - 4.5rem);
+ top: calc(100% - 2rem);
width: min-content;
height: 0;
z-index: 100;
@@ -508,7 +536,7 @@ tr.selectable td {
}
#sidebar_left #sidebar_collapse .collapse_btn, #sidebar_right #sidebar_collapse .collapse_btn {
position: absolute;
- bottom: 0px;
+ top: 100%;
border-radius: 100%;
z-index: 1000;
}
@@ -522,6 +550,12 @@ tr.selectable td {
#sidebar_left.collapsed #sidebar_collapse .collapse_btn .btn-open, #sidebar_right.collapsed #sidebar_collapse .collapse_btn .btn-open {
display: none;
}
+#sidebar_left.collapsed .sidebar-controls, #sidebar_right.collapsed .sidebar-controls {
+ display: none;
+}
+#sidebar_left.responsive-collapsed:not(.expanded) .sidebar-controls, #sidebar_right.responsive-collapsed:not(.expanded) .sidebar-controls {
+ display: none;
+}
#sidebar_left.expanded #sidebar_collapse .collapse_btn .btn-closed, #sidebar_right.expanded #sidebar_collapse .collapse_btn .btn-closed {
display: none;
}
diff --git a/src/cone/app/browser/static/cone/cone.app.js b/src/cone/app/browser/static/cone/cone.app.js
index 858420c6..e49996e2 100644
--- a/src/cone/app/browser/static/cone/cone.app.js
+++ b/src/cone/app/browser/static/cone/cone.app.js
@@ -1117,6 +1117,7 @@ var cone = (function (exports, $, ts) {
constructor(elem) {
super(elem);
this.elem = elem;
+ this.min_width = elem.data('min-width') || 115;
elem.css('width', this.sidebar_width + 'px');
this.moving = false;
this.trigger_event = this.trigger_event.bind(this);
@@ -1307,9 +1308,8 @@ var cone = (function (exports, $, ts) {
if ($('#sidebar_right').length > 0) {
sidebar_w = $('#sidebar_right').outerWidth();
}
- const min_w = 115;
const max_w = $(window).width() - sidebar_w - 300;
- width = Math.max(min_w, Math.min(width, max_w));
+ width = Math.max(this.min_width, Math.min(width, max_w));
return parseInt(width);
}
on_sidebar_right_resize(inst, sb) {
@@ -1359,9 +1359,8 @@ var cone = (function (exports, $, ts) {
if ($('#sidebar_left').length > 0) {
sidebar_w = $('#sidebar_left').outerWidth();
}
- const min_w = 115;
const max_w = $(window).width() - sidebar_w - 300;
- width = Math.max(min_w, Math.min(width, max_w));
+ width = Math.max(this.min_width, Math.min(width, max_w));
return parseInt(width);
}
on_sidebar_left_resize(inst, sb) {
diff --git a/src/cone/app/browser/static/cone/cone.app.min.css b/src/cone/app/browser/static/cone/cone.app.min.css
index 9d2fa4c0..5d2c9e05 100644
--- a/src/cone/app/browser/static/cone/cone.app.min.css
+++ b/src/cone/app/browser/static/cone/cone.app.min.css
@@ -1 +1 @@
-:root{--primary-100: #dde9fb;--primary-100-dark: #2c4265}[data-bs-theme=dark] #content{color:#f8f9fa;background-color:#212529}[data-bs-theme=dark] #navbar-content-wrapper{color:#f8f9fa;background-color:#212529}[data-bs-theme=dark] #sidebar_left{background-color:#343b45}[data-bs-theme=dark] #footer{color:#f8f9fa;background-color:#000}[data-bs-theme=dark] #contextmenu{color:#f8f9fa;background-color:#343a40}[data-bs-theme=dark] tr.selectable.selected td{background-color:#344555}[data-bs-theme=dark] .table-striped>tbody>tr.selectable.selected:nth-child(2n+1)>td{background-color:#485f76}[data-bs-theme=dark] .bg-primary-100{background-color:#2c4265}[data-bs-theme=light] #content{color:#212529;background-color:#f8f9fa}[data-bs-theme=light] #navbar-content-wrapper{color:#212529;background-color:#fff}[data-bs-theme=light] #sidebar_left{background-color:#414c5b}[data-bs-theme=light] #footer{color:#212529;background-color:#f8f9fa}[data-bs-theme=light] #contextmenu{color:#212529;background-color:#fff}[data-bs-theme=light] tr.selectable.selected td{background-color:#dfeefb}[data-bs-theme=light] .table-striped>tbody>tr.selectable.selected:nth-child(2n+1)>td{background-color:#cfdce7}[data-bs-theme=light] .bg-primary-100{background-color:#dde9fb}:root{--sidebar-width: 300px;--navbar-height: 50px}html{height:100%;width:100%}body{height:100%;overflow-y:hidden !important}#footer{z-index:1}.referencebrowser_trigger{cursor:pointer}select.form-control.referencebrowser[multiple=multiple]+.referencebrowser_trigger{max-width:max-content;margin-top:.5rem;margin-bottom:1rem}#referencebrowser{border-bottom:0;border-left:0;border-right:0;border-radius:0;left:calc(-1*var(--bs-modal-padding));width:calc(100% + var(--bs-modal-padding)*2)}#referencebrowser td.title{width:100%}#content{container:main-content/inline-size;height:calc(100% - 40px);width:100%;position:relative}#main-area{width:0 !important}tr.selectable td{user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}#main-area.full .batched_items_slice_size{max-width:max-content}#main-area.full .batched_items_filter{max-width:300px}#input-contentform-save{margin-right:1rem}#header-logo{z-index:4}#header-logo>span,#header-logo-placeholder>span{font-size:1.5rem !important}#main-area.compact:not(.super-compact) #header-logo{order:0}#main-area.compact:not(.super-compact) #personaltools{order:1;margin-left:auto}#main-area.compact:not(.super-compact) .navbar-toggler{order:2}#main-area.compact:not(.super-compact) #navbar-content-wrapper{order:3}#main-area.compact #header-main.mobile-menu-open #navbar-content-wrapper{max-height:calc(100vh - 50px);position:relative;overflow:hidden;padding:0 !important;z-index:3}@media screen and (max-width: 768px){#main-area.compact #header-main.mobile-menu-open #navbar-content-wrapper{z-index:1200}}#main-area.compact #header-main.mobile-menu-open #mainmenu{align-items:baseline}#main-area.compact #header-main.mobile-menu-open #mainmenu .scrollbar{display:none !important}#main-area.compact #header-main.mobile-menu-open #mainmenu .scrollable-content{right:0 !important}#main-area.compact #header-main.mobile-menu-open #mainmenu .dropdown-menu{border:none}#main-area.compact #header-main.mobile-menu-open #mainmenu .dropdown-menu>li .dropdown-item{padding:8px 20px}#main-area.compact #header-main.mobile-menu-open #mainmenu .dropdown-menu>li:first-child .dropdown-item{padding-top:0}#main-area.super-compact #personaltools{height:50px;justify-content:space-between;margin:auto 20px}#main-area.super-compact #personaltools #colortoggler{padding-left:0}#main-area.full #header-logo{order:1}#main-area.full #mainmenu{height:var(--navbar-height)}#main-area.full #mainmenu .dropdown-menu{position:fixed}#main-area.full #personaltools{height:100%}#main-area #header-main{height:var(--navbar-height)}#main-area #header-main.navbar-expand #header-content{flex-direction:row-reverse}#main-area #header-main.navbar-expand #navbar-content-wrapper{box-shadow:none !important;background:none}#main-area #header-main:not(.navbar-expand) #header-content{flex-direction:row}#main-area #header-main:not(.navbar-expand) #navbar-content{flex-direction:column}#main-area #header-main:not(.navbar-expand) #livesearch{order:0;width:100%;padding-left:55px !important;padding-right:15px !important}#main-area #header-main:not(.navbar-expand) #mainmenu{order:1;margin-left:10px !important;margin-top:20px;margin-bottom:20px}#main-area #header-main:not(.navbar-expand) #mainmenu ul>li{display:block !important}#main-area #header-main #navbar-content-wrapper{min-width:0;z-index:1}#main-area #header-main #navbar-content-wrapper #navbar-content{min-width:0}#main-area #header-main #mainmenu>ul{padding-left:8px;white-space:nowrap}#main-area #header-main #mainmenu .nav-item.active .nav-link{color:#4171b6}#main-area #header-main #personaltools #language-dropdown>div.dropdown-toggle>a{height:20px}#main-area #header-main #personaltools #language-dropdown>div.dropdown-toggle>a img{vertical-align:baseline}#main-area #header-main #personaltools #colortoggler #colortoggle-switch{width:2rem;height:1rem}#personaltools-dropdown .dropdown-item a{text-decoration:none;color:var(--bs-secondary-color)}#pathbar{z-index:5}#form-loginform{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%}#form-loginform #field-loginform-user,#form-loginform #field-loginform-password{display:grid;grid-template-columns:1fr 2fr;margin-bottom:.5rem;gap:1rem}@media(max-width: 400px){#form-loginform #field-loginform-user,#form-loginform #field-loginform-password{grid-template-columns:auto;gap:0}}#form-loginform #input-loginform-login{margin-top:1.5rem;width:200px}[data-bs-theme=light] #header-logo #header-logo-light{display:none}[data-bs-theme=dark] #header-logo #header-logo-dark{display:none}.scrollable-x,.scrollable-y{position:relative;overflow:hidden}.scrollable-content{position:relative}.scrollbar{display:none;position:absolute;background:#dee2e6;border-radius:3px;z-index:1000}.scrollbar .scroll-handle{position:relative;border-radius:3px;background:#4171b6}.scrollbar-top .scrollbar{top:0}.scrollbar-bottom .scrollbar{bottom:0}.scrollbar-left .scrollbar{left:0}.scrollbar-right .scrollbar{right:0}:root{--primary-100: #dde9fb;--primary-100-dark: #2c4265}[data-bs-theme=dark] #content{color:#f8f9fa;background-color:#212529}[data-bs-theme=dark] #navbar-content-wrapper{color:#f8f9fa;background-color:#212529}[data-bs-theme=dark] #sidebar_left{background-color:#343b45}[data-bs-theme=dark] #footer{color:#f8f9fa;background-color:#000}[data-bs-theme=dark] #contextmenu{color:#f8f9fa;background-color:#343a40}[data-bs-theme=dark] tr.selectable.selected td{background-color:#344555}[data-bs-theme=dark] .table-striped>tbody>tr.selectable.selected:nth-child(2n+1)>td{background-color:#485f76}[data-bs-theme=dark] .bg-primary-100{background-color:#2c4265}[data-bs-theme=light] #content{color:#212529;background-color:#f8f9fa}[data-bs-theme=light] #navbar-content-wrapper{color:#212529;background-color:#fff}[data-bs-theme=light] #sidebar_left{background-color:#414c5b}[data-bs-theme=light] #footer{color:#212529;background-color:#f8f9fa}[data-bs-theme=light] #contextmenu{color:#212529;background-color:#fff}[data-bs-theme=light] tr.selectable.selected td{background-color:#dfeefb}[data-bs-theme=light] .table-striped>tbody>tr.selectable.selected:nth-child(2n+1)>td{background-color:#cfdce7}[data-bs-theme=light] .bg-primary-100{background-color:#dde9fb}#sidebar_left,#sidebar_right{height:100%;max-height:100%;user-select:none}#sidebar_left ul.list-group,#sidebar_left ul.list-group li,#sidebar_right ul.list-group,#sidebar_right ul.list-group li{background-color:inherit}#sidebar_left .sidebar-controls,#sidebar_right .sidebar-controls{position:absolute;bottom:0}#sidebar_left .sidebar-controls .sidebar-control,#sidebar_right .sidebar-controls .sidebar-control{position:relative;z-index:10;border-bottom-left-radius:0;border-bottom-right-radius:0}#sidebar_left .lock-state,#sidebar_right .lock-state{position:relative;top:calc(100% - 4.5rem);width:min-content;height:0;z-index:100}@media(max-width: 767.98px){#sidebar_left .lock-state,#sidebar_right .lock-state{display:none}}#sidebar_left .lock-state input[type=checkbox]:not(:checked)+.lock-state-btn,#sidebar_right .lock-state input[type=checkbox]:not(:checked)+.lock-state-btn{background-color:var(--bs-border-color);border-color:rgba(0,0,0,0);color:var(--bs-body-color)}#sidebar_left .lock-state input[type=checkbox]:not(:checked)+.lock-state-btn i.bi-lock,#sidebar_right .lock-state input[type=checkbox]:not(:checked)+.lock-state-btn i.bi-lock{display:none}#sidebar_left .lock-state input[type=checkbox]:checked+.lock-state-btn,#sidebar_right .lock-state input[type=checkbox]:checked+.lock-state-btn{background-color:var(--bs-dark-border-subtle);border-color:rgba(0,0,0,0);color:var(--bs-body-color)}#sidebar_left .lock-state input[type=checkbox]:checked+.lock-state-btn i.bi-unlock,#sidebar_right .lock-state input[type=checkbox]:checked+.lock-state-btn i.bi-unlock{display:none}#sidebar_left #navtree,#sidebar_right #navtree{max-width:100%}#sidebar_left #navtree .nav-link,#sidebar_right #navtree .nav-link{z-index:1000;white-space:nowrap}#sidebar_left #navtree .nav-link.active,#sidebar_right #navtree .nav-link.active{background-color:rgba(0,0,0,0);font-weight:bold}#sidebar_left #navtree .nav-link i.btn-closed,#sidebar_right #navtree .nav-link i.btn-closed{vertical-align:text-bottom}#sidebar_left #navtree .nav-link span,#sidebar_right #navtree .nav-link span{display:inline-block;width:calc(100% - 40px);text-overflow:ellipsis;overflow-x:hidden;vertical-align:text-bottom}#sidebar_left #navtree #navigation-collapse.no-collapse>ul>li,#sidebar_right #navtree #navigation-collapse.no-collapse>ul>li{padding-left:0 !important}#sidebar_left #sidebar_resize,#sidebar_right #sidebar_resize{position:relative;width:0;height:0}#sidebar_left #sidebar_resize #sidebar_resizer,#sidebar_right #sidebar_resize #sidebar_resizer{position:absolute;z-index:3;height:100vh;width:20px;transform:translateX(-50%);cursor:col-resize}#sidebar_left #sidebar_collapse,#sidebar_right #sidebar_collapse{position:relative;top:100%;width:0;height:0}#sidebar_left #sidebar_collapse .collapse_btn,#sidebar_right #sidebar_collapse .collapse_btn{position:absolute;bottom:0px;border-radius:100%;z-index:1000}#sidebar_left.collapsed,#sidebar_right.collapsed{width:0px !important;min-width:0 !important}#sidebar_left.collapsed #sidebar_resize,#sidebar_right.collapsed #sidebar_resize{display:none}#sidebar_left.collapsed #sidebar_collapse .collapse_btn .btn-open,#sidebar_right.collapsed #sidebar_collapse .collapse_btn .btn-open{display:none}#sidebar_left.expanded #sidebar_collapse .collapse_btn .btn-closed,#sidebar_right.expanded #sidebar_collapse .collapse_btn .btn-closed{display:none}@media(min-width: 1400px){#sidebar_left:not(.collapsed) #sidebar_collapse .collapse_btn,#sidebar_right:not(.collapsed) #sidebar_collapse .collapse_btn{transform:translateX(-20px)}#sidebar_left:not(.collapsed) #sidebar_collapse .collapse_btn .btn-closed,#sidebar_right:not(.collapsed) #sidebar_collapse .collapse_btn .btn-closed{display:none}}@media(max-width: 1399.98px){#sidebar_left:not(.expanded),#sidebar_right:not(.expanded){width:0 !important;min-width:0 !important;border:none !important}#sidebar_left:not(.expanded) #sidebar_resize,#sidebar_right:not(.expanded) #sidebar_resize{display:none}#sidebar_left:not(.expanded) #sidebar_collapse .collapse_btn .btn-open,#sidebar_right:not(.expanded) #sidebar_collapse .collapse_btn .btn-open{display:none}}@media(min-width: 768px)and (max-width: 1399.98px){#sidebar_left.expanded #sidebar_collapse .collapse_btn,#sidebar_right.expanded #sidebar_collapse .collapse_btn{transform:translateX(-20px)}}@media(max-width: 767.98px){#sidebar_left #sidebar_resize,#sidebar_right #sidebar_resize{display:none}#sidebar_left.expanded,#sidebar_right.expanded{width:100% !important;z-index:3}}#sidebar_left #sidebar_resize{left:100%}#sidebar_left #sidebar_collapse{left:100%}@media(max-width: 767.98px){#sidebar_left.expanded #sidebar_collapse{left:calc(100% - 50px)}}#sidebar_left.responsive-expanded .lock-state{left:100%;transform:translateX(-10px)}#sidebar_left.expanded .lock-state{left:100% !important;transform:translateX(-10px) !important}#sidebar_left.responsive-collapsed .lock-state{left:calc(100% + 10px)}#sidebar_left.collapsed .lock-state{left:calc(100% + 10px) !important;transform:none !important}#sidebar_right{background-color:var(--bs-body-bg);border-left:1px solid var(--bs-border-color)}#sidebar_right .sidebar-controls{right:0}#sidebar_right #sidebar_collapse{left:0}#sidebar_right.collapsed{border:0}#sidebar_right.collapsed .collapse_btn{right:0}#sidebar_right.responsive-expanded .lock-state{transform:translateX(-10px)}#sidebar_right.expanded .lock-state{transform:translateX(-10px) !important}#sidebar_right.responsive-collapsed .lock-state{transform:translateX(calc(-100% - 10px))}#sidebar_right.collapsed .lock-state{transform:translateX(calc(-100% - 10px)) !important}@media(max-width: 1399.98px){#sidebar_right:not(.expanded) #sidebar_collapse .collapse_btn{right:0}}@media(max-width: 767.98px){#sidebar_right.expanded{transform:translateX(-2rem)}}.table_length,.table_filter{width:unset}#contents>div.card-body div.row>div{flex:1 0 auto;flex-wrap:nowrap}.table-footer{gap:1rem 0}.table-footer .table_info{white-space:nowrap}#main-area.full .table_length{max-width:max-content}#main-area.full .table_filter{max-width:300px}#settings-grid-container .settings-grid a i{font-size:44px}@media(max-width: 450px){#settings-grid-container .settings-grid a i{font-size:30px}}
+:root{--primary-100: #dde9fb;--primary-100-dark: #2c4265}[data-bs-theme=dark] #content_area{color:#f8f9fa;background-color:#212529}[data-bs-theme=dark] #navbar-content-wrapper{color:#f8f9fa;background-color:#212529}[data-bs-theme=dark] #sidebar_left{background-color:#343b45}[data-bs-theme=dark] #footer{color:#f8f9fa}[data-bs-theme=dark] #contextmenu{color:#f8f9fa;background-color:#343a40}[data-bs-theme=dark] tr.selectable.selected td{background-color:#344555}[data-bs-theme=dark] .table-striped>tbody>tr.selectable.selected:nth-child(2n+1)>td{background-color:#485f76}[data-bs-theme=dark] .bg-primary-100{background-color:#2c4265}[data-bs-theme=light] #content_area{color:#212529;background-color:#f8f9fa}[data-bs-theme=light] #navbar-content-wrapper{color:#212529;background-color:#fff}[data-bs-theme=light] #sidebar_left{background-color:#414c5b}[data-bs-theme=light] #footer{color:#212529}[data-bs-theme=light] #contextmenu{color:#212529;background-color:#fff}[data-bs-theme=light] tr.selectable.selected td{background-color:#dfeefb}[data-bs-theme=light] .table-striped>tbody>tr.selectable.selected:nth-child(2n+1)>td{background-color:#cfdce7}[data-bs-theme=light] .bg-primary-100{background-color:#dde9fb}:root{--sidebar-width: 300px;--navbar-height: 50px}html{height:100%;width:100%}body{height:100%;overflow-y:hidden !important}#footer{z-index:1}.referencebrowser_trigger{cursor:pointer}select.form-control.referencebrowser[multiple=multiple]+.referencebrowser_trigger{max-width:max-content;margin-top:.5rem;margin-bottom:1rem}#referencebrowser{border-bottom:0;border-left:0;border-right:0;border-radius:0;left:calc(-1*var(--bs-modal-padding));width:calc(100% + var(--bs-modal-padding)*2)}#referencebrowser td.title{width:100%}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:rgba(0,0,0,0)}::-webkit-scrollbar-thumb{background:var(--bs-primary);border-radius:3px}@supports(-moz-appearance: none){*{scrollbar-width:auto;scrollbar-color:var(--bs-primary) rgba(0,0,0,0)}}#footer-spacer{flex:1}#content{container:main-content/inline-size;height:100%;width:100%;position:relative}#content_area{height:100%}#content_area.has-pathbar{height:calc(100% - 40px)}#main-area{width:0 !important}tr.selectable td{user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}#main-area.full .batched_items_slice_size{max-width:max-content}#main-area.full .batched_items_filter{max-width:300px}#input-contentform-save{margin-right:1rem}#header-logo{z-index:4}#header-logo>span,#header-logo-placeholder>span{font-size:1.5rem !important}#main-area.compact:not(.super-compact) #header-logo{order:0}#main-area.compact:not(.super-compact) #personaltools{order:1;margin-left:auto}#main-area.compact:not(.super-compact) .navbar-toggler{order:2}#main-area.compact:not(.super-compact) #navbar-content-wrapper{order:3}#main-area.compact #header-main.mobile-menu-open #navbar-content-wrapper{max-height:calc(100vh - 50px);position:relative;overflow:hidden;padding:0 !important;z-index:3}@media screen and (max-width: 768px){#main-area.compact #header-main.mobile-menu-open #navbar-content-wrapper{z-index:1200}}#main-area.compact #header-main.mobile-menu-open #mainmenu{align-items:baseline}#main-area.compact #header-main.mobile-menu-open #mainmenu .scrollbar{display:none !important}#main-area.compact #header-main.mobile-menu-open #mainmenu .scrollable-content{right:0 !important}#main-area.compact #header-main.mobile-menu-open #mainmenu .dropdown-menu{border:none}#main-area.compact #header-main.mobile-menu-open #mainmenu .dropdown-menu>li .dropdown-item{padding:8px 20px}#main-area.compact #header-main.mobile-menu-open #mainmenu .dropdown-menu>li:first-child .dropdown-item{padding-top:0}#main-area.super-compact #personaltools{height:50px;justify-content:space-between;margin:auto 20px}#main-area.super-compact #personaltools #colortoggler{padding-left:0}#main-area.full #header-logo{order:1}#main-area.full #mainmenu{height:var(--navbar-height)}#main-area.full #mainmenu .dropdown-menu{position:fixed}#main-area.full #personaltools{height:100%}#main-area #header-main{height:var(--navbar-height)}#main-area #header-main.navbar-expand #header-content{flex-direction:row-reverse}#main-area #header-main.navbar-expand #navbar-content-wrapper{box-shadow:none !important;background:none}#main-area #header-main:not(.navbar-expand) #header-content{flex-direction:row}#main-area #header-main:not(.navbar-expand) #navbar-content{flex-direction:column}#main-area #header-main:not(.navbar-expand) #livesearch{order:0;width:100%;padding-left:55px !important;padding-right:15px !important}#main-area #header-main:not(.navbar-expand) #mainmenu{order:1;margin-left:10px !important;margin-top:20px;margin-bottom:20px}#main-area #header-main:not(.navbar-expand) #mainmenu ul>li{display:block !important}#main-area #header-main #navbar-content-wrapper{min-width:0;z-index:1}#main-area #header-main #navbar-content-wrapper #navbar-content{min-width:0}#main-area #header-main #mainmenu>ul{padding-left:8px;white-space:nowrap}#main-area #header-main #mainmenu .nav-item.active .nav-link{color:#4171b6}#main-area #header-main #personaltools #language-dropdown>div.dropdown-toggle>a{height:20px}#main-area #header-main #personaltools #language-dropdown>div.dropdown-toggle>a img{vertical-align:baseline}#main-area #header-main #personaltools #colortoggler #colortoggle-switch{width:2rem;height:1rem}#personaltools-dropdown .dropdown-item a{text-decoration:none;color:var(--bs-secondary-color)}#pathbar{z-index:5}#form-loginform{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%}#form-loginform #field-loginform-user,#form-loginform #field-loginform-password{display:grid;grid-template-columns:1fr 2fr;margin-bottom:.5rem;gap:1rem}@media(max-width: 400px){#form-loginform #field-loginform-user,#form-loginform #field-loginform-password{grid-template-columns:auto;gap:0}}#form-loginform #input-loginform-login{margin-top:1.5rem;width:200px}[data-bs-theme=light] #header-logo #header-logo-light{display:none}[data-bs-theme=dark] #header-logo #header-logo-dark{display:none}.scrollable-x,.scrollable-y{position:relative;overflow:hidden}.scrollable-content{position:relative}.scrollbar{display:none;position:absolute;background:#dee2e6;border-radius:3px;z-index:1000}.scrollbar .scroll-handle{position:relative;border-radius:3px;background:#4171b6}.scrollbar-top .scrollbar{top:0}.scrollbar-bottom .scrollbar{bottom:0}.scrollbar-left .scrollbar{left:0}.scrollbar-right .scrollbar{right:0}:root{--primary-100: #dde9fb;--primary-100-dark: #2c4265}[data-bs-theme=dark] #content_area{color:#f8f9fa;background-color:#212529}[data-bs-theme=dark] #navbar-content-wrapper{color:#f8f9fa;background-color:#212529}[data-bs-theme=dark] #sidebar_left{background-color:#343b45}[data-bs-theme=dark] #footer{color:#f8f9fa}[data-bs-theme=dark] #contextmenu{color:#f8f9fa;background-color:#343a40}[data-bs-theme=dark] tr.selectable.selected td{background-color:#344555}[data-bs-theme=dark] .table-striped>tbody>tr.selectable.selected:nth-child(2n+1)>td{background-color:#485f76}[data-bs-theme=dark] .bg-primary-100{background-color:#2c4265}[data-bs-theme=light] #content_area{color:#212529;background-color:#f8f9fa}[data-bs-theme=light] #navbar-content-wrapper{color:#212529;background-color:#fff}[data-bs-theme=light] #sidebar_left{background-color:#414c5b}[data-bs-theme=light] #footer{color:#212529}[data-bs-theme=light] #contextmenu{color:#212529;background-color:#fff}[data-bs-theme=light] tr.selectable.selected td{background-color:#dfeefb}[data-bs-theme=light] .table-striped>tbody>tr.selectable.selected:nth-child(2n+1)>td{background-color:#cfdce7}[data-bs-theme=light] .bg-primary-100{background-color:#dde9fb}#sidebar_left,#sidebar_right{height:100%;max-height:100%;user-select:none}#sidebar_left ul.list-group,#sidebar_left ul.list-group li,#sidebar_right ul.list-group,#sidebar_right ul.list-group li{background-color:inherit}#sidebar_left .sidebar-controls,#sidebar_right .sidebar-controls{position:absolute;bottom:0}#sidebar_left .sidebar-controls .sidebar-control,#sidebar_right .sidebar-controls .sidebar-control{position:relative;z-index:10;border-bottom-left-radius:0;border-bottom-right-radius:0}#sidebar_left .lock-state,#sidebar_right .lock-state{position:relative;top:calc(100% - 2rem);width:min-content;height:0;z-index:100}@media(max-width: 767.98px){#sidebar_left .lock-state,#sidebar_right .lock-state{display:none}}#sidebar_left .lock-state input[type=checkbox]:not(:checked)+.lock-state-btn,#sidebar_right .lock-state input[type=checkbox]:not(:checked)+.lock-state-btn{background-color:var(--bs-border-color);border-color:rgba(0,0,0,0);color:var(--bs-body-color)}#sidebar_left .lock-state input[type=checkbox]:not(:checked)+.lock-state-btn i.bi-lock,#sidebar_right .lock-state input[type=checkbox]:not(:checked)+.lock-state-btn i.bi-lock{display:none}#sidebar_left .lock-state input[type=checkbox]:checked+.lock-state-btn,#sidebar_right .lock-state input[type=checkbox]:checked+.lock-state-btn{background-color:var(--bs-dark-border-subtle);border-color:rgba(0,0,0,0);color:var(--bs-body-color)}#sidebar_left .lock-state input[type=checkbox]:checked+.lock-state-btn i.bi-unlock,#sidebar_right .lock-state input[type=checkbox]:checked+.lock-state-btn i.bi-unlock{display:none}#sidebar_left #navtree,#sidebar_right #navtree{max-width:100%}#sidebar_left #navtree .nav-link,#sidebar_right #navtree .nav-link{z-index:1000;white-space:nowrap}#sidebar_left #navtree .nav-link.active,#sidebar_right #navtree .nav-link.active{background-color:rgba(0,0,0,0);font-weight:bold}#sidebar_left #navtree .nav-link i.btn-closed,#sidebar_right #navtree .nav-link i.btn-closed{vertical-align:text-bottom}#sidebar_left #navtree .nav-link span,#sidebar_right #navtree .nav-link span{display:inline-block;width:calc(100% - 40px);text-overflow:ellipsis;overflow-x:hidden;vertical-align:text-bottom}#sidebar_left #navtree #navigation-collapse.no-collapse>ul>li,#sidebar_right #navtree #navigation-collapse.no-collapse>ul>li{padding-left:0 !important}#sidebar_left #sidebar_resize,#sidebar_right #sidebar_resize{position:relative;width:0;height:0}#sidebar_left #sidebar_resize #sidebar_resizer,#sidebar_right #sidebar_resize #sidebar_resizer{position:absolute;z-index:3;height:100vh;width:20px;transform:translateX(-50%);cursor:col-resize}#sidebar_left #sidebar_collapse,#sidebar_right #sidebar_collapse{position:relative;top:100%;width:0;height:0}#sidebar_left #sidebar_collapse .collapse_btn,#sidebar_right #sidebar_collapse .collapse_btn{position:absolute;top:100%;border-radius:100%;z-index:1000}#sidebar_left.collapsed,#sidebar_right.collapsed{width:0px !important;min-width:0 !important}#sidebar_left.collapsed #sidebar_resize,#sidebar_right.collapsed #sidebar_resize{display:none}#sidebar_left.collapsed #sidebar_collapse .collapse_btn .btn-open,#sidebar_right.collapsed #sidebar_collapse .collapse_btn .btn-open{display:none}#sidebar_left.collapsed .sidebar-controls,#sidebar_right.collapsed .sidebar-controls{display:none}#sidebar_left.responsive-collapsed:not(.expanded) .sidebar-controls,#sidebar_right.responsive-collapsed:not(.expanded) .sidebar-controls{display:none}#sidebar_left.expanded #sidebar_collapse .collapse_btn .btn-closed,#sidebar_right.expanded #sidebar_collapse .collapse_btn .btn-closed{display:none}@media(min-width: 1400px){#sidebar_left:not(.collapsed) #sidebar_collapse .collapse_btn,#sidebar_right:not(.collapsed) #sidebar_collapse .collapse_btn{transform:translateX(-20px)}#sidebar_left:not(.collapsed) #sidebar_collapse .collapse_btn .btn-closed,#sidebar_right:not(.collapsed) #sidebar_collapse .collapse_btn .btn-closed{display:none}}@media(max-width: 1399.98px){#sidebar_left:not(.expanded),#sidebar_right:not(.expanded){width:0 !important;min-width:0 !important;border:none !important}#sidebar_left:not(.expanded) #sidebar_resize,#sidebar_right:not(.expanded) #sidebar_resize{display:none}#sidebar_left:not(.expanded) #sidebar_collapse .collapse_btn .btn-open,#sidebar_right:not(.expanded) #sidebar_collapse .collapse_btn .btn-open{display:none}}@media(min-width: 768px)and (max-width: 1399.98px){#sidebar_left.expanded #sidebar_collapse .collapse_btn,#sidebar_right.expanded #sidebar_collapse .collapse_btn{transform:translateX(-20px)}}@media(max-width: 767.98px){#sidebar_left #sidebar_resize,#sidebar_right #sidebar_resize{display:none}#sidebar_left.expanded,#sidebar_right.expanded{width:100% !important;z-index:3}}#sidebar_left #sidebar_resize{left:100%}#sidebar_left #sidebar_collapse{left:100%}@media(max-width: 767.98px){#sidebar_left.expanded #sidebar_collapse{left:calc(100% - 50px)}}#sidebar_left.responsive-expanded .lock-state{left:100%;transform:translateX(-10px)}#sidebar_left.expanded .lock-state{left:100% !important;transform:translateX(-10px) !important}#sidebar_left.responsive-collapsed .lock-state{left:calc(100% + 10px)}#sidebar_left.collapsed .lock-state{left:calc(100% + 10px) !important;transform:none !important}#sidebar_right{background-color:var(--bs-body-bg);border-left:1px solid var(--bs-border-color)}#sidebar_right .sidebar-controls{right:0}#sidebar_right #sidebar_collapse{left:0}#sidebar_right.collapsed{border:0}#sidebar_right.collapsed .collapse_btn{right:0}#sidebar_right.responsive-expanded .lock-state{transform:translateX(-10px)}#sidebar_right.expanded .lock-state{transform:translateX(-10px) !important}#sidebar_right.responsive-collapsed .lock-state{transform:translateX(calc(-100% - 10px))}#sidebar_right.collapsed .lock-state{transform:translateX(calc(-100% - 10px)) !important}@media(max-width: 1399.98px){#sidebar_right:not(.expanded) #sidebar_collapse .collapse_btn{right:0}}@media(max-width: 767.98px){#sidebar_right.expanded{transform:translateX(-2rem)}}.table_length,.table_filter{width:unset}#contents>div.card-body div.row>div{flex:1 0 auto;flex-wrap:nowrap}.table-footer{gap:1rem 0}.table-footer .table_info{white-space:nowrap}#main-area.full .table_length{max-width:max-content}#main-area.full .table_filter{max-width:300px}#settings-grid-container .settings-grid a i{font-size:44px}@media(max-width: 450px){#settings-grid-container .settings-grid a i{font-size:30px}}
diff --git a/src/cone/app/browser/static/cone/cone.app.min.js b/src/cone/app/browser/static/cone/cone.app.min.js
index 2ccf702e..313eee38 100644
--- a/src/cone/app/browser/static/cone/cone.app.min.js
+++ b/src/cone/app/browser/static/cone/cone.app.min.js
@@ -1 +1 @@
-var cone=function(e,t,s){"use strict";class i{constructor(e,t){this.elem=e,this.name=t}set_filter(e){let t=this.elem,i=s.ajax.parse_target(t.attr("ajax:target")),o=t.attr("ajax:event");if(i.params[this.name]=e,t.attr("ajax:path")){let l=t.attr("ajax:path-event");l||(l=o),s.ajax.path({path:i.path+i.query+"&"+this.name+"="+e,event:l,target:i})}let l=o.split(":");s.ajax.trigger({name:l[0],selector:l[1],target:i})}}class o extends i{static initialize(e,s=".batched_items_slice_size select"){t(s,e).each(function(){new o(t(this))})}constructor(e){super(e,"size"),e.off("change").on("change",this.change_handle.bind(this))}change_handle(e){let s=t("option:selected",this.elem).first();this.set_filter(s.val())}}class l extends i{static initialize(e,s=".batched_items_filter input",i="term"){t(s,e).each(function(){new l(t(this),i)})}constructor(e,t){super(e,t),e.off("focus").on("focus",this.focus_handle.bind(this)),e.off("keypress").on("keypress",this.keypress_handle.bind(this)),e.off("keyup").on("keyup",this.keyup_handle.bind(this)),e.off("change").on("change",this.change_handle.bind(this))}focus_handle(e){let t=this.elem;t.hasClass("empty_filter")&&(t.val(""),t.removeClass("empty_filter"))}keypress_handle(e){13==e.keyCode&&e.preventDefault()}keyup_handle(e){13==e.keyCode&&(e.preventDefault(),this.set_filter(this.elem.val()))}change_handle(e){e.preventDefault(),this.set_filter(this.elem.val())}}class r{static get media_query(){return window.matchMedia("(prefers-color-scheme: dark)")}static get stored_theme(){return localStorage.getItem("cone-app-color-theme")}static set stored_theme(e){localStorage.setItem("cone-app-color-theme",e)}static get preferred_theme(){return this.stored_theme?this.stored_theme:this.media_query.matches?"dark":"light"}static watch(e){this.media_query.addEventListener("change",e)}static set_theme(e){const t=document.documentElement;"auto"===e&&this.media_query.matches?t.setAttribute("data-bs-theme","dark"):t.setAttribute("data-bs-theme",e)}constructor(){r.bind(),r.set_theme(r.preferred_theme)}static bind(){this.boundCallback=this.callback.bind(this),this.watch(this.boundCallback)}static callback(){const e=this.stored_theme;"light"!==e&&"dark"!==e&&r.set_theme(r.preferred_theme)}static unbind(){this.boundCallback&&(this.media_query.removeEventListener("change",this.boundCallback),document.documentElement.removeAttribute("data-bs-theme"))}}class a extends s.ChangeListener{static initialize(e){const t=s.query_elem("#colortoggle-switch",e);t&&new a(t)}constructor(e){super({elem:e}),this.update=this.update.bind(this),this.update(),r.watch(this.update())}update(){const e=r.preferred_theme,t=this.elem,s=t.is(":checked");"dark"!==e||s?"light"===e&&s&&t.prop("checked",!1):t.prop("checked",!0)}on_change(){const e=this.elem.is(":checked")?"dark":"light";r.set_theme(e),r.stored_theme=e}}class n{static initialize(e){new n(e)}constructor(e){this.cut_cookie="cone.app.copysupport.cut",this.copy_cookie="cone.app.copysupport.copy",this.context=e,this.paste_action=t("a#toolbaraction-paste",e),this.paste_action.off("click").on("click",this.handle_paste.bind(this)),this.copyable=t("table tr.selectable.copysupportitem",e),this.copyable.length&&(this.cut_action=t("a#toolbaraction-cut",e),this.cut_action.off("click").on("click",this.handle_cut.bind(this)),this.copy_action=t("a#toolbaraction-copy",e),this.copy_action.off("click").on("click",this.handle_copy.bind(this)),this.selectable=this.copyable.selectable({on_firstclick:this.on_firstclick.bind(this),on_select:this.on_select.bind(this)}).data("selectable"),this.read_selected_from_cookie(this.cut_cookie,"copysupport_cut"),this.read_selected_from_cookie(this.copy_cookie,""))}on_firstclick(e,t){}on_select(e){}write_selected_to_cookie(e){let i=t(this.selectable.selected),o=new Array;i.each(function(){o.push(t(this).attr("ajax:target"))});let l=o.join("::");s.create_cookie(e,l),l.length?t(this.paste_action).removeClass("disabled"):t(this.paste_action).addClass("disabled")}read_selected_from_cookie(e,i){let o=s.read_cookie(e);if(!o)return;let l,r,a=o.split("::"),n=this;t("table tr.selectable",this.context).each(function(){l=t(this),r=l.attr("ajax:target");for(let e in a)if(a[e]==r){l.addClass("selected"),i&&l.addClass(i),n.selectable.add(l.get(0));break}})}handle_cut(e){e.preventDefault(),s.create_cookie(this.copy_cookie,"",0),this.write_selected_to_cookie(this.cut_cookie),this.copyable.removeClass("copysupport_cut"),t(this.selectable.selected).addClass("copysupport_cut")}handle_copy(e){e.preventDefault(),s.create_cookie(this.cut_cookie,"",0),this.write_selected_to_cookie(this.copy_cookie),this.copyable.removeClass("copysupport_cut")}handle_paste(e){e.preventDefault();let i=t(e.currentTarget);if(i.hasClass("disabled"))return;let o=s.ajax.parse_target(i.attr("ajax:target"));s.ajax.action({name:"paste",mode:"NONE",selector:"NONE",url:o.url,params:o.params})}}let h={shift_down:!1,ctrl_down:!1};class c{constructor(){t(window).on("keydown",this.key_down.bind(this)),t(window).on("keyup",this.key_up.bind(this))}key_down(e){switch(e.keyCode||e.which){case 16:h.shift_down=!0;break;case 17:h.ctrl_down=!0}}key_up(e){switch(e.keyCode||e.which){case 16:h.shift_down=!1;break;case 17:h.ctrl_down=!1}}}class d{static initialize(e,t=null){const i=s.query_elem("input#search-text",e);i&&(null===t&&(t=cone.LiveSearch),new t(i))}constructor(e){this.elem=e,this.target=`${e.data("search-target")}/livesearch`,this.content=t("#content"),this.result=null,this._term="",this._minlen=3,this._delay=250,this._timeout_event=null,this._in_progress=!1,this.on_keydown=this.on_keydown.bind(this),this.on_change=this.on_change.bind(this),this.on_result=this.on_result.bind(this),e.on("keydown",this.on_keydown),e.on("change",this.on_change)}search(){this._in_progress=!0,s.http_request({url:this.target,params:{term:this._term},type:"json",success:this.on_result}),this._in_progress=!1}render_no_results(){s.compile_template(this,'\n
No search results
\n ',this.result)}render_suggestion(e){s.compile_template(this,`\n \n
\n
\n ${void 0===e.description?"":e.description}\n
\n
\n `,this.result)}on_result(e,t,i){if(this.content.empty(),s.compile_template(this,`\n \n
\n
Search results for "${this._term}"
\n \n
\n `,this.content),e.length){s.compile_template(this,`\n \n ${e.length} Results\n
\n `,this.result);for(const t of e)this.render_suggestion(t)}else this.render_no_results();this.result.tsajax()}on_keydown(e){13!==e.keyCode&&s.clock.schedule_frame(()=>{this._term!==this.elem.val()&&this.elem.trigger("change")})}on_change(e){if(this._in_progress)return;const t=this.elem.val();this._term!==t&&(this._term=t,this._term.length{this._timeout_event=null,this.search()},this._delay)))}}class _{static initialize(e){if(!e)return;let s=e.parents("div.modal");if(!s.length)return;let i=s.data("overlay"),o=i.ref_target;t("a.addreference",e).each(function(){new p(t(this),o,i)}),t("a.removereference",e).each(function(){new m(t(this),o,i)})}constructor(e,t,s){this.elem=e,this.target=t,this.target_tag=t.get(0).tagName,this.overlay=s}single_value(){return"INPUT"==this.target_tag}multi_value(){return"SELECT"==this.target_tag}toggle_enabled(e){t("a",e.parent()).toggleClass("disabled")}reset_selected(e){let s=new Array;this.single_value()&&s.push(e.attr("value")),this.multi_value()&&t("[selected=selected]",e).each(function(){s.push(t(this).attr("value"))}),this.set_selected_on_ajax_target(e.parent(),s);let i=this.overlay,o=this;t("div.referencebrowser a",i.elem).each(function(){let e=t(this);e.attr("ajax:target")&&o.set_selected_on_ajax_target(e,s)})}set_selected_on_ajax_target(e,t){let i=s.ajax.parse_target(e.attr("ajax:target"));i.params.selected=t.join(",");let o=new Array;for(let e in i.params)o.push(e+"="+i.params[e]);e.attr("ajax:target",i.url+"?"+o.join("&"))}}class p extends _{constructor(e,t,s){super(e,t,s),e.off("click").on("click",this.add_reference.bind(this))}add_reference(e){e.preventDefault();let s=this.elem,i=this.target,o=s.attr("id");o=o.substring(4,o.length);let l=t(".reftitle",s.parent()).html();if(this.single_value()){i.attr("value",l);let e='[name="'+i.attr("name")+'.uid"]';return t(e).attr("value",o),this.set_selected_on_ajax_target(i.parent(),[o]),void this.overlay.close()}if(this.multi_value()){if(t('[value="'+o+'"]',i.parent()).length)return;let e=t("");e.val(o).html(l).attr("selected","selected"),i.append(e),i.trigger("change")}this.reset_selected(i),this.toggle_enabled(s)}}class m extends _{constructor(e,t,s){super(e,t,s),e.off("click").on("click",this.remove_reference.bind(this))}remove_reference(e){e.preventDefault();let s=this.elem,i=this.target,o=s.attr("id");if(o=o.substring(4,o.length),this.single_value()){i.attr("value","");let e='[name="'+i.attr("name")+'.uid"]';t(e).attr("value","")}if(this.multi_value()){let e='[value="'+o+'"]';if(!t(e,i.parent()).length)return;t(e,i).remove(),i.trigger("change")}this.reset_selected(i),this.toggle_enabled(s)}}class u{static initialize(e){t(".referencebrowser_trigger",e).each(function(){new u(t(this))})}constructor(e){this.wrapper=e.parent();let s=`[name="${e.data("reference-name")}"]`;this.target=t(s,this.wrapper),e.off("click").on("click",this.load_ref_browser.bind(this))}load_ref_browser(e){e.preventDefault(),s.ajax.overlay({action:"referencebrowser",title:"Referencebrowser",css:"modal-lg",target:this.wrapper.attr("ajax:target"),on_complete:this.on_complete.bind(this)}).ref_target=this.target}on_complete(e){let s=this.target;t("a.addreference",e.elem).each(function(){new p(t(this),s,e)}),t("a.removereference",e.elem).each(function(){new m(t(this),s,e)})}}function b(e,t){u.initialize(t)}function g(e,s,i){t(".referencebrowser_trigger",s).each(function(){let s=t(this),o=s.data("reference-name"),l=e.base_id.replace(/\-/g,".");s.data("reference-name",e.set_value_index(o,l,i,"."))})}t(function(){void 0!==window.yafowil_array&&(yafowil_array.on_array_event("on_add",b),yafowil_array.on_array_event("on_index",g))});class f extends s.Events{on_sidebar_left_resize(e){}on_sidebar_right_resize(e){}on_main_area_mode(e){}}const w=new f;class v extends s.Events{static initialize(e){const t=s.query_elem("#main-area",e);t&&new v(t)}constructor(e){super(),this.elem=e,new s.Property(this,"is_compact",null),new s.Property(this,"is_super_compact",null),this.set_mode=this.set_mode.bind(this),w.on("on_sidebar_left_resize",this.set_mode),w.on("on_sidebar_right_resize",this.set_mode),t(window).on("resize",this.set_mode),this.set_mode(),s.ajax.attach(this,e)}destroy(){t(window).off("resize",this.set_mode),w.off("on_sidebar_left_resize",this.set_mode),w.off("on_sidebar_right_resize",this.set_mode)}set_mode(){this.is_compact=this.elem.outerWidth()<992,this.is_super_compact=this.elem.outerWidth()<576}on_is_compact(e){e?(this.elem.removeClass("full"),this.elem.addClass("compact")):(this.elem.removeClass("compact"),this.elem.addClass("full")),w.trigger("on_main_area_mode",this)}on_is_super_compact(e){e?this.elem.addClass("super-compact"):this.elem.removeClass("super-compact"),w.trigger("on_main_area_mode",this)}}class k extends s.Events{constructor(e){super(),this.elem=e,new s.Property(this,"is_compact",null),new s.Property(this,"is_super_compact",null),new s.Property(this,"is_sidebar_collapsed",null),this.set_mode=this.set_mode.bind(this),w.on("on_main_area_mode",this.set_mode),this.on_sidebar_left_resize=this.on_sidebar_left_resize.bind(this),w.on("on_sidebar_left_resize",this.on_sidebar_left_resize),w.on("on_sidebar_right_resize",this.on_sidebar_left_resize),s.ajax.attach(this,e)}destroy(){w.off("on_main_area_mode",this.set_mode),w.off("on_sidebar_left_resize",this.on_sidebar_left_resize),w.off("on_sidebar_right_resize",this.on_sidebar_left_resize)}set_mode(e,t){this.is_compact=t.is_compact,this.is_super_compact=t.is_super_compact}on_is_compact(e){e?(this.elem.removeClass("full"),this.elem.addClass("compact")):(this.elem.removeClass("compact"),this.elem.addClass("full"))}on_is_super_compact(e){e?this.elem.addClass("super-compact"):this.elem.removeClass("super-compact")}on_sidebar_left_resize(e,t){this.is_sidebar_left_collapsed=t.collapsed}on_sidebar_right_resize(e,t){this.is_sidebar_right_collapsed=t.collapsed}on_is_sidebar_left_collapsed(e){}on_is_sidebar_right_collapsed(e){}}const z=e=>class extends e{constructor(...e){super(...e),this.elem&&s.ajax.attach(this,this.elem),this.on_window_resize=this.on_window_resize.bind(this),t(window).on("resize",this.on_window_resize)}on_window_resize(e){super.on_window_resize&&super.on_window_resize(e)}destroy(){try{super.destroy()}catch(e){console.warn(e)}finally{t(window).off("resize",this.on_window_resize)}}};class y extends s.Motion{static initialize(e){t(".scrollable-x",e).each(function(){new x(t(this))}),t(".scrollable-y",e).each(function(){new C(t(this))})}constructor(e){if(super(e),this.elem=e,this.elem.data("scrollbar"))return void console.warn("cone.app: Only one Scrollbar can be bound to each element.");this.elem.data("scrollbar",this),this.content=s.query_elem("> .scrollable-content",e),this.on_scroll=this.on_scroll.bind(this),this.on_click=this.on_click.bind(this),this.on_hover=this.on_hover.bind(this),this.on_window_resize=this.on_window_resize.bind(this),this.compile(),this.position=0,this.scroll_step=50,new s.Property(this,"disabled",!1),s.clock.schedule_frame(()=>this.render());const i=t(window).width()<=768;new s.Property(this,"is_mobile",i)}on_window_resize(e){this.is_mobile=t(window).innerWidth()<=768,this.position=this.safe_position(this.position),this.render()}get position(){return this._position||0}set position(e){this._position=this.safe_position(e),this.update(),this.trigger("on_position",this._position)}get pointer_events(){return"all"===this.elem.css("pointer-events")}set pointer_events(e){this.elem.css("pointer-events",e?"all":"none")}fade_timer(){this.scrollbar.is(":visible")||this.scrollbar.fadeIn("fast"),this.fade_out_timeout&&clearTimeout(this.fade_out_timeout),this.fade_out_timeout=setTimeout(()=>{this.scrollbar.fadeOut("slow")},700)}on_is_mobile(e){e&&this.contentsize>this.scrollsize?(this.scrollbar.stop(!0,!0).show(),this.elem.off("mouseenter mouseleave",this.on_hover)):(this.scrollbar.stop(!0,!0).hide(),this.elem.on("mouseenter mouseleave",this.on_hover))}bind(){this.pointer_events=!0,this.elem.on("mousewheel wheel",this.on_scroll),this.scrollbar.on("click",this.on_click),this.set_scope(this.thumb,t(document),this.elem)}unbind(){this.elem.off("mousewheel wheel",this.on_scroll),this.elem.off("mouseenter mouseleave",this.on_hover),this.scrollbar.off("click",this.on_click),t(this.thumb).off("mousedown",this._down_handle)}destroy(){this.fade_out_timeout&&clearTimeout(this.fade_out_timeout),this.unbind(),this.elem.removeData("scrollbar")}compile(){s.compile_template(this,'\n \n ',this.elem)}render(e){this.scrollbar.css(e,this.scrollsize),this.contentsize<=this.scrollsize?this.thumbsize=this.scrollsize:this.thumbsize=Math.pow(this.scrollsize,2)/this.contentsize,this.thumb.css(e,this.thumbsize),this.update(),this.position=this.safe_position(this.position)}safe_position(e){if("number"!=typeof e)throw new Error(`Scrollbar position must be a Number, position is: "${e}".`);if(this.contentsize<=this.scrollsize)return 0;const t=this.contentsize-this.scrollsize;return e>=t?e=t:e<=0&&(e=0),e}on_disabled(e){e?this.unbind():this.bind()}on_hover(e){e.preventDefault(),e.stopPropagation();const t=this.elem;(t.has(e.target).length>0||t.is(e.target))&&this.contentsize>this.scrollsize&&("mouseenter"===e.type?this.scrollbar.stop(!0,!0).fadeIn():"mouseleave"===e.type&&e.relatedTarget!==t.get(0)&&this.scrollbar.stop(!0,!0).fadeOut())}on_scroll(e){if(this.contentsize<=this.scrollsize)return;let t=e.originalEvent;"number"==typeof t.deltaY&&(t.deltaY>0?this.position+=this.scroll_step:t.deltaY<0&&(this.position-=this.scroll_step))}on_click(e){e.preventDefault(),this.thumb.addClass("active");let t=this.pos_from_evt(e)-this.offset-this.thumbsize/2;this.position=this.contentsize*t/this.scrollsize,this.thumb.removeClass("active")}touchstart(e){const t=e.originalEvent.touches[0];this._touch_pos=this.pos_from_evt(t),this._start_position=this.position}touchmove(e){if(this.contentsize<=this.scrollsize)return;const t=e.originalEvent.touches[0],s=this.pos_from_evt(t)-this._touch_pos;this.position=this._start_position-s,this.fade_timer()}touchend(e){delete this._touch_pos,delete this._start_position}down(e){this._mouse_pos=this.pos_from_evt(e)-this.offset,this._thumb_pos=this.position/(this.contentsize/this.scrollsize),this.elem.off("mouseenter mouseleave",this.on_hover),this.thumb.addClass("active")}move(e){let t=this.pos_from_evt(e)-this.offset,s=this._thumb_pos+t-this._mouse_pos;this.position=this.contentsize*s/this.scrollsize}up(e){delete this._mouse_pos,delete this._thumb_pos,this.elem.on("mouseenter mouseleave",this.on_hover),this.thumb.removeClass("active")}}class x extends(z(y)){get offset(){return this.elem.offset().left}get contentsize(){return this.content.outerWidth()}get scrollsize(){const e=parseFloat(this.elem.css("padding-right")),t=parseFloat(this.elem.css("padding-left"));return this.elem.outerWidth()-t-e}compile(){super.compile(),this.thumb.css("height","6px"),this.scrollbar.css("height","6px").css("width",this.scrollsize),this.thumbsize=this.scrollsize/(this.contentsize/this.scrollsize),this.thumb.css("width",this.thumbsize)}render(){super.render("width")}update(){let e=this.position/(this.contentsize/this.scrollsize);this.content.css("right",this.position+"px"),this.thumb.css("left",e+"px")}pos_from_evt(e){return e.pageX}}class C extends(z(y)){get offset(){return this.elem.offset().top}get contentsize(){return this.content.outerHeight()}get scrollsize(){const e=parseFloat(this.elem.css("padding-top")),t=parseFloat(this.elem.css("padding-bottom"));return this.elem.outerHeight()-e-t}compile(){super.compile(),this.thumb.css("width","6px"),this.scrollbar.css("width","6px").css("top","0px").css("height",this.scrollsize),this.thumbsize=this.scrollsize/(this.contentsize/this.scrollsize),this.thumb.css("height",this.thumbsize)}render(){super.render("height")}update(){let e=this.position/(this.contentsize/this.scrollsize);this.content.css("bottom",this.position+"px"),this.thumb.css("top",e+"px")}pos_from_evt(e){return e.pageY}}class j{static initialize(e){new j(e)}constructor(e){t("input.add_remove_role_for_principal",e).off("change").on("change",this.set_principal_role)}set_principal_role(e){e.preventDefault();let i,o=t(this);i=this.checked?"add_principal_role":"remove_principal_role";let l=o.parent().attr("ajax:target"),r={id:o.attr("name"),role:o.attr("value")};s.ajax.action({name:i,mode:"NONE",selector:"NONE",url:l,params:r})}}class S extends s.Events{constructor(e,i){super(i),this.elem=i;const o=this.target=i.data("target");this.parent=e,this.related_tile=t(`[data-tile="${o}"]`,this.parent.tiles_container),this.on_click=this.on_click.bind(this),this.compile(),s.ajax.attach(this,i)}compile(){this.elem.on("click",this.on_click)}on_click(e){e.preventDefault(),this.parent.activate_tile(this)}activate_tile(){this.elem.addClass("active"),this.related_tile.removeClass("d-none"),this.parent.sidebar.elem.attr("tile",this.target)}deactivate_tile(){this.elem.removeClass("active"),this.related_tile.addClass("d-none")}destroy(){this.elem.off("click",this.on_click)}}class q extends s.Events{constructor(e,s){super(s),this.sidebar=e,this.elem=s,this.mode=e.elem.data("mode")||"stacked",this.tiles=e.elem.data("tiles")??[],this.navigation=t(".sidebar-controls",this.sidebar.elem),this.tiles_container=t(".sidebar-tiles",this.elem),this.controls=[],this.compile(),"toggle"===this.mode&&this.controls.length>0&&this.activate_tile(this.controls[0])}compile(){"toggle"===this.mode&&this.tiles.length>1?t(".sidebar-control",this.navigation).each((e,s)=>{this.controls.push(new S(this,t(s)))}):this.navigation.addClass("d-none")}activate_tile(e){"stacked"!==this.mode&&(this.deactivate_all(),e.activate_tile())}deactivate_all(){for(const e of this.controls){if("stacked"===this.mode)return;e.deactivate_tile()}}}class I extends(z(s.Motion)){constructor(e){if(super(e),this.elem=e,e.css("width",this.sidebar_width+"px"),this.moving=!1,this.trigger_event=this.trigger_event.bind(this),this.scrollbar=s.query_elem(".scrollable-y",e).data("scrollbar"),this.on_click=this.on_click.bind(this),this.collapse_elem=s.query_elem("#sidebar_collapse",e),this.collapse_elem.on("click",this.on_click),this.on_lock=this.on_lock.bind(this),this.lock_input=s.query_elem(".lock-state-input",e),this.lock_elem=s.query_elem(".lock-state-btn",e),this.lock_elem.on("click",this.on_lock),this.resizer_elem=s.query_elem("#sidebar_resizer",e),this.set_scope(this.resizer_elem,t(document)),this.responsive_toggle=this.responsive_toggle.bind(this),this.responsive_toggle(),void 0!==this.locked&&null!==this.locked){if(this.lock_input.prop("checked",!0).trigger("change"),this.disable_lock)return;this.locked.collapsed?this.collapse():this.expand()}this.disable_or_enable_interaction=this.disable_or_enable_interaction.bind(this),this.disable_or_enable_interaction(),t("html, body").css("overscroll-behavior","auto");const i=t(".sidebar-content",e);this.sidebar_content=new q(this,i),s.ajax.attach(this,e)}get collapsed(){return this.elem.outerWidth()<=0}on_window_resize(e){this.responsive_toggle()}on_lock(e){!this.lock_input.get(0).checked?this.set_state():(this.unset_state(),this.elem.removeClass("collapsed"),this.elem.removeClass("expanded")),this.collapsed?this.elem.addClass("collapsed"):this.elem.addClass("expanded"),this.disable_or_enable_interaction()}disable_or_enable_interaction(){this.locked&&!this.disable_lock?(t(".collapse_btn",this.collapse_elem).addClass("disabled"),this.resizer_elem.addClass("d-none")):(t(".collapse_btn",this.collapse_elem).removeClass("disabled"),this.resizer_elem.removeClass("d-none"))}responsive_toggle(){this.locked||(this.elem.removeClass("collapsed"),this.elem.removeClass("expanded")),this.collapsed?(this.elem.removeClass("responsive-expanded"),this.elem.addClass("responsive-collapsed")):(this.elem.addClass("responsive-expanded"),this.elem.removeClass("responsive-collapsed")),this.collapsed!==this.responsive_collapsed&&(this.responsive_collapsed=this.collapsed,this.trigger_event()),t(window).width()<768?(this.disable_lock=!0,this.locked&&!this.locked.collapsed&&this.collapse()):(this.disable_lock=!1,this.locked&&!this.locked.collapsed&&this.collapsed?this.expand():this.locked&&this.locked.collapsed&&!this.collapsed&&this.collapse()),this.locked&&this.disable_or_enable_interaction()}collapse(){t("html, body").css("overscroll-behavior","auto"),this.elem.removeClass("expanded").addClass("collapsed"),this.trigger_event()}expand(){t("html, body").css("overscroll-behavior","none"),this.elem.removeClass("collapsed").addClass("expanded"),this.trigger_event()}on_click(e){this.collapsed?this.expand():this.collapse(),void 0===this.locked||null===this.locked||this.disable_lock||this.set_state()}move(e){this.locked||(this.moving=!0,this.scrollbar.pointer_events=!1,this.sidebar_width=this.get_width_from_event(e),this.elem.css("width",this.sidebar_width),this.trigger_event())}up(){this.scrollbar.pointer_events=!0,this.trigger_event(),this.moving=!1}on_sibling_sidebar_resize(e,s){const i=t(window).width()-this.elem.outerWidth()-300,o=t(window).width()<768,l=this.locked&&!this.locked.collapsed,r=s.elem.outerWidth()>=i;!s.collapsed&&o?(this.collapse(),this.elem.addClass("d-none")):s.collapsed||!r||s.moving&&this.locked?s.collapsed&&l&&this.collapsed&&!o?(this.expand(),this.elem.removeClass("d-none")):s.collapsed&&this.elem.removeClass("d-none"):this.collapse()}destroy(){this.reset_state(),t(window).off("resize",this.on_window_resize),this.collapse_elem.off(),this.scrollbar=null,this.elem.off(),this.lock_elem.off("click",this.on_lock)}}class E extends I{static initialize(e){const t=s.query_elem("#sidebar_left",e);t&&new E(t)}constructor(e){super(e),this.on_sidebar_right_resize=this.on_sidebar_right_resize.bind(this),w.on("on_sidebar_right_resize",this.on_sidebar_right_resize)}get locked(){return JSON.parse(localStorage.getItem("cone.app.sidebar_left.locked"))}get sidebar_width(){return localStorage.getItem("cone-app-sidebar-left-width")||300}set sidebar_width(e){localStorage.setItem("cone-app-sidebar-left-width",e)}trigger_event(){w.trigger("on_sidebar_left_resize",this)}get_width_from_event(e){let s=e.pageX,i=0;t("#sidebar_right").length>0&&(i=t("#sidebar_right").outerWidth());const o=t(window).width()-i-300;return s=Math.max(115,Math.min(s,o)),parseInt(s)}on_sidebar_right_resize(e,t){this.on_sibling_sidebar_resize(e,t)}set_state(){localStorage.setItem("cone.app.sidebar_left.locked",JSON.stringify({collapsed:this.collapsed}))}unset_state(){localStorage.removeItem("cone.app.sidebar_left.locked")}destroy(){super.destroy(),w.off("on_sidebar_right_resize",this.on_sidebar_right_resize)}}class N extends I{static initialize(e){const t=s.query_elem("#sidebar_right",e);t&&new N(t)}constructor(e){super(e),this.on_sidebar_left_resize=this.on_sidebar_left_resize.bind(this),w.on("on_sidebar_left_resize",this.on_sidebar_left_resize)}get locked(){return JSON.parse(localStorage.getItem("cone.app.sidebar_right.locked"))}get sidebar_width(){return localStorage.getItem("cone-app-sidebar-right-width")||300}set sidebar_width(e){localStorage.setItem("cone-app-sidebar-right-width",e)}trigger_event(){w.trigger("on_sidebar_right_resize",this)}get_width_from_event(e){let s=t(window).outerWidth()-e.pageX,i=0;t("#sidebar_left").length>0&&(i=t("#sidebar_left").outerWidth());const o=t(window).width()-i-300;return s=Math.max(115,Math.min(s,o)),parseInt(s)}on_sidebar_left_resize(e,t){this.on_sibling_sidebar_resize(e,t)}set_state(){localStorage.setItem("cone.app.sidebar_right.locked",JSON.stringify({collapsed:this.collapsed}))}unset_state(){localStorage.removeItem("cone.app.sidebar_right.locked")}destroy(){super.destroy(),w.off("on_sidebar_left_resize",this.on_sidebar_left_resize)}}class D{static initialize(e){o.initialize(e,".table_length select"),l.initialize(e,".table_filter input")}}class T{static initialize(e){t(".translation-nav",e).each(function(){new T(t(this))})}constructor(e){t("div.invalid-feedback",e.parent()).show(),this.nav_elem=e,this.fields_elem=e.next(),this.show_lang_handle=this.show_lang_handle.bind(this),t("li > a",e).on("click",this.show_lang_handle),t("li.error",e).length?t("li.error:first > a",e).trigger("click"):t("li > a.active",e).trigger("click"),this.fields_elem.show()}show_lang_handle(e){e.preventDefault(),t("li > a",this.nav_elem).removeClass("active"),this.fields_elem.children().hide();let s=t(e.currentTarget);s.addClass("active"),t(s.attr("href"),this.fields_elem).show()}}class M extends k{static initialize(e){const t=s.query_elem("#mainmenu",e);t&&new M(t)}constructor(e){super(e),this.elem=e,this.scrollbar=e.data("scrollbar"),this.elems=t(".nav-link.dropdown-toggle",e),this.open_dropdown=null,this.on_show_dropdown_desktop=this.on_show_dropdown_desktop.bind(this),this.on_hide_dropdown_desktop=this.on_hide_dropdown_desktop.bind(this),this.hide_dropdowns=this.hide_dropdowns.bind(this),this.scrollbar.on("on_position",this.hide_dropdowns)}get height(){return this.elem.outerHeight(!0)}on_sidebar_left_resize(e,t){super.on_sidebar_left_resize(e,t),requestAnimationFrame(()=>{this.scrollbar.render()})}on_is_compact(e){this.hide_dropdowns(),e?(this.scrollbar.off("on_position",this.hide_dropdowns),this.bind_dropdowns_mobile()):(this.bind_dropdowns_desktop(),this.scrollbar.on("on_position",this.hide_dropdowns))}on_show_dropdown_desktop(e){const s=e.target;this.open_dropdown=s;t(s).siblings("ul.dropdown-menu").css({top:this.height-1+"px",left:`${t(s).offset().left}px`})}on_hide_dropdown_desktop(e){const t=e.target;this.open_dropdown===t&&(this.open_dropdown=null)}bind_dropdowns_desktop(){this.elem.on("shown.bs.dropdown",".nav-link.dropdown-toggle",this.on_show_dropdown_desktop),this.elem.on("hidden.bs.dropdown",".nav-link.dropdown-toggle",this.on_hide_dropdown_desktop)}bind_dropdowns_mobile(){this.elem.off("shown.bs.dropdown",".nav-link.dropdown-toggle",this.on_show_dropdown_desktop),this.elem.off("hidden.bs.dropdown",".nav-link.dropdown-toggle",this.on_hide_dropdown_desktop)}hide_dropdowns(){this.elems.each((e,s)=>{t(s).dropdown("hide")})}destroy(){super.destroy(),this.elem.off("shown.bs.dropdown",".nav-link.dropdown-toggle",this.on_show_dropdown_desktop),this.elem.off("hidden.bs.dropdown",".nav-link.dropdown-toggle",this.on_hide_dropdown_desktop),this.scrollbar.off("on_position",this.hide_dropdowns),this.scrollbar.destroy()}}class O extends k{static initialize(e){const t=s.query_elem("#header-main",e);t&&new O(t)}constructor(e){super(e),this.elem=e,this.header_content=s.query_elem("#header-content",e),this.navbar_content_wrapper=s.query_elem("#navbar-content-wrapper",e),this.navbar_content=s.query_elem("#navbar-content",e),this.navbar_toggler=s.query_elem("#navbar-toggler",this.elem),this.personal_tools=s.query_elem("#personaltools",e),this.mainmenu=s.query_elem("#mainmenu",e),this.mainmenu_elems=t(".nav-link.dropdown-toggle",this.mainmenu),this.render_mobile_scrollbar=this.render_mobile_scrollbar.bind(this),this.mainmenu_elems.each((e,s)=>{t(s).on("shown.bs.dropdown",this.render_mobile_scrollbar),t(s).on("hidden.bs.dropdown",this.render_mobile_scrollbar)}),this.set_mobile_menu_open=this.set_mobile_menu_open.bind(this),this.set_mobile_menu_closed=this.set_mobile_menu_closed.bind(this),this.bind()}destroy(){super.destroy(),this.mobile_scrollbar&&(this.mobile_scrollbar.destroy(),this.mobile_scrollbar=null),this.mainmenu_elems.each((e,s)=>{t(s).off("shown.bs.dropdown",this.render_mobile_scrollbar),t(s).off("hidden.bs.dropdown",this.render_mobile_scrollbar)});const e=this.navbar_content_wrapper;e.off("show.bs.collapse shown.bs.collapse",this.set_mobile_menu_open),e.off("hide.bs.collapse hidden.bs.collapse",this.set_mobile_menu_closed)}render_mobile_scrollbar(){this.is_compact&&this.mobile_scrollbar&&this.mobile_scrollbar.render()}bind(){const e=this.navbar_content_wrapper;e.on("show.bs.collapse shown.bs.collapse",this.set_mobile_menu_open),e.on("hidden.bs.collapse",this.set_mobile_menu_closed)}set_mobile_menu_open(){this.elem.addClass("mobile-menu-open")}set_mobile_menu_closed(){this.elem.removeClass("mobile-menu-open")}on_is_compact(e){this.mobile_scrollbar&&(this.navbar_content.removeClass("scrollable-content"),this.mobile_scrollbar.destroy(),this.mobile_scrollbar=null),e?(this.elem.removeClass("full").removeClass("navbar-expand"),this.elem.addClass("compact"),this.navbar_content.addClass("scrollable-content"),this.mobile_scrollbar=new C(this.navbar_content_wrapper),this.navbar_content_wrapper.on("shown.bs.collapse",()=>{t("html, body").css("overscroll-behavior","none"),this.mobile_scrollbar.render()}),this.navbar_content_wrapper.on("hide.bs.collapse",()=>{t("html, body").css("overscroll-behavior","auto"),this.mobile_scrollbar.scrollbar.hide()})):(this.elem.removeClass("compact"),this.elem.addClass("full").addClass("navbar-expand"))}on_is_super_compact(e){const i=null!==s.query_elem("#personaltools",this.navbar_content);e?i||this.personal_tools.detach().appendTo(this.navbar_content):(i&&this.personal_tools.detach().prependTo(this.header_content),t(".dropdown-menu.show").removeClass("show"))}}class ${static initialize(e){const t=s.query_elem("#navtree",e);t&&new $(t)}constructor(e){this.elem=e,this.dropdown_elem=t("#navigation-collapse",e),this.dropdown_elem.hasClass("no-collapse")||(localStorage.getItem("cone.app.navtree.open")&&this.dropdown_elem.addClass("show"),this.set_menu_open=this.set_menu_open.bind(this),this.set_menu_closed=this.set_menu_closed.bind(this),this.dropdown_elem.on("shown.bs.collapse",this.set_menu_open),this.dropdown_elem.on("hidden.bs.collapse",this.set_menu_closed),s.ajax.attach(this,e))}set_menu_open(e){localStorage.setItem("cone.app.navtree.open","true")}set_menu_closed(e){localStorage.removeItem("cone.app.navtree.open")}destroy(){this.dropdown_elem.off(),this.elem.off()}}class A{constructor(e){this.options=e,this.selected=[],this.select_direction=0,this.firstclick=!0}reset(){this.selected=[]}add(e){this.remove(e),this.selected.push(e)}remove(e){let s=t.grep(this.selected,function(t,s){return t!==e});this.selected=s}select_no_key(e,t){e.children().removeClass("selected"),t.addClass("selected"),this.reset(),this.add(t.get(0))}select_ctrl_down(e){e.toggleClass("selected"),e.hasClass("selected")?this.add(e.get(0)):this.remove(e.get(0))}get_nearest(e,s){let i,o,l=e.children(".selected"),r=-1;return t(l).each(function(){o=t(this),i=o.index(),-1==r?r=i:s>i?this.select_direction>0?ir&&(r=i):sNo search results\n ',this.result)}render_suggestion(e){s.compile_template(this,`\n \n
\n
\n ${void 0===e.description?"":e.description}\n
\n
\n `,this.result)}on_result(e,t,i){if(this.content.empty(),s.compile_template(this,`\n \n
\n
Search results for "${this._term}"
\n \n
\n `,this.content),e.length){s.compile_template(this,`\n \n ${e.length} Results\n
\n `,this.result);for(const t of e)this.render_suggestion(t)}else this.render_no_results();this.result.tsajax()}on_keydown(e){13!==e.keyCode&&s.clock.schedule_frame(()=>{this._term!==this.elem.val()&&this.elem.trigger("change")})}on_change(e){if(this._in_progress)return;const t=this.elem.val();this._term!==t&&(this._term=t,this._term.length{this._timeout_event=null,this.search()},this._delay)))}}class _{static initialize(e){if(!e)return;let s=e.parents("div.modal");if(!s.length)return;let i=s.data("overlay"),o=i.ref_target;t("a.addreference",e).each(function(){new p(t(this),o,i)}),t("a.removereference",e).each(function(){new m(t(this),o,i)})}constructor(e,t,s){this.elem=e,this.target=t,this.target_tag=t.get(0).tagName,this.overlay=s}single_value(){return"INPUT"==this.target_tag}multi_value(){return"SELECT"==this.target_tag}toggle_enabled(e){t("a",e.parent()).toggleClass("disabled")}reset_selected(e){let s=new Array;this.single_value()&&s.push(e.attr("value")),this.multi_value()&&t("[selected=selected]",e).each(function(){s.push(t(this).attr("value"))}),this.set_selected_on_ajax_target(e.parent(),s);let i=this.overlay,o=this;t("div.referencebrowser a",i.elem).each(function(){let e=t(this);e.attr("ajax:target")&&o.set_selected_on_ajax_target(e,s)})}set_selected_on_ajax_target(e,t){let i=s.ajax.parse_target(e.attr("ajax:target"));i.params.selected=t.join(",");let o=new Array;for(let e in i.params)o.push(e+"="+i.params[e]);e.attr("ajax:target",i.url+"?"+o.join("&"))}}class p extends _{constructor(e,t,s){super(e,t,s),e.off("click").on("click",this.add_reference.bind(this))}add_reference(e){e.preventDefault();let s=this.elem,i=this.target,o=s.attr("id");o=o.substring(4,o.length);let l=t(".reftitle",s.parent()).html();if(this.single_value()){i.attr("value",l);let e='[name="'+i.attr("name")+'.uid"]';return t(e).attr("value",o),this.set_selected_on_ajax_target(i.parent(),[o]),void this.overlay.close()}if(this.multi_value()){if(t('[value="'+o+'"]',i.parent()).length)return;let e=t("");e.val(o).html(l).attr("selected","selected"),i.append(e),i.trigger("change")}this.reset_selected(i),this.toggle_enabled(s)}}class m extends _{constructor(e,t,s){super(e,t,s),e.off("click").on("click",this.remove_reference.bind(this))}remove_reference(e){e.preventDefault();let s=this.elem,i=this.target,o=s.attr("id");if(o=o.substring(4,o.length),this.single_value()){i.attr("value","");let e='[name="'+i.attr("name")+'.uid"]';t(e).attr("value","")}if(this.multi_value()){let e='[value="'+o+'"]';if(!t(e,i.parent()).length)return;t(e,i).remove(),i.trigger("change")}this.reset_selected(i),this.toggle_enabled(s)}}class u{static initialize(e){t(".referencebrowser_trigger",e).each(function(){new u(t(this))})}constructor(e){this.wrapper=e.parent();let s=`[name="${e.data("reference-name")}"]`;this.target=t(s,this.wrapper),e.off("click").on("click",this.load_ref_browser.bind(this))}load_ref_browser(e){e.preventDefault(),s.ajax.overlay({action:"referencebrowser",title:"Referencebrowser",css:"modal-lg",target:this.wrapper.attr("ajax:target"),on_complete:this.on_complete.bind(this)}).ref_target=this.target}on_complete(e){let s=this.target;t("a.addreference",e.elem).each(function(){new p(t(this),s,e)}),t("a.removereference",e.elem).each(function(){new m(t(this),s,e)})}}function b(e,t){u.initialize(t)}function g(e,s,i){t(".referencebrowser_trigger",s).each(function(){let s=t(this),o=s.data("reference-name"),l=e.base_id.replace(/\-/g,".");s.data("reference-name",e.set_value_index(o,l,i,"."))})}t(function(){void 0!==window.yafowil_array&&(yafowil_array.on_array_event("on_add",b),yafowil_array.on_array_event("on_index",g))});class f extends s.Events{on_sidebar_left_resize(e){}on_sidebar_right_resize(e){}on_main_area_mode(e){}}const w=new f;class v extends s.Events{static initialize(e){const t=s.query_elem("#main-area",e);t&&new v(t)}constructor(e){super(),this.elem=e,new s.Property(this,"is_compact",null),new s.Property(this,"is_super_compact",null),this.set_mode=this.set_mode.bind(this),w.on("on_sidebar_left_resize",this.set_mode),w.on("on_sidebar_right_resize",this.set_mode),t(window).on("resize",this.set_mode),this.set_mode(),s.ajax.attach(this,e)}destroy(){t(window).off("resize",this.set_mode),w.off("on_sidebar_left_resize",this.set_mode),w.off("on_sidebar_right_resize",this.set_mode)}set_mode(){this.is_compact=this.elem.outerWidth()<992,this.is_super_compact=this.elem.outerWidth()<576}on_is_compact(e){e?(this.elem.removeClass("full"),this.elem.addClass("compact")):(this.elem.removeClass("compact"),this.elem.addClass("full")),w.trigger("on_main_area_mode",this)}on_is_super_compact(e){e?this.elem.addClass("super-compact"):this.elem.removeClass("super-compact"),w.trigger("on_main_area_mode",this)}}class k extends s.Events{constructor(e){super(),this.elem=e,new s.Property(this,"is_compact",null),new s.Property(this,"is_super_compact",null),new s.Property(this,"is_sidebar_collapsed",null),this.set_mode=this.set_mode.bind(this),w.on("on_main_area_mode",this.set_mode),this.on_sidebar_left_resize=this.on_sidebar_left_resize.bind(this),w.on("on_sidebar_left_resize",this.on_sidebar_left_resize),w.on("on_sidebar_right_resize",this.on_sidebar_left_resize),s.ajax.attach(this,e)}destroy(){w.off("on_main_area_mode",this.set_mode),w.off("on_sidebar_left_resize",this.on_sidebar_left_resize),w.off("on_sidebar_right_resize",this.on_sidebar_left_resize)}set_mode(e,t){this.is_compact=t.is_compact,this.is_super_compact=t.is_super_compact}on_is_compact(e){e?(this.elem.removeClass("full"),this.elem.addClass("compact")):(this.elem.removeClass("compact"),this.elem.addClass("full"))}on_is_super_compact(e){e?this.elem.addClass("super-compact"):this.elem.removeClass("super-compact")}on_sidebar_left_resize(e,t){this.is_sidebar_left_collapsed=t.collapsed}on_sidebar_right_resize(e,t){this.is_sidebar_right_collapsed=t.collapsed}on_is_sidebar_left_collapsed(e){}on_is_sidebar_right_collapsed(e){}}const z=e=>class extends e{constructor(...e){super(...e),this.elem&&s.ajax.attach(this,this.elem),this.on_window_resize=this.on_window_resize.bind(this),t(window).on("resize",this.on_window_resize)}on_window_resize(e){super.on_window_resize&&super.on_window_resize(e)}destroy(){try{super.destroy()}catch(e){console.warn(e)}finally{t(window).off("resize",this.on_window_resize)}}};class y extends s.Motion{static initialize(e){t(".scrollable-x",e).each(function(){new x(t(this))}),t(".scrollable-y",e).each(function(){new C(t(this))})}constructor(e){if(super(e),this.elem=e,this.elem.data("scrollbar"))return void console.warn("cone.app: Only one Scrollbar can be bound to each element.");this.elem.data("scrollbar",this),this.content=s.query_elem("> .scrollable-content",e),this.on_scroll=this.on_scroll.bind(this),this.on_click=this.on_click.bind(this),this.on_hover=this.on_hover.bind(this),this.on_window_resize=this.on_window_resize.bind(this),this.compile(),this.position=0,this.scroll_step=50,new s.Property(this,"disabled",!1),s.clock.schedule_frame(()=>this.render());const i=t(window).width()<=768;new s.Property(this,"is_mobile",i)}on_window_resize(e){this.is_mobile=t(window).innerWidth()<=768,this.position=this.safe_position(this.position),this.render()}get position(){return this._position||0}set position(e){this._position=this.safe_position(e),this.update(),this.trigger("on_position",this._position)}get pointer_events(){return"all"===this.elem.css("pointer-events")}set pointer_events(e){this.elem.css("pointer-events",e?"all":"none")}fade_timer(){this.scrollbar.is(":visible")||this.scrollbar.fadeIn("fast"),this.fade_out_timeout&&clearTimeout(this.fade_out_timeout),this.fade_out_timeout=setTimeout(()=>{this.scrollbar.fadeOut("slow")},700)}on_is_mobile(e){e&&this.contentsize>this.scrollsize?(this.scrollbar.stop(!0,!0).show(),this.elem.off("mouseenter mouseleave",this.on_hover)):(this.scrollbar.stop(!0,!0).hide(),this.elem.on("mouseenter mouseleave",this.on_hover))}bind(){this.pointer_events=!0,this.elem.on("mousewheel wheel",this.on_scroll),this.scrollbar.on("click",this.on_click),this.set_scope(this.thumb,t(document),this.elem)}unbind(){this.elem.off("mousewheel wheel",this.on_scroll),this.elem.off("mouseenter mouseleave",this.on_hover),this.scrollbar.off("click",this.on_click),t(this.thumb).off("mousedown",this._down_handle)}destroy(){this.fade_out_timeout&&clearTimeout(this.fade_out_timeout),this.unbind(),this.elem.removeData("scrollbar")}compile(){s.compile_template(this,'\n \n ',this.elem)}render(e){this.scrollbar.css(e,this.scrollsize),this.contentsize<=this.scrollsize?this.thumbsize=this.scrollsize:this.thumbsize=Math.pow(this.scrollsize,2)/this.contentsize,this.thumb.css(e,this.thumbsize),this.update(),this.position=this.safe_position(this.position)}safe_position(e){if("number"!=typeof e)throw new Error(`Scrollbar position must be a Number, position is: "${e}".`);if(this.contentsize<=this.scrollsize)return 0;const t=this.contentsize-this.scrollsize;return e>=t?e=t:e<=0&&(e=0),e}on_disabled(e){e?this.unbind():this.bind()}on_hover(e){e.preventDefault(),e.stopPropagation();const t=this.elem;(t.has(e.target).length>0||t.is(e.target))&&this.contentsize>this.scrollsize&&("mouseenter"===e.type?this.scrollbar.stop(!0,!0).fadeIn():"mouseleave"===e.type&&e.relatedTarget!==t.get(0)&&this.scrollbar.stop(!0,!0).fadeOut())}on_scroll(e){if(this.contentsize<=this.scrollsize)return;let t=e.originalEvent;"number"==typeof t.deltaY&&(t.deltaY>0?this.position+=this.scroll_step:t.deltaY<0&&(this.position-=this.scroll_step))}on_click(e){e.preventDefault(),this.thumb.addClass("active");let t=this.pos_from_evt(e)-this.offset-this.thumbsize/2;this.position=this.contentsize*t/this.scrollsize,this.thumb.removeClass("active")}touchstart(e){const t=e.originalEvent.touches[0];this._touch_pos=this.pos_from_evt(t),this._start_position=this.position}touchmove(e){if(this.contentsize<=this.scrollsize)return;const t=e.originalEvent.touches[0],s=this.pos_from_evt(t)-this._touch_pos;this.position=this._start_position-s,this.fade_timer()}touchend(e){delete this._touch_pos,delete this._start_position}down(e){this._mouse_pos=this.pos_from_evt(e)-this.offset,this._thumb_pos=this.position/(this.contentsize/this.scrollsize),this.elem.off("mouseenter mouseleave",this.on_hover),this.thumb.addClass("active")}move(e){let t=this.pos_from_evt(e)-this.offset,s=this._thumb_pos+t-this._mouse_pos;this.position=this.contentsize*s/this.scrollsize}up(e){delete this._mouse_pos,delete this._thumb_pos,this.elem.on("mouseenter mouseleave",this.on_hover),this.thumb.removeClass("active")}}class x extends(z(y)){get offset(){return this.elem.offset().left}get contentsize(){return this.content.outerWidth()}get scrollsize(){const e=parseFloat(this.elem.css("padding-right")),t=parseFloat(this.elem.css("padding-left"));return this.elem.outerWidth()-t-e}compile(){super.compile(),this.thumb.css("height","6px"),this.scrollbar.css("height","6px").css("width",this.scrollsize),this.thumbsize=this.scrollsize/(this.contentsize/this.scrollsize),this.thumb.css("width",this.thumbsize)}render(){super.render("width")}update(){let e=this.position/(this.contentsize/this.scrollsize);this.content.css("right",this.position+"px"),this.thumb.css("left",e+"px")}pos_from_evt(e){return e.pageX}}class C extends(z(y)){get offset(){return this.elem.offset().top}get contentsize(){return this.content.outerHeight()}get scrollsize(){const e=parseFloat(this.elem.css("padding-top")),t=parseFloat(this.elem.css("padding-bottom"));return this.elem.outerHeight()-e-t}compile(){super.compile(),this.thumb.css("width","6px"),this.scrollbar.css("width","6px").css("top","0px").css("height",this.scrollsize),this.thumbsize=this.scrollsize/(this.contentsize/this.scrollsize),this.thumb.css("height",this.thumbsize)}render(){super.render("height")}update(){let e=this.position/(this.contentsize/this.scrollsize);this.content.css("bottom",this.position+"px"),this.thumb.css("top",e+"px")}pos_from_evt(e){return e.pageY}}class j{static initialize(e){new j(e)}constructor(e){t("input.add_remove_role_for_principal",e).off("change").on("change",this.set_principal_role)}set_principal_role(e){e.preventDefault();let i,o=t(this);i=this.checked?"add_principal_role":"remove_principal_role";let l=o.parent().attr("ajax:target"),r={id:o.attr("name"),role:o.attr("value")};s.ajax.action({name:i,mode:"NONE",selector:"NONE",url:l,params:r})}}class S extends s.Events{constructor(e,i){super(i),this.elem=i;const o=this.target=i.data("target");this.parent=e,this.related_tile=t(`[data-tile="${o}"]`,this.parent.tiles_container),this.on_click=this.on_click.bind(this),this.compile(),s.ajax.attach(this,i)}compile(){this.elem.on("click",this.on_click)}on_click(e){e.preventDefault(),this.parent.activate_tile(this)}activate_tile(){this.elem.addClass("active"),this.related_tile.removeClass("d-none"),this.parent.sidebar.elem.attr("tile",this.target)}deactivate_tile(){this.elem.removeClass("active"),this.related_tile.addClass("d-none")}destroy(){this.elem.off("click",this.on_click)}}class q extends s.Events{constructor(e,s){super(s),this.sidebar=e,this.elem=s,this.mode=e.elem.data("mode")||"stacked",this.tiles=e.elem.data("tiles")??[],this.navigation=t(".sidebar-controls",this.sidebar.elem),this.tiles_container=t(".sidebar-tiles",this.elem),this.controls=[],this.compile(),"toggle"===this.mode&&this.controls.length>0&&this.activate_tile(this.controls[0])}compile(){"toggle"===this.mode&&this.tiles.length>1?t(".sidebar-control",this.navigation).each((e,s)=>{this.controls.push(new S(this,t(s)))}):this.navigation.addClass("d-none")}activate_tile(e){"stacked"!==this.mode&&(this.deactivate_all(),e.activate_tile())}deactivate_all(){for(const e of this.controls){if("stacked"===this.mode)return;e.deactivate_tile()}}}class I extends(z(s.Motion)){constructor(e){if(super(e),this.elem=e,this.min_width=e.data("min-width")||115,e.css("width",this.sidebar_width+"px"),this.moving=!1,this.trigger_event=this.trigger_event.bind(this),this.scrollbar=s.query_elem(".scrollable-y",e).data("scrollbar"),this.on_click=this.on_click.bind(this),this.collapse_elem=s.query_elem("#sidebar_collapse",e),this.collapse_elem.on("click",this.on_click),this.on_lock=this.on_lock.bind(this),this.lock_input=s.query_elem(".lock-state-input",e),this.lock_elem=s.query_elem(".lock-state-btn",e),this.lock_elem.on("click",this.on_lock),this.resizer_elem=s.query_elem("#sidebar_resizer",e),this.set_scope(this.resizer_elem,t(document)),this.responsive_toggle=this.responsive_toggle.bind(this),this.responsive_toggle(),void 0!==this.locked&&null!==this.locked){if(this.lock_input.prop("checked",!0).trigger("change"),this.disable_lock)return;this.locked.collapsed?this.collapse():this.expand()}this.disable_or_enable_interaction=this.disable_or_enable_interaction.bind(this),this.disable_or_enable_interaction(),t("html, body").css("overscroll-behavior","auto");const i=t(".sidebar-content",e);this.sidebar_content=new q(this,i),s.ajax.attach(this,e)}get collapsed(){return this.elem.outerWidth()<=0}on_window_resize(e){this.responsive_toggle()}on_lock(e){!this.lock_input.get(0).checked?this.set_state():(this.unset_state(),this.elem.removeClass("collapsed"),this.elem.removeClass("expanded")),this.collapsed?this.elem.addClass("collapsed"):this.elem.addClass("expanded"),this.disable_or_enable_interaction()}disable_or_enable_interaction(){this.locked&&!this.disable_lock?(t(".collapse_btn",this.collapse_elem).addClass("disabled"),this.resizer_elem.addClass("d-none")):(t(".collapse_btn",this.collapse_elem).removeClass("disabled"),this.resizer_elem.removeClass("d-none"))}responsive_toggle(){this.locked||(this.elem.removeClass("collapsed"),this.elem.removeClass("expanded")),this.collapsed?(this.elem.removeClass("responsive-expanded"),this.elem.addClass("responsive-collapsed")):(this.elem.addClass("responsive-expanded"),this.elem.removeClass("responsive-collapsed")),this.collapsed!==this.responsive_collapsed&&(this.responsive_collapsed=this.collapsed,this.trigger_event()),t(window).width()<768?(this.disable_lock=!0,this.locked&&!this.locked.collapsed&&this.collapse()):(this.disable_lock=!1,this.locked&&!this.locked.collapsed&&this.collapsed?this.expand():this.locked&&this.locked.collapsed&&!this.collapsed&&this.collapse()),this.locked&&this.disable_or_enable_interaction()}collapse(){t("html, body").css("overscroll-behavior","auto"),this.elem.removeClass("expanded").addClass("collapsed"),this.trigger_event()}expand(){t("html, body").css("overscroll-behavior","none"),this.elem.removeClass("collapsed").addClass("expanded"),this.trigger_event()}on_click(e){this.collapsed?this.expand():this.collapse(),void 0===this.locked||null===this.locked||this.disable_lock||this.set_state()}move(e){this.locked||(this.moving=!0,this.scrollbar.pointer_events=!1,this.sidebar_width=this.get_width_from_event(e),this.elem.css("width",this.sidebar_width),this.trigger_event())}up(){this.scrollbar.pointer_events=!0,this.trigger_event(),this.moving=!1}on_sibling_sidebar_resize(e,s){const i=t(window).width()-this.elem.outerWidth()-300,o=t(window).width()<768,l=this.locked&&!this.locked.collapsed,r=s.elem.outerWidth()>=i;!s.collapsed&&o?(this.collapse(),this.elem.addClass("d-none")):s.collapsed||!r||s.moving&&this.locked?s.collapsed&&l&&this.collapsed&&!o?(this.expand(),this.elem.removeClass("d-none")):s.collapsed&&this.elem.removeClass("d-none"):this.collapse()}destroy(){this.reset_state(),t(window).off("resize",this.on_window_resize),this.collapse_elem.off(),this.scrollbar=null,this.elem.off(),this.lock_elem.off("click",this.on_lock)}}class E extends I{static initialize(e){const t=s.query_elem("#sidebar_left",e);t&&new E(t)}constructor(e){super(e),this.on_sidebar_right_resize=this.on_sidebar_right_resize.bind(this),w.on("on_sidebar_right_resize",this.on_sidebar_right_resize)}get locked(){return JSON.parse(localStorage.getItem("cone.app.sidebar_left.locked"))}get sidebar_width(){return localStorage.getItem("cone-app-sidebar-left-width")||300}set sidebar_width(e){localStorage.setItem("cone-app-sidebar-left-width",e)}trigger_event(){w.trigger("on_sidebar_left_resize",this)}get_width_from_event(e){let s=e.pageX,i=0;t("#sidebar_right").length>0&&(i=t("#sidebar_right").outerWidth());const o=t(window).width()-i-300;return s=Math.max(this.min_width,Math.min(s,o)),parseInt(s)}on_sidebar_right_resize(e,t){this.on_sibling_sidebar_resize(e,t)}set_state(){localStorage.setItem("cone.app.sidebar_left.locked",JSON.stringify({collapsed:this.collapsed}))}unset_state(){localStorage.removeItem("cone.app.sidebar_left.locked")}destroy(){super.destroy(),w.off("on_sidebar_right_resize",this.on_sidebar_right_resize)}}class N extends I{static initialize(e){const t=s.query_elem("#sidebar_right",e);t&&new N(t)}constructor(e){super(e),this.on_sidebar_left_resize=this.on_sidebar_left_resize.bind(this),w.on("on_sidebar_left_resize",this.on_sidebar_left_resize)}get locked(){return JSON.parse(localStorage.getItem("cone.app.sidebar_right.locked"))}get sidebar_width(){return localStorage.getItem("cone-app-sidebar-right-width")||300}set sidebar_width(e){localStorage.setItem("cone-app-sidebar-right-width",e)}trigger_event(){w.trigger("on_sidebar_right_resize",this)}get_width_from_event(e){let s=t(window).outerWidth()-e.pageX,i=0;t("#sidebar_left").length>0&&(i=t("#sidebar_left").outerWidth());const o=t(window).width()-i-300;return s=Math.max(this.min_width,Math.min(s,o)),parseInt(s)}on_sidebar_left_resize(e,t){this.on_sibling_sidebar_resize(e,t)}set_state(){localStorage.setItem("cone.app.sidebar_right.locked",JSON.stringify({collapsed:this.collapsed}))}unset_state(){localStorage.removeItem("cone.app.sidebar_right.locked")}destroy(){super.destroy(),w.off("on_sidebar_left_resize",this.on_sidebar_left_resize)}}class D{static initialize(e){o.initialize(e,".table_length select"),l.initialize(e,".table_filter input")}}class T{static initialize(e){t(".translation-nav",e).each(function(){new T(t(this))})}constructor(e){t("div.invalid-feedback",e.parent()).show(),this.nav_elem=e,this.fields_elem=e.next(),this.show_lang_handle=this.show_lang_handle.bind(this),t("li > a",e).on("click",this.show_lang_handle),t("li.error",e).length?t("li.error:first > a",e).trigger("click"):t("li > a.active",e).trigger("click"),this.fields_elem.show()}show_lang_handle(e){e.preventDefault(),t("li > a",this.nav_elem).removeClass("active"),this.fields_elem.children().hide();let s=t(e.currentTarget);s.addClass("active"),t(s.attr("href"),this.fields_elem).show()}}class M extends k{static initialize(e){const t=s.query_elem("#mainmenu",e);t&&new M(t)}constructor(e){super(e),this.elem=e,this.scrollbar=e.data("scrollbar"),this.elems=t(".nav-link.dropdown-toggle",e),this.open_dropdown=null,this.on_show_dropdown_desktop=this.on_show_dropdown_desktop.bind(this),this.on_hide_dropdown_desktop=this.on_hide_dropdown_desktop.bind(this),this.hide_dropdowns=this.hide_dropdowns.bind(this),this.scrollbar.on("on_position",this.hide_dropdowns)}get height(){return this.elem.outerHeight(!0)}on_sidebar_left_resize(e,t){super.on_sidebar_left_resize(e,t),requestAnimationFrame(()=>{this.scrollbar.render()})}on_is_compact(e){this.hide_dropdowns(),e?(this.scrollbar.off("on_position",this.hide_dropdowns),this.bind_dropdowns_mobile()):(this.bind_dropdowns_desktop(),this.scrollbar.on("on_position",this.hide_dropdowns))}on_show_dropdown_desktop(e){const s=e.target;this.open_dropdown=s;t(s).siblings("ul.dropdown-menu").css({top:this.height-1+"px",left:`${t(s).offset().left}px`})}on_hide_dropdown_desktop(e){const t=e.target;this.open_dropdown===t&&(this.open_dropdown=null)}bind_dropdowns_desktop(){this.elem.on("shown.bs.dropdown",".nav-link.dropdown-toggle",this.on_show_dropdown_desktop),this.elem.on("hidden.bs.dropdown",".nav-link.dropdown-toggle",this.on_hide_dropdown_desktop)}bind_dropdowns_mobile(){this.elem.off("shown.bs.dropdown",".nav-link.dropdown-toggle",this.on_show_dropdown_desktop),this.elem.off("hidden.bs.dropdown",".nav-link.dropdown-toggle",this.on_hide_dropdown_desktop)}hide_dropdowns(){this.elems.each((e,s)=>{t(s).dropdown("hide")})}destroy(){super.destroy(),this.elem.off("shown.bs.dropdown",".nav-link.dropdown-toggle",this.on_show_dropdown_desktop),this.elem.off("hidden.bs.dropdown",".nav-link.dropdown-toggle",this.on_hide_dropdown_desktop),this.scrollbar.off("on_position",this.hide_dropdowns),this.scrollbar.destroy()}}class O extends k{static initialize(e){const t=s.query_elem("#header-main",e);t&&new O(t)}constructor(e){super(e),this.elem=e,this.header_content=s.query_elem("#header-content",e),this.navbar_content_wrapper=s.query_elem("#navbar-content-wrapper",e),this.navbar_content=s.query_elem("#navbar-content",e),this.navbar_toggler=s.query_elem("#navbar-toggler",this.elem),this.personal_tools=s.query_elem("#personaltools",e),this.mainmenu=s.query_elem("#mainmenu",e),this.mainmenu_elems=t(".nav-link.dropdown-toggle",this.mainmenu),this.render_mobile_scrollbar=this.render_mobile_scrollbar.bind(this),this.mainmenu_elems.each((e,s)=>{t(s).on("shown.bs.dropdown",this.render_mobile_scrollbar),t(s).on("hidden.bs.dropdown",this.render_mobile_scrollbar)}),this.set_mobile_menu_open=this.set_mobile_menu_open.bind(this),this.set_mobile_menu_closed=this.set_mobile_menu_closed.bind(this),this.bind()}destroy(){super.destroy(),this.mobile_scrollbar&&(this.mobile_scrollbar.destroy(),this.mobile_scrollbar=null),this.mainmenu_elems.each((e,s)=>{t(s).off("shown.bs.dropdown",this.render_mobile_scrollbar),t(s).off("hidden.bs.dropdown",this.render_mobile_scrollbar)});const e=this.navbar_content_wrapper;e.off("show.bs.collapse shown.bs.collapse",this.set_mobile_menu_open),e.off("hide.bs.collapse hidden.bs.collapse",this.set_mobile_menu_closed)}render_mobile_scrollbar(){this.is_compact&&this.mobile_scrollbar&&this.mobile_scrollbar.render()}bind(){const e=this.navbar_content_wrapper;e.on("show.bs.collapse shown.bs.collapse",this.set_mobile_menu_open),e.on("hidden.bs.collapse",this.set_mobile_menu_closed)}set_mobile_menu_open(){this.elem.addClass("mobile-menu-open")}set_mobile_menu_closed(){this.elem.removeClass("mobile-menu-open")}on_is_compact(e){this.mobile_scrollbar&&(this.navbar_content.removeClass("scrollable-content"),this.mobile_scrollbar.destroy(),this.mobile_scrollbar=null),e?(this.elem.removeClass("full").removeClass("navbar-expand"),this.elem.addClass("compact"),this.navbar_content.addClass("scrollable-content"),this.mobile_scrollbar=new C(this.navbar_content_wrapper),this.navbar_content_wrapper.on("shown.bs.collapse",()=>{t("html, body").css("overscroll-behavior","none"),this.mobile_scrollbar.render()}),this.navbar_content_wrapper.on("hide.bs.collapse",()=>{t("html, body").css("overscroll-behavior","auto"),this.mobile_scrollbar.scrollbar.hide()})):(this.elem.removeClass("compact"),this.elem.addClass("full").addClass("navbar-expand"))}on_is_super_compact(e){const i=null!==s.query_elem("#personaltools",this.navbar_content);e?i||this.personal_tools.detach().appendTo(this.navbar_content):(i&&this.personal_tools.detach().prependTo(this.header_content),t(".dropdown-menu.show").removeClass("show"))}}class ${static initialize(e){const t=s.query_elem("#navtree",e);t&&new $(t)}constructor(e){this.elem=e,this.dropdown_elem=t("#navigation-collapse",e),this.dropdown_elem.hasClass("no-collapse")||(localStorage.getItem("cone.app.navtree.open")&&this.dropdown_elem.addClass("show"),this.set_menu_open=this.set_menu_open.bind(this),this.set_menu_closed=this.set_menu_closed.bind(this),this.dropdown_elem.on("shown.bs.collapse",this.set_menu_open),this.dropdown_elem.on("hidden.bs.collapse",this.set_menu_closed),s.ajax.attach(this,e))}set_menu_open(e){localStorage.setItem("cone.app.navtree.open","true")}set_menu_closed(e){localStorage.removeItem("cone.app.navtree.open")}destroy(){this.dropdown_elem.off(),this.elem.off()}}class A{constructor(e){this.options=e,this.selected=[],this.select_direction=0,this.firstclick=!0}reset(){this.selected=[]}add(e){this.remove(e),this.selected.push(e)}remove(e){let s=t.grep(this.selected,function(t,s){return t!==e});this.selected=s}select_no_key(e,t){e.children().removeClass("selected"),t.addClass("selected"),this.reset(),this.add(t.get(0))}select_ctrl_down(e){e.toggleClass("selected"),e.hasClass("selected")?this.add(e.get(0)):this.remove(e.get(0))}get_nearest(e,s){let i,o,l=e.children(".selected"),r=-1;return t(l).each(function(){o=t(this),i=o.index(),-1==r?r=i:s>i?this.select_direction>0?ir&&(r=i):s
-