diff --git a/data/web/css/build/009-animate.min.css b/data/web/css/build/008-animate.min.css similarity index 99% rename from data/web/css/build/009-animate.min.css rename to data/web/css/build/008-animate.min.css index 104f7c40..e7dd6550 100644 --- a/data/web/css/build/009-animate.min.css +++ b/data/web/css/build/008-animate.min.css @@ -1,11 +1,11 @@ -@charset "UTF-8"; - -/*! - * animate.css -http://daneden.me/animate - * Version - 3.5.2 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2017 Daniel Eden - */ - +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.5.2 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2017 Daniel Eden + */ + .animated{animation-duration:1s;animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{animation-duration:.75s}@keyframes bounce{0%,20%,53%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{transform:translate3d(0,-4px,0)}}.bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{animation-name:flash}@keyframes pulse{0%{transform:scaleX(1)}50%{transform:scale3d(1.05,1.05,1.05)}to{transform:scaleX(1)}}.pulse{animation-name:pulse}@keyframes rubberBand{0%{transform:scaleX(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleX(1)}}.rubberBand{animation-name:rubberBand}@keyframes shake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes headShake{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}.headShake{animation-timing-function:ease-in-out;animation-name:headShake}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}to{transform:rotate(0deg)}}.swing{transform-origin:top center;animation-name:swing}@keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{transform:scaleX(1)}}.tada{animation-name:tada}@keyframes wobble{0%{transform:none}15%{transform:translate3d(-25%,0,0) rotate(-5deg)}30%{transform:translate3d(20%,0,0) rotate(3deg)}45%{transform:translate3d(-15%,0,0) rotate(-3deg)}60%{transform:translate3d(10%,0,0) rotate(2deg)}75%{transform:translate3d(-5%,0,0) rotate(-1deg)}to{transform:none}}.wobble{animation-name:wobble}@keyframes jello{0%,11.1%,to{transform:none}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{transform:skewX(.390625deg) skewY(.390625deg)}88.8%{transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{animation-name:jello;transform-origin:center}@keyframes bounceIn{0%,20%,40%,60%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleX(1)}}.bounceIn{animation-name:bounceIn}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}.bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}.bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}.bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}.bounceInUp{animation-name:bounceInUp}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-name:bounceOut}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}.bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}.bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}.bounceOutUp{animation-name:bounceOutUp}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{animation-name:fadeIn}@keyframes fadeInDown{0%{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:none}}.fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{0%{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:none}}.fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{0%{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:none}}.fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{0%{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:none}}.fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{0%{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:none}}.fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{0%{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:none}}.fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:none}}.fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{0%{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:none}}.fadeInUpBig{animation-name:fadeInUpBig}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes flip{0%{transform:perspective(400px) rotateY(-1turn);animation-timing-function:ease-out}40%{transform:perspective(400px) translateZ(150px) rotateY(-190deg);animation-timing-function:ease-out}50%{transform:perspective(400px) translateZ(150px) rotateY(-170deg);animation-timing-function:ease-in}80%{transform:perspective(400px) scale3d(.95,.95,.95);animation-timing-function:ease-in}to{transform:perspective(400px);animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;animation-name:flip}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInX}@keyframes flipInY{0%{transform:perspective(400px) rotateY(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateY(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateY(10deg);opacity:1}80%{transform:perspective(400px) rotateY(-5deg)}to{transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInY}@keyframes flipOutX{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateX(-20deg);opacity:1}to{transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes flipOutY{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateY(-15deg);opacity:1}to{transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipOutY}@keyframes lightSpeedIn{0%{transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{transform:skewX(20deg);opacity:1}80%{transform:skewX(-5deg);opacity:1}to{transform:none;opacity:1}}.lightSpeedIn{animation-name:lightSpeedIn;animation-timing-function:ease-out}@keyframes lightSpeedOut{0%{opacity:1}to{transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{animation-name:lightSpeedOut;animation-timing-function:ease-in}@keyframes rotateIn{0%{transform-origin:center;transform:rotate(-200deg);opacity:0}to{transform-origin:center;transform:none;opacity:1}}.rotateIn{animation-name:rotateIn}@keyframes rotateInDownLeft{0%{transform-origin:left bottom;transform:rotate(-45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInDownLeft{animation-name:rotateInDownLeft}@keyframes rotateInDownRight{0%{transform-origin:right bottom;transform:rotate(45deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInDownRight{animation-name:rotateInDownRight}@keyframes rotateInUpLeft{0%{transform-origin:left bottom;transform:rotate(45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInUpLeft{animation-name:rotateInUpLeft}@keyframes rotateInUpRight{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInUpRight{animation-name:rotateInUpRight}@keyframes rotateOut{0%{transform-origin:center;opacity:1}to{transform-origin:center;transform:rotate(200deg);opacity:0}}.rotateOut{animation-name:rotateOut}@keyframes rotateOutDownLeft{0%{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{animation-name:rotateOutDownLeft}@keyframes rotateOutDownRight{0%{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{animation-name:rotateOutDownRight}@keyframes rotateOutUpLeft{0%{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{animation-name:rotateOutUpLeft}@keyframes rotateOutUpRight{0%{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate(90deg);opacity:0}}.rotateOutUpRight{animation-name:rotateOutUpRight}@keyframes hinge{0%{transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate(80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-name:hinge}@keyframes jackInTheBox{0%{opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.jackInTheBox{animation-name:jackInTheBox}@keyframes rollIn{0%{opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;transform:none}}.rollIn{animation-name:rollIn}@keyframes rollOut{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{animation-name:rollOut}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{animation-name:zoomIn}@keyframes zoomInDown{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{animation-name:zoomInUp}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{animation-name:zoomOutDown}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}.zoomOutLeft{animation-name:zoomOutLeft}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}.zoomOutRight{animation-name:zoomOutRight}@keyframes zoomOutUp{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{animation-name:zoomOutUp}@keyframes slideInDown{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}.slideInDown{animation-name:slideInDown}@keyframes slideInLeft{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInLeft{animation-name:slideInLeft}@keyframes slideInRight{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInRight{animation-name:slideInRight}@keyframes slideInUp{0%{transform:translate3d(0,100%,0);visibility:visible}to{transform:translateZ(0)}}.slideInUp{animation-name:slideInUp}@keyframes slideOutDown{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,100%,0)}}.slideOutDown{animation-name:slideOutDown}@keyframes slideOutLeft{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(-100%,0,0)}}.slideOutLeft{animation-name:slideOutLeft}@keyframes slideOutRight{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}.slideOutRight{animation-name:slideOutRight}@keyframes slideOutUp{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,-100%,0)}}.slideOutUp{animation-name:slideOutUp} \ No newline at end of file diff --git a/data/web/css/build/010-numberedtextarea.min.css b/data/web/css/build/009-numberedtextarea.min.css similarity index 100% rename from data/web/css/build/010-numberedtextarea.min.css rename to data/web/css/build/009-numberedtextarea.min.css diff --git a/data/web/css/build/011-jquery.jqplot.min.css b/data/web/css/build/010-jquery.jqplot.min.css similarity index 100% rename from data/web/css/build/011-jquery.jqplot.min.css rename to data/web/css/build/010-jquery.jqplot.min.css diff --git a/data/web/css/build/012-datatables.css b/data/web/css/build/011-datatables.css similarity index 100% rename from data/web/css/build/012-datatables.css rename to data/web/css/build/011-datatables.css diff --git a/data/web/css/build/013-bootstrap-icons.css b/data/web/css/build/012-bootstrap-icons.css similarity index 100% rename from data/web/css/build/013-bootstrap-icons.css rename to data/web/css/build/012-bootstrap-icons.css diff --git a/data/web/css/build/008-mailcow.css b/data/web/css/build/013-mailcow.css similarity index 91% rename from data/web/css/build/008-mailcow.css rename to data/web/css/build/013-mailcow.css index e2e17b68..932857da 100644 --- a/data/web/css/build/008-mailcow.css +++ b/data/web/css/build/013-mailcow.css @@ -1,256 +1,253 @@ -@font-face { - font-family: 'Noto Sans'; - font-style: normal; - font-weight: 400; - src: local(''), - url('/fonts/noto-sans-v12-latin_greek_cyrillic-regular.woff2') format('woff2'), - url('/fonts/noto-sans-v12-latin_greek_cyrillic-regular.woff') format('woff'); -} - -@font-face { - font-family: 'Noto Sans'; - font-style: normal; - font-weight: 700; - src: local(''), - url('/fonts/noto-sans-v12-latin_greek_cyrillic-700.woff2') format('woff2'), - url('/fonts/noto-sans-v12-latin_greek_cyrillic-700.woff') format('woff'); -} - -@font-face { - font-family: 'Noto Sans'; - font-style: italic; - font-weight: 400; - src: local(''), - url('/fonts/noto-sans-v12-latin_greek_cyrillic-italic.woff2') format('woff2'), - url('/fonts/noto-sans-v12-latin_greek_cyrillic-italic.woff') format('woff'); -} - -@font-face { - font-family: 'Noto Sans'; - font-style: italic; - font-weight: 700; - src: local(''), - url('/fonts/noto-sans-v12-latin_greek_cyrillic-700italic.woff2') format('woff2'), - url('/fonts/noto-sans-v12-latin_greek_cyrillic-700italic.woff') format('woff'); -} -#maxmsgsize { min-width: 80px; } -#slider1 .slider-selection { - background: #FFD700; -} -#slider1 .slider-track-high { - background: #FF4500; -} -#slider1 .slider-track-low { - background: #66CD00; -} -.striped:nth-child(odd) { - background-color: #fff; -} -.striped:nth-child(even) { - background-color: #fafafa; - border:1px solid white; -} -.btn { - text-transform: none; -} -.btn * { - pointer-events: none; -} -.textarea-code { - font-family:Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace; - background:transparent !important; -} -.navbar-nav { - margin: 0; -} -.navbar-fixed-bottom .navbar-collapse, -.navbar-fixed-top .navbar-collapse { - max-height: 1000px -} -.bi { - display: inline-block; - font-size: 12pt; -} -.btn .bi { - display: inline-block; - font-size: inherit; -} -.btn-group-xs > .btn, .btn-xs { - padding: .25rem .4rem; - font-size: .875rem; - line-height: .5; - border-radius: .2rem; -} -.icon-spin { - animation-name: spin; - animation-duration: 2000ms; - animation-iteration-count: infinite; - animation-timing-function: linear; - -webkit-animation: spin 2000ms infinite linear; -} -.dropdown-menu { - font-size: 0.9rem; -} -@-webkit-keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;} -.footable-sortable { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -/* Fix modal moving content left */ -body.modal-open { - overflow: inherit; - padding-right: inherit !important; -} -body { - font-family: "Noto Sans","Helvetica Neue",Helvetica,Arial,sans-serif; - font-size: 10.5pt; - line-height: 1.5; -} -html { - font-family: "Noto Sans","Helvetica Neue",Helvetica,Arial,sans-serif; - font-size: 10.5pt; - line-height: 1.5; -} -#mailcow-alert { - position: fixed; - bottom: 8px; - right: 25px; - min-width: 350px; - max-width: 550px; - z-index: 2000; -} -.input-group-sm .btn { margin-top: 0 !important } -legend { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; - font-size: 1.2rem; -} -.navbar .navbar-brand { - padding-top: 5px; -} -.navbar .navbar-brand img { - height: 40px; -} -.mailcow-logo img { - max-width: 250px; -} -.lang-link-disabled a { - pointer-events: none; -} -.lang-link-disabled { - cursor: not-allowed; -} -.overlay { - background: #fff; - position: absolute; - z-index: 10000; - top: 0; right: 0; bottom: 0; left: 0; - opacity: 0.7; -} -.bootstrap-select.btn-group .no-results { - display: none; -} -.haveibeenpwned { - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.full-width-select { - width: 100%!important; -} -.tooltip { - font-family: inherit; - font-size: 0.8rem; -} -.progress-bar { - font-size: 0.8rem; - line-height: 14px; -} -.footer { - margin-top: 27px; - margin-bottom: 20px; - color: #959595; - display: flex; - flex-direction: column; -} -.footer .version { - margin-left: auto; - margin-top: 20px; -} -.slave-info { - padding: 15px 0px 15px 15px; - font-weight: bold; -} -.alert-hr { - margin:3px 0px; - border-bottom:1px solid #f5f5f5!important; - opacity: 0.3; -} -.btn-input-missing, -.btn-input-missing:hover, -.btn-input-missing:active, -.btn-input-missing:focus, -.btn-input-missing:active:hover, -.btn-input-missing:active:focus { - color: #000 !important; - background-color: #ff4136; - border-color: #ff291c; -} -table.footable>tbody>tr.footable-empty>td { - font-style:italic; - font-size: 1rem; -} -.navbar-nav > li { - font-size: 1rem !important; -} -.dropdown-menu > li > a { - font-size: 1rem !important; -} -.label { - font-size:inherit; -} -[class^="bi-"]::before, [class*=" bi-"]::before { - vertical-align: -0.2em !important; -} -legend > [class^="bi-"]::before, legend > [class*=" bi-"]::before { - vertical-align: 0em !important; -} -code { - font-size: inherit; -} -.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark { - margin-top: 0px; -} -.flag-icon { - margin-right: 5px; -} -.dropdown-header { - font-weight: 600; +@font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local(''), + url('/fonts/noto-sans-v12-latin_greek_cyrillic-regular.woff2') format('woff2'), + url('/fonts/noto-sans-v12-latin_greek_cyrillic-regular.woff') format('woff'); +} + +@font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 700; + src: local(''), + url('/fonts/noto-sans-v12-latin_greek_cyrillic-700.woff2') format('woff2'), + url('/fonts/noto-sans-v12-latin_greek_cyrillic-700.woff') format('woff'); +} + +@font-face { + font-family: 'Noto Sans'; + font-style: italic; + font-weight: 400; + src: local(''), + url('/fonts/noto-sans-v12-latin_greek_cyrillic-italic.woff2') format('woff2'), + url('/fonts/noto-sans-v12-latin_greek_cyrillic-italic.woff') format('woff'); +} + +@font-face { + font-family: 'Noto Sans'; + font-style: italic; + font-weight: 700; + src: local(''), + url('/fonts/noto-sans-v12-latin_greek_cyrillic-700italic.woff2') format('woff2'), + url('/fonts/noto-sans-v12-latin_greek_cyrillic-700italic.woff') format('woff'); +} +#maxmsgsize { min-width: 80px; } +#slider1 .slider-selection { + background: #FFD700; +} +#slider1 .slider-track-high { + background: #FF4500; +} +#slider1 .slider-track-low { + background: #66CD00; +} +.striped:nth-child(odd) { + background-color: #fff; +} +.striped:nth-child(even) { + background-color: #fafafa; + border:1px solid white; +} +.btn { + text-transform: none; +} +.btn * { + pointer-events: none; +} +.textarea-code { + font-family:Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace; + background:transparent !important; +} +.navbar-nav { + margin: 0; +} +.navbar-fixed-bottom .navbar-collapse, +.navbar-fixed-top .navbar-collapse { + max-height: 1000px +} +.bi { + display: inline-block; + font-size: 12pt; +} +.btn .bi { + display: inline-block; + font-size: inherit; +} +.btn-group-xs > .btn, .btn-xs { + padding: .25rem .4rem; + font-size: .875rem; + line-height: .5; + border-radius: .2rem; +} +.icon-spin { + animation-name: spin; + animation-duration: 2000ms; + animation-iteration-count: infinite; + animation-timing-function: linear; + -webkit-animation: spin 2000ms infinite linear; +} +.dropdown-menu { + font-size: 0.9rem; +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;} +/* Fix modal moving content left */ +body.modal-open { + overflow: inherit; + padding-right: inherit !important; +} +body { + font-family: "Noto Sans","Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 10.5pt; + line-height: 1.5; +} +html { + font-family: "Noto Sans","Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 10.5pt; + line-height: 1.5; +} +#mailcow-alert { + position: fixed; + bottom: 8px; + right: 25px; + min-width: 350px; + max-width: 550px; + z-index: 2000; +} +.input-group-sm .btn { margin-top: 0 !important } +legend { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; + font-size: 1.2rem; +} +.navbar .navbar-brand { + padding-top: 5px; +} +.navbar .navbar-brand img { + height: 40px; +} +.mailcow-logo img { + max-width: 250px; +} +.lang-link-disabled a { + pointer-events: none; +} +.lang-link-disabled { + cursor: not-allowed; +} +.overlay { + background: #fff; + position: absolute; + z-index: 10000; + top: 0; right: 0; bottom: 0; left: 0; + opacity: 0.7; +} +.bootstrap-select.btn-group .no-results { + display: none; +} +.haveibeenpwned { + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.full-width-select { + width: 100%!important; +} +.tooltip { + font-family: inherit; + font-size: 0.8rem; +} +.progress-bar { + font-size: 0.8rem; + line-height: 14px; +} +.footer { + margin-top: 27px; + margin-bottom: 20px; + color: #959595; + display: flex; + flex-direction: column; +} +.footer .version { + margin-left: auto; + margin-top: 20px; +} +.slave-info { + padding: 15px 0px 15px 15px; + font-weight: bold; +} +.alert-hr { + margin:3px 0px; + border-bottom:1px solid #f5f5f5!important; + opacity: 0.3; +} +.btn-input-missing, +.btn-input-missing:hover, +.btn-input-missing:active, +.btn-input-missing:focus, +.btn-input-missing:active:hover, +.btn-input-missing:active:focus { + color: #000 !important; + background-color: #ff4136; + border-color: #ff291c; +} +.navbar-nav > li { + font-size: 1rem !important; +} +.dropdown-menu > li > a { + font-size: 1rem !important; +} +.label { + font-size:inherit; +} +[class^="bi-"]::before, [class*=" bi-"]::before { + vertical-align: -0.2em !important; +} +legend > [class^="bi-"]::before, legend > [class*=" bi-"]::before { + vertical-align: 0em !important; +} +code { + font-size: inherit; +} +.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark { + margin-top: 0px; +} +.flag-icon { + margin-right: 5px; +} +.dropdown-header { + font-weight: 600; +} +.dataTables_info { + margin: 15px !important; + padding: 0px !important; +} +.dataTables_paginate, .dataTables_length, .dataTables_filter { + margin: 15px !important; } \ No newline at end of file diff --git a/data/web/debug.php b/data/web/debug.php index 2c1baec0..9cee06b9 100644 --- a/data/web/debug.php +++ b/data/web/debug.php @@ -53,6 +53,7 @@ $template_data = [ 'clamd_status' => $clamd_status, 'containers' => $containers, 'lang_admin' => json_encode($lang['admin']), + 'lang_datatables' => json_encode($lang['datatables']), ]; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php'; diff --git a/data/web/js/site/debug.js b/data/web/js/site/debug.js index 8f4c0f65..9a239159 100644 --- a/data/web/js/site/debug.js +++ b/data/web/js/site/debug.js @@ -52,9 +52,7 @@ jQuery(function($){ $(".refresh_table").on('click', function(e) { e.preventDefault(); var table_name = $(this).data('table'); - $('#' + table_name).find("tr.footable-empty").remove(); - draw_table = $(this).data('draw'); - eval(draw_table + '()'); + $('#' + table_name).DataTable().ajax.reload(); }); function table_log_ready(ft, name) { heading = ft.$el.parents('.card').find('.card-header') @@ -73,408 +71,435 @@ jQuery(function($){ localStorage.setItem('current_page', JSON.stringify(current_page)); } function draw_autodiscover_logs() { - ft_autodiscover_logs = FooTable.init('#autodiscover_log', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"ua","title":"User-Agent","style":{"min-width":"200px"}}, - {"name":"user","title":"Username","style":{"min-width":"200px"}}, - {"name":"ip","title":"IP","style":{"min-width":"200px"}}, - {"name":"service","title":"Service"}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/autodiscover/100', - jsonp: false, - error: function () { - console.log('Cannot draw autodiscover log table'); - }, - success: function (data) { + $('#autodiscover_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/autodiscover/100", + dataSrc: function(data){ return process_table_data(data, 'autodiscover_log'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'autodiscover_logs'); + { + title: 'User-Agent', + data: 'ua' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'autodiscover_logs'); + { + title: 'Username', + data: 'user' + }, + { + title: 'IP', + data: 'ip' + }, + { + title: 'Service', + data: 'service' } - } + ] }); } function draw_postfix_logs() { - ft_postfix_logs = FooTable.init('#postfix_log', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"priority","title":lang.priority,"style":{"width":"80px"}}, - {"name":"message","title":lang.message}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/postfix', - jsonp: false, - error: function () { - console.log('Cannot draw postfix log table'); - }, - success: function (data) { + $('#postfix_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/postfix", + dataSrc: function(data){ return process_table_data(data, 'general_syslog'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'postfix_logs'); + { + title: lang.priority, + data: 'priority' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'postfix_logs'); + { + title: lang.message, + data: 'message' } - } + ] }); } function draw_watchdog_logs() { - ft_watchdog_logs = FooTable.init('#watchdog_log', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"service","title":"Service"}, - {"name":"trend","title":"Trend"}, - {"name":"message","title":lang.message}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/watchdog', - jsonp: false, - error: function () { - console.log('Cannot draw watchdog log table'); - }, - success: function (data) { + $('#watchdog_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/watchdog", + dataSrc: function(data){ return process_table_data(data, 'watchdog'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'postfix_logs'); + { + title: 'Service', + data: 'service' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'postfix_logs'); + { + title: 'Trend', + data: 'trend' + }, + { + title: lang.message, + data: 'message' } - } + ] }); } function draw_api_logs() { - ft_api_logs = FooTable.init('#api_log', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"uri","title":"URI","style":{"width":"310px"}}, - {"name":"method","title":"Method","style":{"width":"80px"}}, - {"name":"remote","title":"IP","style":{"width":"80px"}}, - {"name":"data","title":"Data","breakpoints": "all","style":{"word-break":"break-all"}}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/api', - jsonp: false, - error: function () { - console.log('Cannot draw api log table'); - }, - success: function (data) { + $('#api_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/api", + dataSrc: function(data){ return process_table_data(data, 'apilog'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'api_logs'); + { + title: 'URI', + data: 'uri' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'api_logs'); + { + title: 'Method', + data: 'method' + }, + { + title: 'IP', + data: 'remote' + }, + { + title: 'Data', + data: 'data' } - } + ] }); } function draw_rl_logs() { - ft_rl_logs = FooTable.init('#rl_log', { - "columns": [ - {"name":"indicator","title":" ","style":{"width":"50px"}}, - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.last_applied,"style":{"width":"170px"}}, - {"name":"rl_name","title":lang.rate_name}, - {"name":"from","title":lang.sender}, - {"name":"rcpt","title":lang.recipients}, - {"name":"user","title":lang.authed_user}, - {"name":"message_id","title":"Msg ID","breakpoints": "all","style":{"word-break":"break-all"}}, - {"name":"header_from","title":"Header From","breakpoints": "all","style":{"word-break":"break-all"}}, - {"name":"header_subject","title":"Subject","breakpoints": "all","style":{"word-break":"break-all"}}, - {"name":"rl_hash","title":"Hash","breakpoints": "all","style":{"word-break":"break-all"}}, - {"name":"qid","title":"Rspamd QID","breakpoints": "all","style":{"word-break":"break-all"}}, - {"name":"ip","title":"IP","breakpoints": "all","style":{"word-break":"break-all"}}, - {"name":"action","title":lang.action,"breakpoints": "all","style":{"word-break":"break-all"}}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/ratelimited', - jsonp: false, - error: function () { - console.log('Cannot draw rl log table'); - }, - success: function (data) { + $('#rl_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/ratelimited", + dataSrc: function(data){ return process_table_data(data, 'rllog'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: ' ', + data: 'indicator' }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'rl_logs'); + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'rl_logs'); + { + title: lang.rate_name, + data: 'rl_name' + }, + { + title: lang.sender, + data: 'from' + }, + { + title: lang.recipients, + data: 'rcpt' + }, + { + title: lang.authed_user, + data: 'user' + }, + { + title: 'Msg ID', + data: 'message_id' + }, + { + title: 'Header From', + data: 'header_from' + }, + { + title: 'Subject', + data: 'header_subject' + }, + { + title: 'Hash', + data: 'rl_hash' + }, + { + title: 'Rspamd QID', + data: 'qid' + }, + { + title: 'IP', + data: 'ip' + }, + { + title: lang.action, + data: 'action' } - } + ] }); } function draw_ui_logs() { - ft_api_logs = FooTable.init('#ui_logs', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"type","title":"Type"}, - {"name":"task","title":"Task"}, - {"name":"user","title":"User"}, - {"name":"role","title":"Role"}, - {"name":"remote","title":"IP"}, - {"name":"msg","title":lang.message,"style":{"word-break":"break-all"}}, - {"name":"call","title":"Call","breakpoints": "all"} - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/ui', - jsonp: false, - error: function () { - console.log('Cannot draw ui log table'); - }, - success: function (data) { + $('#ui_logs').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/ui", + dataSrc: function(data){ return process_table_data(data, 'mailcow_ui'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'ui_logs'); + { + title: 'Type', + data: 'type' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'ui_logs'); + { + title: 'Task', + data: 'task' + }, + { + title: 'User', + data: 'user' + }, + { + title: 'Role', + data: 'role' + }, + { + title: 'IP', + data: 'remote' + }, + { + title: lang.message, + data: 'msg' + }, + { + title: 'Call', + data: 'call' } - } + ] }); } function draw_sasl_logs() { - ft_api_logs = FooTable.init('#sasl_logs', { - "columns": [ - {"name":"username","title":lang.username}, - {"name":"service","title":lang.service}, - {"name":"real_rip","title":"IP"}, - {"sorted": true,"sortValue": function(value){res = new Date(value);return res.getTime();},"direction":"DESC","name":"datetime","formatter":function date_format(datetime) { var date = new Date(datetime.replace(/-/g, "/")); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.login_time,"style":{"width":"170px"}}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/sasl', - jsonp: false, - error: function () { - console.log('Cannot draw sasl log table'); - }, - success: function (data) { + $('#sasl_logs').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/sasl", + dataSrc: function(data){ return process_table_data(data, 'sasl_log_table'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.username, + data: 'username' }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'sasl_logs'); + { + title: lang.service, + data: 'service' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'sasl_logs'); + { + title: 'IP', + data: 'real_rip' + }, + { + title: lang.login_time, + data: 'datetime', + render: function(data, type){ + var date = new Date(data.replace(/-/g, "/")); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } } - } + ] }); } function draw_acme_logs() { - ft_acme_logs = FooTable.init('#acme_log', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"message","title":lang.message,"style":{"word-break":"break-all"}}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/acme', - jsonp: false, - error: function () { - console.log('Cannot draw acme log table'); - }, - success: function (data) { + $('#acme_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/acme", + dataSrc: function(data){ return process_table_data(data, 'general_syslog'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'acme_logs'); - }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'acme_logs'); + { + title: lang.message, + data: 'message' } - } + ] }); } function draw_netfilter_logs() { - ft_netfilter_logs = FooTable.init('#netfilter_log', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"priority","title":lang.priority,"style":{"width":"80px"}}, - {"name":"message","title":lang.message}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/netfilter', - jsonp: false, - error: function () { - console.log('Cannot draw netfilter log table'); - }, - success: function (data) { + $('#netfilter_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/netfilter", + dataSrc: function(data){ return process_table_data(data, 'general_syslog'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'netfilter_logs'); + { + title: lang.priority, + data: 'priority' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'netfilter_logs'); + { + title: lang.message, + data: 'message' } - } + ] }); } function draw_sogo_logs() { - ft_sogo_logs = FooTable.init('#sogo_log', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"priority","title":lang.priority,"style":{"width":"80px"}}, - {"name":"message","title":lang.message}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/sogo', - jsonp: false, - error: function () { - console.log('Cannot draw sogo log table'); - }, - success: function (data) { + $('#sogo_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/sogo", + dataSrc: function(data){ return process_table_data(data, 'general_syslog'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'sogo_logs'); + { + title: lang.priority, + data: 'priority' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'sogo_logs'); + { + title: lang.message, + data: 'message' } - } + ] }); } function draw_dovecot_logs() { - ft_dovecot_logs = FooTable.init('#dovecot_log', { - "columns": [ - {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name":"priority","title":lang.priority,"style":{"width":"80px"}}, - {"name":"message","title":lang.message}, - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/dovecot', - jsonp: false, - error: function () { - console.log('Cannot draw dovecot log table'); - }, - success: function (data) { + $('#dovecot_log').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/dovecot", + dataSrc: function(data){ return process_table_data(data, 'general_syslog'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'dovecot_logs'); + { + title: lang.priority, + data: 'priority' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'dovecot_logs'); + { + title: lang.message, + data: 'message' } - } + ] }); } function rspamd_pie_graph() { @@ -537,53 +562,75 @@ jQuery(function($){ }); } function draw_rspamd_history() { - ft_rspamd_history = FooTable.init('#rspamd_history', { - "columns": [ - {"name":"unix_time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});},"title":lang.time,"style":{"width":"170px"}}, - {"name": "ip","title": "IP address","breakpoints": "all","style": {"minWidth": 88}}, - {"name": "sender_mime","title": "From","breakpoints": "xs sm md","style": {"minWidth": 100}}, - {"name": "rcpt","title": "To","breakpoints": "xs sm md","style": {"minWidth": 100}}, - {"name": "subject","title": "Subject","breakpoints": "all","style": {"word-break": "break-all","minWidth": 150}}, - {"name": "action","title": "Action","style": {"minwidth": 82}}, - {"name": "score","title": "Score","style": {"maxWidth": 110},}, - {"name": "symbols","title": "Symbols","breakpoints": "all",}, - {"name": "size","title": "Msg size","breakpoints": "all","style": {"minwidth": 50},"formatter": function(value){return humanFileSize(value);}}, - {"name": "scan_time","title": "Scan time","breakpoints": "all","style": {"maxWidth": 72},}, - {"name": "message-id","title": "ID","breakpoints": "all","style": {"minWidth": 130,"overflow": "hidden","textOverflow": "ellipsis","wordBreak": "break-all","whiteSpace": "normal"}}, - {"name": "user","title": "Authenticated user","breakpoints": "xs sm md","style": {"minWidth": 100}} - ], - "rows": $.ajax({ - dataType: 'json', - url: '/api/v1/get/logs/rspamd-history', - jsonp: false, - error: function () { - console.log('Cannot draw rspamd history table'); - }, - success: function (data) { + $('#rspamd_history').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", + url: "/api/v1/get/logs/rspamd-history", + dataSrc: function(data){ return process_table_data(data, 'rspamd_history'); } - }), - "empty": lang.empty, - "paging": {"enabled": true,"limit": 5,"size": log_pagination_size}, - "filtering": {"enabled": true,"delay": 1200,"position": "left","connectors": false,"placeholder": lang.filter_table,"connectors": false}, - "sorting": {"enabled": true}, - "on": { - "destroy.ft.table": function(e, ft){ - $('.refresh_table').attr('disabled', 'true'); + }, + columns: [ + { + title: lang.time, + data: 'time', + render: function(data, type){ + var date = new Date(data ? data * 1000 : 0); + return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); + } }, - "ready.ft.table": function(e, ft){ - table_log_ready(ft, 'rspamd_history'); - heading = ft.$el.parents('.card').find('.card-header') - $(heading).children('.table-lines').text(function(){ - var ft_paging = ft.use(FooTable.Paging) - return ft_paging.totalRows; - }) - rspamd_pie_graph(); + { + title: 'IP address', + data: 'ip' }, - "after.ft.paging": function(e, ft){ - table_log_paging(ft, 'rspamd_history'); + { + title: 'From', + data: 'sender_mime' + }, + { + title: 'To', + data: 'rcpt' + }, + { + title: 'Subject', + data: 'subject' + }, + { + title: 'Action', + data: 'action' + }, + { + title: 'Score', + data: 'score' + }, + { + title: 'Subject', + data: 'header_subject' + }, + { + title: 'Symbols', + data: 'symbols' + }, + { + title: 'Msg size', + data: 'size' + }, + { + title: 'Scan Time', + data: 'scan_time' + }, + { + title: 'ID', + data: 'message-id' + }, + { + title: 'Authenticated user', + data: 'user' } - } + ] }); } function process_table_data(data, table) { @@ -708,7 +755,7 @@ jQuery(function($){ if (item === null) { return true; } item.username = escapeHtml(item.username); item.service = '
-
';
- } else {
- item.parameters = '' + escapeHtml(item.parameters) + '
';
- }
- item.action = '-
';
+ } else {
+ item.parameters = '' + escapeHtml(item.parameters) + '
';
+ }
+ item.action = '