From 544dc69c76ad58d22585af4d147d4630f579bc2a Mon Sep 17 00:00:00 2001 From: Lena Daxenbichler Date: Tue, 6 Aug 2024 13:34:56 +0200 Subject: [PATCH] other approach independent of viewport width for mainmenu collapsing --- js/src/bundle.js | 3 + js/src/header.js | 36 ++++++ js/src/mainmenu.js | 21 ++++ scss/styles.scss | 109 +++++++----------- src/cone/app/browser/static/cone/cone.app.css | 99 ++++++---------- src/cone/app/browser/static/cone/cone.app.js | 46 ++++++++ .../app/browser/static/cone/cone.app.min.css | 2 +- .../app/browser/static/cone/cone.app.min.js | 2 +- src/cone/app/browser/templates/layout.pt | 9 +- 9 files changed, 192 insertions(+), 135 deletions(-) create mode 100644 js/src/header.js diff --git a/js/src/bundle.js b/js/src/bundle.js index 5b6eb9d4..04075e93 100644 --- a/js/src/bundle.js +++ b/js/src/bundle.js @@ -21,6 +21,7 @@ import {Sidebar} from './sidebar.js'; import {TableToolbar} from './tabletoolbar.js'; import {Translation} from './translation.js'; import {MainMenu} from './mainmenu.js'; +import {Header} from './header.js'; export * from './batcheditems.js'; export * from './colormode.js'; @@ -38,6 +39,7 @@ export * from './tabletoolbar.js'; export * from './translation.js'; export * from './utils.js'; export * from './mainmenu.js'; +export * from './header.js'; $(function() { new KeyBinder(); @@ -57,4 +59,5 @@ $(function() { ts.ajax.register(PersonalTools.initialize, true); ts.ajax.register(LiveSearch.initialize, true); ts.ajax.register(MainMenu.initialize, true); + ts.ajax.register(Header.initialize, true); }); diff --git a/js/src/header.js b/js/src/header.js new file mode 100644 index 00000000..51b8ced2 --- /dev/null +++ b/js/src/header.js @@ -0,0 +1,36 @@ +import $ from 'jquery'; +import ts from 'treibstoff'; +import {global_events} from './globals.js'; + +export class Header extends ts.Events { + + static initialize(context) { + const elem = ts.query_elem('#header-main', context); + if (!elem) { + return; + } + new Header(elem); + } + + constructor(elem) { + super(); + this.elem = elem; + this.logo_placeholder = ts.query_elem('#header-logo-placeholder', elem); + + this.toggle_placeholder = this.toggle_placeholder.bind(this); + global_events.on('on_sidebar_resize', this.toggle_placeholder); + $(window).on('resize', this.toggle_placeholder); + + ts.ajax.attach(this, elem); + + this.toggle_placeholder(); + } + + toggle_placeholder() { + if ($(window).width() > this.elem.outerWidth()) { + this.logo_placeholder.hide(); + } else { + this.logo_placeholder.show(); + } + } +} diff --git a/js/src/mainmenu.js b/js/src/mainmenu.js index 3c4e9c87..f882a857 100644 --- a/js/src/mainmenu.js +++ b/js/src/mainmenu.js @@ -1,5 +1,6 @@ import $ from 'jquery'; import ts from 'treibstoff'; +import {global_events} from './globals.js'; export class MainMenu extends ts.Events { @@ -46,6 +47,13 @@ export class MainMenu extends ts.Events { this.scrollbar.on('on_position', this.hide_dropdowns); ts.ajax.attach(this, elem); + + /// + this.navbar_toggler = ts.query_elem('.navbar-toggler[data-bs-target="#navbar-content-wrapper"]', $('body')); + this.navbar_content_wrapper = ts.query_elem('#navbar-content-wrapper', $('body')); + this.handle = this.handle.bind(this); + global_events.on('on_sidebar_resize', this.handle); + $(window).on('resize', this.handle); } hide_dropdowns() { @@ -53,4 +61,17 @@ export class MainMenu extends ts.Events { $(el).dropdown('hide'); }); } + + handle() { + const taken = $('#personaltools').outerWidth() + $('#header-logo').outerWidth(); + if ($('#header-main').outerWidth() < taken + 500) { + if ($('#header-main').hasClass('navbar-expand')) { + $('#header-main').removeClass('navbar-expand'); + } + } else { + if (!$('#header-main').hasClass('navbar-expand')) { + $('#header-main').addClass('navbar-expand'); + } + } + } } diff --git a/scss/styles.scss b/scss/styles.scss index 9d308126..f942b166 100644 --- a/scss/styles.scss +++ b/scss/styles.scss @@ -147,17 +147,57 @@ body { /* header */ #header-logo { z-index: 4; - +} +#header-logo, #header-logo-placeholder { > span { font-size: 1.5rem!important; } } +#header-logo-placeholder { + visibility: hidden; +} #header-main { height: 50px; + &.navbar-expand { + #header-content { + flex-direction: row-reverse; + } + #navbar-content-wrapper { + box-shadow: none!important; + background: none; + } + } + &:not(.navbar-expand) { + #header-content { + flex-direction: row; + } + + #navbar-content { + flex-direction: column; + } + #livesearch { + order: 0; + width: 100%; + padding-left: 55px !important; + padding-right: 15px !important; + } + #mainmenu { + order: 1; + margin-left: 10px!important; + margin-top: 20px; + margin-bottom: 20px; + + ul > li { + // XXX + display: block!important; + } + } + } + #navbar-content-wrapper { min-width: 0; - z-index: 3000; + z-index: 1; } #navbar-content { min-width: 0; @@ -175,71 +215,6 @@ body { color: $primary; } } - @include media-breakpoint-up(sm) { - #personaltools .dropdown-toggle { - &.show { - background-color: $dropdown-border-color; - } - &::after { - margin-right: 10px; - margin-left: 0; - } - } - } - - @include media-breakpoint-down(lg) { - #navbar-content { - flex-direction: column; - } - #mainmenu { - order: 2; - } - #livesearch { - order: 1; - width: 100%; - padding-left: 40px !important; - } - } - @include media-breakpoint-down(sm) { - #personaltools { - flex-direction: row-reverse; - } - #personaltools > div { - padding-left: 15px !important; - padding-right: 5px !important; - } - #personaltools-dropdown { - order: 1; - } - #language-dropdown { - order: 2; - } - #colortoggler { - order: 3; - } - } - @include media-breakpoint-up(lg) { - #navbar-content-wrapper { - box-shadow: none !important; - } - #navbar-content-wrapper, #navbar-content, #mainmenu { - height: 100%; - } - #personaltools-dropdown { - order: 3; - } - #language-dropdown { - order: 2; - } - #colortoggler { - order: 1; - } - } - @include media-breakpoint-between(lg, xxl) { - #navbar-content-wrapper { - margin-left: 200px; - } - } } #personaltools-dropdown { .dropdown-item a { diff --git a/src/cone/app/browser/static/cone/cone.app.css b/src/cone/app/browser/static/cone/cone.app.css index fc04c237..04972bfa 100644 --- a/src/cone/app/browser/static/cone/cone.app.css +++ b/src/cone/app/browser/static/cone/cone.app.css @@ -183,16 +183,49 @@ body { #header-logo { z-index: 4; } -#header-logo > span { + +#header-logo > span, #header-logo-placeholder > span { font-size: 1.5rem !important; } +#header-logo-placeholder { + visibility: hidden; +} + #header-main { height: 50px; } +#header-main.navbar-expand #header-content { + flex-direction: row-reverse; +} +#header-main.navbar-expand #navbar-content-wrapper { + box-shadow: none !important; + background: none; +} +#header-main:not(.navbar-expand) #header-content { + flex-direction: row; +} +#header-main:not(.navbar-expand) #navbar-content { + flex-direction: column; +} +#header-main:not(.navbar-expand) #livesearch { + order: 0; + width: 100%; + padding-left: 55px !important; + padding-right: 15px !important; +} +#header-main:not(.navbar-expand) #mainmenu { + order: 1; + margin-left: 10px !important; + margin-top: 20px; + margin-bottom: 20px; +} +#header-main:not(.navbar-expand) #mainmenu ul > li { + display: block !important; +} #header-main #navbar-content-wrapper { min-width: 0; - z-index: 3000; + z-index: 1; } #header-main #navbar-content { min-width: 0; @@ -208,68 +241,6 @@ body { #header-main #mainmenu .nav-item.active .nav-link { color: #4e7bba; } -@media (min-width: 576px) { - #header-main #personaltools .dropdown-toggle.show { - background-color: var(--bs-border-color-translucent); - } - #header-main #personaltools .dropdown-toggle::after { - margin-right: 10px; - margin-left: 0; - } -} -@media (max-width: 991.98px) { - #header-main #navbar-content { - flex-direction: column; - } - #header-main #mainmenu { - order: 2; - } - #header-main #livesearch { - order: 1; - width: 100%; - padding-left: 40px !important; - } -} -@media (max-width: 575.98px) { - #header-main #personaltools { - flex-direction: row-reverse; - } - #header-main #personaltools > div { - padding-left: 15px !important; - padding-right: 5px !important; - } - #header-main #personaltools-dropdown { - order: 1; - } - #header-main #language-dropdown { - order: 2; - } - #header-main #colortoggler { - order: 3; - } -} -@media (min-width: 992px) { - #header-main #navbar-content-wrapper { - box-shadow: none !important; - } - #header-main #navbar-content-wrapper, #header-main #navbar-content, #header-main #mainmenu { - height: 100%; - } - #header-main #personaltools-dropdown { - order: 3; - } - #header-main #language-dropdown { - order: 2; - } - #header-main #colortoggler { - order: 1; - } -} -@media (min-width: 992px) and (max-width: 1399.98px) { - #header-main #navbar-content-wrapper { - margin-left: 200px; - } -} #personaltools-dropdown .dropdown-item a { text-decoration: none; diff --git a/src/cone/app/browser/static/cone/cone.app.js b/src/cone/app/browser/static/cone/cone.app.js index 938e5b7f..0a24652e 100644 --- a/src/cone/app/browser/static/cone/cone.app.js +++ b/src/cone/app/browser/static/cone/cone.app.js @@ -1081,12 +1081,56 @@ var cone = (function (exports, $, ts) { this.hide_dropdowns = this.hide_dropdowns.bind(this); this.scrollbar.on('on_position', this.hide_dropdowns); ts.ajax.attach(this, elem); + this.navbar_toggler = ts.query_elem('.navbar-toggler[data-bs-target="#navbar-content-wrapper"]', $('body')); + this.navbar_content_wrapper = ts.query_elem('#navbar-content-wrapper', $('body')); + this.handle = this.handle.bind(this); + global_events.on('on_sidebar_resize', this.handle); + $(window).on('resize', this.handle); } hide_dropdowns() { this.elems.each((i, el) => { $(el).dropdown('hide'); }); } + handle() { + const taken = $('#personaltools').outerWidth() + $('#header-logo').outerWidth(); + if ($('#header-main').outerWidth() < taken + 500) { + if ($('#header-main').hasClass('navbar-expand')) { + $('#header-main').removeClass('navbar-expand'); + } + } else { + if (!$('#header-main').hasClass('navbar-expand')) { + $('#header-main').addClass('navbar-expand'); + } + } + } + } + + class Header extends ts.Events { + static initialize(context) { + const elem = ts.query_elem('#header-main', context); + if (!elem) { + return; + } + new Header(elem); + } + constructor(elem) { + super(); + this.elem = elem; + this.logo_placeholder = ts.query_elem('#header-logo-placeholder', elem); + this.toggle_placeholder = this.toggle_placeholder.bind(this); + global_events.on('on_sidebar_resize', this.toggle_placeholder); + $(window).on('resize', this.toggle_placeholder); + ts.ajax.attach(this, elem); + this.toggle_placeholder(); + } + toggle_placeholder() { + if ($(window).width() > this.elem.outerWidth()) { + this.logo_placeholder.hide(); + } else { + this.logo_placeholder.show(); + } + } } class Selectable { @@ -1237,6 +1281,7 @@ var cone = (function (exports, $, ts) { ts.ajax.register(PersonalTools.initialize, true); ts.ajax.register(LiveSearch.initialize, true); ts.ajax.register(MainMenu.initialize, true); + ts.ajax.register(Header.initialize, true); }); exports.AddReferenceHandle = AddReferenceHandle; @@ -1247,6 +1292,7 @@ var cone = (function (exports, $, ts) { exports.ColorToggler = ColorToggler; exports.CopySupport = CopySupport; exports.GlobalEvents = GlobalEvents; + exports.Header = Header; exports.KeyBinder = KeyBinder; exports.LiveSearch = LiveSearch; exports.MainMenu = MainMenu; 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 71bc0149..81c6dab9 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 @@ -[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=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}:root{--sidebar-width: 300px;--navbar-height: 50px}html{height:100%;width:100%}body{height:100%}#sidebar_left{height:100%;max-height:100%;user-select:none}#sidebar_left .scrollable-y{margin-top:34px}#sidebar_left ul.list-group,#sidebar_left ul.list-group li{background-color:inherit}#sidebar_left #navtree{max-width:100%}#sidebar_left #navtree .nav-link{z-index:2000;white-space:nowrap}#sidebar_left #navtree .nav-link.active{background-color:rgba(0,0,0,0);font-weight:bold}#sidebar_left #navtree .nav-link i.bi-chevron-right{vertical-align:text-bottom}#sidebar_left #navtree .nav-link span{display:inline-block;width:calc(100% - 40px);text-overflow:ellipsis;overflow-x:hidden;vertical-align:text-bottom}#sidebar_left #sidebar_resize{position:relative;left:100%;width:0;height:0}#sidebar_left #sidebar_resize #sidebar_resizer{position:absolute;z-index:3;height:100vh;width:20px;transform:translateX(-50%);cursor:col-resize}#sidebar_left #sidebar_collapse{position:relative;left:100%;top:100%;width:0;height:0}#sidebar_left #sidebar_collapse .collapse_btn{position:absolute;bottom:0px;border-radius:100%;z-index:4}#sidebar_left.collapsed{width:0px !important;min-width:0 !important}#sidebar_left.collapsed #sidebar_resize{display:none}#sidebar_left.collapsed #sidebar_collapse .collapse_btn .bi-chevron-left{display:none}#sidebar_left.expanded #sidebar_collapse .collapse_btn .bi-chevron-right{display:none}@media(min-width: 1400px){#sidebar_left:not(.collapsed) #sidebar_collapse .collapse_btn{transform:translateX(-20px)}#sidebar_left:not(.collapsed) #sidebar_collapse .collapse_btn .bi-chevron-right{display:none}}@media(max-width: 1399.98px){#sidebar_left:not(.expanded){width:0 !important;min-width:0 !important}#sidebar_left:not(.expanded) #sidebar_resize{display:none}#sidebar_left:not(.expanded) #sidebar_collapse .collapse_btn .bi-chevron-left{display:none}}@media(min-width: 768px)and (max-width: 1399.98px){#sidebar_left.expanded #sidebar_collapse .collapse_btn{transform:translateX(-20px)}}@media(max-width: 767.98px){#sidebar_left #sidebar_resize{display:none}#sidebar_left.expanded{width:100% !important;z-index:3}#sidebar_left.expanded #sidebar_collapse{left:calc(100% - 50px)}}#header-logo{z-index:4}#header-logo>span{font-size:1.5rem !important}#header-main{height:50px}#header-main #navbar-content-wrapper{min-width:0;z-index:3000}#header-main #navbar-content{min-width:0}#header-main #colortoggle-switch{width:2rem;height:1rem}#header-main #mainmenu>ul{padding-left:8px;white-space:nowrap}#header-main #mainmenu .nav-item.active .nav-link{color:#4e7bba}@media(min-width: 576px){#header-main #personaltools .dropdown-toggle.show{background-color:var(--bs-border-color-translucent)}#header-main #personaltools .dropdown-toggle::after{margin-right:10px;margin-left:0}}@media(max-width: 991.98px){#header-main #navbar-content{flex-direction:column}#header-main #mainmenu{order:2}#header-main #livesearch{order:1;width:100%;padding-left:40px !important}}@media(max-width: 575.98px){#header-main #personaltools{flex-direction:row-reverse}#header-main #personaltools>div{padding-left:15px !important;padding-right:5px !important}#header-main #personaltools-dropdown{order:1}#header-main #language-dropdown{order:2}#header-main #colortoggler{order:3}}@media(min-width: 992px){#header-main #navbar-content-wrapper{box-shadow:none !important}#header-main #navbar-content-wrapper,#header-main #navbar-content,#header-main #mainmenu{height:100%}#header-main #personaltools-dropdown{order:3}#header-main #language-dropdown{order:2}#header-main #colortoggler{order:1}}@media(min-width: 992px)and (max-width: 1399.98px){#header-main #navbar-content-wrapper{margin-left:200px}}#personaltools-dropdown .dropdown-item a{text-decoration:none;color:var(--bs-secondary-color)}#content{height:calc(100% - 40px)}#main-area{width:0 !important}.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:#4e7bba}.scrollbar-top .scrollbar{top:0}.scrollbar-bottom .scrollbar{bottom:0}.scrollbar-left .scrollbar{left:0}.scrollbar-right .scrollbar{right:0}tr.selectable td{user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}@media(min-width: 1400px){#header-logo{color:#fff}}.table_length,.table_filter{width:unset}#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}#form-loginform #input-loginform-login{margin-top:1.5rem;width:200px} +[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=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}:root{--sidebar-width: 300px;--navbar-height: 50px}html{height:100%;width:100%}body{height:100%}#sidebar_left{height:100%;max-height:100%;user-select:none}#sidebar_left .scrollable-y{margin-top:34px}#sidebar_left ul.list-group,#sidebar_left ul.list-group li{background-color:inherit}#sidebar_left #navtree{max-width:100%}#sidebar_left #navtree .nav-link{z-index:2000;white-space:nowrap}#sidebar_left #navtree .nav-link.active{background-color:rgba(0,0,0,0);font-weight:bold}#sidebar_left #navtree .nav-link i.bi-chevron-right{vertical-align:text-bottom}#sidebar_left #navtree .nav-link span{display:inline-block;width:calc(100% - 40px);text-overflow:ellipsis;overflow-x:hidden;vertical-align:text-bottom}#sidebar_left #sidebar_resize{position:relative;left:100%;width:0;height:0}#sidebar_left #sidebar_resize #sidebar_resizer{position:absolute;z-index:3;height:100vh;width:20px;transform:translateX(-50%);cursor:col-resize}#sidebar_left #sidebar_collapse{position:relative;left:100%;top:100%;width:0;height:0}#sidebar_left #sidebar_collapse .collapse_btn{position:absolute;bottom:0px;border-radius:100%;z-index:4}#sidebar_left.collapsed{width:0px !important;min-width:0 !important}#sidebar_left.collapsed #sidebar_resize{display:none}#sidebar_left.collapsed #sidebar_collapse .collapse_btn .bi-chevron-left{display:none}#sidebar_left.expanded #sidebar_collapse .collapse_btn .bi-chevron-right{display:none}@media(min-width: 1400px){#sidebar_left:not(.collapsed) #sidebar_collapse .collapse_btn{transform:translateX(-20px)}#sidebar_left:not(.collapsed) #sidebar_collapse .collapse_btn .bi-chevron-right{display:none}}@media(max-width: 1399.98px){#sidebar_left:not(.expanded){width:0 !important;min-width:0 !important}#sidebar_left:not(.expanded) #sidebar_resize{display:none}#sidebar_left:not(.expanded) #sidebar_collapse .collapse_btn .bi-chevron-left{display:none}}@media(min-width: 768px)and (max-width: 1399.98px){#sidebar_left.expanded #sidebar_collapse .collapse_btn{transform:translateX(-20px)}}@media(max-width: 767.98px){#sidebar_left #sidebar_resize{display:none}#sidebar_left.expanded{width:100% !important;z-index:3}#sidebar_left.expanded #sidebar_collapse{left:calc(100% - 50px)}}#header-logo{z-index:4}#header-logo>span,#header-logo-placeholder>span{font-size:1.5rem !important}#header-logo-placeholder{visibility:hidden}#header-main{height:50px}#header-main.navbar-expand #header-content{flex-direction:row-reverse}#header-main.navbar-expand #navbar-content-wrapper{box-shadow:none !important;background:none}#header-main:not(.navbar-expand) #header-content{flex-direction:row}#header-main:not(.navbar-expand) #navbar-content{flex-direction:column}#header-main:not(.navbar-expand) #livesearch{order:0;width:100%;padding-left:55px !important;padding-right:15px !important}#header-main:not(.navbar-expand) #mainmenu{order:1;margin-left:10px !important;margin-top:20px;margin-bottom:20px}#header-main:not(.navbar-expand) #mainmenu ul>li{display:block !important}#header-main #navbar-content-wrapper{min-width:0;z-index:1}#header-main #navbar-content{min-width:0}#header-main #colortoggle-switch{width:2rem;height:1rem}#header-main #mainmenu>ul{padding-left:8px;white-space:nowrap}#header-main #mainmenu .nav-item.active .nav-link{color:#4e7bba}#personaltools-dropdown .dropdown-item a{text-decoration:none;color:var(--bs-secondary-color)}#content{height:calc(100% - 40px)}#main-area{width:0 !important}.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:#4e7bba}.scrollbar-top .scrollbar{top:0}.scrollbar-bottom .scrollbar{bottom:0}.scrollbar-left .scrollbar{left:0}.scrollbar-right .scrollbar{right:0}tr.selectable td{user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}@media(min-width: 1400px){#header-logo{color:#fff}}.table_length,.table_filter{width:unset}#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}#form-loginform #input-loginform-login{margin-top:1.5rem;width:200px} 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 2ea4448d..99854267 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")),r=t.attr("ajax:event");if(i.params[this.name]=e,t.attr("ajax:path")){let o=t.attr("ajax:path-event");o||(o=r),s.ajax.path({path:i.path+i.query+"&"+this.name+"="+e,event:o,target:i})}let o=r.split(":");s.ajax.trigger({name:o[0],selector:o[1],target:i})}}class r extends i{static initialize(e,s=".batched_items_slice_size select"){t(s,e).each((function(){new r(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 o extends i{static initialize(e,s=".batched_items_filter input",i="term"){t(s,e).each((function(){new o(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 a{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(){this.bind(),a.set_theme(a.preferred_theme)}bind(){a.watch((()=>{const e=this.stored_theme;"light"===e&&"dark"===e||a.set_theme(a.preferred_theme)}))}}class n extends s.ChangeListener{static initialize(e){const t=s.query_elem("#colortoggle-switch",e);t&&new n(t)}constructor(e){super({elem:e}),this.update(),a.watch((()=>{this.update()}))}update(){const e=a.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";a.set_theme(e),a.stored_theme=e}}class l{static initialize(e){new l(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),r=new Array;i.each((function(){r.push(t(this).attr("ajax:target"))}));let o=r.join("::");s.create_cookie(e,o),o.length?t(this.paste_action).removeClass("disabled"):t(this.paste_action).addClass("disabled")}read_selected_from_cookie(e,i){let r=s.read_cookie(e);if(!r)return;let o,a,n=r.split("::"),l=this;t("table tr.selectable",this.context).each((function(){o=t(this),a=o.attr("ajax:target");for(let e in n)if(n[e]==a){o.addClass("selected"),i&&o.addClass(i),l.selectable.add(o.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 r=s.ajax.parse_target(i.attr("ajax:target"));s.ajax.action({name:"paste",mode:"NONE",selector:"NONE",url:r.url,params:r.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 \n ${e.value}\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 _ extends s.Events{on_sidebar_resize(e){}}const p=new _;class u extends s.Events{static initialize(e){const t=s.query_elem("#header-main",e);t&&new u(t)}constructor(e){super(),this.elem=e,this.personal_tools=s.query_elem("#personaltools",e),this.navbar_content=s.query_elem("#navbar-content",e),this.header_content=s.query_elem("#header-content",e),this.scrollbar=s.query_elem(".scrollable-x",e).data("scrollbar"),this.render=this.render.bind(this),t(window).on("resize",this.render),this.on_sidebar_resize=this.on_sidebar_resize.bind(this),p.on("on_sidebar_resize",this.on_sidebar_resize),this.render(),s.ajax.attach(this,e)}destroy(){t(window).off("resize",this.render),p.off("on_sidebar_resize",this.on_sidebar_resize)}on_sidebar_resize(e){this.scrollbar.render(),this.scrollbar.position=this.scrollbar.position}render(){const e=t(window).width(),i=e<=576,r=e<=992,o=this.navbar_content,a=null!==s.query_elem("#personaltools",o);i?a||this.personal_tools.detach().appendTo(o):a&&(this.personal_tools.detach().prependTo(this.header_content),t(".dropdown-menu.show").removeClass("show")),r?this.disable_scrolling():(o.removeClass("show"),this.enable_scrolling())}disable_scrolling(){const e=this.scrollbar;e.disabled||(e.position=0,e.disabled=!0)}enable_scrolling(){const e=this.scrollbar;e.disabled&&(e.disabled=!1)}}class m{static initialize(e){if(!e)return;let s=e.parents("div.modal");if(!s.length)return;let i=s.data("overlay"),r=i.ref_target;t("a.addreference",e).each((function(){new f(t(this),r,i)})),t("a.removereference",e).each((function(){new g(t(this),r,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,r=this;t("div.referencebrowser a",i.elem).each((function(){let e=t(this);e.attr("ajax:target")&&r.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 r=new Array;for(let e in i.params)r.push(e+"="+i.params[e]);e.attr("ajax:target",i.url+"?"+r.join("&"))}}class f extends m{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,r=s.attr("id");r=r.substring(4,r.length);let o=t(".reftitle",s.parent()).html();if(this.single_value()){i.attr("value",o);let e='[name="'+i.attr("name")+'.uid"]';return t(e).attr("value",r),this.set_selected_on_ajax_target(i.parent(),[r]),void this.overlay.close()}if(this.multi_value()){if(t('[value="'+r+'"]',i.parent()).length)return;let e=t("");e.val(r).html(o).attr("selected","selected"),i.append(e),i.trigger("change")}this.reset_selected(i),this.toggle_enabled(s)}}class g extends m{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,r=s.attr("id");if(r=r.substring(4,r.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="'+r+'"]';if(!t(e,i.parent()).length)return;t(e,i).remove(),i.trigger("change")}this.reset_selected(i),this.toggle_enabled(s)}}class b{static initialize(e){t(".referencebrowser_trigger",e).each((function(){new b(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",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 f(t(this),s,e)})),t("a.removereference",e.elem).each((function(){new g(t(this),s,e)}))}}function v(e,t){b.initialize(t)}function w(e,s,i){t(".referencebrowser_trigger",s).each((function(){let s=t(this),r=s.data("reference-name"),o=e.base_id.replace(/\-/g,".");s.data("reference-name",e.set_value_index(r,o,i,"."))}))}t((function(){void 0!==window.yafowil_array&&(yafowil_array.on_array_event("on_add",v),yafowil_array.on_array_event("on_index",w))}));class y extends s.Motion{static initialize(e){t(".scrollable-x",e).each((function(){new k(t(this))})),t(".scrollable-y",e).each((function(){new z(t(this))}))}constructor(e){super(),this.elem=e,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_resize=this.on_resize.bind(this),this.compile(),this.position=0,this.scroll_step=50,new s.Property(this,"disabled",!1),s.ajax.attach(this,this.elem),s.clock.schedule_frame((()=>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")}bind(){this.pointer_events=!0,this.elem.on("mousewheel wheel",this.on_scroll),this.elem.on("mouseenter mouseleave",this.on_hover),this.scrollbar.on("click",this.on_click),this.set_scope(this.thumb,t(document),this.elem),t(window).on("resize",this.on_resize)}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),t(window).off("resize",this.on_resize)}destroy(){this.unbind()}compile(){s.compile_template(this,'\n
\n
\n
\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()}safe_position(e){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_resize(){this.render()}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_start_y=t.pageY,this._start_position=this.position}touchmove(e){const t=e.originalEvent.touches[0].pageY-this._touch_start_y;this.position=this._start_position-t}touchend(e){delete this._touch_start_y,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 k extends y{get offset(){return this.elem.offset().left}get contentsize(){return this.content.outerWidth()}get scrollsize(){return this.elem.outerWidth()}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 z extends y{get offset(){return this.elem.offset().top}get contentsize(){return this.content.outerHeight()}get scrollsize(){return this.elem.outerHeight()}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 x{static initialize(e){new x(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,r=t(this);i=this.checked?"add_principal_role":"remove_principal_role";let o=r.parent().attr("ajax:target"),a={id:r.attr("name"),role:r.attr("value")};s.ajax.action({name:i,mode:"NONE",selector:"NONE",url:o,params:a})}}class j extends s.Motion{static initialize(e){const t=s.query_elem("#sidebar_left",e);t&&new j(t)}constructor(e){super(),this.elem=e,e.css("width",this.sidebar_width+"px"),this.scrollbar=s.query_elem(".scrollable-y",e).data("scrollbar");const i=s.query_elem(".scrollable-content",e),r=i.css("padding-left"),o=i.css("padding-right"),a=t("#header-logo").outerWidth(!0);e.css("min-width",`calc(${a}px + ${r} + ${o})`),this.on_click=this.on_click.bind(this);s.query_elem("#sidebar_collapse",e).on("click",this.on_click);const n=s.query_elem("#sidebar_resizer",e);this.set_scope(n,t(document)),t("html, body").css("overscroll-behavior","auto")}get sidebar_width(){return localStorage.getItem("cone-app-sidebar-width")||300}set sidebar_width(e){localStorage.setItem("cone-app-sidebar-width",e)}get collapsed(){return"0px"===this.elem.css("width")}collapse(){t("html, body").css("overscroll-behavior","auto"),this.elem.removeClass("expanded").addClass("collapsed"),p.trigger("on_sidebar_resize",this)}expand(){t("html, body").css("overscroll-behavior","none"),this.elem.removeClass("collapsed").addClass("expanded"),p.trigger("on_sidebar_resize",this)}on_click(e){this.collapsed?this.expand():this.collapse()}move(e){this.scrollbar.pointer_events=!1,e.pageX<=115&&(e.pageX=115),this.sidebar_width=parseInt(e.pageX),this.elem.css("width",this.sidebar_width),p.trigger("on_sidebar_resize",this)}up(){this.scrollbar.pointer_events=!0,p.trigger("on_sidebar_resize",this)}}class C{static initialize(e){r.initialize(e,".table_length select"),o.initialize(e,".table_filter input")}}class q{static initialize(e){t(".translation-nav",e).each((function(){new q(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 S extends s.Events{static initialize(e){const t=s.query_elem("#mainmenu",e);t&&new S(t)}constructor(e){super(),this.elem=e,this.height=this.elem.outerHeight(),this.scrollbar=e.data("scrollbar"),this.elems=t(".nav-link.dropdown-toggle",e),this.open_dropdown=null,this.elems.each(((e,s)=>{t(s).on("shown.bs.dropdown",(()=>{this.open_dropdown=s,this.elem.css("height","200vh");t(s).siblings("ul.dropdown-menu").css({position:"fixed",top:`${this.height}px`,left:`${t(s).offset().left}px`})})),t(s).on("hidden.bs.dropdown",(()=>{this.open_dropdown===s&&(this.elem.css("height","100%"),this.open_dropdown=null)}))})),this.hide_dropdowns=this.hide_dropdowns.bind(this),this.scrollbar.on("on_position",this.hide_dropdowns),s.ajax.attach(this,e)}hide_dropdowns(){this.elems.each(((e,s)=>{t(s).dropdown("hide")}))}}class E{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,r,o=e.children(".selected"),a=-1;return t(o).each((function(){r=t(this),i=r.index(),-1==a?a=i:s>i?this.select_direction>0?ia&&(a=i):s{const e=this.stored_theme;"light"===e&&"dark"===e||o.set_theme(o.preferred_theme)}))}}class n extends s.ChangeListener{static initialize(e){const t=s.query_elem("#colortoggle-switch",e);t&&new n(t)}constructor(e){super({elem:e}),this.update(),o.watch((()=>{this.update()}))}update(){const e=o.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";o.set_theme(e),o.stored_theme=e}}class l{static initialize(e){new l(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),a=new Array;i.each((function(){a.push(t(this).attr("ajax:target"))}));let r=a.join("::");s.create_cookie(e,r),r.length?t(this.paste_action).removeClass("disabled"):t(this.paste_action).addClass("disabled")}read_selected_from_cookie(e,i){let a=s.read_cookie(e);if(!a)return;let r,o,n=a.split("::"),l=this;t("table tr.selectable",this.context).each((function(){r=t(this),o=r.attr("ajax:target");for(let e in n)if(n[e]==o){r.addClass("selected"),i&&r.addClass(i),l.selectable.add(r.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 a=s.ajax.parse_target(i.attr("ajax:target"));s.ajax.action({name:"paste",mode:"NONE",selector:"NONE",url:a.url,params:a.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 \n ${e.value}\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 _ extends s.Events{on_sidebar_resize(e){}}const p=new _;class u extends s.Events{static initialize(e){const t=s.query_elem("#header-main",e);t&&new u(t)}constructor(e){super(),this.elem=e,this.personal_tools=s.query_elem("#personaltools",e),this.navbar_content=s.query_elem("#navbar-content",e),this.header_content=s.query_elem("#header-content",e),this.scrollbar=s.query_elem(".scrollable-x",e).data("scrollbar"),this.render=this.render.bind(this),t(window).on("resize",this.render),this.on_sidebar_resize=this.on_sidebar_resize.bind(this),p.on("on_sidebar_resize",this.on_sidebar_resize),this.render(),s.ajax.attach(this,e)}destroy(){t(window).off("resize",this.render),p.off("on_sidebar_resize",this.on_sidebar_resize)}on_sidebar_resize(e){this.scrollbar.render(),this.scrollbar.position=this.scrollbar.position}render(){const e=t(window).width(),i=e<=576,a=e<=992,r=this.navbar_content,o=null!==s.query_elem("#personaltools",r);i?o||this.personal_tools.detach().appendTo(r):o&&(this.personal_tools.detach().prependTo(this.header_content),t(".dropdown-menu.show").removeClass("show")),a?this.disable_scrolling():(r.removeClass("show"),this.enable_scrolling())}disable_scrolling(){const e=this.scrollbar;e.disabled||(e.position=0,e.disabled=!0)}enable_scrolling(){const e=this.scrollbar;e.disabled&&(e.disabled=!1)}}class m{static initialize(e){if(!e)return;let s=e.parents("div.modal");if(!s.length)return;let i=s.data("overlay"),a=i.ref_target;t("a.addreference",e).each((function(){new g(t(this),a,i)})),t("a.removereference",e).each((function(){new b(t(this),a,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,a=this;t("div.referencebrowser a",i.elem).each((function(){let e=t(this);e.attr("ajax:target")&&a.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 a=new Array;for(let e in i.params)a.push(e+"="+i.params[e]);e.attr("ajax:target",i.url+"?"+a.join("&"))}}class g extends m{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,a=s.attr("id");a=a.substring(4,a.length);let r=t(".reftitle",s.parent()).html();if(this.single_value()){i.attr("value",r);let e='[name="'+i.attr("name")+'.uid"]';return t(e).attr("value",a),this.set_selected_on_ajax_target(i.parent(),[a]),void this.overlay.close()}if(this.multi_value()){if(t('[value="'+a+'"]',i.parent()).length)return;let e=t("");e.val(a).html(r).attr("selected","selected"),i.append(e),i.trigger("change")}this.reset_selected(i),this.toggle_enabled(s)}}class b extends m{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,a=s.attr("id");if(a=a.substring(4,a.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="'+a+'"]';if(!t(e,i.parent()).length)return;t(e,i).remove(),i.trigger("change")}this.reset_selected(i),this.toggle_enabled(s)}}class f{static initialize(e){t(".referencebrowser_trigger",e).each((function(){new f(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",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 g(t(this),s,e)})),t("a.removereference",e.elem).each((function(){new b(t(this),s,e)}))}}function v(e,t){f.initialize(t)}function w(e,s,i){t(".referencebrowser_trigger",s).each((function(){let s=t(this),a=s.data("reference-name"),r=e.base_id.replace(/\-/g,".");s.data("reference-name",e.set_value_index(a,r,i,"."))}))}t((function(){void 0!==window.yafowil_array&&(yafowil_array.on_array_event("on_add",v),yafowil_array.on_array_event("on_index",w))}));class y extends s.Motion{static initialize(e){t(".scrollable-x",e).each((function(){new k(t(this))})),t(".scrollable-y",e).each((function(){new z(t(this))}))}constructor(e){super(),this.elem=e,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_resize=this.on_resize.bind(this),this.compile(),this.position=0,this.scroll_step=50,new s.Property(this,"disabled",!1),s.ajax.attach(this,this.elem),s.clock.schedule_frame((()=>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")}bind(){this.pointer_events=!0,this.elem.on("mousewheel wheel",this.on_scroll),this.elem.on("mouseenter mouseleave",this.on_hover),this.scrollbar.on("click",this.on_click),this.set_scope(this.thumb,t(document),this.elem),t(window).on("resize",this.on_resize)}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),t(window).off("resize",this.on_resize)}destroy(){this.unbind()}compile(){s.compile_template(this,'\n
\n
\n
\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()}safe_position(e){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_resize(){this.render()}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_start_y=t.pageY,this._start_position=this.position}touchmove(e){const t=e.originalEvent.touches[0].pageY-this._touch_start_y;this.position=this._start_position-t}touchend(e){delete this._touch_start_y,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 k extends y{get offset(){return this.elem.offset().left}get contentsize(){return this.content.outerWidth()}get scrollsize(){return this.elem.outerWidth()}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 z extends y{get offset(){return this.elem.offset().top}get contentsize(){return this.content.outerHeight()}get scrollsize(){return this.elem.outerHeight()}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 x{static initialize(e){new x(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,a=t(this);i=this.checked?"add_principal_role":"remove_principal_role";let r=a.parent().attr("ajax:target"),o={id:a.attr("name"),role:a.attr("value")};s.ajax.action({name:i,mode:"NONE",selector:"NONE",url:r,params:o})}}class j extends s.Motion{static initialize(e){const t=s.query_elem("#sidebar_left",e);t&&new j(t)}constructor(e){super(),this.elem=e,e.css("width",this.sidebar_width+"px"),this.scrollbar=s.query_elem(".scrollable-y",e).data("scrollbar");const i=s.query_elem(".scrollable-content",e),a=i.css("padding-left"),r=i.css("padding-right"),o=t("#header-logo").outerWidth(!0);e.css("min-width",`calc(${o}px + ${a} + ${r})`),this.on_click=this.on_click.bind(this);s.query_elem("#sidebar_collapse",e).on("click",this.on_click);const n=s.query_elem("#sidebar_resizer",e);this.set_scope(n,t(document)),t("html, body").css("overscroll-behavior","auto")}get sidebar_width(){return localStorage.getItem("cone-app-sidebar-width")||300}set sidebar_width(e){localStorage.setItem("cone-app-sidebar-width",e)}get collapsed(){return"0px"===this.elem.css("width")}collapse(){t("html, body").css("overscroll-behavior","auto"),this.elem.removeClass("expanded").addClass("collapsed"),p.trigger("on_sidebar_resize",this)}expand(){t("html, body").css("overscroll-behavior","none"),this.elem.removeClass("collapsed").addClass("expanded"),p.trigger("on_sidebar_resize",this)}on_click(e){this.collapsed?this.expand():this.collapse()}move(e){this.scrollbar.pointer_events=!1,e.pageX<=115&&(e.pageX=115),this.sidebar_width=parseInt(e.pageX),this.elem.css("width",this.sidebar_width),p.trigger("on_sidebar_resize",this)}up(){this.scrollbar.pointer_events=!0,p.trigger("on_sidebar_resize",this)}}class C{static initialize(e){a.initialize(e,".table_length select"),r.initialize(e,".table_filter input")}}class q{static initialize(e){t(".translation-nav",e).each((function(){new q(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 S extends s.Events{static initialize(e){const t=s.query_elem("#mainmenu",e);t&&new S(t)}constructor(e){super(),this.elem=e,this.height=this.elem.outerHeight(),this.scrollbar=e.data("scrollbar"),this.elems=t(".nav-link.dropdown-toggle",e),this.open_dropdown=null,this.elems.each(((e,s)=>{t(s).on("shown.bs.dropdown",(()=>{this.open_dropdown=s,this.elem.css("height","200vh");t(s).siblings("ul.dropdown-menu").css({position:"fixed",top:`${this.height}px`,left:`${t(s).offset().left}px`})})),t(s).on("hidden.bs.dropdown",(()=>{this.open_dropdown===s&&(this.elem.css("height","100%"),this.open_dropdown=null)}))})),this.hide_dropdowns=this.hide_dropdowns.bind(this),this.scrollbar.on("on_position",this.hide_dropdowns),s.ajax.attach(this,e),this.navbar_toggler=s.query_elem('.navbar-toggler[data-bs-target="#navbar-content-wrapper"]',t("body")),this.navbar_content_wrapper=s.query_elem("#navbar-content-wrapper",t("body")),this.handle=this.handle.bind(this),p.on("on_sidebar_resize",this.handle),t(window).on("resize",this.handle)}hide_dropdowns(){this.elems.each(((e,s)=>{t(s).dropdown("hide")}))}handle(){const e=t("#personaltools").outerWidth()+t("#header-logo").outerWidth();t("#header-main").outerWidth()this.elem.outerWidth()?this.logo_placeholder.hide():this.logo_placeholder.show()}}class D{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,a,r=e.children(".selected"),o=-1;return t(r).each((function(){a=t(this),i=a.index(),-1==o?o=i:s>i?this.select_direction>0?io&&(o=i):s