diff options
| -rw-r--r-- | package.json | 4 | ||||
| -rw-r--r-- | www/css/style.css | 7 | ||||
| -rw-r--r-- | www/js/DevOptionsCtrl.js | 6 | ||||
| -rw-r--r-- | www/js/MontageCtrl.js | 74 | ||||
| -rw-r--r-- | www/js/NVR.js | 15 | ||||
| -rw-r--r-- | www/lang/locale-en.json | 2 | ||||
| -rw-r--r-- | www/templates/devoptions.html | 7 | ||||
| -rw-r--r-- | www/templates/montage.html | 11 |
8 files changed, 103 insertions, 23 deletions
diff --git a/package.json b/package.json index 61eb0380..206b1ef7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "zmninjapro", "description": "Home security mobile app for ZoneMinder", - "version":"1.4.003", + "version": "1.4.003", "displayName": "zmNinja", "author": "Pliable Pixels", "license": "custom see LICENSE.md", @@ -224,4 +224,4 @@ ] } } -} +}
\ No newline at end of file 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();"> </button> --> - <button ng-if="!$root.LoginData.isKiosk" id="montage-move-3" class="button button-icon button-clear ion-loop" ng-click="resetSizes();"> + <button ng-if="!$root.LoginData.isKiosk" id="montage-move-3" class="button button-icon button-clear ion-loop" ng-click="resetSizesWithInput();"> </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"> {{ 'kArrangingImages' | translate }}... </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'"> |
