diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 820a5d980..238eae2e7 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -2933,6 +2933,16 @@ our @options = ( type => $types{integer}, category => 'highband', }, + { + name => 'ZM_WEB_H_REFRESH_NAVBAR', + default => '5', + description => 'How often (in seconds) the navigation header should refresh itself', + help => q` + The navigation header contains the general status information about server load and storage space. + `, + type => $types{integer}, + category => 'highband', + }, { name => 'ZM_WEB_H_REFRESH_CYCLE', default => '10', @@ -3196,6 +3206,16 @@ our @options = ( `, category => 'medband', }, + { + name => 'ZM_WEB_M_REFRESH_NAVBAR', + default => '15', + description => 'How often (in seconds) the navigation header should refresh itself', + help => q` + The navigation header contains the general status information about server load and storage space. + `, + type => $types{integer}, + category => 'medband', + }, { name => 'ZM_WEB_M_REFRESH_CYCLE', default => '20', @@ -3459,6 +3479,16 @@ our @options = ( type => $types{integer}, category => 'lowband', }, + { + name => 'ZM_WEB_L_REFRESH_NAVBAR', + default => '35', + description => 'How often (in seconds) the navigation header should refresh itself', + help => q` + The navigation header contains the general status information about server load and storage space. + `, + type => $types{integer}, + category => 'lowband', + }, { name => 'ZM_WEB_L_REFRESH_CYCLE', default => '30', diff --git a/web/ajax/status.php b/web/ajax/status.php index 840f9e3a1..ba9c5f3a6 100644 --- a/web/ajax/status.php +++ b/web/ajax/status.php @@ -1,4 +1,8 @@ array( diff --git a/web/skins/classic/css/classic/views/event.css b/web/skins/classic/css/classic/views/event.css index 100f53266..dbcc30835 100644 --- a/web/skins/classic/css/classic/views/event.css +++ b/web/skins/classic/css/classic/views/event.css @@ -12,15 +12,17 @@ .alarmCue { background-color: #222222; - height: 1.5em; + height: 1.25em; text-align: left; margin: 0 auto 0 auto; + border-radius: 0 0 .3em .3em; } .alarmCue span { background-color:red; - height: 1.5em; + height: 100%; display: inline-block; + border-radius: 0; } span.noneCue { @@ -43,11 +45,6 @@ span.noneCue { padding: 2px; } -#eventVideo { - display: inline-block; - postion: relative; -} - #menuBar1 { width: 100%; padding: 3px 0; @@ -117,6 +114,11 @@ span.noneCue { float: right; } +#eventVideo { + display: inline-block; + position: relative; +} + #imageFeed { display: inline-block; position: relative; @@ -184,14 +186,16 @@ span.noneCue { #progressBar { position: relative; - top: -1.5em; - height: 1.5em; - margin: 0 auto -1.5em auto; + top: -1.25em; + height: 1.25em; + margin: 0 auto -1.25em auto; } #progressBar .progressBox { - height: 1.5em; + transition: width .1s; + height: 100%; background: rgba(170, 170, 170, .7); + border-radius: 0 0 .3em .3em; } #eventStills { @@ -223,6 +227,7 @@ span.noneCue { } #eventImagePanel { + display: none; position: absolute; top: 0; left: 0; @@ -267,7 +272,7 @@ span.noneCue { #eventImageNav { position: relative; - margin: 4px 0 0 0; + margin: 0 0 4px 0; } #eventImageNav input { @@ -276,20 +281,20 @@ span.noneCue { } #thumbsSliderPanel { - width: 400px; - margin: 4px auto 0; - background: #888888; - padding: 1px; + width: 80%; + margin: 0px auto 4px auto; } #thumbsSlider { - width: 400px; - height: 10px; - background: #dddddd; + width: 100%; + height: 1.25em; + position: relative; + top: -1.25em; + margin: 0 0 -1.25em 0; } #thumbsKnob { - width: 8px; - height: 10px; - background-color: #444444; + width: 1em; + height: 100%; + background-color: #999999; } diff --git a/web/skins/classic/css/classic/views/frame.css b/web/skins/classic/css/classic/views/frame.css index 85c8cd11c..c9cb1846c 100644 --- a/web/skins/classic/css/classic/views/frame.css +++ b/web/skins/classic/css/classic/views/frame.css @@ -1,33 +1,16 @@ #scaleControl { float: right; } + #controls { width: 80%; text-align: center; margin: 0 auto; + display: flex; + justify-content: space-between; } #controls a { width: 40px; margin-left: -20px; } - -#firstLink { - position: absolute; - left: 13%; -} - -#prevLink { - position: absolute; - left: 37%; -} - -#nextLink { - position: absolute; - left: 63%; -} - -#lastLink { - position: absolute; - left: 87%; -} diff --git a/web/skins/classic/css/classic/views/montage.css b/web/skins/classic/css/classic/views/montage.css index d2eb33ec2..ae56ebc9b 100644 --- a/web/skins/classic/css/classic/views/montage.css +++ b/web/skins/classic/css/classic/views/montage.css @@ -19,6 +19,10 @@ #monitors .alert { color: #ffa500; + margin: 0; + padding: 0; + border-radius: 0; + border: none; } #monitors .imageFeed { diff --git a/web/skins/classic/css/dark/skin.css b/web/skins/classic/css/dark/skin.css index 799a2ba7c..3bd2ad1e3 100644 --- a/web/skins/classic/css/dark/skin.css +++ b/web/skins/classic/css/dark/skin.css @@ -460,9 +460,9 @@ th.table-th-sort-rev span.table-th-sort-span { button, input[type=button], input[type=submit] { - background-color: #3498db; - color: #fff; - border-color: #3498db; + background-color: #444444; + color: #eeeeee; + border-color: #444444; text-transform: uppercase; font-weight: 200; padding: 5px 10px; @@ -472,7 +472,7 @@ input[type=submit] { button:hover, input[type=button]:hover, input[type=submit]:hover { - background-color: #34a2ee; + background-color: #555555; } @@ -482,9 +482,9 @@ button:disabled, input[disabled], input[type=button]:disabled, input[type=submit]:disabled { - color: #ffffff; - background-color: #aaaaaa; - border-color: #bbbbbb; + color: #888888; + background-color: #666666; + border-color: #666666; } /* @@ -534,8 +534,10 @@ input[type=submit]:disabled { margin-left: 0; } - .table-striped > tbody > tr:nth-of-type(2n+1) { - background: none; + background-color: #333333; } +.table-hover>tbody>tr:hover { + background-color: #444444; +} diff --git a/web/skins/classic/css/dark/views/event.css b/web/skins/classic/css/dark/views/event.css index b206535d4..a156c2438 100644 --- a/web/skins/classic/css/dark/views/event.css +++ b/web/skins/classic/css/dark/views/event.css @@ -12,25 +12,23 @@ .alarmCue { background-color: #222222; - height: 1.5em; + height: 1.25em; text-align: left; margin: 0 auto 0 auto; + border-radius: 0 0 .3em .3em; } .alarmCue span { background-color:red; - height: 1.5em; + height: 100%; display: inline-block; + border-radius: 0; } span.noneCue { background: none; } -#eventVideo { - display: inline-block; -} - #dataBar { width: 100%; margin: 2px auto; @@ -99,6 +97,10 @@ span.noneCue { visibility: hidden; } +#eventVideo { + display: inline-block; +} + #imageFeed { display: inline-block; position: relative; @@ -166,14 +168,16 @@ span.noneCue { #progressBar { position: relative; - top: -1.5em; - height: 1.5em; - margin: 0 auto -1.5em auto; + top: -1.25em; + height: 1.25em; + margin: 0 auto -1.25em auto; } #progressBar .progressBox { - height: 1.5em; + transition: width .1s; + height: 100%; background: rgba(170, 170, 170, .7); + border-radius: 0 0 .3em .3em; } #eventStills { @@ -206,6 +210,7 @@ span.noneCue { } #eventImagePanel { + display: none; position: absolute; top: 0; left: 0; @@ -250,7 +255,7 @@ span.noneCue { #eventImageNav { position: relative; - margin: 4px 0 0 0; + margin: 0 0 4px 0; } #eventImageNav input { @@ -259,25 +264,20 @@ span.noneCue { } #thumbsSliderPanel { - width: 400px; - margin: 4px auto 0; - background: #888888; - padding: 1px; + width: 80%; + margin: 0px auto 4px auto; } #thumbsSlider { - width: 400px; - height: 10px; - background: #dddddd; -} - -#eventVideo { - display: inline-block; + width: 100%; + height: 1.25em; position: relative; + top: -1.25em; + margin: 0 0 -1.25em 0; } #thumbsKnob { - width: 8px; - height: 10px; - background-color: #444444; + width: 1em; + height: 100%; + background-color: #999999; } diff --git a/web/skins/classic/css/dark/views/frame.css b/web/skins/classic/css/dark/views/frame.css index 85c8cd11c..c9cb1846c 100644 --- a/web/skins/classic/css/dark/views/frame.css +++ b/web/skins/classic/css/dark/views/frame.css @@ -1,33 +1,16 @@ #scaleControl { float: right; } + #controls { width: 80%; text-align: center; margin: 0 auto; + display: flex; + justify-content: space-between; } #controls a { width: 40px; margin-left: -20px; } - -#firstLink { - position: absolute; - left: 13%; -} - -#prevLink { - position: absolute; - left: 37%; -} - -#nextLink { - position: absolute; - left: 63%; -} - -#lastLink { - position: absolute; - left: 87%; -} diff --git a/web/skins/classic/css/dark/views/montage.css b/web/skins/classic/css/dark/views/montage.css index 85306393d..005569117 100644 --- a/web/skins/classic/css/dark/views/montage.css +++ b/web/skins/classic/css/dark/views/montage.css @@ -16,6 +16,10 @@ #monitors .alert { color: #ffa500; + margin: 0; + padding: 0; + border-radius: 0; + border: none; } #monitors .imageFeed { diff --git a/web/skins/classic/css/flat/views/event.css b/web/skins/classic/css/flat/views/event.css index 41cad61dd..30758b573 100644 --- a/web/skins/classic/css/flat/views/event.css +++ b/web/skins/classic/css/flat/views/event.css @@ -12,15 +12,17 @@ .alarmCue { background-color: #222222; - height: 1.5em; + height: 1.25em; text-align: left; margin: 0 auto 0 auto; + border-radius: 0 0 .3em .3em; } .alarmCue span { background-color:red; - height: 1.5em; + height: 100%; display: inline-block; + border-radius: 0; } span.noneCue { @@ -50,7 +52,6 @@ span.noneCue { clear: both; } - #menuBar1 #nameControl { float: left; } @@ -85,15 +86,6 @@ span.noneCue { float: right; text-align: right; } -#menuBar1:after, -#menuBar2:after { - content: "."; - display: block; - height: 0; - font-size: 0; - clear: both; - visibility: hidden; -} #menuBar1:after, #menuBar2:after { @@ -104,6 +96,12 @@ span.noneCue { clear: both; visibility: hidden; } + +#eventVideo { + display: inline-block; + position: relative; +} + #imageFeed { display: inline-block; position: relative; @@ -177,14 +175,16 @@ span.noneCue { #progressBar { position: relative; - top: -1.5em; - height: 1.5em; - margin: 0 auto -1.5em auto; + top: -1.25em; + height: 1.25em; + margin: 0 auto -1.25em auto; } #progressBar .progressBox { - height: 1.5em; + transition: width .1s; + height: 100%; background: rgba(170, 170, 170, .7); + border-radius: 0 0 .3em .3em; } #eventStills { @@ -217,6 +217,7 @@ span.noneCue { } #eventImagePanel { + display: none; position: absolute; top: 0; left: 0; @@ -261,7 +262,7 @@ span.noneCue { #eventImageNav { position: relative; - margin: 4px 0 0 0; + margin: 0 0 4px 0; } #eventImageNav input { @@ -270,82 +271,20 @@ span.noneCue { } #thumbsSliderPanel { - width: 400px; - margin: 4px auto 0; - background: #888888; - padding: 1px; + width: 80%; + margin: 0px auto 4px auto; } #thumbsSlider { - width: 400px; - height: 10px; - background: #dddddd; + width: 100%; + height: 1.25em; + position: relative; + top: -1.25em; + margin: 0 0 -1.25em 0; } #thumbsKnob { - width: 8px; - height: 10px; - background-color: #444444; -} -#eventVideo { - display: inline-block; - position: relative; -} - -#video-controls { - position: absolute; - bottom: 0; - left: 0; - right: 0; - padding: 5px; - opacity: 0; - -webkit-transition: opacity .3s; - -moz-transition: opacity .3s; - -o-transition: opacity .3s; - -ms-transition: opacity .3s; - transition: opacity .3s; - background-image: linear-gradient(bottom, rgb(3,113,168) 13%, rgb(0,136,204) 100%); - background-image: -o-linear-gradient(bottom, rgb(3,113,168) 13%, rgb(0,136,204) 100%); - background-image: -moz-linear-gradient(bottom, rgb(3,113,168) 13%, rgb(0,136,204) 100%); - background-image: -webkit-linear-gradient(bottom, rgb(3,113,168) 13%, rgb(0,136,204) 100%); - background-image: -ms-linear-gradient(bottom, rgb(3,113,168) 13%, rgb(0,136,204) 100%); - - background-image: -webkit-gradient( - linear, - left bottom, - left top, - color-stop(0.13, rgb(3,113,168)), - color-stop(1, rgb(0,136,204)) - ); -} - -#eventVideo:hover #video-controls { - opacity: .9; -} - -button { - background: rgba(0,0,0,.5); - border: 0; - color: #EEE; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - padding: 0; -} - -button:hover { - cursor: pointer; -} - -#seekbar { - width: 360px; - border: 0; - padding: 0; -} - -#volume-bar { - width: 60px; - border: 0; - padding: 0; + width: 1em; + height: 100%; + background-color: #999999; } diff --git a/web/skins/classic/css/flat/views/frame.css b/web/skins/classic/css/flat/views/frame.css index 9e3e94da1..c9cb1846c 100644 --- a/web/skins/classic/css/flat/views/frame.css +++ b/web/skins/classic/css/flat/views/frame.css @@ -6,29 +6,11 @@ width: 80%; text-align: center; margin: 0 auto; + display: flex; + justify-content: space-between; } #controls a { width: 40px; margin-left: -20px; } - -#firstLink { - position: absolute; - left: 13%; -} - -#prevLink { - position: absolute; - left: 37%; -} - -#nextLink { - position: absolute; - left: 63%; -} - -#lastLink { - position: absolute; - left: 87%; -} diff --git a/web/skins/classic/includes/config.php b/web/skins/classic/includes/config.php index 763a2b8cc..6242794e1 100644 --- a/web/skins/classic/includes/config.php +++ b/web/skins/classic/includes/config.php @@ -45,7 +45,7 @@ $scales = array( '12.5' => '1/8x', ); -if (isset($_REQUEST['view'])) unset($scales[$_REQUEST['view'] == 'event' ? '' : 'auto']); //Remove the option we aren't using on montage or event +if (isset($_REQUEST['view'])) unset($scales[$_REQUEST['view'] == 'montage' ? 'auto' : '']); //Only use fixed width/Height on montage $bandwidth_options = array( 'high' => translate('High'), @@ -56,6 +56,7 @@ $bandwidth_options = array( switch ( $_COOKIE['zmBandwidth'] ) { case 'high' : { define( 'ZM_WEB_REFRESH_MAIN', ZM_WEB_H_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes + define( 'ZM_WEB_REFRESH_NAVBAR', ZM_WEB_H_REFRESH_NAVBAR ); // How often (in seconds) the nav header refreshes define( 'ZM_WEB_REFRESH_CYCLE', ZM_WEB_H_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor define( 'ZM_WEB_REFRESH_IMAGE', ZM_WEB_H_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming) define( 'ZM_WEB_REFRESH_STATUS', ZM_WEB_H_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window @@ -73,6 +74,7 @@ switch ( $_COOKIE['zmBandwidth'] ) { break; } case 'medium' : { define( 'ZM_WEB_REFRESH_MAIN', ZM_WEB_M_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes + define( 'ZM_WEB_REFRESH_NAVBAR', ZM_WEB_M_REFRESH_NAVBAR ); // How often (in seconds) the nav header refreshes define( 'ZM_WEB_REFRESH_CYCLE', ZM_WEB_M_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor define( 'ZM_WEB_REFRESH_IMAGE', ZM_WEB_M_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming) define( 'ZM_WEB_REFRESH_STATUS', ZM_WEB_M_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window @@ -90,6 +92,7 @@ switch ( $_COOKIE['zmBandwidth'] ) { break; } case 'low' : { define( 'ZM_WEB_REFRESH_MAIN', ZM_WEB_L_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes + define( 'ZM_WEB_REFRESH_NAVBAR', ZM_WEB_L_REFRESH_NAVBAR ); // How often (in seconds) the nav header refreshes define( 'ZM_WEB_REFRESH_CYCLE', ZM_WEB_L_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor define( 'ZM_WEB_REFRESH_IMAGE', ZM_WEB_L_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming) define( 'ZM_WEB_REFRESH_STATUS', ZM_WEB_L_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window diff --git a/web/skins/classic/includes/functions.php b/web/skins/classic/includes/functions.php index 450cf63b3..b2e6d17c9 100644 --- a/web/skins/classic/includes/functions.php +++ b/web/skins/classic/includes/functions.php @@ -159,26 +159,24 @@ if ( file_exists( "skins/$skin/css/$css/graphics/favicon.ico" ) ) { -
-