diff --git a/modules/backend/assets/css/winter.css b/modules/backend/assets/css/winter.css index c2349a681a..ae48dbb44c 100644 --- a/modules/backend/assets/css/winter.css +++ b/modules/backend/assets/css/winter.css @@ -66,9 +66,9 @@ .sweet-alert p{margin:0} .sweet-alert p.text-muted{margin-bottom:20px;color:#555} .global-notice{position:sticky;top:0;display:flex;align-items:center;flex-wrap:wrap;gap:0.5em;justify-content:space-between;z-index:10500;background:#ab2a1c;color:#FFF;padding:0.5em 0.75em} -.global-notice .notice-icon{font-size:1.5em;vertical-align:bottom;display:inline-block;margin-right:.25em} +.global-notice .notice-icon{font-size:1.5em;vertical-align:bottom;display:inline-block;margin-right:0.25em} .global-notice .notice-text{display:inline-block;vertical-align:middle} -.control-simplelist{font-size:13px;padding:20px 20px 2px 20px;margin-bottom:20px;background:#fff;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} +.control-simplelist{font-size:13px;padding:20px 20px 2px 20px;margin-bottom:20px;background:#FFF;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} .control-simplelist ul{padding-left:15px} .control-simplelist.form-control ul{margin-bottom:0} .control-simplelist.form-control li{padding-top:5px;padding-bottom:5px} @@ -96,7 +96,7 @@ .control-simplelist.is-selectable li .heading, .control-simplelist.is-selectable-box li .heading{font-size:14px;font-weight:500} .control-simplelist.is-divided li, -.control-simplelist.is-selectable li{padding:5px 10px;border-bottom:1px solid #d4d8da} +.control-simplelist.is-selectable li{padding:5px 10px;border-bottom:1px solid #D4D8DA} .control-simplelist.is-divided li:last-child, .control-simplelist.is-selectable li:last-child{border-bottom:none} .control-simplelist.is-selectable li a{padding:5px 10px;margin:-5px -10px;display:block;color:#333} @@ -145,7 +145,7 @@ html.mobile .control-scrollbar{overflow:auto;-webkit-overflow-scrolling:touch} .no-touch .control-scrollbar>.scrollbar-scrollbar{opacity:0;-webkit-transition:opacity 0.3s;transition:opacity 0.3s} .no-touch .control-scrollbar:active>.scrollbar-scrollbar, .no-touch .control-scrollbar:hover>.scrollbar-scrollbar{opacity:1} -@media (max-width:768px){.responsive-sidebar>.layout-cell:last-child .control-scrollbar{overflow:visible;height:auto}.responsive-sidebar>.layout-cell:last-child .control-scrollbar .scrollbar-scrollbar{display:none !important}} +@media (max-width:768px){.responsive-sidebar>.layout-cell:last-child .control-scrollbar{overflow:visible;height:auto}.responsive-sidebar>.layout-cell:last-child .control-scrollbar .scrollbar-scrollbar{display:none!important}} .control-filelist p.no-data{padding:22px 0;margin:0;color:#666;font-size:14px;text-align:center;font-weight:normal;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} .control-filelist ul{padding:0;margin:0} .control-filelist ul li{font-weight:normal;line-height:150%;position:relative;list-style:none} @@ -192,21 +192,21 @@ html.mobile .control-scrollbar{overflow:auto;-webkit-overflow-scrolling:touch} .control-filelist ul li.group[data-status=collapsed]>div.subitems{display:none} .control-filelist ul li>div.controls{position:absolute;right:19px;top:6px} .control-filelist ul li>div.controls .dropdown{width:14px;height:21px} -.control-filelist ul li>div.controls .dropdown.open a.control{display:block !important} +.control-filelist ul li>div.controls .dropdown.open a.control{display:block!important} .control-filelist ul li>div.controls .dropdown.open a.control:before{visibility:visible;display:block} .control-filelist ul li>div.controls a.control{color:#405261;font-size:14px;visibility:hidden;overflow:hidden;width:14px;height:21px;display:none;text-decoration:none;cursor:pointer;padding:0;opacity:0.5;filter:alpha(opacity=50)} .control-filelist ul li>div.controls a.control:before{visibility:visible;display:block;margin-right:0} .control-filelist ul li>div.controls a.control:hover{opacity:1;filter:alpha(opacity=100)} .control-filelist ul li:hover>div.controls, -.control-filelist ul li:hover>a.control{display:block !important} +.control-filelist ul li:hover>a.control{display:block!important} .control-filelist ul li:hover>div.controls>a.control, -.control-filelist ul li:hover>a.control>a.control{display:block !important} +.control-filelist ul li:hover>a.control>a.control{display:block!important} .control-filelist ul li .checkbox{position:absolute;top:-5px;right:0} .control-filelist ul li .checkbox label{margin-right:0} .control-filelist ul li .checkbox label:before{border-color:#ccc} .control-filelist.single-line ul li a span.title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap} .control-filelist.filelist-hero ul li{background:#fff;border-bottom:none} -.control-filelist.filelist-hero ul li>a{padding:11px 45px 10px 50px;font-size:13px;border-bottom:1px solid #ecf0f1} +.control-filelist.filelist-hero ul li>a{padding:11px 45px 10px 50px;font-size:13px;border-bottom:1px solid #ECF0F1} .control-filelist.filelist-hero ul li>a span.title{font-size:14px;font-weight:normal;color:#2b3e50} .control-filelist.filelist-hero ul li>a span.description{font-size:13px} .control-filelist.filelist-hero ul li>a .list-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:22px;color:#b7c0c2} @@ -225,13 +225,13 @@ html.mobile .control-scrollbar{overflow:auto;-webkit-overflow-scrolling:touch} .control-filelist.filelist-hero ul li.active>a>span.borders:before{top:-1px} .control-filelist.filelist-hero ul li.active>a:hover>span.borders:before{background-color:#48b2ce} .control-filelist.filelist-hero ul li.active>a:active>span.borders:before{background-color:#6cc551} -.control-filelist.filelist-hero ul li>h4{padding-top:7px;padding-bottom:6px;border-bottom:1px solid #ecf0f1} +.control-filelist.filelist-hero ul li>h4{padding-top:7px;padding-bottom:6px;border-bottom:1px solid #ECF0F1} .control-filelist.filelist-hero ul li>div.controls{display:none;position:absolute;right:16px;top:15px} .control-filelist.filelist-hero ul li>div.controls>a.control{width:16px;height:23px;background:transparent;overflow:hidden;display:inline-block;color:#fff !important;padding:0} .control-filelist.filelist-hero ul li>div.controls>a.control:before{font-size:17px} .control-filelist.filelist-hero ul li:hover>div.controls{display:block} .control-filelist.filelist-hero ul li.separator{position:relative;border-bottom:1px solid #95a5a6;padding:12px 15px 13px 15px} -.control-filelist.filelist-hero ul li.separator:before{z-index:31;content:'';display:block;width:0;height:0;border-left:9.5px solid transparent;border-right:9.5px solid transparent;border-top:11px solid #fff;border-bottom-width:0;position:absolute;left:13px;bottom:-8px} +.control-filelist.filelist-hero ul li.separator:before{z-index:31;content:'';display:block;width:0;height:0;border-left:9.5px solid transparent;border-right:9.5px solid transparent;border-top:11px solid white;border-bottom-width:0;position:absolute;left:13px;bottom:-8px} .control-filelist.filelist-hero ul li.separator:after{z-index:30;content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid #95a5a6;border-bottom-width:0;position:absolute;left:14px;bottom:-9px} .control-filelist.filelist-hero ul li.separator h5{color:#2b3e50;font-size:14px;margin:0;font-weight:normal;padding:0} .control-filelist.filelist-hero ul>li.group>ul>li>a{padding-left:66px} @@ -245,7 +245,7 @@ html.mobile .control-scrollbar{overflow:auto;-webkit-overflow-scrolling:touch} .control-filelist.filelist-hero.single-level ul li:active>a span.title, .control-filelist.filelist-hero.single-level ul li:active>a span.description{color:#fff !important} .control-filelist.filelist-hero.single-level ul li:active>a .list-icon{color:#fff !important} -.control-scrollpanel{position:relative;background:#ecf0f1} +.control-scrollpanel{position:relative;background:#ECF0F1} .control-scrollpanel .control-scrollbar.vertical>.scrollbar-scrollbar{right:0} .tooltip .tooltip-inner{text-align:left;padding:5px 8px} .tooltip.in{opacity:1;filter:alpha(opacity=100)} @@ -301,7 +301,7 @@ html.mobile .control-scrollbar{overflow:auto;-webkit-overflow-scrolling:touch} .control-treeview{margin-bottom:40px} .control-treeview ol{margin:0;padding:0;list-style:none;background:#fff} .control-treeview ol>li{-webkit-transition:width 1s;transition:width 1s} -.control-treeview ol>li>div{font-size:14px;font-weight:normal;background:#fff;border-bottom:1px solid #ecf0f1;position:relative} +.control-treeview ol>li>div{font-size:14px;font-weight:normal;background:#fff;border-bottom:1px solid #ECF0F1;position:relative} .control-treeview ol>li>div>a{color:#2b3e50;padding:11px 45px 10px 61px;display:block;line-height:150%;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .control-treeview ol>li>div:before{content:' ';background-image:url(../images/treeview-icons.png);background-position:0 -28px;background-repeat:no-repeat;background-size:42px auto;position:absolute;width:21px;height:22px;left:28px;top:15px} .control-treeview ol>li>div span.comment{display:block;font-weight:400;color:#95a5a6;font-size:13px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} @@ -330,7 +330,7 @@ html.mobile .control-scrollbar{overflow:auto;-webkit-overflow-scrolling:touch} .control-treeview ol>li>div.popover-highlight>a{color:#fff !important;cursor:default} .control-treeview ol>li>div.popover-highlight span{color:#fff !important} .control-treeview ol>li>div.popover-highlight>ul.submenu, -.control-treeview ol>li>div.popover-highlight>span.drag-handle{display:none !important} +.control-treeview ol>li>div.popover-highlight>span.drag-handle{display:none!important} .control-treeview ol>li.dragged div, .control-treeview ol>li>div:hover{background-color:#48b2ce !important} .control-treeview ol>li.dragged div>a, @@ -347,10 +347,10 @@ html.mobile .control-scrollbar{overflow:auto;-webkit-overflow-scrolling:touch} .control-treeview ol>li>div:hover span.borders{display:none} .control-treeview ol>li>div:active{background-color:#6cc551 !important} .control-treeview ol>li>div:active>a{color:#fff !important} -.control-treeview ol>li[data-no-drag-mode] div:hover span.drag-handle{cursor:default !important;opacity:0.3 !important;filter:alpha(opacity=30) !important} +.control-treeview ol>li[data-no-drag-mode] div:hover span.drag-handle{cursor:default!important;opacity:0.3 !important;filter:alpha(opacity=30) !important} .control-treeview ol>li.dragged li.has-subitems>div:before, .control-treeview ol>li.dragged.has-subitems>div:before{background-position:0 -52px} -.control-treeview ol>li.dragged div>ul.submenu{display:none !important} +.control-treeview ol>li.dragged div>ul.submenu{display:none!important} .control-treeview ol>li>ol{padding-left:20px;padding-right:20px} .control-treeview ol>li[data-status=collapsed]>ol{display:none} .control-treeview ol>li.has-subitems>div:before{background-position:0 0;width:23px;height:26px;left:26px} @@ -447,7 +447,7 @@ body.dragging .control-treeview ol.dragging>li>div .custom-checkbox, body.dragging .control-treeview ol.dragging ol>li>div .custom-checkbox{-webkit-transition:opacity 0.5s;transition:opacity 0.5s;opacity:0;filter:alpha(opacity=0)} body.dragging .control-treeview.treeview-light ol.dragging>li>div, body.dragging .control-treeview.treeview-light ol.dragging ol>li>div{background-color:#f9f9f9} -@media only screen and (min--moz-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-devicepixel-ratio:1.5),only screen and (min-resolution:1.5dppx){.control-treeview ol>li>div:before{background-position:0 -79px;background-size:21px auto}.control-treeview ol>li.has-subitems>div:before{background-position:0 -52px}.control-treeview ol>li.has-subitems>div:hover:before,.control-treeview ol>li.has-subitems>div.popover-highlight:before{background-position:0 -102px}.control-treeview ol>li.dragged>div:before,.control-treeview ol>li.dragged li>div:before,.control-treeview ol>li>div:hover:before,.control-treeview ol>li>div.popover-highlight:before{background-position:0 -129px}.control-treeview ol>li.dragged li.has-subitems>div:before,.control-treeview ol>li.dragged.has-subitems>div:before{background-position:0 -102px}.control-treeview ol>li.drop-target>div:before{background-position:0 -129px}.control-treeview ol>li.drop-target.has-subitems>div:before{background-position:0 -102px}} +@media only screen and (min--moz-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:1.5),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-devicepixel-ratio:1.5),only screen and (min-resolution:1.5dppx){.control-treeview ol>li>div:before{background-position:0 -79px;background-size:21px auto}.control-treeview ol>li.has-subitems>div:before{background-position:0 -52px}.control-treeview ol>li.has-subitems>div:hover:before,.control-treeview ol>li.has-subitems>div.popover-highlight:before{background-position:0 -102px}.control-treeview ol>li.dragged>div:before,.control-treeview ol>li.dragged li>div:before,.control-treeview ol>li>div:hover:before,.control-treeview ol>li>div.popover-highlight:before{background-position:0 -129px}.control-treeview ol>li.dragged li.has-subitems>div:before,.control-treeview ol>li.dragged.has-subitems>div:before{background-position:0 -102px}.control-treeview ol>li.drop-target>div:before{background-position:0 -129px}.control-treeview ol>li.drop-target.has-subitems>div:before{background-position:0 -102px}} .sidenav-tree{width:300px} .sidenav-tree .control-toolbar{padding:0} .sidenav-tree .control-toolbar .toolbar-item{display:block} @@ -494,7 +494,7 @@ div.panel.border-right{border-right:1px solid #e8eaeb} div.panel.border-bottom{border-bottom:1px solid #e8eaeb} div.panel.border-top{border-top:1px solid #e8eaeb} div.panel.triangle-down{position:relative} -div.panel.triangle-down:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #fff;border-bottom-width:0;position:absolute;left:15px;bottom:-8px;z-index:101} +div.panel.triangle-down:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid white;border-bottom-width:0;position:absolute;left:15px;bottom:-8px;z-index:101} div.panel.triangle-down:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid #e8eaeb;border-bottom-width:0;position:absolute;left:14px;bottom:-9px;z-index:100} div.panel h3.section, div.panel>label{text-transform:uppercase;color:#95a5a6;font-size:13px;font-weight:600;margin:0 0 15px 0} @@ -650,7 +650,7 @@ body.slim-container .layout .layout-container{padding-left:0 !important;padding- @supports (-moz-appearance:none){a:focus:not(:focus-visible){outline:none}} .flex-layout-column{display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:-ms-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column} .flex-layout-column.full-height-strict{height:100%} -.flex-layout-column.absolute{position:absolute !important} +.flex-layout-column.absolute{position:absolute!important} .flex-layout-column.fill-container{position:absolute;left:0;top:0;width:100%;height:100%} .flex-layout-row{display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:-ms-flex;display:flex;-webkit-flex-direction:row;-moz-flex-direction:row;-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row} .flex-layout-column.justify-center, @@ -671,7 +671,7 @@ body.mainmenu-open{overflow:hidden;position:fixed} ul.mainmenu-nav{font-size:14px} ul.mainmenu-nav li{} ul.mainmenu-nav li .svg-icon{-webkit-backface-visibility:hidden;backface-visibility:hidden} -ul.mainmenu-nav li span.counter{display:block;position:absolute;top:.143em;right:0;padding:.143em .429em .214em .286em;background-color:#d9350f;color:#fff;font-size:.786em;line-height:100%;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1,);-ms-transform:scale(1,);transform:scale(1,);-webkit-transition:all 0.3s;transition:all 0.3s} +ul.mainmenu-nav li span.counter{display:block;position:absolute;top:0.143em;right:0;padding:0.143em 0.429em 0.214em 0.286em;background-color:#d9350f;color:#fff;font-size:0.786em;line-height:100%;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1,);-ms-transform:scale(1,);transform:scale(1,);-webkit-transition:all 0.3s;transition:all 0.3s} ul.mainmenu-nav li span.counter.empty{opacity:0;filter:alpha(opacity=0);-webkit-transform:scale(0,);-ms-transform:scale(0,);transform:scale(0,)} nav#layout-mainmenu{background-color:#151515;padding:0 0 0 20px;line-height:0;white-space:nowrap;display:flex} nav#layout-mainmenu a{text-decoration:none} @@ -758,7 +758,7 @@ nav#layout-mainmenu.navbar-mode-tile ul.mainmenu-nav li:first-child{margin-left: nav#layout-mainmenu.navbar-mode-tile ul.mainmenu-nav li:hover .nav-label{width:auto;min-width:100px;text-overflow:all;overflow:visible;z-index:2} nav#layout-mainmenu.navbar-mode-tile ul.mainmenu-nav li.active:first-child{margin-left:0} nav#layout-mainmenu .menu-toggle{height:45px;line-height:45px;font-size:16px;display:none} -nav#layout-mainmenu .menu-toggle .menu-toggle-icon{background:#333;display:inline-block;height:45px;line-height:45px;width:45px;text-align:center;opacity:.7} +nav#layout-mainmenu .menu-toggle .menu-toggle-icon{background:#333;display:inline-block;height:45px;line-height:45px;width:45px;text-align:center;opacity:0.7} nav#layout-mainmenu .menu-toggle .menu-toggle-icon i{line-height:45px;font-size:20px;vertical-align:bottom} nav#layout-mainmenu .menu-toggle .menu-toggle-title{margin-left:10px} nav#layout-mainmenu .menu-toggle:hover .menu-toggle-icon{opacity:1} @@ -820,7 +820,7 @@ body.drag .mainmenu-collapsed ul li:hover{color:rgba(255,255,255,0.6)} #layout-sidenav{position:absolute;height:100%;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:14px} #layout-sidenav ul{position:relative;margin:0;padding:0;height:100%;overflow:hidden} #layout-sidenav ul li{display:block;text-align:center;position:relative} -#layout-sidenav ul li a{padding:1.429em .714em;display:block;font-size:.929em;color:rgba(255,255,255,0.6);font-weight:normal;position:relative} +#layout-sidenav ul li a{padding:1.429em 0.714em;display:block;font-size:0.929em;color:rgba(255,255,255,0.6);font-weight:normal;position:relative} #layout-sidenav ul li a:hover{text-decoration:none;background-color:transparent} #layout-sidenav ul li a:focus{background:transparent} #layout-sidenav ul li a i{color:rgba(255,255,255,0.6);display:block;margin-bottom:5px;font-size:2em} @@ -829,7 +829,7 @@ body.drag .mainmenu-collapsed ul li:hover{color:rgba(255,255,255,0.6)} #layout-sidenav ul li a:hover{color:#fff} #layout-sidenav ul li.active a i, #layout-sidenav ul li a:hover i{color:#fff} -#layout-sidenav ul li span.counter{display:block;position:absolute;top:1.071em;right:1.071em;padding:.143em .429em .214em .286em;background-color:#d9350f;color:#fff;font-size:.786em;line-height:100%;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1,);-ms-transform:scale(1,);transform:scale(1,);-webkit-transition:all 0.3s;transition:all 0.3s} +#layout-sidenav ul li span.counter{display:block;position:absolute;top:1.071em;right:1.071em;padding:0.143em 0.429em 0.214em 0.286em;background-color:#d9350f;color:#fff;font-size:0.786em;line-height:100%;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1,);-ms-transform:scale(1,);transform:scale(1,);-webkit-transition:all 0.3s;transition:all 0.3s} #layout-sidenav ul li span.counter.empty{opacity:0;filter:alpha(opacity=0);-webkit-transform:scale(0,);-ms-transform:scale(0,);transform:scale(0,)} @media (min-width:768px) and (max-width:991px){#layout-sidenav{font-size:12px}.layout-sidenav-container{width:100px}} @media (max-width:767px){#layout-sidenav{font-size:10px}.layout-sidenav-container{width:80px}} @@ -955,7 +955,7 @@ body.fancy-layout .master-tabs.control-tabs>.tab-content>.tab-pane.padded-pane, .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.primary-tabs.master-area>div>ul.nav-tabs, *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.fancy-layout.primary-tabs.master-area>div>ul.nav-tabs{-webkit-transition:background-color 0.5s;transition:background-color 0.5s;background:#2da7c7} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.primary-tabs>div>ul.nav-tabs, -*:not(.nested-form)>.form-widget>.layout-row>.control-tabs.fancy-layout.primary-tabs>div>ul.nav-tabs{background:#7f8c8d;margin-left:0 !important;margin-right:0 !important} +*:not(.nested-form)>.form-widget>.layout-row>.control-tabs.fancy-layout.primary-tabs>div>ul.nav-tabs{background:#7F8C8D;margin-left:0!important;margin-right:0!important} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.primary-tabs>div>ul.nav-tabs:before, *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.fancy-layout.primary-tabs>div>ul.nav-tabs:before{display:none} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.primary-tabs>div>ul.nav-tabs>li, @@ -1011,7 +1011,7 @@ body.fancy-layout .master-tabs.control-tabs>.tab-content>.tab-pane.padded-pane, .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.secondary-tabs.secondary-content-tabs>div>ul.nav-tabs>li{margin-left:-19px} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.secondary-tabs.secondary-content-tabs>div>ul.nav-tabs>li:first-child{margin-left:0;padding-left:8px} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.secondary-tabs.secondary-content-tabs>div>ul.nav-tabs>li a{padding:8px 16px 0 16px;font-weight:400;height:36px;color:#2b3e50;opacity:0.6;filter:alpha(opacity=60)} -.fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.secondary-tabs.secondary-content-tabs>div>ul.nav-tabs>li a>span.title{position:relative;display:inline-block;padding:8px 5px 9px 5px;font-size:14px;z-index:100;height:27px !important;background-color:transparent} +.fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.secondary-tabs.secondary-content-tabs>div>ul.nav-tabs>li a>span.title{position:relative;display:inline-block;padding:8px 5px 9px 5px;font-size:14px;z-index:100;height:27px!important;background-color:transparent} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.secondary-tabs.secondary-content-tabs>div>ul.nav-tabs>li a>span.title:before, .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.secondary-tabs.secondary-content-tabs>div>ul.nav-tabs>li a>span.title:after{content:' ';position:absolute;background-color:white;width:15px;height:28px;top:0;z-index:100;display:none} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs.secondary-tabs.secondary-content-tabs>div>ul.nav-tabs>li a>span.title:before{left:-11px;-webkit-border-radius:8px 0 0 0;-moz-border-radius:8px 0 0 0;border-radius:8px 0 0 0;-webkit-transform:skewX(-20deg);-ms-transform:skewX(-20deg);transform:skewX(-20deg)} @@ -1035,6 +1035,7 @@ body.fancy-layout .master-tabs.control-tabs>.tab-content>.tab-pane.padded-pane, .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.form-tabless-fields:after{content:" ";display:table} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.form-tabless-fields:after{clear:both} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.form-tabless-fields label{text-transform:uppercase;color:rgba(255,255,255,0.5);margin-bottom:0} +.fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.form-tabless-fields .form-control[disabled]{background-color:rgba(29,29,29,0.11) !important} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.form-tabless-fields input[type=text]{background:transparent;border:none;color:#fff;font-size:35px;font-weight:100;height:auto;padding:0;-webkit-box-shadow:none;box-shadow:none} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.form-tabless-fields input[type=text]::-moz-placeholder{color:rgba(255,255,255,0.5);opacity:1} .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.form-tabless-fields input[type=text]:-ms-input-placeholder{color:rgba(255,255,255,0.5)} @@ -1059,11 +1060,11 @@ body.breadcrumb-fancy .control-breadcrumb, body.breadcrumb-fancy .control-breadcrumb li, .control-breadcrumb.breadcrumb-fancy li{background-color:#0e7d9a;color:rgba(255,255,255,0.5)} body.breadcrumb-fancy .control-breadcrumb li a, -.control-breadcrumb.breadcrumb-fancy li a{opacity:.5;-webkit-transition:all 0.3s ease;transition:all 0.3s ease} +.control-breadcrumb.breadcrumb-fancy li a{opacity:0.5;-webkit-transition:all 0.3s ease;transition:all 0.3s ease} body.breadcrumb-fancy .control-breadcrumb li a:hover, .control-breadcrumb.breadcrumb-fancy li a:hover{opacity:1} body.breadcrumb-fancy .control-breadcrumb li:not(:last-child)::before, -.control-breadcrumb.breadcrumb-fancy li:not(:last-child)::before{border-left-color:#2da7c7;opacity:.5} +.control-breadcrumb.breadcrumb-fancy li:not(:last-child)::before{border-left-color:#2da7c7;opacity:0.5} body.breadcrumb-fancy .control-breadcrumb li:after, .control-breadcrumb.breadcrumb-fancy li:after{border-left-color:#0e7d9a} body.breadcrumb-fancy .control-breadcrumb li:last-child, @@ -1097,7 +1098,7 @@ body.breadcrumb-fancy .control-breadcrumb li:last-child:before, body.side-panel-not-fixed .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs>.tab-content>.tab-pane>.form-group>.field-richeditor, body.side-panel-not-fixed.fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.control-tabs>.tab-content>.tab-pane>.form-group>.field-richeditor{border-left:none} html.cssanimations .fancy-layout *:not(.nested-form)>.form-widget>.layout-row>.form-tabless-fields .loading-indicator-container .loading-indicator>span{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite;background-image:url('../../../system/assets/ui/images/loader-white.svg');background-size:20px 20px} -.flyout-container>.flyout{overflow:hidden;width:0;left:0 !important;-webkit-transition:width 0.1s;transition:width 0.1s} +.flyout-container>.flyout{overflow:hidden;width:0;left:0!important;-webkit-transition:width 0.1s;transition:width 0.1s} .flyout-overlay{width:100%;height:100%;top:0;z-index:5000;position:absolute;background-color:rgba(0,0,0,0);-webkit-transition:background-color 0.3s;transition:background-color 0.3s} .flyout-toggle{position:absolute;top:20px;left:0;width:23px;height:25px;background:#2b3e50;cursor:pointer;border-bottom-right-radius:4px;border-top-right-radius:4px;color:#bdc3c7;font-size:10px} .flyout-toggle i{margin:7px 0 0 6px;display:inline-block} diff --git a/modules/backend/assets/less/layout/fancylayout.less b/modules/backend/assets/less/layout/fancylayout.less index 61681fdc40..3fa21146fb 100644 --- a/modules/backend/assets/less/layout/fancylayout.less +++ b/modules/backend/assets/less/layout/fancylayout.less @@ -493,6 +493,10 @@ body.fancy-layout .master-tabs.control-tabs, margin-bottom: 0; } + .form-control[disabled] { + background-color: rgba(29, 29, 29, 0.11) !important; + } + input[type=text] { background: transparent; border: none; diff --git a/modules/backend/behaviors/FormController.php b/modules/backend/behaviors/FormController.php index ae58bb475f..1b6c125296 100644 --- a/modules/backend/behaviors/FormController.php +++ b/modules/backend/behaviors/FormController.php @@ -191,7 +191,9 @@ public function initForm($model, $context = null) protected function prepareVars($model) { $this->controller->vars['formModel'] = $model; + $this->controller->vars['formConfig'] = $this->getConfig(); $this->controller->vars['formContext'] = $this->formGetContext(); + $this->controller->vars['formController'] = $this; $this->controller->vars['formRecordName'] = Lang::get($this->getConfig('name', 'backend::lang.model.name')); } @@ -473,6 +475,10 @@ public function makeRedirect($context = null, $model = null) return Redirect::refresh(); } + if (post('new', false)) { + return Redirect::to($this->controller->actionUrl('create')); + } + if (post('redirect', true)) { $redirectUrl = $this->controller->formGetRedirectUrl($context, $model); } @@ -882,4 +888,20 @@ public static function extendFormFields($callback) call_user_func_array($callback, [$widget, $widget->model, $widget->getContext()]); }); } + + /** + * Controller accessor for making partials within this behavior. + */ + public function formMakePartial(string $partial, array $params = []): string + { + $contents = $this->controller->makePartial('form_' . $this->context . '_' . $partial, $params + $this->vars, false); + if (!$contents) { + $contents = $this->controller->makePartial('form_' . $partial, $params + $this->vars, false); + } + if (!$contents) { + $contents = $this->makePartial($partial, $params); + } + + return $contents; + } } diff --git a/modules/backend/behaviors/ImportExportController.php b/modules/backend/behaviors/ImportExportController.php index 057a0758a3..d8a4a02360 100644 --- a/modules/backend/behaviors/ImportExportController.php +++ b/modules/backend/behaviors/ImportExportController.php @@ -1,21 +1,22 @@ -checkPermissionsForType('import')) { - return $response; + if (!$this->userHasAccess('import')) { + abort(403); } $this->addJs('js/winter.import.js', 'core'); @@ -161,8 +162,8 @@ public function import() public function export() { - if ($response = $this->checkPermissionsForType('export')) { - return $response; + if (!$this->userHasAccess('export')) { + abort(403); } if ($response = $this->checkUseListExportMode()) { @@ -697,18 +698,18 @@ public function importExportMakePartial($partial, $params = []) } /** - * Checks to see if the import/export is controlled by permissions - * and if the logged in user has permissions. - * @return \View + * Check if the current user has access to the provided import/export action */ - protected function checkPermissionsForType($type) + public function userHasAccess(string $type): bool { if ( ($permissions = $this->getConfig($type.'[permissions]')) && (!BackendAuth::getUser()->hasAnyAccess((array) $permissions)) ) { - return Response::make(View::make('backend::access_denied'), 403); + return false; } + + return true; } protected function makeOptionsFormWidgetForType($type) diff --git a/modules/backend/behaviors/formcontroller/partials/_toolbar.php b/modules/backend/behaviors/formcontroller/partials/_toolbar.php new file mode 100644 index 0000000000..64e67a637e --- /dev/null +++ b/modules/backend/behaviors/formcontroller/partials/_toolbar.php @@ -0,0 +1,81 @@ +name ?? ''; +?> + +
= e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/behaviors/formcontroller/views/create/_sidebar.php b/modules/backend/behaviors/formcontroller/views/create/_sidebar.php new file mode 100644 index 0000000000..f278789de0 --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/create/_sidebar.php @@ -0,0 +1,40 @@ + + = $this->makeLayoutPartial('breadcrumb') ?> + + +fatalError): ?> + += e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/behaviors/formcontroller/views/create/fancy/_toolbar.php b/modules/backend/behaviors/formcontroller/views/create/fancy/_toolbar.php new file mode 100644 index 0000000000..df4540d560 --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/create/fancy/_toolbar.php @@ -0,0 +1,36 @@ + diff --git a/modules/backend/behaviors/formcontroller/views/preview.php b/modules/backend/behaviors/formcontroller/views/preview.php new file mode 100644 index 0000000000..1429909ce1 --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/preview.php @@ -0,0 +1,21 @@ +formLayout ?? $formConfig->formLayout ?? null; +if (!in_array($layout, ['standard', 'sidebar', 'fancy'])) { + $layout = 'standard'; +} + +// If required, set the appropriate body classes +$this->bodyClass = match ($layout) { + 'fancy' => 'fancy-layout compact-container breadcrumb-flush breadcrumb-fancy', + 'sidebar' => 'compact-container', + default => '', +}; + +// Define layout mode view path for inclusion +$this->appendViewPath(sprintf('%s/preview/%s', __DIR__, $layout)); + +// Render the form layout +echo $this->makePartial(sprintf('preview/%s.php', $layout)); diff --git a/modules/backend/behaviors/formcontroller/views/preview/_fancy.php b/modules/backend/behaviors/formcontroller/views/preview/_fancy.php new file mode 100644 index 0000000000..e7f9176c01 --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/preview/_fancy.php @@ -0,0 +1,14 @@ + + = $this->makeLayoutPartial('breadcrumb') ?> + + +fatalError): ?> + = Form::open(['class' => 'layout']) ?> += e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/behaviors/formcontroller/views/preview/_sidebar.php b/modules/backend/behaviors/formcontroller/views/preview/_sidebar.php new file mode 100644 index 0000000000..ab51d25c0f --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/preview/_sidebar.php @@ -0,0 +1,32 @@ + + = $this->makeLayoutPartial('breadcrumb') ?> + + +fatalError): ?> + += e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/behaviors/formcontroller/views/preview/fancy/_toolbar.php b/modules/backend/behaviors/formcontroller/views/preview/fancy/_toolbar.php new file mode 100644 index 0000000000..94212553b3 --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/preview/fancy/_toolbar.php @@ -0,0 +1 @@ + diff --git a/modules/backend/behaviors/formcontroller/views/update.php b/modules/backend/behaviors/formcontroller/views/update.php new file mode 100644 index 0000000000..eb439c1f9a --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/update.php @@ -0,0 +1,20 @@ +formLayout ?? $formConfig->formLayout ?? null; +if (!in_array($layout, ['standard', 'sidebar', 'fancy'])) { + $layout = 'standard'; +} + +// If required, set the appropriate body classes +$this->bodyClass .= match ($layout) { + 'fancy' => ' fancy-layout compact-container breadcrumb-flush breadcrumb-fancy', + 'sidebar' => ' compact-container', + default => '', +}; + +// Define layout mode view path for inclusion +$this->appendViewPath(sprintf('%s/update/%s', __DIR__, $layout)); + +// Render the form layout +echo $this->makePartial(sprintf('update/%s.php', $layout)); diff --git a/modules/backend/behaviors/formcontroller/views/update/_fancy.php b/modules/backend/behaviors/formcontroller/views/update/_fancy.php new file mode 100644 index 0000000000..2358dfc9d0 --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/update/_fancy.php @@ -0,0 +1,20 @@ + + = $this->makeLayoutPartial('breadcrumb') ?> + + +fatalError): ?> += e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/behaviors/formcontroller/views/update/_sidebar.php b/modules/backend/behaviors/formcontroller/views/update/_sidebar.php new file mode 100644 index 0000000000..f278789de0 --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/update/_sidebar.php @@ -0,0 +1,40 @@ + + = $this->makeLayoutPartial('breadcrumb') ?> + + +fatalError): ?> + += e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/behaviors/formcontroller/views/update/fancy/_toolbar.php b/modules/backend/behaviors/formcontroller/views/update/fancy/_toolbar.php new file mode 100644 index 0000000000..a7eaf55ec0 --- /dev/null +++ b/modules/backend/behaviors/formcontroller/views/update/fancy/_toolbar.php @@ -0,0 +1,53 @@ + diff --git a/modules/backend/behaviors/importexportcontroller/views/export.php b/modules/backend/behaviors/importexportcontroller/views/export.php new file mode 100644 index 0000000000..6c0be77f72 --- /dev/null +++ b/modules/backend/behaviors/importexportcontroller/views/export.php @@ -0,0 +1,24 @@ + + = $this->makeLayoutPartial('breadcrumb') ?> + + += Form::open(['class' => 'layout']) ?> + += e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/console/scaffold/controller/fancy/preview.stub b/modules/backend/console/scaffold/controller/fancy/preview.stub new file mode 100644 index 0000000000..e7f9176c01 --- /dev/null +++ b/modules/backend/console/scaffold/controller/fancy/preview.stub @@ -0,0 +1,14 @@ + + = $this->makeLayoutPartial('breadcrumb') ?> + + +fatalError): ?> + = Form::open(['class' => 'layout']) ?> += e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/console/scaffold/controller/fancy/update.stub b/modules/backend/console/scaffold/controller/fancy/update.stub new file mode 100644 index 0000000000..2358dfc9d0 --- /dev/null +++ b/modules/backend/console/scaffold/controller/fancy/update.stub @@ -0,0 +1,20 @@ + + = $this->makeLayoutPartial('breadcrumb') ?> + + +fatalError): ?> += e(trans('backend::lang.form.return_to_list')); ?>
+ diff --git a/modules/backend/console/scaffold/controller/sidebar/create.stub b/modules/backend/console/scaffold/controller/sidebar/create.stub index cfce78fa9c..fcdcfafeca 100644 --- a/modules/backend/console/scaffold/controller/sidebar/create.stub +++ b/modules/backend/console/scaffold/controller/sidebar/create.stub @@ -1,45 +1,18 @@ -