summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild_ios.sh2
-rw-r--r--etc/js/ion-pullup.js7
-rw-r--r--package.json4
-rw-r--r--www/css/style.css14
-rw-r--r--www/external/js/ion-pullup.min.js2
-rw-r--r--www/js/EventCtrl.js118
-rw-r--r--www/js/EventModalCtrl.js5
-rw-r--r--www/js/LoginCtrl.js3
-rw-r--r--www/js/MontageCtrl.js15
-rw-r--r--www/js/MontageHistoryCtrl.js6
-rw-r--r--www/js/NVR.js2
-rwxr-xr-xwww/js/app.js4
-rw-r--r--www/lang/locale-de.json4
-rw-r--r--www/lang/locale-en.json1
-rw-r--r--www/templates/devoptions.html2
-rw-r--r--www/templates/events-date-time-filter.html2
-rw-r--r--www/templates/events-modal.html4
-rw-r--r--www/templates/events-modalgraph.html2
-rw-r--r--www/templates/events-popover.html2
-rw-r--r--www/templates/events.html57
-rw-r--r--www/templates/eventserversettings.html2
-rw-r--r--www/templates/help.html2
-rw-r--r--www/templates/image-modal.html2
-rw-r--r--www/templates/important_message.html2
-rw-r--r--www/templates/invalidapi.html2
-rw-r--r--www/templates/log.html2
-rw-r--r--www/templates/login.html2
-rw-r--r--www/templates/lowversion.html2
-rw-r--r--www/templates/menu.html2
-rw-r--r--www/templates/moment-mask.html2
-rw-r--r--www/templates/moment-popover.html2
-rw-r--r--www/templates/moment.html2
-rw-r--r--www/templates/monitors-modal.html2
-rw-r--r--www/templates/monitors.html2
-rw-r--r--www/templates/montage-history.html2
-rw-r--r--www/templates/montage.html2
-rw-r--r--www/templates/news.html2
-rw-r--r--www/templates/reorder-modal.html2
-rw-r--r--www/templates/state.html2
-rw-r--r--www/templates/timeline-modal.html2
-rw-r--r--www/templates/timeline-popover.html2
-rw-r--r--www/templates/timeline.html2
-rw-r--r--www/templates/wizard.html2
-rw-r--r--www/templates/zm-portal-login.html2
44 files changed, 191 insertions, 113 deletions
diff --git a/build_ios.sh b/build_ios.sh
index 9dc82f27..38ca17ab 100755
--- a/build_ios.sh
+++ b/build_ios.sh
@@ -5,7 +5,7 @@ if [ "$1" != "skip" ]
then
# ionic cordova plugin remove cordova-plugin-ionic-webview 2>/dev/null
echo "Adding wkwebview..."
- ionic cordova plugin add https://github.com/pliablepixels/cordova-plugin-ionic-webview.git
+ cordova plugin add https://github.com/pliablepixels/cordova-plugin-ionic-webview.git
echo "Resetting media fork..."
cordova plugin remove cordova-plugin-media-pp-fork
cordova plugin add cordova-plugin-media-pp-fork
diff --git a/etc/js/ion-pullup.js b/etc/js/ion-pullup.js
index 9c0b2470..723456f2 100644
--- a/etc/js/ion-pullup.js
+++ b/etc/js/ion-pullup.js
@@ -212,7 +212,12 @@ angular.module('ionic-pullup', [])
}
};
+ function cleanup() {
+ $window.removeEventListener('orientationchange', updateUI);
+ deregisterWatch();
+ }
var deregisterWatch = $scope.$watch('state', function (newState, oldState) {
+
if (oldState === undefined || newState == oldState) return;
switch (newState) {
case FooterState.COLLAPSED:
@@ -228,7 +233,7 @@ angular.module('ionic-pullup', [])
$rootScope.$broadcast('ionPullUp:tap', $scope.state, footer.defaultBehavior);
});
- $scope.$on('$destroy', deregisterWatch);
+ $scope.$on('$destroy', cleanup);
$ionicPlatform.ready(function () {
$window.addEventListener('orientationchange', updateUI);
diff --git a/package.json b/package.json
index f6423cde..0ea65508 100644
--- a/package.json
+++ b/package.json
@@ -70,10 +70,10 @@
"ANDROID_GSON_VERSION": "2.8.6"
},
"cordova-plugin-advanced-http": {},
- "cordova-plugin-media-pp-fork": {},
"cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
- }
+ },
+ "cordova-plugin-media-pp-fork": {}
}
},
"dependencies": {
diff --git a/www/css/style.css b/www/css/style.css
index 626fe0ba..c7670e58 100644
--- a/www/css/style.css
+++ b/www/css/style.css
@@ -1917,8 +1917,7 @@ fill-opacity: 0.8;
}
.smallThumbs {
-
- flex-wrap:wrap;
+
float:right;
}
@@ -1947,9 +1946,18 @@ body {
font-family: sans-serif;
height:100%;
padding-top: constant(safe-area-inset-top);
-}
+ padding-top: env(safe-area-inset-top);
+
+}
+.notch-ready {
+ margin-left: constant(safe-area-inset-left);
+ margin-left: env(safe-area-inset-left);
+
+ margin-right: constant(safe-area-inset-right);
+ margin-right: env(safe-area-inset-right);
+}
* {
font-family: -apple-system, "Helvetica Neue", sans-serif;
diff --git a/www/external/js/ion-pullup.min.js b/www/external/js/ion-pullup.min.js
index efbcc552..5cd85289 100644
--- a/www/external/js/ion-pullup.min.js
+++ b/www/external/js/ion-pullup.min.js
@@ -1 +1 @@
-angular.module("ionic-pullup",[]).constant("ionPullUpFooterState",{COLLAPSED:"COLLAPSED",MINIMIZED:"MINIMIZED",EXPANDED:"EXPANDED"}).constant("ionPullUpFooterBehavior",{HIDE:"HIDE",EXPAND:"EXPAND"}).directive("ionPullUpFooter",[function(){return{restrict:"AE",scope:{state:"=?",onExpand:"&",onCollapse:"&",onMinimize:"&",allowMidRange:"="},controller:["$scope","$element","$attrs","$timeout","$rootScope","$window","$ionicPlatform","ionPullUpFooterState","ionPullUpFooterBehavior",function(t,e,o,n,i,a,s,r,l){function c(){var t=e[0];f=t.closest("ion-tabs"),g=f&&f.classList.contains("tabs-bottom"),E=document.querySelector("ion-nav-bar .nav-bar-block[nav-bar=entering] > .bar-header"),D=f?f.querySelector(".tabs").offsetHeight:0,I=E?E.offsetHeight:0}function u(){n(function(){m.height=m.maxHeight>0?m.maxHeight:a.innerHeight-I-P-D,m.height-=50,"ios"==i.platformOS&&(m.height-=30),e.css({height:m.height+"px"}),m.initialState==r.MINIMIZED?d():p()},300),e.css({transition:"none",padding:0})}function h(){c(),m.height=m.maxHeight>0?m.maxHeight:a.innerHeight-I-P-D,m.height-=50,"ios"==i.platformOS&&(m.height-=30),m.lastPosY=0,e.css({height:m.height+"px","-webkit-transform":"translate3d(0, 0, 0)",transform:"translate3d(0, 0, 0)"}),e.css({transition:"300ms ease-in-out",padding:0}),t.onExpand(),t.state=r.EXPANDED}function p(){m.lastPosY=f?m.height-D:m.height-m.defaultHeight,e.css({"-webkit-transform":"translate3d(0, "+m.lastPosY+"px, 0)",transform:"translate3d(0, "+m.lastPosY+"px, 0)"}),t.onCollapse(),t.state=r.COLLAPSED}function d(){m.lastPosY=m.height,e.css({"-webkit-transform":"translate3d(0, "+m.lastPosY+"px, 0)",transform:"translate3d(0, "+m.lastPosY+"px, 0)"}),t.onMinimize(),t.state=r.MINIMIZED}var f,g,E,D,I,P=0,m={height:0,posY:0,lastPosY:0,defaultHeight:e[0].offsetHeight,maxHeight:parseInt(o.maxHeight,10)||0,initialState:o.initialState?o.initialState.toUpperCase():r.COLLAPSED,defaultBehavior:o.defaultBehavior?o.defaultBehavior.toUpperCase():l.EXPAND};this.$onInit=function(){n(function(){c(),e.css({transition:"300ms ease-in-out",padding:0}),f&&g&&e.css("bottom",D+"px")}),u()},this.setHandleHeight=function(t){P=t},this.getHeight=function(){return e[0].offsetHeight},this.getBackground=function(){return a.getComputedStyle(e[0]).background},this.getInitialState=function(){return m.initialState},this.getDefaultBehavior=function(){return m.defaultBehavior},this.onTap=function(e){e.gesture.srcEvent.preventDefault(),e.gesture.preventDefault(),n(function(){t.state==r.COLLAPSED?m.defaultBehavior==l.HIDE?t.state=r.MINIMIZED:t.state=r.EXPANDED:t.state==r.MINIMIZED?m.defaultBehavior==l.HIDE?t.state=r.COLLAPSED:t.state=r.EXPANDED:t.state=m.initialState==r.MINIMIZED?r.MINIMIZED:r.COLLAPSED})},this.onDrag=function(o){switch(o.gesture.srcEvent.preventDefault(),o.gesture.preventDefault(),o.type){case"dragstart":e.css("transition","none");break;case"drag":if(m.posY=Math.round(o.gesture.deltaY)+m.lastPosY,m.posY<0||m.posY>m.height)return;e.css({"-webkit-transform":"translate3d(0, "+m.posY+"px, 0)",transform:"translate3d(0, "+m.posY+"px, 0)"});break;case"dragend":e.css({transition:"300ms ease-in-out"}),t.allowMidRange?m.lastPosY=m.posY:n(function(){m.lastPosY>m.posY?t.state=r.EXPANDED:m.lastPosY<m.posY&&(t.state=m.initialState==r.MINIMIZED?r.MINIMIZED:r.COLLAPSED)})}};var v=t.$watch("state",function(e,o){if(void 0!==o&&e!=o){switch(e){case r.COLLAPSED:p();break;case r.EXPANDED:h();break;case r.MINIMIZED:d()}i.$broadcast("ionPullUp:tap",t.state,m.defaultBehavior)}});t.$on("$destroy",v),s.ready(function(){a.addEventListener("orientationchange",u),s.on("resume",u)})}],compile:function(t,e){e.defaultHeight&&t.css("height",parseInt(e.defaultHeight,10)+"px"),t.addClass("bar bar-footer")}}}]).component("ionPullUpContent",{require:{FooterController:"^ionPullUpFooter"},controller:["$element","$attrs",function(t,e){this.$onInit=function(){var o=this.FooterController.getHeight();t.css({display:"block","margin-top":o+"px",width:"100%"}),e.scroll&&"TRUE"==e.scroll.toUpperCase()&&t.css({"overflow-y":"scroll","overflow-x":"hidden"})}}]}).component("ionPullUpBar",{require:{FooterController:"^ionPullUpFooter"},controller:["$element",function(t){this.$onInit=function(){var e=this.FooterController.getHeight();t.css({display:"flex",height:e+"px",position:"absolute",right:"0",left:"0"})}}]}).directive("ionPullUpTrigger",["$ionicGesture",function(t){return{restrict:"AE",require:"^ionPullUpFooter",link:function(e,o,n,i){t.on("tap",i.onTap,o),t.on("drag dragstart dragend",i.onDrag,o)}}}]).component("ionPullUpHandle",{require:{FooterController:"^ionPullUpFooter"},controller:["$scope","$element","$attrs","ionPullUpFooterState","ionPullUpFooterBehavior","$ionicGesture","$ionicPlatform","$timeout","$window",function(t,e,o,n,i,a,s,r,l){function c(t,o){d&&f&&(e.find("i").removeClass([d,f].join(" ")),t==n.COLLAPSED?o==i.HIDE?e.find("i").addClass(f):e.find("i").addClass(d):t==n.MINIMIZED?(i.HIDE,e.find("i").addClass(d)):e.find("i").addClass(f))}function u(){r(function(){e.css("left",(l.innerWidth-p)/2+"px")},300)}var h=parseInt(o.height,10)||25,p=parseInt(o.width,10)||100,d=o.iconExpand,f=o.iconCollapse;e.css({display:"block","background-color":"inherit",position:"absolute",top:1-h+"px",left:(l.innerWidth-p)/2+"px",height:h+"px",width:p+"px","text-align":"center"}).append("<i>"),this.$onInit=function(){var t=this.FooterController;a.on("tap",t.onTap,e),a.on("drag dragstart dragend",t.onDrag,e),t.setHandleHeight(h);c(t.getInitialState(),t.getDefaultBehavior()),u()},t.$on("ionPullUp:tap",function(t,e,o){c(e,o)}),s.ready(function(){l.addEventListener("orientationchange",u),s.on("resume",u)})}]});
+angular.module("ionic-pullup",[]).constant("ionPullUpFooterState",{COLLAPSED:"COLLAPSED",MINIMIZED:"MINIMIZED",EXPANDED:"EXPANDED"}).constant("ionPullUpFooterBehavior",{HIDE:"HIDE",EXPAND:"EXPAND"}).directive("ionPullUpFooter",[function(){return{restrict:"AE",scope:{state:"=?",onExpand:"&",onCollapse:"&",onMinimize:"&",allowMidRange:"="},controller:["$scope","$element","$attrs","$timeout","$rootScope","$window","$ionicPlatform","ionPullUpFooterState","ionPullUpFooterBehavior",function(t,e,n,o,i,a,r,s,l){var c,u,h,p,d,f=0,g={height:0,posY:0,lastPosY:0,defaultHeight:e[0].offsetHeight,maxHeight:parseInt(n.maxHeight,10)||0,initialState:n.initialState?n.initialState.toUpperCase():s.COLLAPSED,defaultBehavior:n.defaultBehavior?n.defaultBehavior.toUpperCase():l.EXPAND};function E(){var t=e[0];c=t.closest("ion-tabs"),u=c&&c.classList.contains("tabs-bottom"),h=document.querySelector("ion-nav-bar .nav-bar-block[nav-bar=entering] > .bar-header"),p=c?c.querySelector(".tabs").offsetHeight:0,d=h?h.offsetHeight:0}function D(){o((function(){g.height=g.maxHeight>0?g.maxHeight:a.innerHeight-d-f-p,g.height-=50,"ios"==i.platformOS&&(g.height-=30),e.css({height:g.height+"px"}),g.initialState==s.MINIMIZED?m():P()}),300),e.css({transition:"none",padding:0})}function I(){E(),g.height=g.maxHeight>0?g.maxHeight:a.innerHeight-d-f-p,g.height-=50,"ios"==i.platformOS&&(g.height-=30),g.lastPosY=0,e.css({height:g.height+"px","-webkit-transform":"translate3d(0, 0, 0)",transform:"translate3d(0, 0, 0)"}),e.css({transition:"300ms ease-in-out",padding:0}),t.onExpand(),t.state=s.EXPANDED}function P(){g.lastPosY=c?g.height-p:g.height-g.defaultHeight,e.css({"-webkit-transform":"translate3d(0, "+g.lastPosY+"px, 0)",transform:"translate3d(0, "+g.lastPosY+"px, 0)"}),t.onCollapse(),t.state=s.COLLAPSED}function m(){g.lastPosY=g.height,e.css({"-webkit-transform":"translate3d(0, "+g.lastPosY+"px, 0)",transform:"translate3d(0, "+g.lastPosY+"px, 0)"}),t.onMinimize(),t.state=s.MINIMIZED}this.$onInit=function(){o((function(){E(),e.css({transition:"300ms ease-in-out",padding:0}),c&&u&&e.css("bottom",p+"px")})),D()},this.setHandleHeight=function(t){f=t},this.getHeight=function(){return e[0].offsetHeight},this.getBackground=function(){return a.getComputedStyle(e[0]).background},this.getInitialState=function(){return g.initialState},this.getDefaultBehavior=function(){return g.defaultBehavior},this.onTap=function(e){e.gesture.srcEvent.preventDefault(),e.gesture.preventDefault(),o((function(){t.state==s.COLLAPSED?g.defaultBehavior==l.HIDE?t.state=s.MINIMIZED:t.state=s.EXPANDED:t.state==s.MINIMIZED?g.defaultBehavior==l.HIDE?t.state=s.COLLAPSED:t.state=s.EXPANDED:t.state=g.initialState==s.MINIMIZED?s.MINIMIZED:s.COLLAPSED}))},this.onDrag=function(n){switch(n.gesture.srcEvent.preventDefault(),n.gesture.preventDefault(),n.type){case"dragstart":e.css("transition","none");break;case"drag":if(g.posY=Math.round(n.gesture.deltaY)+g.lastPosY,g.posY<0||g.posY>g.height)return;e.css({"-webkit-transform":"translate3d(0, "+g.posY+"px, 0)",transform:"translate3d(0, "+g.posY+"px, 0)"});break;case"dragend":e.css({transition:"300ms ease-in-out"}),t.allowMidRange?g.lastPosY=g.posY:o((function(){g.lastPosY>g.posY?t.state=s.EXPANDED:g.lastPosY<g.posY&&(t.state=g.initialState==s.MINIMIZED?s.MINIMIZED:s.COLLAPSED)}))}};var v=t.$watch("state",(function(e,n){if(void 0!==n&&e!=n){switch(e){case s.COLLAPSED:P();break;case s.EXPANDED:I();break;case s.MINIMIZED:m()}i.$broadcast("ionPullUp:tap",t.state,g.defaultBehavior)}}));t.$on("$destroy",(function(){a.removeEventListener("orientationchange",D),v()})),r.ready((function(){a.addEventListener("orientationchange",D),r.on("resume",D)}))}],compile:function(t,e){e.defaultHeight&&t.css("height",parseInt(e.defaultHeight,10)+"px"),t.addClass("bar bar-footer")}}}]).component("ionPullUpContent",{require:{FooterController:"^ionPullUpFooter"},controller:["$element","$attrs",function(t,e){this.$onInit=function(){var n=this.FooterController.getHeight();t.css({display:"block","margin-top":n+"px",width:"100%"}),e.scroll&&"TRUE"==e.scroll.toUpperCase()&&t.css({"overflow-y":"scroll","overflow-x":"hidden"})}}]}).component("ionPullUpBar",{require:{FooterController:"^ionPullUpFooter"},controller:["$element",function(t){this.$onInit=function(){var e=this.FooterController.getHeight();t.css({display:"flex",height:e+"px",position:"absolute",right:"0",left:"0"})}}]}).directive("ionPullUpTrigger",["$ionicGesture",function(t){return{restrict:"AE",require:"^ionPullUpFooter",link:function(e,n,o,i){t.on("tap",i.onTap,n),t.on("drag dragstart dragend",i.onDrag,n)}}}]).component("ionPullUpHandle",{require:{FooterController:"^ionPullUpFooter"},controller:["$scope","$element","$attrs","ionPullUpFooterState","ionPullUpFooterBehavior","$ionicGesture","$ionicPlatform","$timeout","$window",function(t,e,n,o,i,a,r,s,l){var c=parseInt(n.height,10)||25,u=parseInt(n.width,10)||100,h=n.iconExpand,p=n.iconCollapse;function d(t,n){h&&p&&(e.find("i").removeClass([h,p].join(" ")),t==o.COLLAPSED?n==i.HIDE?e.find("i").addClass(p):e.find("i").addClass(h):t==o.MINIMIZED?(i.HIDE,e.find("i").addClass(h)):e.find("i").addClass(p))}function f(){s((function(){e.css("left",(l.innerWidth-u)/2+"px")}),300)}e.css({display:"block","background-color":"inherit",position:"absolute",top:1-c+"px",left:(l.innerWidth-u)/2+"px",height:c+"px",width:u+"px","text-align":"center"}).append("<i>"),this.$onInit=function(){var t=this.FooterController;a.on("tap",t.onTap,e),a.on("drag dragstart dragend",t.onDrag,e),t.setHandleHeight(c),d(t.getInitialState(),t.getDefaultBehavior()),f()},t.$on("ionPullUp:tap",(function(t,e,n){d(e,n)})),r.ready((function(){l.addEventListener("orientationchange",f),r.on("resume",f)}))}]});
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index d5ec228d..502a568d 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -32,7 +32,7 @@ angular.module('zmApp.controllers')
})
- .controller('zmApp.EventCtrl', ['$scope', '$rootScope', 'zm', 'NVR', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', '$ionicSlideBoxDelegate', '$ionicPosition', '$ionicPopover', '$ionicPopup', 'EventServer', '$sce', '$cordovaBadge', '$cordovaLocalNotification', '$q', 'carouselUtils', '$translate', '$cordovaFileTransfer', '$cordovaFile', '$ionicListDelegate', 'ionPullUpFooterState', 'SecuredPopups', function ($scope, $rootScope, zm, NVR, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, $ionicSlideBoxDelegate, $ionicPosition, $ionicPopover, $ionicPopup, EventServer, $sce, $cordovaBadge, $cordovaLocalNotification, $q, carouselUtils, $translate, $cordovaFileTransfer, $cordovaFile, $ionicListDelegate, ionPullUpFooterState,SecuredPopups) {
+ .controller('zmApp.EventCtrl', ['$scope', '$rootScope', 'zm', 'NVR', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$ionicPlatform', '$ionicSlideBoxDelegate', '$ionicPosition', '$ionicPopover', '$ionicPopup', 'EventServer', '$sce', '$cordovaBadge', '$cordovaLocalNotification', '$q', 'carouselUtils', '$translate', '$cordovaFileTransfer', '$cordovaFile', '$ionicListDelegate', 'ionPullUpFooterState', 'SecuredPopups', '$window', function ($scope, $rootScope, zm, NVR, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $ionicPlatform, $ionicSlideBoxDelegate, $ionicPosition, $ionicPopover, $ionicPopup, EventServer, $sce, $cordovaBadge, $cordovaLocalNotification, $q, carouselUtils, $translate, $cordovaFileTransfer, $cordovaFile, $ionicListDelegate, ionPullUpFooterState,SecuredPopups, $window) {
// events in last 5 minutes
// TODO https://server/zm/api/events/consoleEvents/5%20minute.json
@@ -78,7 +78,12 @@ angular.module('zmApp.controllers')
//---------------------------------------------------
-
+ $scope.$on('sizechanged', function() {
+ $timeout (function () {
+ recomputeThumbSize();
+ },10);
+
+ });
//we come here is TZ is updated after the view loads
var tzu = $scope.$on('tz-updated', function () {
@@ -95,7 +100,6 @@ angular.module('zmApp.controllers')
$scope.$on('$ionicView.afterEnter', function () {
- window.addEventListener("resize", recomputeThumbSize, false);
$ionicListDelegate.canSwipeItems(true);
// NVR.debug("enabling options swipe");
@@ -178,11 +182,24 @@ angular.module('zmApp.controllers')
$scope.$on('$ionicView.beforeLeave', function () {
+ //$window.removeEventListener('orientationchange', updateUI);
+ if ($stateParams.lastCheckTime != undefined && $stateParams.lastCheckTime != '' && moment($stateParams.lastCheckTime).isValid()) {
+ NVR.debug ("removing montage temporary filter");
+ $rootScope.isEventFilterOn = false;
+ $rootScope.fromDate = "";
+ $rootScope.fromTime = "";
+ $rootScope.toDate = "";
+ $rootScope.toTime = "";
+ $rootScope.fromString = "";
+ $rootScope.toString = "";
+ $rootScope.monitorsFilter="";
+ }
NVR.debug ("Cancelling page reload timer");
$interval.cancel(intervalReloadEvents);
- NVR.debug("EventCtrl: Deregistering resize listener");
- window.removeEventListener("resize", recomputeThumbSize, false);
+ document.removeEventListener("pause", onPause, false);
+
+
//NVR.debug("EventCtrl: Deregistering broadcast handles");
for (var i = 0; i < broadcastHandles.length; i++) {
// broadcastHandles[i]();
@@ -192,28 +209,46 @@ angular.module('zmApp.controllers')
$scope.$on('$ionicView.beforeEnter', function () {
- //console.log ("********* BEFORE ENTER");
- //
+ /*
+ It's a bleeding mess trying to get this working on
+ multiple devices and orientations with flex-box, primarily
+ because I'm not a CSS guru.
+
+ Plus, collection-repeat offers significant performance benefits
+ and this requires fixed row sizes across all rows.
+
+ The layout I am using:
+ a) If you are using large thumbs, it's a single column format
+ b) If you are using small thumbs, it's a two column format
+
+ The max size of the image is in computeThumbnailSize()
+ */
-
-
var ld = NVR.getLogin();
- if (ld.eventViewThumbsSize == 'large') {
- NVR.debug ('Switching to big thumbs style');
- $scope.thumbClass = 'large';
- $scope.rowHeightRegular = 450;
- $scope.rowHeightExpanded = $scope.rowHeightRegular + 200;
+ if (ld.eventViewThumbs != 'none') {
+ if (ld.eventViewThumbsSize == 'large') {
+ NVR.debug ('Switching to big thumbs style');
+ $scope.thumbClass = 'large';
+ $scope.rowHeightRegular = 450;
+ $scope.rowHeightExpanded = $scope.rowHeightRegular + 230;
+ } else {
+ NVR.debug ('using small thumbs style');
+ $scope.thumbClass = 'small';
+ $scope.rowHeightRegular = 250;
+ $scope.rowHeightExpanded = $scope.rowHeightRegular + 200;
+
+ }
} else {
- NVR.debug ('using small thumbs style');
- $scope.thumbClass = 'small';
- $scope.rowHeightRegular = 250;
- $scope.rowHeightExpanded = $scope.rowHeightRegular + 200;
-
+ NVR.debug ('No thumbs');
+ $scope.rowHeightRegular = 170;
+ $scope.rowHeightExpanded = $scope.rowHeightRegular + 200;
}
+
$scope.rowHeight = $scope.rowHeightRegular;
$scope.mid = '';
+
$scope.$on ("alarm", function() {
NVR.debug ("EventCtrl: new event notification, doing an immediate reload");
// do an immediate display reload and schedule timer again
@@ -248,7 +283,13 @@ angular.module('zmApp.controllers')
document.addEventListener("pause", onPause, false);
//console.log("I got STATE PARAM " + $stateParams.id);
$scope.id = parseInt($stateParams.id, 10);
- if (isNaN($scope.id)) $scope.id = 0;
+ if (isNaN($scope.id)) {
+ $scope.id = 0;
+ }
+
+ if ($scope.id)
+ $rootScope.isEventFilterOn = true;
+
$scope.showEvent = $stateParams.playEvent || false;
$scope.monitors = NVR.getMonitorsNow();
@@ -267,6 +308,8 @@ angular.module('zmApp.controllers')
//console.log("toString: " + $rootScope.toString);
}
+
+
//console.log("BEFORE ENTER >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
NVR.log("EventCtrl called with: E/MID=" + $scope.id + " playEvent = " + $scope.showEvent);
@@ -1795,12 +1838,20 @@ angular.module('zmApp.controllers')
$scope.filterTapped = function () {
//console.log("FILTER TAPPED");
- var myFrom = moment($rootScope.fromString).format("MMM/DD/YYYY " + NVR.getTimeFormat()).toString();
- var toString = moment($rootScope.toString).format("MMM/DD/YYYY " + NVR.getTimeFormat()).toString();
+ var myFrom = $translate.instant('kAll');
+ var toString = $translate.instant('kAll');
+ var monString = '';
+
+ if (moment($rootScope.fromString).isValid())
+ myFrom = moment($rootScope.fromString).format("MMM/DD/YYYY " + NVR.getTimeFormat()).toString();
+ if (moment($rootScope.toString).isValid())
+ toString = moment($rootScope.toString).format("MMM/DD/YYYY " + NVR.getTimeFormat()).toString();
+ if ($rootScope.monitorsFilter != '')
+ monString = $translate.instant('kFilterEventsSelectiveMon');
$rootScope.zmPopup = $ionicPopup.confirm({
title: $translate.instant('kFilterSettings'),
- template: $translate.instant('kFilterEventsBetween1') + ':<br/> <b>' + myFrom + "</b> " + $translate.instant('kTo') + " <b>" + toString + '</b><br/>' + $translate.instant('kFilterEventsBetween2'),
+ template: $translate.instant('kFilterEventsBetween1') + ':<br/> <b>' + myFrom + "</b> " + $translate.instant('kTo') + " <b>" + toString + '</b> '+ monString+'<br/>' + $translate.instant('kFilterEventsBetween2'),
okText: $translate.instant('kButtonOk'),
cancelText: $translate.instant('kButtonCancel'),
});
@@ -1814,8 +1865,7 @@ angular.module('zmApp.controllers')
$rootScope.toTime = "";
$rootScope.fromString = "";
$rootScope.toString = "";
- $rootScope.monitorsFilter = '';
-
+ $rootScope.monitorsFilter = "";
$scope.id = 0;
$scope.showEvent = false;
$scope.footerState = ionPullUpFooterState.MINIMIZED;
@@ -2995,30 +3045,34 @@ angular.module('zmApp.controllers')
function computeThumbnailSize(mw, mh, mo) {
+ // if ZM is going to rotate the view, lets flip our dimensions
if (mo != 0 && mo != 180) {
-
var tmp = mw;
mw = mh;
mh = tmp;
}
var ld = NVR.getLogin();
var landscape = ($rootScope.devWidth > $rootScope.devHeight) ? true:false;
-
- var maxRowHeight = $scope.rowHeight - 120;
+ var maxRowHeight;
if (ld.eventViewThumbsSize == 'large') {
+ maxRowHeight = $scope.rowHeight - 170;
if (landscape) {
- return calculateAspectRatioFit(mw, mh, 0.7* $rootScope.devWidth, maxRowHeight);
+ // go till 90% of width in large landscape, but restricted to useable row height
+ return calculateAspectRatioFit(mw, mh, 0.9* $rootScope.devWidth, maxRowHeight);
} else {
- return calculateAspectRatioFit(mw, mh, 0.4* $rootScope.devWidth, maxRowHeight);
+ // go till 80% of width in large portrait, but restricted to useable row height
+
+ return calculateAspectRatioFit(mw, mh, 0.8* $rootScope.devWidth, maxRowHeight);
}
} else { // small
-
+ maxRowHeight = $scope.rowHeight - 150;
if (landscape) {
+ // go till 50% of width in small landscape, but restricted to useable row height
return calculateAspectRatioFit(mw, mh, 0.5* $rootScope.devWidth, maxRowHeight);
-
} else {
+ // go till 30% of width in small portrait, but restricted to useable row height
return calculateAspectRatioFit(mw, mh, 0.3* $rootScope.devWidth, maxRowHeight);
}
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index e91bea99..a6dd87e8 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -1125,6 +1125,11 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
});
+ $scope.$on('$ionicView.beforeLeave', function () {
+ document.removeEventListener("pause", onPause, false);
+ ddocument.removeEventListener("resume", onResume, false);
+ });
+
$scope.showHideControls = function () {
if (videoPlaybarClicked) {
diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js
index e64d7a6f..9ba5e8bc 100644
--- a/www/js/LoginCtrl.js
+++ b/www/js/LoginCtrl.js
@@ -328,6 +328,9 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
$scope.$on('$ionicView.beforeLeave', function () {
//console.log("**VIEW ** LoginCtrl Entered");
+ document.removeEventListener("pause", onPause, false);
+ document.removeEventListener("resume", onResume, false);
+
var newLoginData = JSON.stringify($scope.loginData);
if ($scope.loginData.serverName && newLoginData != oldLoginData) {
NVR.log("Login data changed, saving...");
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index 41b38e8c..8708970d 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -1734,7 +1734,11 @@ angular.module('zmApp.controllers')
NVR.debug("Deregistering handlers for multi-window");
window.MultiWindowPlugin.deregisterOnStop("montage-pause");
+ } else {
+ document.removeEventListener("pause", onPause, false);
+
}
+
if ($scope.modal) $scope.modal.remove();
});
@@ -2380,8 +2384,13 @@ angular.module('zmApp.controllers')
$state.go(s[0],s[1],s[2]);
});
- window.addEventListener("resize", jiggleMontage, false);
-
+ //window.addEventListener("resize", jiggleMontage, false);
+ $scope.$on('sizechanged', function() {
+ $timeout (function () {
+ jiggleMontage();
+ },10);
+
+ });
timeInMontage = new Date();
broadcastHandles = [];
@@ -2632,7 +2641,7 @@ angular.module('zmApp.controllers')
};
$scope.$on('$ionicView.beforeLeave', function () {
- window.removeEventListener("resize", jiggleMontage, false);
+ // window.removeEventListener("resize", jiggleMontage, false);
currentStreamState = streamState.STOPPED;
viewCleanup();
viewCleaned = true;
diff --git a/www/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js
index 53a27b3c..501c0f48 100644
--- a/www/js/MontageHistoryCtrl.js
+++ b/www/js/MontageHistoryCtrl.js
@@ -1116,6 +1116,12 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc
viewCleanup();
viewCleaned = true;
+ //$window.removeEventListener('orientationchange', updateUI);
+
+ document.removeEventListener("pause", onPause, false);
+ document.removeEventListener("resume", onResume, false);
+
+
// if ($scope.modal) $scope.modal.remove();
NVR.log("Cancelling event query timer");
diff --git a/www/js/NVR.js b/www/js/NVR.js
index 3eb477f2..99116eb4 100644
--- a/www/js/NVR.js
+++ b/www/js/NVR.js
@@ -228,7 +228,7 @@ angular.module('zmApp.controllers')
'currentZMGroupNames': [],
'unsupported': {},
'monitorSpecific': {},
- 'eventViewThumbs': true,
+ 'eventViewThumbs': 'snapshot',
'eventViewThumbsSize': 'small',
diff --git a/www/js/app.js b/www/js/app.js
index 8799784d..81977def 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -1480,6 +1480,10 @@ angular.module('zmApp', [
$rootScope.devWidth = ((window.innerWidth > 0) ? window.innerWidth : screen.width);
$rootScope.devHeight = ((window.innerHeight > 0) ? window.innerHeight : screen.height);
$rootScope.videoHeight = $rootScope.devHeight - 20;
+ $rootScope.devWidthIgnorePix = $rootScope.devWidth;
+
+ $rootScope.devWidth *= pixelRatio;
+ $rootScope.devHeight *= pixelRatio;
NVR.debug("resize/orient: " + $rootScope.devWidth + "(w) * " + $rootScope.devHeight+"(h)");
diff --git a/www/lang/locale-de.json b/www/lang/locale-de.json
index 6a74ef3a..41f2e6e6 100644
--- a/www/lang/locale-de.json
+++ b/www/lang/locale-de.json
@@ -113,6 +113,9 @@
"kEventServerVersionTitle" :"Ereignisserver-Version nicht unterstützt",
"kEventSingleImageScale" :"Ereignis Einzelbild Maßstab",
"kEventStillRecording" :"Aufnahme aktiv",
+ "kEventViewThumbsSize" :"Vorschaugröße",
+ "kEventViewThumbsSmall" :"klein",
+ "kEventViewThumbsLarge" :"groß",
"kEvents" :"Ereignisse",
"kEventsCap" :"Ereignisse",
"kExampleServer" :"z.B. Daheim",
@@ -133,6 +136,7 @@
"kFilterEvents" :"Filter Ereignisse",
"kFilterEventsBetween1" :"Es werden Ereignisse angezeigt zwischen",
"kFilterEventsBetween2" :"Willst Du diesen Filter löschen?",
+ "kFilterEventsSelectiveMon" :"für die ausgewählten Kameras",
"kFilterOn" :"Filter an",
"kFilterSettings" :"Filtereinstellungen",
"kFitScreen" :"Bild anpassen",
diff --git a/www/lang/locale-en.json b/www/lang/locale-en.json
index abae59f6..b24ad8ef 100644
--- a/www/lang/locale-en.json
+++ b/www/lang/locale-en.json
@@ -136,6 +136,7 @@
"kFilterEvents" :"Filter Events",
"kFilterEventsBetween1" :"You are viewing events between",
"kFilterEventsBetween2" :"Do you want to delete this filter?",
+ "kFilterEventsSelectiveMon" :"for selective monitors",
"kFilterOn" :"Filter On",
"kFilterSettings" :"Filter Settings",
"kFitScreen" :"fit screen",
diff --git a/www/templates/devoptions.html b/www/templates/devoptions.html
index 68f605cd..44825a20 100644
--- a/www/templates/devoptions.html
+++ b/www/templates/devoptions.html
@@ -8,7 +8,7 @@
<ion-nav-buttons side="right">
<button id="devoptions-move-2" class="button button-clear" ng-click="saveDevOptions()">{{'kSave' | translate}}</button>
</ion-nav-buttons>
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready">
<div class="list list-inset">
<span style="color:rgb(100,100,100)">
<i class="ion-android-settings" style="font-size:150%"></i> {{'kDeveloperOptionsFor'|translate}}
diff --git a/www/templates/events-date-time-filter.html b/www/templates/events-date-time-filter.html
index 9d7b765d..ad198746 100644
--- a/www/templates/events-date-time-filter.html
+++ b/www/templates/events-date-time-filter.html
@@ -1,5 +1,5 @@
<ion-view view-title="{{'kFilterEvents' | translate}}">
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready">
<label class="item item-input">
<span class="input-label">{{'kFromDate'|translate}}:</span>
<input type="date" ng-model="$root.fromDate" max={{today}}>
diff --git a/www/templates/events-modal.html b/www/templates/events-modal.html
index d4f23bbb..24df4b1e 100644
--- a/www/templates/events-modal.html
+++ b/www/templates/events-modal.html
@@ -1,7 +1,7 @@
<div ng-controller="EventModalCtrl">
<!-- style="width: 90%; height: 90%; top: 5%; left: 5%; right: 5%; bottom: 5%;"-->
<ion-modal-view cache-view="false">
- <ion-content style="background-color:#000000" ng-cloak>
+ <ion-content style="background-color:#000000" ng-cloak class="notch-ready">
<!-- alarm frames in snapshot-->
@@ -76,7 +76,7 @@
<!-- <div style="max-width:100%; max-height:100%;" on-swipe-left="onSwipeEvent(nextId,1)" on-swipe-right="onSwipeEvent(prevId,-1)" > -->
- <div on-swipe-left="onSwipeEvent(nextId,1)" on-swipe-right="onSwipeEvent(prevId,-1)" ng-style="{'height':$root.videoHeight+'px', 'width':$root.devWidth+'px'}">
+ <div on-swipe-left="onSwipeEvent(nextId,1)" on-swipe-right="onSwipeEvent(prevId,-1)" ng-style="{'height':$root.videoHeight+'px', 'width':$root.devWidthIgnorePix+'px'}">
<videogular id="testaut_events_playwindow" vg-can-play="onCanPlay()" vg-native-fullscreen="videoObject.config.nativeFullScreen"
vg-player-ready="onPlayerReady($API)"
diff --git a/www/templates/events-modalgraph.html b/www/templates/events-modalgraph.html
index 75f2ec15..dfc84bab 100644
--- a/www/templates/events-modalgraph.html
+++ b/www/templates/events-modalgraph.html
@@ -1,6 +1,6 @@
<div ng-controller="EventsModalGraphCtrl">
<ion-modal-view cache-view="false" style="width:80%;height:80%; top: 10%; left: 10%; right: 10%; bottom: 10%;">
- <ion-content ng-cloak on-double-tap="closeModal()" delegate-handle="eventgraph-modal-delegate">
+ <ion-content class="notch-ready" ng-cloak on-double-tap="closeModal()" delegate-handle="eventgraph-modal-delegate">
<div data-tap-disabled="true">
<canvas id="eventchart" width="auto" height="70%"></canvas>
</div>
diff --git a/www/templates/events-popover.html b/www/templates/events-popover.html
index 8ccc1c8f..923d693f 100644
--- a/www/templates/events-popover.html
+++ b/www/templates/events-popover.html
@@ -1,5 +1,5 @@
<ion-popover-view class="fit">
- <ion-content>
+ <ion-content class="notch-ready">
<div class="list" ng-click="popover.hide()">
<a class="item" ng-href="" ng-click="popover.hide();$state.go('app.events-date-time-filter');">{{'kFilterByDateTime'
| translate}}</a>
diff --git a/www/templates/events.html b/www/templates/events.html
index c92bdffa..73b79fd0 100644
--- a/www/templates/events.html
+++ b/www/templates/events.html
@@ -24,7 +24,7 @@
</ion-header-bar>
</div>
<!-- collection repeat forces js scrolling, thing to remember -->
- <ion-content ng-cloak on-tap="tapped();" delegate-handle="mainScroll" mouse-wheel-scroll on-scroll="scrolling();">
+ <ion-content class="notch-ready" ng-cloak on-tap="tapped();" delegate-handle="mainScroll" mouse-wheel-scroll on-scroll="scrolling();" >
<ion-refresher pulling-text="Pull to refresh..." on-refresh="doRefresh()">
</ion-refresher>
<!-- needed for header-shrink so first item doesn't go below header-->
@@ -51,20 +51,10 @@
<i class="ion-clock"></i>&nbsp;&nbsp;{{prettifyDate(event.Event.StartTime)}} &nbsp;{{tzAbbr}}&nbsp;
</span>
- <div ng-class="::{'row responsive-lg': thumbClass=='large', 'row': thumbClass=='small'}"
- style="font-size:80%; color:rgb(110,110,110)">
-
-
-
-
- <!--</div>-->
- <!--row-->
- <!--<div class="row" style="font-size:80%; color:rgb(110,110,110)">-->
- <!-- <div class="col">-->
- <div class="col">
- <div class="item-text-wrap">
+ <div class="row" style="font-size:80%; color:rgb(110,110,110)">
+ <div class="col item-text-wrap"> <!-- data -->
<!-- this ngswitch displays different icons
- depending on the cause of the event -->
+ depending on the cause of the event -->
<span ng-switch on="event.Event.Cause" ng-class="::{'largeThumbsSpan': thumbClass=='large', 'smallThumbsSpan': thumbClass=='small'}">
<span ng-switch-when="Motion">
<i class="ion-android-walk" style="font-size:150%;"></i>&nbsp;
@@ -73,45 +63,38 @@
</span>
<span ng-switch-when="Signal">
<i class="ion-wifi" style="font-size:150%;"></i>&nbsp;
- <!--<i ng-class="(event.Event.DefaultVideo !== undefined && event.Event.DefaultVideo!='')? 'ion-ios-videocam':'ion-images'" style="float:left; padding-left:5px; font-size:100%;"></i>-->
-
</span>
<span ng-switch-default>
<i class="ion-ionic" style="font-size:150%;"></i>&nbsp;
-
-
</span>
<b><i ng-if="event.Event.Archived=='1'" class="ion-ios-flag"
style="color:red">&nbsp;</i>{{event.Event.MonitorName}}</b>
</span>
- <span ng-class="::{'largeThumbsSpan': thumbClass=='large', 'smallThumbsSpan': thumbClass=='small'}">
<i class="ion-images"></i> {{event.Event.Frames}} &nbsp;
<i class="ion-ios-bell-outline"></i> {{event.Event.AlarmFrames}} &nbsp;
<span style="font-size:80%; color:rgb(110,110,110)">
{{humanize(event.Event.Length)}} &nbsp;
</span>
- </span>
-
- <span ng-class="::{'largeThumbsSpan': thumbClass=='large', 'smallThumbsSpan': thumbClass=='small'}">
- <i class="ion-ios-pricetags-outline"></i>&nbsp; {{event.Event.Name}}
- </span>
-
+ <br/><i class="ion-ios-pricetags-outline"></i>&nbsp; {{event.Event.Name}}
+ <!-- for largeThumbs show image in this column -->
+ <div ng-if="loginData.eventViewThumbs!='none' && thumbClass=='large'">
+ <br/><img bg-color="#6C7A89" ng-src="{{constructThumbnail(event)}}"
+ on-tap="closeIfOpen(event);openModalWithSnapshot(event)" width="{{event.Event.thumbWidth}}px"
+ height="{{event.Event.thumbHeight}}px" fallback-src="img/noimage.png" />
+ </div>
- <!-- <br/> Default video:{{event.Event.relativePath}}{{event.Event.DefaultVideo}}-->
- </div>
</div> <!-- col-->
- <div class="col">
- <div ng-if="loginData.eventViewThumbs!='none'"
- ng-class="::{'largeThumbs': thumbClass=='large', 'smallThumbs': thumbClass=='small'}">
- <img bg-color="#6C7A89" ng-src="{{constructThumbnail(event)}}"
+ <!-- 2 col format for small, 1 col format for large -->
+ <span ng-if="thumbClass=='small' && loginData.eventViewThumbs!='none'">
+ <div class="col">
+ <img bg-color="#6C7A89" ng-src="{{constructThumbnail(event)}}"
on-tap="closeIfOpen(event);openModalWithSnapshot(event)" width="{{event.Event.thumbWidth}}px"
height="{{event.Event.thumbHeight}}px" fallback-src="img/noimage.png" />
- </div>
- </div>
- <!--</div>-->
- </div>
+ </div> <!--col--->
+ </span> <!-- thumbs -->
+ </div> <!--row-->
<div ng-if="event.Event.Notes" class="row" style="font-size:80%; color:rgb(110,110,110)">
<i class="ion-clipboard"></i>&nbsp; {{event.Event.Notes}}
</div>
@@ -136,10 +119,6 @@
ng-click="closeIfOpen(event);openModal(event)">
<span translate="kFootage"></span>
</button>
-
-
-
-
</div>
</span>
</div>
diff --git a/www/templates/eventserversettings.html b/www/templates/eventserversettings.html
index ea5080aa..13803b2a 100644
--- a/www/templates/eventserversettings.html
+++ b/www/templates/eventserversettings.html
@@ -8,7 +8,7 @@
<ion-nav-buttons side="right">
<button class="button button-clear" ng-click="saveItems()">{{'kSave'|translate}}</button>
</ion-nav-buttons>
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready">
<div class="list list-inset">
{{'kEventServerConfig1' | translate }}
</div>
diff --git a/www/templates/help.html b/www/templates/help.html
index 8a497c5e..1359dfa9 100644
--- a/www/templates/help.html
+++ b/www/templates/help.html
@@ -4,7 +4,7 @@
<button data-badge="{{$root.alarmCount}}" class="animated infinite tada button button-icon button-clear ion-ios-bell notification-badge"
ng-click="handleAlarms();" ng-if="$root.isAlarm"></button>
</ion-nav-buttons>
- <ion-content class="padding" delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content class="notch-ready" delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
<p>
<small>{{$root.appName}} v{{zmAppVersion}}</small>
</p>
diff --git a/www/templates/image-modal.html b/www/templates/image-modal.html
index c1e0e5e6..b5bdaf9b 100644
--- a/www/templates/image-modal.html
+++ b/www/templates/image-modal.html
@@ -1,5 +1,5 @@
<ion-modal-view cache-view="false" style="background-color:#444444">
- <ion-content ng-cloak on-double-tap="closeModal();" scroll="false">
+ <ion-content ng-cloak on-double-tap="closeModal();" scroll="false" class="notch-ready">
<div id="imagecontainer">
diff --git a/www/templates/important_message.html b/www/templates/important_message.html
index 35c449e8..835eb44c 100644
--- a/www/templates/important_message.html
+++ b/www/templates/important_message.html
@@ -2,7 +2,7 @@
<ion-nav-buttons side="left">
<button class="button button-icon button-clear ion-navicon" ng-click="openMenu()"></button>
</ion-nav-buttons>
- <ion-content class="pin-background">
+ <ion-content class="pin-background notch-ready">
<div style="margin-left:20px; margin-right:20px">
<center>
<br />
diff --git a/www/templates/invalidapi.html b/www/templates/invalidapi.html
index c73e8be7..1c5f8ddb 100644
--- a/www/templates/invalidapi.html
+++ b/www/templates/invalidapi.html
@@ -2,7 +2,7 @@
<ion-nav-buttons side="left">
<button class="button button-icon button-clear ion-navicon" ng-click="openMenu()"></button>
</ion-nav-buttons>
- <ion-content class="pin-background">
+ <ion-content class="pin-background notch-ready">
<div style="margin-left:20px; margin-right:20px">
<center>
<br />
diff --git a/www/templates/log.html b/www/templates/log.html
index 2884c4bb..ae534ab6 100644
--- a/www/templates/log.html
+++ b/www/templates/log.html
@@ -22,7 +22,7 @@
<a class="button button-icon icon ion-android-download" ng-href="" ng-click="downloadLogs()"> </a>
</div>
</ion-nav-buttons>
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready">
<!-- <h2> iCloud: </h2>
{{cloudString}}
diff --git a/www/templates/login.html b/www/templates/login.html
index 617b79f5..797fde37 100644
--- a/www/templates/login.html
+++ b/www/templates/login.html
@@ -8,7 +8,7 @@
<ion-nav-buttons side="right">
<button id = 'testaut_settings_save' class="button button-clear" ng-click="saveItems()">{{'kSave' | translate}}</button>
</ion-nav-buttons>
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready">
<div class="item item-text-wrap item-input-inset">
{{'kServerName' | translate }}:&nbsp;
<label class="item-input-wrapper">
diff --git a/www/templates/lowversion.html b/www/templates/lowversion.html
index 440406b7..3f6c72cc 100644
--- a/www/templates/lowversion.html
+++ b/www/templates/lowversion.html
@@ -1,5 +1,5 @@
<ion-view view-title="{{$root.appName}}" hide-nav-bar="true" hide-back-button="true" cache-view="false">
- <ion-content class="pin-background">
+ <ion-content class="pin-background notch-ready">
<div style="margin-left:20px; margin-right:20px">
<center>
<br />
diff --git a/www/templates/menu.html b/www/templates/menu.html
index 2a78bb6e..f71aba5c 100644
--- a/www/templates/menu.html
+++ b/www/templates/menu.html
@@ -14,7 +14,7 @@
<h1 class="title">{{'kMenuOptions'|translate}}</h1>
</button>
</ion-header-bar>
- <ion-content has-header="true" mouse-wheel-scroll>
+ <ion-content has-header="true" mouse-wheel-scroll class="notch-ready">
<!-- <ion-scroll scrollbar-y="false" style="height:100%" >-->
<ion-list>
<!--<ion-item ng-click="navigateView('app.montage')" menu-close>-->
diff --git a/www/templates/moment-mask.html b/www/templates/moment-mask.html
index 6493e4be..851be5ff 100644
--- a/www/templates/moment-mask.html
+++ b/www/templates/moment-mask.html
@@ -6,7 +6,7 @@
<button class="button button-icon icon ion-close" ng-click="cancelMask()"></button>
</div>
</ion-header-bar>
- <ion-content>
+ <ion-content class="notch-ready">
<div class="list">
<span ng-repeat="item in monitors">
diff --git a/www/templates/moment-popover.html b/www/templates/moment-popover.html
index 6d2485ca..5d6a87be 100644
--- a/www/templates/moment-popover.html
+++ b/www/templates/moment-popover.html
@@ -1,5 +1,5 @@
<ion-popover-view class="fit">
- <ion-content>
+ <ion-content class="notch-ready">
<div class="list" ng-click="popover.remove()">
<a class="item" ng-href="" ng-click="popover.remove();getMoments('StartTime');">
diff --git a/www/templates/moment.html b/www/templates/moment.html
index 9852b925..9a31a922 100644
--- a/www/templates/moment.html
+++ b/www/templates/moment.html
@@ -25,7 +25,7 @@
</div>
- <ion-content delegate-handle="moment-delegate" overflow-scroll="false" mouse-wheel-scroll style="background-color:#444444">
+ <ion-content delegate-handle="moment-delegate" overflow-scroll="false" mouse-wheel-scroll class="notch-ready" style="background-color:#444444">
<div ng-if="areImagesLoading" class="screen-note">&nbsp;{{ 'kArrangingImages' | translate }}...&nbsp;</div>
diff --git a/www/templates/monitors-modal.html b/www/templates/monitors-modal.html
index 0ead585c..84c9049a 100644
--- a/www/templates/monitors-modal.html
+++ b/www/templates/monitors-modal.html
@@ -1,6 +1,6 @@
<div ng-controller="MonitorModalCtrl" ng-cloak>
<ion-modal-view cache-view="false" style="background-color:#444444">
- <ion-content ng-cloak on-double-tap="closeModal();" scroll="false">
+ <ion-content ng-cloak on-double-tap="closeModal();" scroll="false" class="notch-ready">
<div id="imagecontainer">
<ion-scroll on-scroll="checkZoom()" delegate-handle="imgscroll" has-bouncing=false min-zoom=1
diff --git a/www/templates/monitors.html b/www/templates/monitors.html
index 4770b139..39674023 100644
--- a/www/templates/monitors.html
+++ b/www/templates/monitors.html
@@ -5,7 +5,7 @@
<button data-badge="{{$root.alarmCount}}" class="animated infinite tada button button-icon button-clear ion-ios-bell notification-badge"
ng-click="handleAlarms();" ng-if="$root.isAlarm"></button>
</ion-nav-buttons>
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready">
<ion-refresher pulling-text="Pull to reload Monitors..." spinner="bubbles" on-refresh="doRefresh()">
</ion-refresher>
<div style="float:right;margin-top:3px;margin-right:8px;">
diff --git a/www/templates/montage-history.html b/www/templates/montage-history.html
index 82fb70f3..62b7e2a6 100644
--- a/www/templates/montage-history.html
+++ b/www/templates/montage-history.html
@@ -13,7 +13,7 @@
ng-click="handleAlarms();" ng-if="$root.isAlarm"></button>
</ion-nav-buttons>
<ion-content has-bouncing="false" style="background-color:#444444" delegate-handle="none" overflow-scroll="false"
- mouse-wheel-scroll>
+ mouse-wheel-scroll class="notch-ready">
<div class="timeline_text"> {{'kFrom' | translate}}:{{prettifyDateTimeFirst(datetimeValueFrom.value)}}
({{humanizeTime(datetimeValueFrom.value)}})
<div ng-if="!isMultiPort">({{'kChromeMax' | translate}})</div>
diff --git a/www/templates/montage.html b/www/templates/montage.html
index 360e4a4a..62afc9f5 100644
--- a/www/templates/montage.html
+++ b/www/templates/montage.html
@@ -35,7 +35,7 @@
</button>
</ion-nav-buttons>
<ion-content ng-cloak has-bouncing="false" style="background-color:#444444" delegate-handle="montage-delegate"
- overflow-scroll="false" padding="false">
+ overflow-scroll="false" padding="false" class="notch-ready">
<div ng-if="areImagesLoading" class="screen-note">&nbsp;{{ 'kArrangingImages' | translate }}...&nbsp;</div>
diff --git a/www/templates/news.html b/www/templates/news.html
index 2512bb4c..4cb13bb9 100644
--- a/www/templates/news.html
+++ b/www/templates/news.html
@@ -4,7 +4,7 @@
<button data-badge="{{$root.alarmCount}}" class="animated infinite tada button button-icon button-clear ion-ios-bell notification-badge"
ng-click="handleAlarms();" ng-if="$root.isAlarm"></button>
</ion-nav-buttons>
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready">
<div class="list">
diff --git a/www/templates/reorder-modal.html b/www/templates/reorder-modal.html
index 8d31ce22..c5f599ff 100644
--- a/www/templates/reorder-modal.html
+++ b/www/templates/reorder-modal.html
@@ -8,7 +8,7 @@
<button class="button button-small" ng-click="cancelReorder()">{{'kButtonCancel'|translate}}</button>
</div>
</ion-header-bar>
- <ion-content>
+ <ion-content class="notch-ready">
<div class="list">
<span ng-repeat="item in copyMontage">
<a ng-class="{ 'item item-avatar item-icon-right' : item.Monitor.listDisplay == 'show', 'item item-avatar item-icon-right eye-background-red' : item.Monitor.listDisplay!='show' }"
diff --git a/www/templates/state.html b/www/templates/state.html
index bdad22d0..7954c7e1 100644
--- a/www/templates/state.html
+++ b/www/templates/state.html
@@ -4,7 +4,7 @@
<button data-badge="{{$root.alarmCount}}" class="animated infinite tada button button-icon button-clear ion-ios-bell notification-badge"
ng-click="handleAlarms();" ng-if="$root.isAlarm"></button>
</ion-nav-buttons>
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll >
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready" >
<ion-refresher pulling-text="{{'kPullToReload' | translate}}..." spinner="bubbles" on-refresh="doRefresh()"></ion-refresher>
<ion-item>
diff --git a/www/templates/timeline-modal.html b/www/templates/timeline-modal.html
index 5b6c8694..ddbef952 100644
--- a/www/templates/timeline-modal.html
+++ b/www/templates/timeline-modal.html
@@ -1,6 +1,6 @@
<!-- style="width: 90%; height: 90%; top: 5%; left: 5%; right: 5%; bottom: 5%;"-->
<ion-modal-view cache-view="false">
- <ion-content ng-cloak on-double-tap="closeModal()" delegate-handle="timeline-modal-delegate">
+ <ion-content ng-cloak on-double-tap="closeModal()" delegate-handle="timeline-modal-delegate" class="notch-ready">
<div ng-controller="TimelineModalCtrl">
<br />
<div class="item item-divider">{{mName}}&nbsp;
diff --git a/www/templates/timeline-popover.html b/www/templates/timeline-popover.html
index e43e0605..f1a19d9a 100644
--- a/www/templates/timeline-popover.html
+++ b/www/templates/timeline-popover.html
@@ -1,5 +1,5 @@
<ion-popover-view class="fit">
- <ion-content>
+ <ion-content class="notch-ready">
<div class="list" ng-click="popover.hide()">
diff --git a/www/templates/timeline.html b/www/templates/timeline.html
index 73a6c7c5..ca9f31f5 100644
--- a/www/templates/timeline.html
+++ b/www/templates/timeline.html
@@ -17,7 +17,7 @@
<button class="button button-icon button-clear ion-log-out" ng-click="zoom(0.2)"></button>&nbsp;-->
</ion-nav-buttons>
<!--<ion-content data-tap-disabled="true">-->
- <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
+ <ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll class="notch-ready">
<div style="padding-left:15px; font-size:10px; color:grey">
{{prettify(fromDate)}} - {{prettify(toDate)}} &nbsp;{{tzAbbr}}&nbsp; ({{'kTimelineOnlyDisplaying1' |
translate:translationData}})
diff --git a/www/templates/wizard.html b/www/templates/wizard.html
index c929f877..c6dc957a 100644
--- a/www/templates/wizard.html
+++ b/www/templates/wizard.html
@@ -2,7 +2,7 @@
<ion-nav-buttons side="left">
<button class="button button-icon button-clear ion-navicon" ng-click="openMenu()"></button>
</ion-nav-buttons>
- <ion-content class="padding" overflow-scroll="false">
+ <ion-content class="notch-ready" overflow-scroll="false">
<wizard on-finish="finishedWizard()">
<!-- portal url -->
<wz-step wz-title="1" canexit="exitPortal">
diff --git a/www/templates/zm-portal-login.html b/www/templates/zm-portal-login.html
index c3431cd4..fdddd042 100644
--- a/www/templates/zm-portal-login.html
+++ b/www/templates/zm-portal-login.html
@@ -1,5 +1,5 @@
<ion-view view-title="{{$root.appName}}" hide-nav-bar="true" hide-back-button="true" cache-view="false">
- <ion-content class="pin-background" scroll="false">
+ <ion-content class="pin-background notch-ready" scroll="false">
<div style="margin-left:20px; margin-right:20px">
<center>
<br />