diff --git a/package.json b/package.json index 6f9cd97b..bdc84079 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "moment": "^2.27.0", "nosleep.js": "^0.12.0", "sprintf-js": "^1.1.2", - "startbootstrap-sb-admin": "4.0.0", "summernote": "^0.8.18", "swagger-ui-dist": "^4.10.3", "tempusdominus-bootstrap-4": "^5.39.2", diff --git a/public/css/grocy.css b/public/css/grocy.css index 45c4588f..4c2eccb8 100755 --- a/public/css/grocy.css +++ b/public/css/grocy.css @@ -67,12 +67,6 @@ a.discrete-link:focus { width: 100%; } -/* Fixes smooth scrolling on iOS */ -#sidebarResponsive, -.fullscreen { - -webkit-overflow-scrolling: touch; -} - .fullscreen-card .card-header-fullscreen { z-index: 9999; width: 100%; @@ -113,10 +107,6 @@ button.disabled { display: none; } -body.embedded.fixed-nav { - padding-top: 0; -} - .embedded .content-wrapper { margin-left: 0; } @@ -148,78 +138,6 @@ form.has-sticky-form-footer .form-group:nth-last-child(2) { padding-bottom: 2rem; } -/* Navigation style customizations */ -#mainNav { - line-height: 1; - background-color: #e5e5e5 !important; - border-bottom: 2px solid !important; - border-color: #d6d6d6 !important; - padding-bottom: 0.3rem; -} - -#mainNav .dropdown-menu { - line-height: 1.5; -} - -.navbar-sidenav { - overflow-x: hidden; - overflow-y: overlay; - border-top: 2px solid !important; -} - -.navbar-sidenav, -.sidenav-second-level { - background-color: #e5e5e5 !important; - border-right: 2px solid !important; - border-color: #d6d6d6 !important; -} - -.navbar-nav .dropdown-menu { - background-color: #e5e5e5 !important; - border: 0; - border-radius: 0; -} - -.navbar-nav .dropdown-divider, -.nav-item-divider { - border-top: 2px solid !important; - border-color: #d6d6d6 !important; -} - -.sidenav-toggler { - background-color: #d6d6d6 !important; - border-right: 2px solid !important; - border-color: #d6d6d6 !important; -} - -.navbar-sidenav>li, -.sidenav-second-level>li { - transition: all 0.3s !important; -} - -.navbar-sidenav>li:hover, -.sidenav-second-level>li:hover, -.navbar-nav .dropdown-item:hover { - box-shadow: inset 5px 0 0 #337ab7 !important; - background-color: #d6d6d6 !important; -} - -.navbar-sidenav>li>a:focus, -.sidenav-second-level>li>a:focus, -.navbar-nav .dropdown-item:focus { - box-shadow: inset 5px 0 0 #ab2230 !important; - background-color: #d6d6d6 !important; -} - -.active-page { - box-shadow: inset 5px 0 0 #ab2230 !important; - background-color: #d6d6d6 !important; -} - -.navbar-brand { - margin-right: 0; -} - .cursor-link { cursor: pointer; } @@ -410,51 +328,12 @@ tr.dtrg-group { font-family: sans-serif; } -/* Third party component customizations - SB Admin 2 */ -#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link:after, -#mainNav .navbar-collapse .navbar-sidenav .nav-link-collapse:after { - font-family: 'Font Awesome 5 Free'; - font-weight: 900; -} - -#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link.py-0:after, -#mainNav .navbar-collapse .navbar-sidenav .nav-link-collapse.py-0:after { - padding-top: 8px; -} - -#mainNav .navbar-collapse .navbar-sidenav>.nav-item>.nav-link, -#mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a { - padding: 0.75em; -} - -@media (min-width: 992px) { - #mainNav .navbar-collapse .navbar-sidenav { - margin-top: 46px; - } - - #mainNav.fixed-top .navbar-sidenav { - height: calc(100vh - 94px) - } - - #mainNav.fixed-top .sidenav-toggler { - margin-top: calc(100vh - 48px); - } - - .content-wrapper { - margin-left: 245px; - } -} - @media (max-width: 767.98px) { .width-xs-sm-100 { width: 100%; } } -body.fixed-nav { - padding-top: 54px; -} - html { min-height: inherit; } @@ -463,14 +342,6 @@ html { margin-left: -0.15em !important; } -#mainNav .navbar-collapse .navbar-sidenav>.nav-item>.nav-link { - padding-right: 1.25em !important; -} - -#sidebarResponsive .nav-item-sidebar { - line-height: 1; -} - /* Third party component customizations - Tempus Dominus */ .bootstrap-datetimepicker-widget.dropdown-menu { width: auto !important; @@ -641,10 +512,6 @@ canvas.drawingBuffer { margin-left: 0; } - body.fixed-nav { - padding-top: 0; - } - .calendar button.fc-prev-button, .calendar button.fc-today-button, .calendar button.fc-next-button, diff --git a/public/css/grocy_menu_layout.css b/public/css/grocy_menu_layout.css new file mode 100644 index 00000000..fae58d13 --- /dev/null +++ b/public/css/grocy_menu_layout.css @@ -0,0 +1,510 @@ +html { + position: relative; + min-height: 100%; +} + +body { + overflow-x: hidden; +} + +body.fixed-nav { + padding-top: 56px; +} + +.content-wrapper { + min-height: calc(100vh - 56px); + padding-top: 1rem; +} + +#mainNav .navbar-collapse { + overflow: auto; + max-height: 75vh; +} + +#mainNav .navbar-collapse .navbar-nav .nav-item .nav-link { + cursor: pointer; +} + +#mainNav .navbar-collapse .navbar-sidenav .nav-link-collapse:after { + float: right; + content: '\f107'; + font-family: 'Font Awesome 5 Free'; +} + +#mainNav .navbar-collapse .navbar-sidenav .nav-link-collapse.collapsed:after { + content: '\f105'; +} + +#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level, +#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level { + padding-left: 0; +} + +#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level>li>a, +#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level>li>a { + display: block; + padding: 0.5em 0; +} + +#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level>li>a:focus, +#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level>li>a:hover, +#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level>li>a:focus, +#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level>li>a:hover { + text-decoration: none; +} + +#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level>li>a { + padding-left: 1em; +} + +#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level>li>a { + padding-left: 2em; +} + +#mainNav .navbar-collapse .sidenav-toggler { + display: none; +} + +#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link { + position: relative; + min-width: 45px; +} + +#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link:after { + float: right; + width: auto; + content: '\f105'; + border: none; + font-family: 'Font Awesome 5 Free'; +} + +#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link .indicator { + position: absolute; + top: 5px; + left: 21px; + font-size: 10px; +} + +#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown.show>.nav-link:after { + content: '\f107'; +} + +#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown .dropdown-menu>.dropdown-item>.dropdown-message { + overflow: hidden; + max-width: none; + text-overflow: ellipsis; +} + +@media (min-width: 992px) { + #mainNav .navbar-brand { + width: 250px; + } + + #mainNav .navbar-collapse { + overflow: visible; + max-height: none; + } + + #mainNav .navbar-collapse .navbar-sidenav { + position: absolute; + top: 0; + left: 0; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-top: 56px; + } + + #mainNav .navbar-collapse .navbar-sidenav>.nav-item { + width: 250px; + padding: 0; + } + + #mainNav .navbar-collapse .navbar-sidenav>.nav-item>.nav-link { + padding: 1em; + } + + #mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level, + #mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level { + padding-left: 0; + list-style: none; + } + + #mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li, + #mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li { + width: 250px; + } + + #mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a, + #mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li>a { + padding: 1em; + } + + #mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a { + padding-left: 2.75em; + } + + #mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li>a { + padding-left: 3.75em; + } + + #mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link { + min-width: 0; + } + + #mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link:after { + width: 24px; + text-align: center; + } + + #mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown .dropdown-menu>.dropdown-item>.dropdown-message { + max-width: 300px; + } +} + +#mainNav.fixed-top .sidenav-toggler { + display: none; +} + +@media (min-width: 992px) { + #mainNav.fixed-top .navbar-sidenav { + height: calc(100vh - 112px); + } + + #mainNav.fixed-top .sidenav-toggler { + position: absolute; + top: 0; + left: 0; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-top: calc(100vh - 56px); + } + + #mainNav.fixed-top .sidenav-toggler>.nav-item { + width: 250px; + padding: 0; + } + + #mainNav.fixed-top .sidenav-toggler>.nav-item>.nav-link { + padding: 1em; + } +} + +#mainNav.fixed-top.navbar-dark .sidenav-toggler { + background-color: #212529; +} + +#mainNav.fixed-top.navbar-dark .sidenav-toggler a i { + color: #adb5bd; +} + +#mainNav.fixed-top.navbar-light .sidenav-toggler { + background-color: #dee2e6; +} + +#mainNav.fixed-top.navbar-light .sidenav-toggler a i { + color: rgba(0, 0, 0, 0.5); +} + +body.sidenav-toggled #mainNav.fixed-top .sidenav-toggler { + overflow-x: hidden; + width: 55px; +} + +body.sidenav-toggled #mainNav.fixed-top .sidenav-toggler .nav-item, +body.sidenav-toggled #mainNav.fixed-top .sidenav-toggler .nav-link { + width: 55px !important; +} + +body.sidenav-toggled #mainNav.fixed-top #sidenavToggler i { + -webkit-transform: scaleX(-1); + -moz-transform: scaleX(-1); + -o-transform: scaleX(-1); + transform: scaleX(-1); + filter: FlipH; + -ms-filter: 'FlipH'; +} + +.content-wrapper { + overflow-x: hidden; + background: white; +} + +@media (min-width: 992px) { + .content-wrapper { + margin-left: 250px; + } +} + +#sidenavToggler i { + font-weight: 800; +} + +.navbar-sidenav-tooltip.show { + display: none; +} + +@media (min-width: 992px) { + body.sidenav-toggled .content-wrapper { + margin-left: 55px; + } +} + +body.sidenav-toggled .navbar-sidenav { + width: 55px; +} + +body.sidenav-toggled .navbar-sidenav .nav-link-text { + display: none; +} + +body.sidenav-toggled .navbar-sidenav .nav-item, +body.sidenav-toggled .navbar-sidenav .nav-link { + width: 55px !important; +} + +body.sidenav-toggled .navbar-sidenav .nav-item:after, +body.sidenav-toggled .navbar-sidenav .nav-link:after { + display: none; +} + +body.sidenav-toggled .navbar-sidenav .nav-item { + white-space: nowrap; +} + +body.sidenav-toggled .navbar-sidenav-tooltip.show { + display: flex; +} + +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav .nav-link-collapse:after { + color: #868e96; +} + +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item>.nav-link { + color: #868e96; +} + +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item>.nav-link:hover { + color: #adb5bd; +} + +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a, +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li>a { + color: #868e96; +} + +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a:focus, +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a:hover, +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li>a:focus, +#mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li>a:hover { + color: #adb5bd; +} + +#mainNav.navbar-dark .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link:after { + color: #adb5bd; +} + +@media (min-width: 992px) { + #mainNav.navbar-dark .navbar-collapse .navbar-sidenav { + background: #343a40; + } + + #mainNav.navbar-dark .navbar-collapse .navbar-sidenav li.active a { + color: white !important; + background-color: #495057; + } + + #mainNav.navbar-dark .navbar-collapse .navbar-sidenav li.active a:focus, + #mainNav.navbar-dark .navbar-collapse .navbar-sidenav li.active a:hover { + color: white; + } + + #mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level, + #mainNav.navbar-dark .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level { + background: #343a40; + } +} + +#mainNav.navbar-light .navbar-collapse .navbar-sidenav .nav-link-collapse:after { + color: rgba(0, 0, 0, 0.5); +} + +#mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item>.nav-link { + color: rgba(0, 0, 0, 0.5); +} + +#mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item>.nav-link:hover { + color: rgba(0, 0, 0, 0.7); +} + +#mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a, +#mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li>a { + color: rgba(0, 0, 0, 0.5); +} + +#mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a:focus, +#mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a:hover, +#mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li>a:focus, +#mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level>li>a:hover { + color: rgba(0, 0, 0, 0.7); +} + +#mainNav.navbar-light .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link:after { + color: rgba(0, 0, 0, 0.5); +} + +@media (min-width: 992px) { + #mainNav.navbar-light .navbar-collapse .navbar-sidenav { + background: #f8f9fa; + } + + #mainNav.navbar-light .navbar-collapse .navbar-sidenav li.active a { + color: #000 !important; + background-color: #e9ecef; + } + + #mainNav.navbar-light .navbar-collapse .navbar-sidenav li.active a:focus, + #mainNav.navbar-light .navbar-collapse .navbar-sidenav li.active a:hover { + color: #000; + } + + #mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level, + #mainNav.navbar-light .navbar-collapse .navbar-sidenav>.nav-item .sidenav-third-level { + background: #f8f9fa; + } +} + +#mainNav { + line-height: 1; + background-color: #e5e5e5 !important; + border-bottom: 2px solid !important; + border-color: #d6d6d6 !important; + padding-bottom: 0.3rem; +} + +#mainNav .dropdown-menu { + line-height: 1.5; +} + +.navbar-sidenav { + overflow-x: hidden; + overflow-y: overlay; + border-top: 2px solid !important; +} + +.navbar-sidenav, +.sidenav-second-level { + background-color: #e5e5e5 !important; + border-right: 2px solid !important; + border-color: #d6d6d6 !important; +} + +.navbar-nav .dropdown-menu { + background-color: #e5e5e5 !important; + border: 0; + border-radius: 0; +} + +.navbar-nav .dropdown-divider, +.nav-item-divider { + border-top: 2px solid !important; + border-color: #d6d6d6 !important; +} + +.sidenav-toggler { + background-color: #d6d6d6 !important; + border-right: 2px solid !important; + border-color: #d6d6d6 !important; +} + +.navbar-sidenav>li, +.sidenav-second-level>li { + transition: all 0.3s !important; +} + +.navbar-sidenav>li:hover, +.sidenav-second-level>li:hover, +.navbar-nav .dropdown-item:hover { + box-shadow: inset 5px 0 0 #337ab7 !important; + background-color: #d6d6d6 !important; +} + +.navbar-sidenav>li>a:focus, +.sidenav-second-level>li>a:focus, +.navbar-nav .dropdown-item:focus { + box-shadow: inset 5px 0 0 #ab2230 !important; + background-color: #d6d6d6 !important; +} + +.active-page { + box-shadow: inset 5px 0 0 #ab2230 !important; + background-color: #d6d6d6 !important; +} + +.navbar-brand { + margin-right: 0; +} + +#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link:after, +#mainNav .navbar-collapse .navbar-sidenav .nav-link-collapse:after { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; +} + +#mainNav .navbar-collapse .navbar-nav>.nav-item.dropdown>.nav-link.py-0:after, +#mainNav .navbar-collapse .navbar-sidenav .nav-link-collapse.py-0:after { + padding-top: 8px; +} + +#mainNav .navbar-collapse .navbar-sidenav>.nav-item>.nav-link, +#mainNav .navbar-collapse .navbar-sidenav>.nav-item .sidenav-second-level>li>a { + padding: 0.75em; +} + +@media (min-width: 992px) { + #mainNav .navbar-collapse .navbar-sidenav { + margin-top: 46px; + } + + #mainNav.fixed-top .navbar-sidenav { + height: calc(100vh - 94px) + } + + #mainNav.fixed-top .sidenav-toggler { + margin-top: calc(100vh - 48px); + } + + .content-wrapper { + margin-left: 245px; + } +} + +#mainNav .navbar-collapse .navbar-sidenav>.nav-item>.nav-link { + padding-right: 1.25em !important; +} + +#sidebarResponsive .nav-item-sidebar { + line-height: 1; +} + +body.embedded.fixed-nav { + padding-top: 0; +} + +body.fixed-nav { + padding-top: 54px; +} + +/* Fixes smooth scrolling on iOS */ +#sidebarResponsive, +.fullscreen { + -webkit-overflow-scrolling: touch; +} + +@media print { + body.fixed-nav { + padding-top: 0; + } +} diff --git a/public/js/grocy.js b/public/js/grocy.js index 0aeff851..478513c8 100644 --- a/public/js/grocy.js +++ b/public/js/grocy.js @@ -789,6 +789,9 @@ $(document).on("click", ".show-as-dialog-link", function(e) }); }); +// Init Bootstrap tooltips +$('[data-toggle="tooltip"]').tooltip() + // Default DataTables initialisation settings var collapsedGroups = {}; $.extend(true, $.fn.dataTable.defaults, { diff --git a/public/js/grocy_menu_layout.js b/public/js/grocy_menu_layout.js new file mode 100644 index 00000000..6ef9ebdd --- /dev/null +++ b/public/js/grocy_menu_layout.js @@ -0,0 +1,19 @@ +$('.navbar-sidenav [data-toggle="tooltip"]').tooltip({ + template: '
' +}) + +$("#sidenavToggler").click(function(e) +{ + e.preventDefault(); + $("body").toggleClass("sidenav-toggled"); + $(".navbar-sidenav .nav-link-collapse").addClass("collapsed"); + $(".navbar-sidenav .sidenav-second-level, .navbar-sidenav .sidenav-third-level").removeClass("show"); +}); + +$(".navbar-sidenav .nav-link-collapse").click(function(e) +{ + e.preventDefault(); + $("body").removeClass("sidenav-toggled"); +}); + + diff --git a/views/layout/default.blade.php b/views/layout/default.blade.php index aeaec740..2cb6ed49 100644 --- a/views/layout/default.blade.php +++ b/views/layout/default.blade.php @@ -42,8 +42,6 @@