From 3920420aa9266fd860f17af942d52eeb359c0aeb Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Mon, 20 Nov 2017 13:36:45 -0500
Subject: [PATCH 01/23] Convert scaleToFit to shared function
---
web/skins/classic/js/skin.js | 35 +++++++++++++++++++++++++++++
web/skins/classic/views/js/event.js | 34 +---------------------------
2 files changed, 36 insertions(+), 33 deletions(-)
diff --git a/web/skins/classic/js/skin.js b/web/skins/classic/js/skin.js
index c3d225aa8..ef3845108 100644
--- a/web/skins/classic/js/skin.js
+++ b/web/skins/classic/js/skin.js
@@ -333,3 +333,38 @@ function changeFilter( e ) {
Cookie.write( e.name, e.value, { duration: 10*365 } );
window.location = window.location;
}
+
+var resizeTimer;
+
+function endOfResize(e) {
+ clearTimeout(resizeTimer);
+ resizeTimer = setTimeout(changeScale, 250);
+}
+
+function scaleToFit (baseWidth, baseHeight, feed) {
+ $j(window).on('resize', endOfResize) //set delayed scaling when Scale to Fit is selected
+ let ratio = baseWidth / baseHeight;
+ let container = $j('#content');
+ let viewPort = $j(window);
+ let bottomDiv = $j('#replayStatus');
+// jquery does not provide a bottom offet, and offset dows not include margins. outerHeight true minus false gives total vertical margins.
+ let bottomLoc = bottomDiv.offset().top + (bottomDiv.outerHeight(true) - bottomDiv.outerHeight()) + bottomDiv.outerHeight(true);
+ let newHeight = viewPort.height() - (bottomLoc - feed.outerHeight(true))
+// let newHeight = viewPort.height() - (container.outerHeight(true) - feed.outerHeight(true));
+ let newWidth = ratio * newHeight;
+ if (newWidth > container.innerWidth()) {
+ newWidth = container.innerWidth();
+ newHeight = newWidth / ratio;
+ }
+ let autoScale = Math.round(newWidth / baseWidth * SCALE_BASE);
+ let scales = $j('#scale option').map(function() {return parseInt($j(this).val());}).get();
+ scales.shift();
+ let closest;
+ $j(scales).each(function () { //Set zms scale to nearest regular scale. Zoom does not like arbitrary scale values.
+ if (closest == null || Math.abs(this - autoScale) < Math.abs(closest - autoScale)) {
+ closest = this.valueOf();
+ }
+ });
+ autoScale = closest;
+ return {width: Math.floor(newWidth), height: Math.floor(newHeight), autoScale: autoScale};
+}
diff --git a/web/skins/classic/views/js/event.js b/web/skins/classic/views/js/event.js
index 95460a8f1..4cf2c6dd8 100644
--- a/web/skins/classic/views/js/event.js
+++ b/web/skins/classic/views/js/event.js
@@ -134,45 +134,13 @@ function setButtonState( element, butClass ) {
}
}
-var resizeTimer;
-
-function endOfResize(e) {
- clearTimeout(resizeTimer);
- resizeTimer = setTimeout(changeScale, 250);
-}
-
-function scaleToFit () {
- $j(window).on('resize', endOfResize) //set delayed scaling when Scale to Fit is selected
- let ratio = eventData.Width/eventData.Height;
- let container = $j('#content');
- let feed = $j(vid ? '#videoobj' : '#evtStream');
- let viewPort = $j(window);
- let newHeight = viewPort.height() - (container.outerHeight(true) - feed.outerHeight(true));
- let newWidth = ratio * newHeight;
- if (newWidth > container.innerWidth()) {
- newWidth = container.innerWidth();
- newHeight = newWidth / ratio;
- }
- let autoScale = Math.round(newWidth / eventData.Width * SCALE_BASE);
- let scales = $j('#scale option').map(function() {return parseInt($j(this).val());}).get();
- scales.shift();
- let closest = null;
- $j(scales).each(function () { //Set zms scale to nearest regular scale. Zoom does not like arbitrary scale values.
- if (closest == null || Math.abs(this - autoScale) < Math.abs(closest - autoScale)) {
- closest = this.valueOf();
- }
- });
- autoScale = closest;
- return {width: Math.floor(newWidth), height: Math.floor(newHeight), autoScale: autoScale};
-}
-
function changeScale() {
let scale = $j('#scale').val();
let newWidth = null;
let newHeight = null;
let autoScale = null;
if (scale == "auto") {
- let newSize = scaleToFit();
+ let newSize = scaleToFit(eventData.Width, eventData.Height, $j(vid ? '#videoobj' : '#evtStream'));
newWidth = newSize.width;
newHeight = newSize.height;
autoScale = newSize.autoScale;
From 68e54400e24a64ad9e8a0628f109c7abb92986a6 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Mon, 20 Nov 2017 14:25:13 -0500
Subject: [PATCH 02/23] Add scaleToFit to watch view
---
web/skins/classic/views/js/watch.js | 18 +++++++++++++++---
web/skins/classic/views/js/watch.js.php | 2 +-
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js
index 57ad9d86c..db0455fd4 100644
--- a/web/skins/classic/views/js/watch.js
+++ b/web/skins/classic/views/js/watch.js
@@ -25,8 +25,19 @@ function showPtzControls() {
function changeScale() {
var scale = $('scale').get('value');
- var newWidth = ( monitorWidth * scale ) / SCALE_BASE;
- var newHeight = ( monitorHeight * scale ) / SCALE_BASE;
+ var newWidth;
+ var newHeight;
+ if (scale == "auto") {
+ let newSize = scaleToFit(monitorWidth, monitorHeight, $j('#liveStream'+monitorId));
+ newWidth = newSize.width;
+ newHeight = newSize.height;
+ autoScale = newSize.autoScale;
+ } else {
+ $j(window).off('resize', endOfResize); //remove resize handler when Scale to Fit is not active
+ newWidth = monitorWidth * scale / SCALE_BASE;
+ newHeight = monitorHeight * scale / SCALE_BASE;
+ }
+
Cookie.write( 'zmWatchScale'+monitorId, scale, { duration: 10*365 } );
@@ -36,7 +47,7 @@ function changeScale() {
streamImg.style.width = newWidth + "px";
streamImg.style.height = newHeight + "px";
- streamImg.src = streamImg.src.replace(/scale=\d+/i, 'scale='+scale);
+ streamImg.src = streamImg.src.replace(/scale=\d+/i, 'scale='+(scale== 'auto' ? autoScale : scale));
} else {
console.error("No element found for liveStream.");
}
@@ -655,6 +666,7 @@ function initPage() {
if ( refreshApplet && appletRefreshTime )
appletRefresh.delay( appletRefreshTime*1000 );
+ if (scale == "auto") changeScale();
}
// Kick everything off
diff --git a/web/skins/classic/views/js/watch.js.php b/web/skins/classic/views/js/watch.js.php
index 35a2debca..c0c8ab590 100644
--- a/web/skins/classic/views/js/watch.js.php
+++ b/web/skins/classic/views/js/watch.js.php
@@ -50,7 +50,7 @@ var monitorWidth = Width() ?>;
var monitorHeight = Height() ?>;
var monitorUrl = 'Server()->Url() ) ?>';
-var scale = ;
+var scale = '';
var statusRefreshTimeout = ;
var eventsRefreshTimeout = ;
From f52306ff56f01b3d407b020c4f371277049b371f Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Mon, 20 Nov 2017 14:26:01 -0500
Subject: [PATCH 03/23] Fix scales to only use fixed width/height on montage
---
web/skins/classic/includes/config.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web/skins/classic/includes/config.php b/web/skins/classic/includes/config.php
index 763a2b8cc..54ab872b9 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'),
From 55699a9b9b327a1a8cce60d36da8f817a451aa8e Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Tue, 21 Nov 2017 22:46:45 -0500
Subject: [PATCH 04/23] Change scaleToFit to choose what to fit
Adds 4th input to choose what element is the last thing to fit.
---
web/skins/classic/js/skin.js | 8 +++-----
web/skins/classic/views/js/event.js | 2 +-
web/skins/classic/views/js/watch.js | 2 +-
3 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/web/skins/classic/js/skin.js b/web/skins/classic/js/skin.js
index ef3845108..3eeb21c8d 100644
--- a/web/skins/classic/js/skin.js
+++ b/web/skins/classic/js/skin.js
@@ -341,16 +341,14 @@ function endOfResize(e) {
resizeTimer = setTimeout(changeScale, 250);
}
-function scaleToFit (baseWidth, baseHeight, feed) {
+function scaleToFit (baseWidth, baseHeight, scaleEl, bottomEl) {
$j(window).on('resize', endOfResize) //set delayed scaling when Scale to Fit is selected
let ratio = baseWidth / baseHeight;
let container = $j('#content');
let viewPort = $j(window);
- let bottomDiv = $j('#replayStatus');
// jquery does not provide a bottom offet, and offset dows not include margins. outerHeight true minus false gives total vertical margins.
- let bottomLoc = bottomDiv.offset().top + (bottomDiv.outerHeight(true) - bottomDiv.outerHeight()) + bottomDiv.outerHeight(true);
- let newHeight = viewPort.height() - (bottomLoc - feed.outerHeight(true))
-// let newHeight = viewPort.height() - (container.outerHeight(true) - feed.outerHeight(true));
+ let bottomLoc = bottomEl.offset().top + (bottomEl.outerHeight(true) - bottomEl.outerHeight()) + bottomEl.outerHeight(true);
+ let newHeight = viewPort.height() - (bottomLoc - scaleEl.outerHeight(true))
let newWidth = ratio * newHeight;
if (newWidth > container.innerWidth()) {
newWidth = container.innerWidth();
diff --git a/web/skins/classic/views/js/event.js b/web/skins/classic/views/js/event.js
index 4cf2c6dd8..74ab389eb 100644
--- a/web/skins/classic/views/js/event.js
+++ b/web/skins/classic/views/js/event.js
@@ -140,7 +140,7 @@ function changeScale() {
let newHeight = null;
let autoScale = null;
if (scale == "auto") {
- let newSize = scaleToFit(eventData.Width, eventData.Height, $j(vid ? '#videoobj' : '#evtStream'));
+ let newSize = scaleToFit(eventData.Width, eventData.Height, $j(vid ? '#videoobj' : '#evtStream'), $j('#replayStatus'));
newWidth = newSize.width;
newHeight = newSize.height;
autoScale = newSize.autoScale;
diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js
index db0455fd4..6f33a97db 100644
--- a/web/skins/classic/views/js/watch.js
+++ b/web/skins/classic/views/js/watch.js
@@ -28,7 +28,7 @@ function changeScale() {
var newWidth;
var newHeight;
if (scale == "auto") {
- let newSize = scaleToFit(monitorWidth, monitorHeight, $j('#liveStream'+monitorId));
+ let newSize = scaleToFit(monitorWidth, monitorHeight, $j('#liveStream'+monitorId), $j('#replayStatus'));
newWidth = newSize.width;
newHeight = newSize.height;
autoScale = newSize.autoScale;
From b5db885a3149721e9703c0e1f66514cec6a2ff9d Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Tue, 21 Nov 2017 22:49:27 -0500
Subject: [PATCH 05/23] Add scaleToFit to frame view
Changes navigation to use flexbox because absolute positioning was messing with scaletofit. Also makes frame view respect scale choice
---
web/skins/classic/css/classic/views/frame.css | 23 ++---------
web/skins/classic/css/dark/views/frame.css | 23 ++---------
web/skins/classic/css/flat/views/frame.css | 22 +----------
web/skins/classic/views/frame.php | 2 +-
web/skins/classic/views/js/event.js.php | 1 +
web/skins/classic/views/js/frame.js | 38 ++++++++++++++-----
web/skins/classic/views/js/frame.js.php | 1 +
7 files changed, 40 insertions(+), 70 deletions(-)
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/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/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/views/frame.php b/web/skins/classic/views/frame.php
index 4d526b683..2e6bfb7b8 100644
--- a/web/skins/classic/views/frame.php
+++ b/web/skins/classic/views/frame.php
@@ -51,7 +51,7 @@ $lastFid = $maxFid;
$alarmFrame = $Frame->Type()=='Alarm';
if ( isset( $_REQUEST['scale'] ) ) {
- $scale = validInt($_REQUEST['scale']);
+ $scale = $_REQUEST['scale'];
} else if ( isset( $_COOKIE['zmWatchScale'.$Monitor->Id()] ) ) {
$scale = $_COOKIE['zmWatchScale'.$Monitor->Id()];
} else if ( isset( $_COOKIE['zmWatchScale'] ) ) {
diff --git a/web/skins/classic/views/js/event.js.php b/web/skins/classic/views/js/event.js.php
index 4187b4be1..dbdc5c514 100644
--- a/web/skins/classic/views/js/event.js.php
+++ b/web/skins/classic/views/js/event.js.php
@@ -48,6 +48,7 @@ var canEditEvents = ;
var streamTimeout = ;
var canStreamNative = ;
+var streamMode = '';
//
// Strings
diff --git a/web/skins/classic/views/js/frame.js b/web/skins/classic/views/js/frame.js
index 0705032bc..bff17a7ac 100644
--- a/web/skins/classic/views/js/frame.js
+++ b/web/skins/classic/views/js/frame.js
@@ -1,15 +1,35 @@
function changeScale() {
- var scale = $('scale').get('value');
- var img = $('frameImg');
- if ( img ) {
- var baseWidth = $('base_width').value;
- var baseHeight = $('base_height').value;
- var newWidth = ( baseWidth * scale ) / SCALE_BASE;
- var newHeight = ( baseHeight * scale ) / SCALE_BASE;
+ let scale = $j('#scale').val();
+ let img = $j('#frameImg');
+ let controlsLinks = {
+ next: $j('#nextLink'),
+ prev: $j('#prevLink'),
+ first: $j('#firstLink'),
+ last: $j('#lastLink')
+ }
- img.style.width = newWidth + "px";
- img.style.height = newHeight + "px";
+ if (img) {
+ let baseWidth = $j('#base_width').val();
+ let baseHeight = $j('#base_height').val();
+ if (scale == "auto") {
+ let newSize = scaleToFit(baseWidth, baseHeight, img, $j('#controls'));
+ newWidth = newSize.width;
+ newHeight = newSize.height;
+ autoScale = newSize.autoScale;
+ } else {
+ $j(window).off('resize', endOfResize); //remove resize handler when Scale to Fit is not active
+ newWidth = baseWidth * scale / SCALE_BASE;
+ newHeight = baseHeight * scale / SCALE_BASE;
+ }
+ img.css('width', newWidth + "px");
+ img.css('height', newHeight + "px");
}
Cookie.write( 'zmWatchScale', scale, { duration: 10*365 } );
+ $j.each(controlsLinks, function(k, anchor) { //Make frames respect scale choices
+ anchor.prop('href', anchor.prop('href').replace(/scale=.*&/, 'scale=' + scale + '&'));
+
+ });
}
+if (scale == "auto") $j(document).ready(changeScale);
+
diff --git a/web/skins/classic/views/js/frame.js.php b/web/skins/classic/views/js/frame.js.php
index dff39cdab..3964ef436 100644
--- a/web/skins/classic/views/js/frame.js.php
+++ b/web/skins/classic/views/js/frame.js.php
@@ -1,2 +1,3 @@
+var scale = "";
var SCALE_BASE = ;
From ac3dbfbc23beeb7953e8ce2e39e61e63f7ca77c5 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Tue, 21 Nov 2017 22:56:22 -0500
Subject: [PATCH 06/23] Fix Typo
---
web/skins/classic/css/classic/views/event.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web/skins/classic/css/classic/views/event.css b/web/skins/classic/css/classic/views/event.css
index 100f53266..8f67cc50d 100644
--- a/web/skins/classic/css/classic/views/event.css
+++ b/web/skins/classic/css/classic/views/event.css
@@ -45,7 +45,7 @@ span.noneCue {
#eventVideo {
display: inline-block;
- postion: relative;
+ position: relative;
}
#menuBar1 {
From b01fed111a4f72d0dc4492c278b5398bb5dd1721 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Wed, 22 Nov 2017 22:44:56 -0500
Subject: [PATCH 07/23] Add zoom transition
---
web/skins/classic/js/video-js-skin.css | 1 +
1 file changed, 1 insertion(+)
diff --git a/web/skins/classic/js/video-js-skin.css b/web/skins/classic/js/video-js-skin.css
index f83729e00..71ee696bf 100644
--- a/web/skins/classic/js/video-js-skin.css
+++ b/web/skins/classic/js/video-js-skin.css
@@ -1,5 +1,6 @@
.vjs-tech {
pointer-events: none;
+ transition: transform .25s;
}
.vjs-captions-button {
From abba086d08f2ca680cb10b3f6081df2a4d65c34e Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Wed, 22 Nov 2017 22:52:52 -0500
Subject: [PATCH 08/23] Progressbox transition
---
web/skins/classic/css/classic/views/event.css | 1 +
web/skins/classic/css/dark/views/event.css | 1 +
web/skins/classic/css/flat/views/event.css | 1 +
3 files changed, 3 insertions(+)
diff --git a/web/skins/classic/css/classic/views/event.css b/web/skins/classic/css/classic/views/event.css
index 8f67cc50d..73dbe9400 100644
--- a/web/skins/classic/css/classic/views/event.css
+++ b/web/skins/classic/css/classic/views/event.css
@@ -190,6 +190,7 @@ span.noneCue {
}
#progressBar .progressBox {
+ transition: width .1s;
height: 1.5em;
background: rgba(170, 170, 170, .7);
}
diff --git a/web/skins/classic/css/dark/views/event.css b/web/skins/classic/css/dark/views/event.css
index b206535d4..adb7dcef4 100644
--- a/web/skins/classic/css/dark/views/event.css
+++ b/web/skins/classic/css/dark/views/event.css
@@ -172,6 +172,7 @@ span.noneCue {
}
#progressBar .progressBox {
+ transition: width .1s;
height: 1.5em;
background: rgba(170, 170, 170, .7);
}
diff --git a/web/skins/classic/css/flat/views/event.css b/web/skins/classic/css/flat/views/event.css
index 41cad61dd..22b33d4d8 100644
--- a/web/skins/classic/css/flat/views/event.css
+++ b/web/skins/classic/css/flat/views/event.css
@@ -183,6 +183,7 @@ span.noneCue {
}
#progressBar .progressBox {
+ transition: width .1s;
height: 1.5em;
background: rgba(170, 170, 170, .7);
}
From b506466a70a5ee3cf37319024f5806409332f3c6 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Thu, 23 Nov 2017 16:24:57 -0500
Subject: [PATCH 09/23] Change alarmcues to accept arbitrary containing element
---
web/skins/classic/css/classic/views/event.css | 6 ++++--
web/skins/classic/css/dark/views/event.css | 6 ++++--
web/skins/classic/css/flat/views/event.css | 6 ++++--
web/skins/classic/views/event.php | 2 +-
web/skins/classic/views/js/event.js | 8 ++++----
5 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/web/skins/classic/css/classic/views/event.css b/web/skins/classic/css/classic/views/event.css
index 73dbe9400..ed1800db2 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 {
diff --git a/web/skins/classic/css/dark/views/event.css b/web/skins/classic/css/dark/views/event.css
index adb7dcef4..17a9007df 100644
--- a/web/skins/classic/css/dark/views/event.css
+++ b/web/skins/classic/css/dark/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 {
diff --git a/web/skins/classic/css/flat/views/event.css b/web/skins/classic/css/flat/views/event.css
index 22b33d4d8..6db2f7f37 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 {
diff --git a/web/skins/classic/views/event.php b/web/skins/classic/views/event.php
index 2167b510b..96ca3d755 100644
--- a/web/skins/classic/views/event.php
+++ b/web/skins/classic/views/event.php
@@ -180,7 +180,7 @@ Warning("Streamsrc: $streamSrc");
}
} // end if stream method
?>
-
+
diff --git a/web/skins/classic/views/js/event.js b/web/skins/classic/views/js/event.js
index 74ab389eb..d18b90153 100644
--- a/web/skins/classic/views/js/event.js
+++ b/web/skins/classic/views/js/event.js
@@ -50,13 +50,13 @@ function initialAlarmCues (eventId) {
function setAlarmCues (data) {
cueFrames = data.frames;
- alarmSpans = renderAlarmCues();
+ alarmSpans = renderAlarmCues(vid ? $j("#videoobj") : $j("#evtStream"));//use videojs width or zms width
$j(".alarmCue").html(alarmSpans);
}
-function renderAlarmCues () {
+function renderAlarmCues (containerEl) {
if (cueFrames) {
- var cueRatio = (vid ? $j("#videoobj").width() : $j("#evtStream").width()) / (cueFrames[cueFrames.length - 1].Delta * 100);//use videojs width or zms width
+ var cueRatio = containerEl.width() / (cueFrames[cueFrames.length - 1].Delta * 100);
var minAlarm = Math.ceil(1/cueRatio);
var spanTimeStart = 0;
var spanTimeEnd = 0;
@@ -158,7 +158,7 @@ function changeScale() {
alarmCue.width(newWidth);
drawProgressBar();
}
- alarmCue.html(renderAlarmCues());//just re-render alarmCues. skip ajax call
+ alarmCue.html(renderAlarmCues(vid ? $j("#videoobj") : $j("#evtStream")));//just re-render alarmCues. skip ajax call
if (scale == "auto") {
Cookie.write('zmEventScaleAuto', 'auto', {duration: 10*365});
}else{
From 136f0e90f53663dddab0b9a37852590d14293179 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Fri, 24 Nov 2017 20:26:48 -0500
Subject: [PATCH 10/23] Fix autoscale on stills view
Switching from stills view and changing the window would make stream view go crazy. Changed to autoscale on switch
---
web/skins/classic/views/js/event.js | 32 +++++++++++++++++++----------
1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/web/skins/classic/views/js/event.js b/web/skins/classic/views/js/event.js
index d18b90153..cf8a46de4 100644
--- a/web/skins/classic/views/js/event.js
+++ b/web/skins/classic/views/js/event.js
@@ -136,11 +136,19 @@ function setButtonState( element, butClass ) {
function changeScale() {
let scale = $j('#scale').val();
- let newWidth = null;
- let newHeight = null;
- let autoScale = null;
+ let newWidth;
+ let newHeight;
+ let autoScale;
+ let eventViewer;
+ let alarmCue = $j('div.alarmCue');
+ let bottomEl = streamMode == 'stills' ? $j('#eventImageNav') : $j('#replayStatus');
+ if (streamMode == 'stills') {
+ eventViewer = $j('#eventThumbs');
+ } else {
+ eventViewer = $j(vid ? '#videoobj' : '#evtStream');
+ }
if (scale == "auto") {
- let newSize = scaleToFit(eventData.Width, eventData.Height, $j(vid ? '#videoobj' : '#evtStream'), $j('#replayStatus'));
+ let newSize = scaleToFit(eventData.Width, eventData.Height, eventViewer, bottomEl);
newWidth = newSize.width;
newHeight = newSize.height;
autoScale = newSize.autoScale;
@@ -149,16 +157,18 @@ function changeScale() {
newWidth = eventData.Width * scale / SCALE_BASE;
newHeight = eventData.Height * scale / SCALE_BASE;
}
- let alarmCue = $j('div.alarmCue');
- let eventViewer = $j(vid ? '#videoobj' : '#evtStream')
- eventViewer.width(newWidth);
+ if (!(streamMode == 'stills')) eventViewer.width(newWidth); //stills handles its own width
eventViewer.height(newHeight);
if ( !vid ) { // zms needs extra sizing
streamScale(scale == "auto" ? autoScale : scale);
- alarmCue.width(newWidth);
drawProgressBar();
}
- alarmCue.html(renderAlarmCues(vid ? $j("#videoobj") : $j("#evtStream")));//just re-render alarmCues. skip ajax call
+ if (streamMode == 'stills') {
+ slider.autosize();
+ alarmCue.html(renderAlarmCues($j('#thumbsSliderPanel')));
+ } else {
+ alarmCue.html(renderAlarmCues(eventViewer));//just re-render alarmCues. skip ajax call
+ }
if (scale == "auto") {
Cookie.write('zmEventScaleAuto', 'auto', {duration: 10*365});
}else{
@@ -671,8 +681,6 @@ function resetEventStills() {
}
} ).set( 0 );
}
- if ( $('eventThumbs').getStyle( 'height' ).match( /^\d+/ ) < (parseInt(eventData.Height)+80) )
- $('eventThumbs').setStyle( 'height', ($j(vid ? '#videoobj' : '#evtStream').height())+'px' );
}
function getFrameResponse( respObj, respText ) {
@@ -861,6 +869,7 @@ function showStream() {
$('streamEvent').addClass( 'hidden' );
streamMode = 'video';
+ if (scale == 'auto') changeScale();
}
function showStills() {
@@ -892,6 +901,7 @@ function showStills() {
);
}
resetEventStills();
+ if (scale == 'auto') changeScale();
}
function showFrameStats() {
From 18dc515ba4a75217c9a7525f982e41d75d197564 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Fri, 24 Nov 2017 20:28:08 -0500
Subject: [PATCH 11/23] stills view loads image when slider used
Stills view now loads the selected image if an image is being viewed and the slider is used.
---
web/skins/classic/css/classic/views/event.css | 1 +
web/skins/classic/css/dark/views/event.css | 1 +
web/skins/classic/css/flat/views/event.css | 1 +
web/skins/classic/views/js/event.js | 3 ++-
4 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/web/skins/classic/css/classic/views/event.css b/web/skins/classic/css/classic/views/event.css
index ed1800db2..dc6bec9c4 100644
--- a/web/skins/classic/css/classic/views/event.css
+++ b/web/skins/classic/css/classic/views/event.css
@@ -226,6 +226,7 @@ span.noneCue {
}
#eventImagePanel {
+ display: none;
position: absolute;
top: 0;
left: 0;
diff --git a/web/skins/classic/css/dark/views/event.css b/web/skins/classic/css/dark/views/event.css
index 17a9007df..f0bbdac24 100644
--- a/web/skins/classic/css/dark/views/event.css
+++ b/web/skins/classic/css/dark/views/event.css
@@ -209,6 +209,7 @@ span.noneCue {
}
#eventImagePanel {
+ display: none;
position: absolute;
top: 0;
left: 0;
diff --git a/web/skins/classic/css/flat/views/event.css b/web/skins/classic/css/flat/views/event.css
index 6db2f7f37..eab558994 100644
--- a/web/skins/classic/css/flat/views/event.css
+++ b/web/skins/classic/css/flat/views/event.css
@@ -220,6 +220,7 @@ span.noneCue {
}
#eventImagePanel {
+ display: none;
position: absolute;
top: 0;
left: 0;
diff --git a/web/skins/classic/views/js/event.js b/web/skins/classic/views/js/event.js
index cf8a46de4..2fbb3e68a 100644
--- a/web/skins/classic/views/js/event.js
+++ b/web/skins/classic/views/js/event.js
@@ -483,6 +483,7 @@ function streamQuery() {
var slider = null;
var scroll = null;
+var currEventId = null;
var CurEventDefVideoPath = null;
function getEventResponse( respObj, respText ) {
@@ -676,7 +677,7 @@ function resetEventStills() {
fid = 1;
else if ( fid > eventData.Frames )
fid = eventData.Frames;
- checkFrames( eventData.Id, fid );
+ checkFrames( eventData.Id, fid, ($j('#eventImagePanel').css('display')=='none'?'':'true'));
scroll.toElement( 'eventThumb'+fid );
}
} ).set( 0 );
From a81c35d377064ccef5052434740fbbf5a25a9e88 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Fri, 24 Nov 2017 20:56:07 -0500
Subject: [PATCH 12/23] Cleanup unused code event.css
---
web/skins/classic/css/flat/views/event.css | 58 ----------------------
1 file changed, 58 deletions(-)
diff --git a/web/skins/classic/css/flat/views/event.css b/web/skins/classic/css/flat/views/event.css
index eab558994..88aec52ad 100644
--- a/web/skins/classic/css/flat/views/event.css
+++ b/web/skins/classic/css/flat/views/event.css
@@ -295,61 +295,3 @@ span.noneCue {
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;
-}
From c92b3a94084826839cd4f4c82d286d56cb9bf440 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Fri, 24 Nov 2017 21:07:46 -0500
Subject: [PATCH 13/23] Converge stills view and stream view
Make the stills view look more like stream view. Moved slider up to be like a scrub bar, added alarmcues.
---
web/skins/classic/css/classic/views/event.css | 31 ++++++++++---------
web/skins/classic/css/dark/views/event.css | 31 ++++++++++---------
web/skins/classic/css/flat/views/event.css | 31 ++++++++++---------
web/skins/classic/views/event.php | 13 ++++----
4 files changed, 55 insertions(+), 51 deletions(-)
diff --git a/web/skins/classic/css/classic/views/event.css b/web/skins/classic/css/classic/views/event.css
index dc6bec9c4..92c5169b1 100644
--- a/web/skins/classic/css/classic/views/event.css
+++ b/web/skins/classic/css/classic/views/event.css
@@ -186,15 +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 {
transition: width .1s;
- height: 1.5em;
+ height: 100%;
background: rgba(170, 170, 170, .7);
+ border-radius: 0 0 .3em .3em;
}
#eventStills {
@@ -271,7 +272,7 @@ span.noneCue {
#eventImageNav {
position: relative;
- margin: 4px 0 0 0;
+ margin: 0 0 4px 0;
}
#eventImageNav input {
@@ -280,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/dark/views/event.css b/web/skins/classic/css/dark/views/event.css
index f0bbdac24..21f186f37 100644
--- a/web/skins/classic/css/dark/views/event.css
+++ b/web/skins/classic/css/dark/views/event.css
@@ -168,15 +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 {
transition: width .1s;
- height: 1.5em;
+ height: 100%;
background: rgba(170, 170, 170, .7);
+ border-radius: 0 0 .3em .3em;
}
#eventStills {
@@ -254,7 +255,7 @@ span.noneCue {
#eventImageNav {
position: relative;
- margin: 4px 0 0 0;
+ margin: 0 0 4px 0;
}
#eventImageNav input {
@@ -263,16 +264,16 @@ 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;
}
#eventVideo {
@@ -281,7 +282,7 @@ span.noneCue {
}
#thumbsKnob {
- width: 8px;
- height: 10px;
- background-color: #444444;
+ width: 1em;
+ height: 100%;
+ background-color: #999999;
}
diff --git a/web/skins/classic/css/flat/views/event.css b/web/skins/classic/css/flat/views/event.css
index 88aec52ad..242cf04b1 100644
--- a/web/skins/classic/css/flat/views/event.css
+++ b/web/skins/classic/css/flat/views/event.css
@@ -179,15 +179,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 {
transition: width .1s;
- height: 1.5em;
+ height: 100%;
background: rgba(170, 170, 170, .7);
+ border-radius: 0 0 .3em .3em;
}
#eventStills {
@@ -265,7 +266,7 @@ span.noneCue {
#eventImageNav {
position: relative;
- margin: 4px 0 0 0;
+ margin: 0 0 4px 0;
}
#eventImageNav input {
@@ -274,22 +275,22 @@ 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;
}
#eventVideo {
display: inline-block;
diff --git a/web/skins/classic/views/event.php b/web/skins/classic/views/event.php
index 96ca3d755..ead8e9c9c 100644
--- a/web/skins/classic/views/event.php
+++ b/web/skins/classic/views/event.php
@@ -220,6 +220,13 @@ Warning("Streamsrc: $streamSrc");
Date: Tue, 28 Nov 2017 12:11:07 -0500
Subject: [PATCH 14/23] Cleanup css
Remove repeated block, move eventVideo to the same location in all files
---
web/skins/classic/css/classic/views/event.css | 10 +++++-----
web/skins/classic/css/dark/views/event.css | 8 ++++----
web/skins/classic/css/flat/views/event.css | 20 ++++++-------------
3 files changed, 15 insertions(+), 23 deletions(-)
diff --git a/web/skins/classic/css/classic/views/event.css b/web/skins/classic/css/classic/views/event.css
index 92c5169b1..dbcc30835 100644
--- a/web/skins/classic/css/classic/views/event.css
+++ b/web/skins/classic/css/classic/views/event.css
@@ -45,11 +45,6 @@ span.noneCue {
padding: 2px;
}
-#eventVideo {
- display: inline-block;
- position: relative;
-}
-
#menuBar1 {
width: 100%;
padding: 3px 0;
@@ -119,6 +114,11 @@ span.noneCue {
float: right;
}
+#eventVideo {
+ display: inline-block;
+ position: relative;
+}
+
#imageFeed {
display: inline-block;
position: relative;
diff --git a/web/skins/classic/css/dark/views/event.css b/web/skins/classic/css/dark/views/event.css
index 21f186f37..6b5709633 100644
--- a/web/skins/classic/css/dark/views/event.css
+++ b/web/skins/classic/css/dark/views/event.css
@@ -29,10 +29,6 @@ span.noneCue {
background: none;
}
-#eventVideo {
- display: inline-block;
-}
-
#dataBar {
width: 100%;
margin: 2px auto;
@@ -101,6 +97,10 @@ span.noneCue {
visibility: hidden;
}
+#eventVideo {
+ display: inline-block;
+}
+
#imageFeed {
display: inline-block;
position: relative;
diff --git a/web/skins/classic/css/flat/views/event.css b/web/skins/classic/css/flat/views/event.css
index 242cf04b1..30758b573 100644
--- a/web/skins/classic/css/flat/views/event.css
+++ b/web/skins/classic/css/flat/views/event.css
@@ -52,7 +52,6 @@ span.noneCue {
clear: both;
}
-
#menuBar1 #nameControl {
float: left;
}
@@ -87,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 {
@@ -106,6 +96,12 @@ span.noneCue {
clear: both;
visibility: hidden;
}
+
+#eventVideo {
+ display: inline-block;
+ position: relative;
+}
+
#imageFeed {
display: inline-block;
position: relative;
@@ -292,7 +288,3 @@ span.noneCue {
height: 100%;
background-color: #999999;
}
-#eventVideo {
- display: inline-block;
- position: relative;
-}
From 07b0bf81c13b8eb048cfa555fa96c69ee6443005 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Tue, 28 Nov 2017 12:30:00 -0500
Subject: [PATCH 15/23] More cleanup
---
web/skins/classic/css/dark/views/event.css | 5 -----
1 file changed, 5 deletions(-)
diff --git a/web/skins/classic/css/dark/views/event.css b/web/skins/classic/css/dark/views/event.css
index 6b5709633..a156c2438 100644
--- a/web/skins/classic/css/dark/views/event.css
+++ b/web/skins/classic/css/dark/views/event.css
@@ -276,11 +276,6 @@ span.noneCue {
margin: 0 0 -1.25em 0;
}
-#eventVideo {
- display: inline-block;
- position: relative;
-}
-
#thumbsKnob {
width: 1em;
height: 100%;
From 3cdb965c4aa90fb5f5e83dfca5d39480d88f2b18 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Tue, 28 Nov 2017 21:27:46 -0500
Subject: [PATCH 16/23] Fix dark theme console
Hover was using the mostly white from classic and flat. Added the striped look from classic and flat.
---
web/skins/classic/css/dark/skin.css | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/web/skins/classic/css/dark/skin.css b/web/skins/classic/css/dark/skin.css
index 799a2ba7c..d8115a41b 100644
--- a/web/skins/classic/css/dark/skin.css
+++ b/web/skins/classic/css/dark/skin.css
@@ -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;
+}
From f8c3e5573e5bcf55f488927ac23bf01401d925f6 Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Tue, 28 Nov 2017 21:39:31 -0500
Subject: [PATCH 17/23] Change dark theme buttons to match original colors
---
web/skins/classic/css/dark/skin.css | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/web/skins/classic/css/dark/skin.css b/web/skins/classic/css/dark/skin.css
index d8115a41b..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;
}
/*
From 83a37732ce1a8c77e008881c35e17162dd97313a Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Thu, 30 Nov 2017 09:44:34 -0500
Subject: [PATCH 18/23] Fix montage view jumping
Need to override bootstrap styling
---
web/skins/classic/css/classic/views/montage.css | 4 ++++
web/skins/classic/css/dark/views/montage.css | 4 ++++
2 files changed, 8 insertions(+)
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/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 {
From 0a995aea78a2fcc65c172d27ef5a9cb791dc4f4c Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Wed, 29 Nov 2017 23:04:38 -0500
Subject: [PATCH 19/23] Add navbar refresh to all pages that use it
---
.../lib/ZoneMinder/ConfigData.pm.in | 30 +++++++++++++++++++
web/ajax/status.php | 4 +++
web/skins/classic/includes/config.php | 3 ++
web/skins/classic/includes/functions.php | 9 ++++--
web/skins/classic/js/skin.js | 14 +++++++++
web/skins/classic/js/skin.js.php | 2 ++
web/skins/classic/views/js/event.js | 2 --
7 files changed, 59 insertions(+), 5 deletions(-)
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 3941a5645..a51669d15 100644
--- a/web/ajax/status.php
+++ b/web/ajax/status.php
@@ -1,4 +1,8 @@
array(
diff --git a/web/skins/classic/includes/config.php b/web/skins/classic/includes/config.php
index 763a2b8cc..6128d534f 100644
--- a/web/skins/classic/includes/config.php
+++ b/web/skins/classic/includes/config.php
@@ -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..e3d9f8110 100644
--- a/web/skins/classic/includes/functions.php
+++ b/web/skins/classic/includes/functions.php
@@ -159,7 +159,7 @@ if ( file_exists( "skins/$skin/css/$css/graphics/favicon.ico" ) ) {
-
+
var AJAX_TIMEOUT = ;
+var navBarRefresh = ;
+
var currentView = '';
var thisUrl = "";
var skinPath = "";
diff --git a/web/skins/classic/views/js/event.js b/web/skins/classic/views/js/event.js
index 95460a8f1..f3f4752a7 100644
--- a/web/skins/classic/views/js/event.js
+++ b/web/skins/classic/views/js/event.js
@@ -40,8 +40,6 @@ function vjsReplay() {
}
}
-$j.ajaxSetup ({timeout: AJAX_TIMEOUT }); //sets timeout for all getJSON.
-
var cueFrames = null; //make cueFrames availaible even if we don't send another ajax query
function initialAlarmCues (eventId) {
From 5e953cefeaa8e8133e8d16dddfe4f6aec132dd57 Mon Sep 17 00:00:00 2001
From: Isaac Connor
Date: Fri, 1 Dec 2017 12:30:07 -0800
Subject: [PATCH 20/23] fix old cookie causing errors loading layouts
---
web/skins/classic/views/montage.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web/skins/classic/views/montage.php b/web/skins/classic/views/montage.php
index ea2e0a588..30f7d0420 100644
--- a/web/skins/classic/views/montage.php
+++ b/web/skins/classic/views/montage.php
@@ -78,7 +78,7 @@ if ( isset($_COOKIE['zmMontageLayout']) ) {
$options = array();
$Layout = '';
$Positions = '';
-if ( $layout_id ) {
+if ( $layout_id and is_numeric($layout_id) and isset($layoutsById[$layout_id]) ) {
$Layout = $layoutsById[$layout_id];
$Positions = json_decode( $Layout->Positions(), true );
}
From ca3d6546bd5b7fdb613dd84d4c7ebd6732938b57 Mon Sep 17 00:00:00 2001
From: Isaac Connor
Date: Fri, 1 Dec 2017 12:30:21 -0800
Subject: [PATCH 21/23] sorty by name when listing monitors by name
---
web/skins/classic/views/filter.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web/skins/classic/views/filter.php b/web/skins/classic/views/filter.php
index 8b8961f8b..dcde7aa19 100644
--- a/web/skins/classic/views/filter.php
+++ b/web/skins/classic/views/filter.php
@@ -231,7 +231,7 @@ for ( $i = 0; $i < count($terms); $i++ ) {
Date: Fri, 1 Dec 2017 10:34:37 -0500
Subject: [PATCH 22/23] Fix timeline by adding StartDateTime
---
web/skins/classic/includes/timeline_functions.php | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/web/skins/classic/includes/timeline_functions.php b/web/skins/classic/includes/timeline_functions.php
index 6a98a28f7..a1c84f4f3 100644
--- a/web/skins/classic/includes/timeline_functions.php
+++ b/web/skins/classic/includes/timeline_functions.php
@@ -104,6 +104,10 @@ function parseFilterToTree( $filter ) {
$sqlValue = "E.StartTime";
$dtAttr = true;
break;
+ case 'StartDateTime':
+ $sqlValue = "E.StartTime";
+ $dtAttr = true;
+ break;
case 'Date':
$sqlValue = "to_days( E.StartTime )";
$dtAttr = true;
@@ -196,6 +200,9 @@ function parseFilterToTree( $filter ) {
case 'DateTime':
$value = "'".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."'";
break;
+ case 'StartDateTime':
+ $value = "'".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."'";
+ break;
case 'Date':
$value = "to_days( '".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."' )";
break;
From 53f886edc4c3c92abc439ba4b72ec70a0c41783e Mon Sep 17 00:00:00 2001
From: digital-gnome <31593470+digital-gnome@users.noreply.github.com>
Date: Fri, 1 Dec 2017 22:15:29 -0500
Subject: [PATCH 23/23] Make navbar refresh not change header links
---
web/skins/classic/includes/functions.php | 27 ++++++++++++------------
web/skins/classic/js/skin.js | 2 +-
2 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/web/skins/classic/includes/functions.php b/web/skins/classic/includes/functions.php
index e3d9f8110..b2e6d17c9 100644
--- a/web/skins/classic/includes/functions.php
+++ b/web/skins/classic/includes/functions.php
@@ -162,26 +162,21 @@ if ( file_exists( "skins/$skin/css/$css/graphics/favicon.ico" ) ) {
function getNavBarHTML($reload = null) {
$versionClass = (ZM_DYN_DB_VERSION&&(ZM_DYN_DB_VERSION!=ZM_VERSION))?'errorText':'';
-
-
- ob_start();
global $running;
- if ( $running == null )
- $running = daemonCheck();
- $status = $running?translate('Running'):translate('Stopped');
global $user;
global $bandwidth_options;
global $view;
if ($reload === null) {
+ ob_start();
+ if ( $running == null )
+ $running = daemonCheck();
+ $status = $running?translate('Running'):translate('Stopped');
?>
-
-
+
+
@@ -280,9 +279,11 @@ if ( ZM_OPT_X10 && canView( 'Devices' ) ) { ?>
echo ' ' . ZM_PATH_MAP .': '. getDiskPercent(ZM_PATH_MAP).'%';
?>
-
-
-
+
+
+