summaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
Diffstat (limited to 'www')
-rw-r--r--www/css/style.css7
-rw-r--r--www/js/DevOptionsCtrl.js6
-rw-r--r--www/js/MontageCtrl.js74
-rw-r--r--www/js/NVR.js15
-rw-r--r--www/lang/locale-en.json2
-rw-r--r--www/templates/devoptions.html7
-rw-r--r--www/templates/montage.html11
7 files changed, 101 insertions, 21 deletions
diff --git a/www/css/style.css b/www/css/style.css
index 56ae80de..adf1ca7e 100644
--- a/www/css/style.css
+++ b/www/css/style.css
@@ -1,3 +1,4 @@
+
@font-face {
font-family: 'fontawesome';
src: url('../lib/font-awesome/fonts/fontawesome-webfont.eot');
@@ -1160,6 +1161,12 @@ videogular vg-cue-points vg-cue-point {
.grid-sizer {
width: 1%;
+
+}
+
+.grid-item-dynamic {
+
+ width: var(--grid-width) !important;
}
.grid-item {
diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js
index f529c6b7..bbd1bc9a 100644
--- a/www/js/DevOptionsCtrl.js
+++ b/www/js/DevOptionsCtrl.js
@@ -118,10 +118,10 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
// make sure only ints are used as CSS classes only use ints
// in grid scale
- $scope.loginData.montageResizeSteps = parseInt($scope.loginData.montageResizeSteps);
+ $scope.loginData.montageResizeSteps = parseFloat($scope.loginData.montageResizeSteps);
- if ($scope.loginData.montageResizeSteps < 1) {
- $scope.loginData.montageResizeSteps = 1;
+ if ($scope.loginData.montageResizeSteps < 0.05) {
+ $scope.loginData.montageResizeSteps = 0.05;
}
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index 0cea06a2..f6d5967a 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -280,6 +280,7 @@ angular.module('zmApp.controllers')
NVR.log("Whoops!! Monitors have changed. I'm resetting layouts, sorry!");
layouttype = true;
positions = {};
+ // document.documentElement.style.setProperty('--grid-width', "50%");
}
var elem = angular.element(document.getElementById("mygrid"));
@@ -387,7 +388,12 @@ angular.module('zmApp.controllers')
if ($scope.MontageMonitors[i].Monitor.Id == positions[j].attr) {
if (isNaN(positions[j].size)) positions[j].size = 20;
if (positions[j].size == 0) positions[j].size = 20;
+
$scope.MontageMonitors[i].Monitor.gridScale = positions[j].size;
+
+ if (positions[j].display != 'show' && positions[j].display != 'noshow')
+ positions[j].display = 'show';
+
$scope.MontageMonitors[i].Monitor.listDisplay = positions[j].display;
// NVR.debug("Setting monitor ID: " + $scope.MontageMonitors[i].Monitor.Id + " to size: " + positions[j].size + " and display:" + positions[j].display);
}
@@ -2491,26 +2497,73 @@ angular.module('zmApp.controllers')
});
- $scope.resetSizes = function (unhideAll) {
+ $scope.resetSizesWithInput = function () {
+ $scope.data = {};
+ var myPopup = $ionicPopup.show({
+ template: '<input type="number" ng-model="data.cols">',
+ title: $translate.instant('kMontageResizeCols'),
+ scope: $scope,
+ buttons: [
+ { text: $translate.instant('kButtonCancel') },
+ {
+ text: $translate.instant('kButtonOk'),
+ type: 'button-positive',
+ onTap: function(e) {
+ if (!$scope.data.cols) {
+ //don't allow the user to close unless he enters wifi password
+ e.preventDefault();
+ } else {
+ return $scope.data.cols;
+ }
+ }
+ }
+ ]
+ });
+
+ myPopup.then(function(res) {
+ if (res) {
+
+
+ // var x = getComputedStyle(document.documentElement).getPropertyValue('--grid-width');
+ // console.log ('*********** CURRENT WIDTH IS '+x);
+
+ // var p = parseInt(100.0/res + 0.2);
+ p = parseFloat (100.0/res).toFixed(3);
+ NVR.debug ("Resizing monitors to: "+p);
+
+ // document.documentElement.style.setProperty('--grid-width', p+"%");
+ // document.documentElement.style.setProperty('--grid-width', p);
+ // x = getComputedStyle(document.documentElement).getPropertyValue('--grid-width');
+// var x = document.documentElement.style.getProperty('--grid-width');
+ // console.log ('*********** NEW WIDTH IS '+x);
+
+
+ $scope.resetSizes(false, p);
+ }
+ });
+ };
+
+ $scope.resetSizes = function (unhideAll, percent) {
var somethingReset = false;
+ if (!percent) percent="50%";
for (var i = 0; i < $scope.MontageMonitors.length; i++) {
if (unhideAll) {
$scope.MontageMonitors[i].Monitor.listDisplay = 'show';
}
if ($scope.isDragabillyOn) {
if ($scope.MontageMonitors[i].Monitor.selectStyle == "dragborder-selected") {
- $scope.MontageMonitors[i].Monitor.gridScale = "50";
+ $scope.MontageMonitors[i].Monitor.gridScale = percent;
somethingReset = true;
}
} else {
- $scope.MontageMonitors[i].Monitor.gridScale = "50";
+ $scope.MontageMonitors[i].Monitor.gridScale = percent;
// somethingReset = true;
}
}
if (!somethingReset && $scope.isDragabillyOn) // nothing was selected
{
for (i = 0; i < $scope.MontageMonitors.length; i++) {
- $scope.MontageMonitors[i].Monitor.gridScale = "50";
+ $scope.MontageMonitors[i].Monitor.gridScale = percent;
}
}
@@ -2629,7 +2682,8 @@ angular.module('zmApp.controllers')
pckry.getItemElements().forEach(function (elem) {
var id = elem.getAttribute("data-item-id");
var sz = elem.getAttribute("data-item-size");
- if (isNaN(sz)) sz = 20;
+ //console.log ('********** GOT ID:'+id+" SIZE:"+sz);
+ //if (isNaN(sz)) sz = "20%";
oldScales[id] = sz;
//console.log("REMEMBERING " + id + ":" + sz);
@@ -2638,11 +2692,11 @@ angular.module('zmApp.controllers')
// this only changes items that are selected
for (var i = 0; i < $scope.MontageMonitors.length; i++) {
- var curVal = parseInt($scope.MontageMonitors[i].Monitor.gridScale) || 20;
+ var curVal = parseFloat($scope.MontageMonitors[i].Monitor.gridScale) || 20;
curVal = curVal + (ld.montageResizeSteps * dirn);
- if (curVal < 10) curVal = 10;
+ if (curVal < 5) curVal = 5;
if (curVal > 100) curVal = 100;
- //console.log ("For Index: " + i + " From: " + $scope.MontageMonitors[i].Monitor.gridScale + " To: " + curVal);
+ console.log ("For Index: " + i + " From: " + $scope.MontageMonitors[i].Monitor.gridScale + " To: " + curVal);
if ($scope.isDragabillyOn) {
// only do this for selected monitors
@@ -2663,9 +2717,9 @@ angular.module('zmApp.controllers')
if (!somethingReset && $scope.isDragabillyOn) // nothing was selected
{
for (i = 0; i < $scope.MontageMonitors.length; i++) {
- var cv = parseInt($scope.MontageMonitors[i].Monitor.gridScale) || 20;
+ var cv = parseFloat($scope.MontageMonitors[i].Monitor.gridScale) || 20;
cv = cv + (ld.montageResizeSteps * dirn);
- if (cv < 10) cv = 10;
+ if (cv < 5) cv = 5;
if (cv > 100) cv = 100;
$scope.MontageMonitors[i].Monitor.gridScale = cv;
//console.log ("*******GRIDSCALE="+)
diff --git a/www/js/NVR.js b/www/js/NVR.js
index 61645de2..bdeadece 100644
--- a/www/js/NVR.js
+++ b/www/js/NVR.js
@@ -199,7 +199,7 @@ angular.module('zmApp.controllers')
'disableSimulStreaming': false,
'insertBasicAuthToken': false,
'loginAPISupported': false,
- 'montageResizeSteps': 5,
+ 'montageResizeSteps': 0.2,
'currentServerVersion': '',
'saveToCloud': true,
'montageReviewCollapse': true,
@@ -220,7 +220,8 @@ angular.module('zmApp.controllers')
'liveStreamBuffer': 10,
'zmNinjaCustomId':undefined, // filled in init. custom header
'obfuscationScheme': 'lzs', // or 'aes'
- 'showAnimation': true
+ 'showAnimation': true,
+ 'montageHideFooter': false,
};
@@ -1051,7 +1052,7 @@ angular.module('zmApp.controllers')
loginData = angular.copy(newLogin);
- // console.log ('****** SET LOGIN:'+JSON.stringify(loginData));
+ //console.log ('****** SET LOGIN:'+JSON.stringify(loginData));
$rootScope.LoginData = loginData;
serverGroupList[loginData.serverName] = angular.copy(loginData);
@@ -1527,7 +1528,7 @@ angular.module('zmApp.controllers')
if (typeof loginData.montageResizeSteps == 'undefined') {
- loginData.montageResizeSteps = 5;
+ loginData.montageResizeSteps = 0.2;
}
@@ -1630,6 +1631,12 @@ angular.module('zmApp.controllers')
loginData.showAnimation = true;
}
+ if (typeof loginData.montageHideFooter == 'undefined') {
+ loginData.montageHideFooter = false;
+ }
+
+
+
loginData.canSwipeMonitors = true;
loginData.forceImageModePath = false;
loginData.enableBlog = true;
diff --git a/www/lang/locale-en.json b/www/lang/locale-en.json
index c4930102..bd015405 100644
--- a/www/lang/locale-en.json
+++ b/www/lang/locale-en.json
@@ -245,10 +245,12 @@
"kMontageEventLatest" :"latest",
"kMontageEventStorage" :"storage",
"kMontageEventUnseenCount" :"unseen",
+ "kMontageHideFooter" :"Hide montage monitor footer",
"kMontageImageScale" :"Montage image scale",
"kMontageLiveViewFPS" :"Montage live view FPS",
"kMontageNoSavedProfiles" :"No saved montage profiles",
"kMontageResizeSteps" :"Montage resize factor",
+ "kMontageResizeCols" :"How many columns?",
"kMontageSave" :"Save Montage Profile",
"kMontageSaveDefaultWarning" :"This profile does not allow monitors to be hidden. Any hidden monitors are now unhidden",
"kMontageSaveSubtitle" :"please enter a profile name to save current settings",
diff --git a/www/templates/devoptions.html b/www/templates/devoptions.html
index 6dcc3645..d782a654 100644
--- a/www/templates/devoptions.html
+++ b/www/templates/devoptions.html
@@ -198,6 +198,13 @@
</label>
<label>
+ <ion-toggle ng-model="loginData.montageHideFooter" toggle-class="toggle-calm">
+ <span class="item-text-wrap">{{'kMontageHideFooter' | translate}}
+ </span>
+ </ion-toggle>
+ </label>
+
+ <label>
<ion-toggle ng-model="loginData.enableEventRefresh" toggle-class="toggle-calm">
<span class="item-text-wrap">{{'kEnableEventRefresh' | translate}}
</span>
diff --git a/www/templates/montage.html b/www/templates/montage.html
index 1ab59efa..b4f17703 100644
--- a/www/templates/montage.html
+++ b/www/templates/montage.html
@@ -29,13 +29,13 @@
<button class="button button-icon button-clear ion-monitor" ng-click="cast();">&nbsp;
</button>
-->
- <button ng-if="!$root.LoginData.isKiosk" id="montage-move-3" class="button button-icon button-clear ion-loop" ng-click="resetSizes();">&nbsp;
+ <button ng-if="!$root.LoginData.isKiosk" id="montage-move-3" class="button button-icon button-clear ion-loop" ng-click="resetSizesWithInput();">&nbsp;
</button>
<button class="button button-icon button-clear ion-android-contract" ng-click="switchMinimal()">
</button>
</ion-nav-buttons>
<ion-content ng-cloak has-bouncing="false" style="background-color:#444444" delegate-handle="montage-delegate"
- overflow-scroll="false">
+ overflow-scroll="false" padding="false">
<div ng-if="areImagesLoading" class="screen-note">&nbsp;{{ 'kArrangingImages' | translate }}...&nbsp;</div>
@@ -123,7 +123,10 @@
<span ng-repeat="monitor in MontageMonitors | onlyEnabled |limitTo: monLimit">
- <div class="grid-item grid-item-{{monitor.Monitor.gridScale}} " data-item-id="{{monitor.Monitor.Id}}"
+ <!--<div class="grid-item grid-item-{{monitor.Monitor.gridScale}} " data-item-id="{{monitor.Monitor.Id}}"
+ data-item-size="{{monitor.Monitor.gridScale}}" data-item-listdisplay="{{monitor.Monitor.listDisplay}} ">-->
+
+ <div class="grid-item" data-item-id="{{monitor.Monitor.Id}}" ng-style="{'width': monitor.Monitor.gridScale + '%'}"
data-item-size="{{monitor.Monitor.gridScale}}" data-item-listdisplay="{{monitor.Monitor.listDisplay}} ">
@@ -153,7 +156,7 @@
img-spinner-h="{{monitor.Monitor.Height}}" image-on-error="processImageError(monitor);" />
</div>
- <figcaption id="slowpulse"
+ <figcaption ng-if="!LoginData.montageHideFooter" id="slowpulse"
ng-class="monitor.Monitor.isAlarmed==true?'alarmed-figcaption animated infinite flash':'normal-figcaption'">
&nbsp;