diff options
Diffstat (limited to 'www')
| -rw-r--r-- | www/js/EventCtrl.js | 6 | ||||
| -rw-r--r-- | www/js/EventModalCtrl.js | 1219 | ||||
| -rw-r--r-- | www/js/EventServerSettingsCtrl.js | 10 | ||||
| -rw-r--r-- | www/js/EventsModalGraphCtrl.js | 6 | ||||
| -rw-r--r-- | www/js/LogCtrl.js | 8 | ||||
| -rw-r--r-- | www/js/LoginCtrl.js | 171 | ||||
| -rw-r--r-- | www/js/MonitorCtrl.js | 34 | ||||
| -rw-r--r-- | www/js/MonitorModalCtrl.js | 55 | ||||
| -rw-r--r-- | www/lang/locale-en.json | 420 | ||||
| -rw-r--r-- | www/templates/events-modal.html | 2 |
10 files changed, 942 insertions, 989 deletions
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index 94a471ab..b972b33e 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -865,7 +865,7 @@ angular.module('zmApp.controllers') }) .error(function (err) { ZMDataModel.zmLog("Error retrieving detailed frame API " + JSON.stringify(err)); - ZMDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']); + ZMDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); }); } @@ -929,7 +929,7 @@ angular.module('zmApp.controllers') }) .error(function (err) { ZMDataModel.zmLog("Error retrieving detailed frame API " + JSON.stringify(err)); - ZMDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']); + ZMDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]); }); @@ -1333,7 +1333,7 @@ angular.module('zmApp.controllers') var loadingStr = ""; if ($scope.search.text != "") { - var toastStr = "Searching page " + eventsPage; + var toastStr = $translate.instant('kToastSearchingPage') + eventsPage; $ionicLoading.show({ maxwidth: 100, scope: $scope, diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index ced6229c..3783ff72 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -14,27 +14,31 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro var nphTimer; var eventQueryHandle; $scope.loginData = ZMDataModel.getLogin(); - $scope.currentRate='-'; + $scope.currentRate = '-'; var timeFormat = 'MM/DD/YYYY HH:mm:ss'; - + var framearray = { - - labels:[], + + labels: [], datasets: [{ //label: '# of Votes', backgroundColor: 'rgba(242, 12, 12, 0.5)', borderColor: 'rgba(242, 12, 12, 0.5)', data: [], }] - }; - - var frameoptions=[]; - - + }; + + var frameoptions = []; + + var eventImageDigits = 5; // failsafe - $scope.currentProgress = {progress:0}; - $scope.sliderProgress = {progress:0}; + $scope.currentProgress = { + progress: 0 + }; + $scope.sliderProgress = { + progress: 0 + }; ZMDataModel.getKeyConfigParams(0) .then(function (data) { //console.log ("***GETKEY: " + JSON.stringify(data)); @@ -70,20 +74,20 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }); var ld = ZMDataModel.getLogin(); - - $scope.currentStreamMode = ld.gapless ? 'gapless':'single'; + + $scope.currentStreamMode = ld.gapless ? 'gapless' : 'single'; ZMDataModel.zmLog("Using stream mode " + $scope.currentStreamMode); - ZMDataModel.zmDebug ("EventModalCtrl called from " + $ionicHistory.currentStateName()); + ZMDataModel.zmDebug("EventModalCtrl called from " + $ionicHistory.currentStateName()); // This is not needed for event mode - + ZMDataModel.zmDebug("Setting playback to " + $scope.streamMode); $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id; - ZMDataModel.getAuthKey($rootScope.validMonitorId,(Math.floor((Math.random() * 999999) + 1)).toString()) + ZMDataModel.getAuthKey($rootScope.validMonitorId, (Math.floor((Math.random() * 999999) + 1)).toString()) .then(function (success) { $ionicLoading.hide(); $rootScope.authSession = success; @@ -98,85 +102,80 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro ZMDataModel.zmLog("Modal: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession); }); - - + + //------------------------------------------------------- // we use this to reload the connkey if authkey changed //------------------------------------------------------ - - - $rootScope.$on("auth-success", function () { - - ZMDataModel.zmDebug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey"); - ZMDataModel.stopNetwork("Auth-Success inside EventModalCtrl"); - $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - //console.log ("********* OFFSET FROM AUTH SUCC"); - $timeout( function () { sendCommand('14',$scope.connKey, '&offset='+$scope.currentProgress.progress);},500); - //$timeout.cancel(eventQueryHandle); - //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); - - - + + + $rootScope.$on("auth-success", function () { + + ZMDataModel.zmDebug("EventModalCtrl: Re-login detected, resetting everything & re-generating connkey"); + ZMDataModel.stopNetwork("Auth-Success inside EventModalCtrl"); + $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + //console.log ("********* OFFSET FROM AUTH SUCC"); + $timeout(function () { + sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress); + }, 500); + //$timeout.cancel(eventQueryHandle); + //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); + + + }); - + //------------------------------------------------------- // tap to pause //------------------------------------------------------ - $scope.togglePause = function () - { + $scope.togglePause = function () { $scope.isPaused = !$scope.isPaused; - ZMDataModel.zmDebug ("Paused is " + $scope.isPaused); - - - sendCommand ( $scope.isPaused? '1':'2',$scope.connKey); - + ZMDataModel.zmDebug("Paused is " + $scope.isPaused); + + + sendCommand($scope.isPaused ? '1' : '2', $scope.connKey); + }; - + //------------------------------------------------------- // This is what we call every zm.EventQueryInterval // it really only queries to get status to it can display // zms takes care of the display //------------------------------------------------------ - function checkEvent() - { + function checkEvent() { //console.log ("Event timer"); //console.log ("Event timer"); $scope.checkEventOn = true; - if ($scope.defaultVideo !== undefined && $scope.defaultVideo !='') - { - console.log ("playing video, not using zms, skipping event commands"); - } - else - { - processEvent('99',$scope.connKey); + if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') { + console.log("playing video, not using zms, skipping event commands"); + } else { + processEvent('99', $scope.connKey); } } - - - function sendCommand(cmd,connkey,extras,rq) - { + + + function sendCommand(cmd, connkey, extras, rq) { var d = $q.defer(); - - if ($scope.defaultVideo !== undefined && $scope.defaultVideo !='') - { - console.log ("playing video, not using zms, skipping event commands"); + + if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') { + console.log("playing video, not using zms, skipping event commands"); d.resolve(true); return (d.promise); } - - - - var loginData = ZMDataModel.getLogin(); - console.log ("Sending CGI command to " + loginData.url); - var rqtoken = rq? rq:"stream"; - var myauthtoken = $rootScope.authSession.replace("&auth=",""); + + + + var loginData = ZMDataModel.getLogin(); + console.log("Sending CGI command to " + loginData.url); + var rqtoken = rq ? rq : "stream"; + var myauthtoken = $rootScope.authSession.replace("&auth=", ""); //&auth= - $http({ + $http({ method: 'POST', /*timeout: 15000,*/ url: loginData.url + '/index.php', @@ -190,14 +189,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); var foo = str.join("&"); - if (extras) - { - foo = foo + extras; - //console.log("EXTRAS****SUB RETURNING " + foo); + if (extras) { + foo = foo + extras; + //console.log("EXTRAS****SUB RETURNING " + foo); } - console.log ("CGI subcommand="+foo); + console.log("CGI subcommand=" + foo); return foo; - + }, data: { @@ -206,146 +204,144 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro connkey: connkey, command: cmd, auth: myauthtoken, - // user: loginData.username, - // pass: loginData.password + // user: loginData.username, + // pass: loginData.password } }) - .then (function (resp) { - ZMDataModel.zmDebug ("sendCmd response:"+JSON.stringify(resp)); - d.resolve(resp); - return (d.promise); - - - }, + .then(function (resp) { + ZMDataModel.zmDebug("sendCmd response:" + JSON.stringify(resp)); + d.resolve(resp); + return (d.promise); + + + }, function (resp) { - ZMDataModel.zmDebug ("sendCmd error:"+JSON.stringify(resp)); - d.reject (resp); - return (d.promise); - }); - - return (d.promise); + ZMDataModel.zmDebug("sendCmd error:" + JSON.stringify(resp)); + d.reject(resp); + return (d.promise); + }); + + return (d.promise); } - - - function processEvent(cmd,connkey) - { - - if ($scope.blockSlider) - { - console.log ("Not doing ZMS Command as slider is depressed..."); + + + function processEvent(cmd, connkey) { + + if ($scope.blockSlider) { + console.log("Not doing ZMS Command as slider is depressed..."); return; } - + var loginData = ZMDataModel.getLogin(); - console.log ("sending process Event command to " + loginData.url); - var myauthtoken = $rootScope.authSession.replace("&auth=",""); + console.log("sending process Event command to " + loginData.url); + var myauthtoken = $rootScope.authSession.replace("&auth=", ""); //&auth= - var req = $http({ - method: 'POST', - /*timeout: 15000,*/ - url: loginData.url + '/index.php', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - //'Accept': '*/*', - }, - transformRequest: function (obj) { - var str = []; - for (var p in obj) - str.push(encodeURIComponent(p) + "=" + - encodeURIComponent(obj[p])); - var foo = str.join("&"); - console.log("****processEvent subcommands RETURNING " + foo); - return foo; - }, + var req = $http({ + method: 'POST', + /*timeout: 15000,*/ + url: loginData.url + '/index.php', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + //'Accept': '*/*', + }, + transformRequest: function (obj) { + var str = []; + for (var p in obj) + str.push(encodeURIComponent(p) + "=" + + encodeURIComponent(obj[p])); + var foo = str.join("&"); + console.log("****processEvent subcommands RETURNING " + foo); + return foo; + }, - data: { - view: "request", - request: "stream", - connkey: connkey, - command: cmd, - auth: myauthtoken, - // user: loginData.username, - // pass: loginData.password - } - }); - - req.success (function (resp) { - // ZMDataModel.zmDebug ("processEvent success:"+JSON.stringify(resp)); - - if (resp.result=="Ok") - { - - $scope.currentProgress.progress = resp.status.progress; - $scope.eventId = resp.status.event; - $scope.d_eventId = $scope.eventId; - $scope.currentRate = resp.status.rate; - - - if ($scope.currentProgress.progress > $scope.currentEventDuration) $scope.currentProgress.progress = $scope.currentEventDuration; - $scope.progressText = "At " + $scope.currentProgress.progress + "s of " + $scope.currentEventDuration+"s"; - - $scope.sliderProgress.progress = $scope.currentProgress.progress; - - // lets not do this and use zms to move forward or back - // as this code conflicts with fast rev etc - //if (Math.floor(resp.status.progress) >=$scope.currentEventDuration) - - - - //$timeout (checkEvent(), zm.eventPlaybackQuery); - //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); - - } - else // resp.result was messed up - - { - ZMDataModel.zmDebug("Hmm I found an error " + JSON.stringify(resp)); - //window.stop(); - $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - - // console.log (JSON.stringify(resp)); - $timeout( function () { sendCommand('14',$scope.connKey, '&offset='+$scope.currentProgress.progress);},500); - ZMDataModel.zmDebug ("so I'm regenerating Connkey to " + $scope.connKey); - //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); - } - }); - - - req.error (function (resp) { - ZMDataModel.zmDebug ("processEvent error:"+JSON.stringify(resp)); + data: { + view: "request", + request: "stream", + connkey: connkey, + command: cmd, + auth: myauthtoken, + // user: loginData.username, + // pass: loginData.password + } + }); + + req.success(function (resp) { + // ZMDataModel.zmDebug ("processEvent success:"+JSON.stringify(resp)); + + if (resp.result == "Ok") { + + $scope.currentProgress.progress = resp.status.progress; + $scope.eventId = resp.status.event; + $scope.d_eventId = $scope.eventId; + $scope.currentRate = resp.status.rate; + + + if ($scope.currentProgress.progress > $scope.currentEventDuration) $scope.currentProgress.progress = $scope.currentEventDuration; + $scope.progressText = "At " + $scope.currentProgress.progress + "s of " + $scope.currentEventDuration + "s"; + + $scope.sliderProgress.progress = $scope.currentProgress.progress; + + // lets not do this and use zms to move forward or back + // as this code conflicts with fast rev etc + //if (Math.floor(resp.status.progress) >=$scope.currentEventDuration) + + + + //$timeout (checkEvent(), zm.eventPlaybackQuery); //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); - - }); - + + } else // resp.result was messed up + + { + ZMDataModel.zmDebug("Hmm I found an error " + JSON.stringify(resp)); + //window.stop(); + $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + + // console.log (JSON.stringify(resp)); + $timeout(function () { + sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress); + }, 500); + ZMDataModel.zmDebug("so I'm regenerating Connkey to " + $scope.connKey); + //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); + } + }); + + + req.error(function (resp) { + ZMDataModel.zmDebug("processEvent error:" + JSON.stringify(resp)); + //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); + + }); + } function onPause() { - + // $interval.cancel(modalIntervalHandle); // FIXME: Do I need to setAwake(false) here? $interval.cancel(eventQueryHandle); - ZMDataModel.zmLog ("EventModalCtrl: paused, killing timer"); - + ZMDataModel.zmLog("EventModalCtrl: paused, killing timer"); + } function onResume() { ZMDataModel.zmDebug("EventModalCtrl: Modal resume called"); - - $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1); + + $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1); } - - - - + + + + $scope.finishedLoadingImage = function () { // console.log("***Monitor image FINISHED Loading***"); @@ -353,24 +349,26 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }; - $scope.enableSliderBlock = function() - { + $scope.enableSliderBlock = function () { $scope.blockSlider = true; }; - - $scope.youChangedSlider = function() - { - + + $scope.youChangedSlider = function () { + console.log("YOU changed " + $scope.sliderProgress.progress); $scope.currentProgress.progress = $scope.sliderProgress.progress; - $timeout( function () { sendCommand('14',$scope.connKey, '&offset='+$scope.currentProgress.progress);},500); + $timeout(function () { + sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress); + }, 500); // give this command some time to complete - $timeout (function(){$scope.blockSlider = false;},1500); - + $timeout(function () { + $scope.blockSlider = false; + }, 1500); + }; - - + + //----------------------------------------------------------------------- @@ -398,144 +396,130 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - $scope.jumpToOffsetInEvent = function() - { + $scope.jumpToOffsetInEvent = function () { // streamReq.send( streamParms+"&command="+CMD_SEEK+"&offset="+offset ); }; - + //----------------------------------------------------------------------- // Saves a snapshot of the monitor image to phone storage //----------------------------------------------------------------------- - $scope.saveEventImageToPhone = function (onlyAlarms) - { - - if ($scope.loginData.useNphZmsForEvents) - { - ZMDataModel.zmLog ("Use ZMS stream to save to phone"); + $scope.saveEventImageToPhone = function (onlyAlarms) { + + if ($scope.loginData.useNphZmsForEvents) { + ZMDataModel.zmLog("Use ZMS stream to save to phone"); saveEventImageToPhoneZms(onlyAlarms); - - - } - else - { + + + } else { saveEventImageToPhone(onlyAlarms); } - - + + }; - function saveEventImageToPhoneZms(onlyAlarms) - { + function saveEventImageToPhoneZms(onlyAlarms) { // The strategy here is to build the array now so we can grab frames // $scope.currentProgress.progress is the seconds where we are - // $scope.eventId is the event Id - + // $scope.eventId is the event Id + $scope.isPaused = true; - + $ionicLoading.show({ template: "please wait...", noBackdrop: true, duration: zm.httpTimeout }); - sendCommand('1',$scope.connKey). - then (function (resp) - { - - // console.log ("PAUSE ANSWER IS " + JSON.stringify(resp)); - $scope.currentProgress.progress = resp.data.status.progress; - // console.log ("STEP 0 progress is " + $scope.currentProgress.progress); - $scope.slides = []; - - var apiurl = $scope.loginData.apiurl + "/events/" + $scope.eventId + ".json"; - ZMDataModel.zmDebug ("prepared to get frame details using " + apiurl); - $http.get(apiurl) - .then (function (success) - { - - var event = success.data.event; + sendCommand('1', $scope.connKey). + then(function (resp) { + + // console.log ("PAUSE ANSWER IS " + JSON.stringify(resp)); + $scope.currentProgress.progress = resp.data.status.progress; + // console.log ("STEP 0 progress is " + $scope.currentProgress.progress); + $scope.slides = []; + + var apiurl = $scope.loginData.apiurl + "/events/" + $scope.eventId + ".json"; + ZMDataModel.zmDebug("prepared to get frame details using " + apiurl); + $http.get(apiurl) + .then(function (success) { + + var event = success.data.event; + + event.Event.BasePath = computeBasePath(event); + event.Event.relativePath = computeRelativePath(event); + $scope.playbackURL = $scope.loginData.url; + $scope.eventBasePath = event.Event.BasePath; + $scope.relativePath = event.Event.relativePath; + + // now lets get approx frame # + + var totalTime = event.Event.Length; + var totalFrames = event.Event.Frames; + + var myFrame = Math.round(totalFrames / totalTime * $scope.currentProgress.progress); + + // console.log ("STEP 0: playback " + $scope.playbackURL + " total time " + totalTime + " frames " + totalFrames); + + if (myFrame > totalFrames) myFrame = totalFrames; + + // console.log ("STEP 0 myFrame is " + myFrame); + // console.log ("DUMPING " + JSON.stringify(event)); + $scope.mycarousel.index = myFrame; + // console.log ("STEP 1 : Computed index as "+ $scope.mycarousel.index); + var i; + for (i = 1; i <= event.Frame.length; i++) { + var fname = padToN(i, eventImageDigits) + "-capture.jpg"; + // console.log ("Building " + fname); + + // console.log ("DUMPING ONE " + JSON.stringify(event.Frame[i-1])); + // onlyAlarms means only copy alarmed frames + if (onlyAlarms) { + if (event.Frame[i - 1] && event.Frame[i - 1].Type == 'Alarm') { + $scope.slides.push({ + id: i, + img: fname, + }); + } + } else // push all frames + { + $scope.slides.push({ + id: i, + img: fname, + }); + } + } + // console.log ("STEP 2 : calling Save Event To Phone"); + $ionicLoading.hide(); + saveEventImageToPhone(onlyAlarms); - event.Event.BasePath = computeBasePath(event); - event.Event.relativePath = computeRelativePath(event); - $scope.playbackURL = $scope.loginData.url; - $scope.eventBasePath = event.Event.BasePath; - $scope.relativePath = event.Event.relativePath; - // now lets get approx frame # - - var totalTime = event.Event.Length; - var totalFrames = event.Event.Frames; - - var myFrame = Math.round(totalFrames/totalTime * $scope.currentProgress.progress); - - // console.log ("STEP 0: playback " + $scope.playbackURL + " total time " + totalTime + " frames " + totalFrames); - - if (myFrame > totalFrames) myFrame = totalFrames; - - // console.log ("STEP 0 myFrame is " + myFrame); - // console.log ("DUMPING " + JSON.stringify(event)); - $scope.mycarousel.index = myFrame; - // console.log ("STEP 1 : Computed index as "+ $scope.mycarousel.index); - var i; - for (i = 1; i <= event.Frame.length; i++) { - var fname = padToN(i, eventImageDigits) + "-capture.jpg"; - // console.log ("Building " + fname); - - // console.log ("DUMPING ONE " + JSON.stringify(event.Frame[i-1])); - // onlyAlarms means only copy alarmed frames - if (onlyAlarms) - { - if (event.Frame[i-1] && event.Frame[i-1].Type == 'Alarm') - { - $scope.slides.push({ - id: i, - img: fname, - }); - } - } - else // push all frames - { - $scope.slides.push({ - id: i, - img: fname, + }, + function (err) { + $ionicLoading.hide(); + ZMDataModel.zmLog("snapshot API Error: Could not get frames " + JSON.stringify(err)); + + $ionicLoading.show({ + template: "error retrieving frames", + noBackdrop: true, + duration: 4000 }); - } - } - // console.log ("STEP 2 : calling Save Event To Phone"); - $ionicLoading.hide(); - saveEventImageToPhone(onlyAlarms); - - + }); }, - function (err) - { - $ionicLoading.hide(); - ZMDataModel.zmLog ("snapshot API Error: Could not get frames " + JSON.stringify(err)); - - $ionicLoading.show({ - template: "error retrieving frames", - noBackdrop: true, - duration: 4000 - }); - }); - }, - - function (err) - { - ZMDataModel.zmDebug ("Error pausing stream before snapshot " + JSON.stringify(err)); - $ionicLoading.hide(); - } - + + function (err) { + ZMDataModel.zmDebug("Error pausing stream before snapshot " + JSON.stringify(err)); + $ionicLoading.hide(); + } + ); // then - - + + } - function saveEventImageToPhone(onlyAlarms) - { + function saveEventImageToPhone(onlyAlarms) { var curState = carouselUtils.getStop(); carouselUtils.setStop(true); @@ -545,8 +529,8 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro ZMDataModel.zmDebug("ModalCtrl: SaveEventImageToPhone called"); var canvas, context, imageDataUrl, imageData; var loginData = ZMDataModel.getLogin(); - - + + // for alarms only if (onlyAlarms) $scope.mycarousel.index = 0; var url = $scope.playbackURL + '/index.php?view=image&rand=' + $rootScope.rand + "&path=" + $scope.relativePath + $scope.slides[$scope.mycarousel.index].img; @@ -561,7 +545,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $rootScope.zmPopup = $ionicPopup.show({ template: '<center>Frame: {{slideIndex+1}} of {{slideLastIndex+1}}</center><br/><img src="{{selectEventUrl}}" width="100%" />', - title: 'Select '+ (onlyAlarms?'Alarmed ':'')+'frame to save', + title: 'Select ' + (onlyAlarms ? 'Alarmed ' : '') + 'frame to save', subTitle: 'use left and right arrows to change', scope: $scope, cssClass: 'popup80', @@ -635,62 +619,61 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }] }); - function saveNow() - { + function saveNow() { $ionicLoading.show({ - template: "saving snapshot...", - noBackdrop: true, - duration: zm.httpTimeout + template: "saving snapshot...", + noBackdrop: true, + duration: zm.httpTimeout }); var url = $scope.selectEventUrl; - ZMDataModel.zmLog ("saveNow: File path to grab is " + url); + ZMDataModel.zmLog("saveNow: File path to grab is " + url); - var img = new Image(); - img.onload = function () { + var img = new Image(); + img.onload = function () { // console.log("********* ONLOAD"); - canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - context = canvas.getContext('2d'); - context.drawImage(img, 0, 0); - - imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); - imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); - - if ($rootScope.platformOS != "desktop") { - try { - - cordova.exec( - SaveSuccess, - SaveError, - 'Canvas2ImagePlugin', - 'saveImageDataToLibrary', [imageData] - ); + canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + context = canvas.getContext('2d'); + context.drawImage(img, 0, 0); + + imageDataUrl = canvas.toDataURL('image/jpeg', 1.0); + imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, ''); + + if ($rootScope.platformOS != "desktop") { + try { + + cordova.exec( + SaveSuccess, + SaveError, + 'Canvas2ImagePlugin', + 'saveImageDataToLibrary', [imageData] + ); // carouselUtils.setStop(curState); - } catch (e) { + } catch (e) { - SaveError(e.message); + SaveError(e.message); // carouselUtils.setStop(curState); - } - } else { - - - var fname = $scope.relativePath+$scope.slides[$scope.slideIndex].img + ".png"; - fname = fname.replace(/\//,"-"); - fname = fname.replace(/\.jpg/,''); - - canvas.toBlob(function (blob) { - saveAs(blob, fname); - SaveSuccess(); - }); - } - }; - try { - img.src = url; + } + } else { + + + var fname = $scope.relativePath + $scope.slides[$scope.slideIndex].img + ".png"; + fname = fname.replace(/\//, "-"); + fname = fname.replace(/\.jpg/, ''); + + canvas.toBlob(function (blob) { + saveAs(blob, fname); + SaveSuccess(); + }); + } + }; + try { + img.src = url; // console.log ("SAVING IMAGE SOURCE"); - } catch (e) { - SaveError(e.message); - } + } catch (e) { + SaveError(e.message); + } } } @@ -704,7 +687,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.scaleImage = function () { $scope.imageFit = !$scope.imageFit; - // console.log("Switching image style to " + $scope.imageFit); + // console.log("Switching image style to " + $scope.imageFit); }; $scope.$on('$ionicView.enter', function () { @@ -714,47 +697,44 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro }); - $scope.$on('modal.shown', function (e,m) { - + $scope.$on('modal.shown', function (e, m) { + if (m.id != 'footage') - + return; - + var ld = ZMDataModel.getLogin(); $scope.loginData = ZMDataModel.getLogin(); - + $scope.singleImageQuality = ld.singleImageQuality; $scope.blockSlider = false; $scope.checkEventOn = false; //$scope.singleImageQuality = 100; - - - + + + //$scope.commandURL = $scope.currentEvent.Event.baseURL+"/index.php"; - // ZMDataModel.zmLog (">>>>>>>>>>>>>>>>>>ZMS url command is " + $scope.commandURL); - + // ZMDataModel.zmLog (">>>>>>>>>>>>>>>>>>ZMS url command is " + $scope.commandURL); + currentEvent = $scope.currentEvent; - - console.log ("Current Event " + JSON.stringify(currentEvent)); - $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - ZMDataModel.zmDebug ("Generated Connkey:" + $scope.connKey); - + + console.log("Current Event " + JSON.stringify(currentEvent)); + $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + ZMDataModel.zmDebug("Generated Connkey:" + $scope.connKey); + $scope.currentFrame = 1; $scope.isPaused = false; //console.log ("CURRENT EVENT " + JSON.stringify($scope.currentEvent)); $scope.currentEventDuration = Math.floor($scope.currentEvent.Event.Length); //console.log ($scope.event.Event.Frames); - if (currentEvent && currentEvent.Event) - { + if (currentEvent && currentEvent.Event) { //console.log ("************ CALLING PREPARE MODAL ***********"); prepareModalEvent(currentEvent.Event.Id); - if (ld.useNphZmsForEvents) - { - $timeout (function() { - - if ($scope.modal.isShown()) - { - ZMDataModel.zmLog (">>>Starting checkAllEvents interval..."); + if (ld.useNphZmsForEvents) { + $timeout(function () { + + if ($scope.modal.isShown()) { + ZMDataModel.zmLog(">>>Starting checkAllEvents interval..."); //eventQueryHandle = $timeout (checkEvent(), zm.eventPlaybackQuery); @@ -762,93 +742,93 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro eventQueryHandle = $interval(function () { checkEvent(); // console.log ("Refreshing Image..."); - }.bind(this),zm.eventPlaybackQuery); + }.bind(this), zm.eventPlaybackQuery); + } else { + ZMDataModel.zmLog(">>>Modal was exited, not starting checkAllEvents"); } - else - { - ZMDataModel.zmLog (">>>Modal was exited, not starting checkAllEvents"); - } - - },5000); + + }, 5000); } - + } - - - - - - + + + + + + }); - + //var current_data; - function drawGraph() - { - - + function drawGraph() { + + var cv = document.getElementById("eventchart"); var ctx = cv.getContext("2d"); - - + + frameoptions = { - responsive:true, - legend:false, - title: {display:false, text: ""}, - scales: { - yAxes: [{ - display:false, - scaleLabel: { - display:false, - labelString:'value', - } - + responsive: true, + legend: false, + title: { + display: false, + text: "" + }, + scales: { + yAxes: [{ + display: false, + scaleLabel: { + display: false, + labelString: 'value', + } + }], - xAxes: [{ - type:'time', - display:false, - time: { - - format:timeFormat, - tooltipFormat: 'll HH:mm', - min:framearray.datasets[0].data[0].x, - max:framearray.datasets[0].data[framearray.datasets[0].data.length-1].x , - displayFormats: { - + xAxes: [{ + type: 'time', + display: false, + time: { + + format: timeFormat, + tooltipFormat: 'll HH:mm', + min: framearray.datasets[0].data[0].x, + max: framearray.datasets[0].data[framearray.datasets[0].data.length - 1].x, + displayFormats: { + + } + }, + scaleLabel: { + display: false, + labelString: '' } - }, - scaleLabel: { - display: false, - labelString: '' - } - + }] } }; - - - $timeout(function() { - - - var myChart = new Chart(ctx, { - type: 'line', - data: framearray, - options: frameoptions, - }); + + + $timeout(function () { + + + var myChart = new Chart(ctx, { + type: 'line', + data: framearray, + options: frameoptions, + }); }); } - - $scope.$on('modal.removed', function (e,m) { + + $scope.$on('modal.removed', function (e, m) { $interval.cancel(eventQueryHandle); if (m.id != 'footage') return; - - + + $scope.isModalActive = false; - - ZMDataModel.zmDebug ("Modal removed - killing connkey"); - sendCommand(17,$scope.connKey); + + ZMDataModel.zmDebug("Modal removed - killing connkey"); + sendCommand(17, $scope.connKey); //$timeout (function(){ZMDataModel.stopNetwork("Modal removed inside EventModalCtrl");},400); // Execute action @@ -857,85 +837,88 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro // Playback speed adjuster $scope.adjustSpeed = function (val) { - - if ($scope.defaultVideo !== undefined && $scope.defaultVideo !='' ) - { - + + if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') { + $ionicLoading.show({ - template: "Please use video player controls for H264 events. ZoneMinder doesn't yet support zms controls", - noBackdrop: true, - duration: 3000 + template: "Please use video player controls for H264 events. ZoneMinder doesn't yet support zms controls", + noBackdrop: true, + duration: 3000 }); return; } - + var ld = ZMDataModel.getLogin(); - - if (ld.useNphZmsForEvents) - { - + + if (ld.useNphZmsForEvents) { + var cmd; $scope.isPaused = false; - switch (val) - { - case 'ff': cmd= 4; break; - case 'fr': cmd= 7; break; - case 'np': cmd= 2; break; - case 'p' : cmd= 1; $scope.isPaused = true; break; - default : cmd=0; + switch (val) { + case 'ff': + cmd = 4; + break; + case 'fr': + cmd = 7; + break; + case 'np': + cmd = 2; + break; + case 'p': + cmd = 1; + $scope.isPaused = true; + break; + default: + cmd = 0; } - + $ionicLoading.show({ - template: "please wait...", - noBackdrop: true, - duration: zm.httpTimeout - }); - + template: "please wait...", + noBackdrop: true, + duration: zm.httpTimeout + }); + sendCommand(cmd, $scope.connKey) - .then (function (success) - { + .then(function (success) { $ionicLoading.hide(); }, - function (err) - { + function (err) { $ionicLoading.hide(); - ZMDataModel.zmDebug ("Error in adjust speed: " + JSON.stringify(err)); + ZMDataModel.zmDebug("Error in adjust speed: " + JSON.stringify(err)); } - ); - - - } - - else // not using nph + ); + + + } else // not using nph { - + switch (val) { - case "super": - $scope.eventSpeed = 20 / $scope.event.Event.Frames; - carouselUtils.setDuration($scope.eventSpeed); - break; - case "normal": - $scope.eventSpeed = $scope.event.Event.Length / $scope.event.Event.Frames; - //$scope.eventSpeed = 5; - carouselUtils.setDuration($scope.eventSpeed); - - break; - case "faster": - $scope.eventSpeed = $scope.eventSpeed / 2; - if ($scope.eventSpeed < 20 / $scope.event.Event.Frames) - $scope.eventSpeed = 10 / $scope.event.Event.Frames; - carouselUtils.setDuration($scope.eventSpeed); - break; - case "slower": - $scope.eventSpeed = $scope.eventSpeed * 2; - carouselUtils.setDuration($scope.eventSpeed); - - break; - default: + case "super": + $scope.eventSpeed = 20 / $scope.event.Event.Frames; + carouselUtils.setDuration($scope.eventSpeed); + break; + case "normal": + $scope.eventSpeed = $scope.event.Event.Length / $scope.event.Event.Frames; + //$scope.eventSpeed = 5; + carouselUtils.setDuration($scope.eventSpeed); + + break; + case "faster": + $scope.eventSpeed = $scope.eventSpeed / 2; + if ($scope.eventSpeed < 20 / $scope.event.Event.Frames) + $scope.eventSpeed = 10 / $scope.event.Event.Frames; + carouselUtils.setDuration($scope.eventSpeed); + break; + case "slower": + $scope.eventSpeed = $scope.eventSpeed * 2; + carouselUtils.setDuration($scope.eventSpeed); + + break; + default: - } + } ZMDataModel.zmDebug("Set playback speed to " + $scope.eventSpeed); $ionicLoading.show({ @@ -947,26 +930,28 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro showDelay: 0 }); } - + }; $scope.toggleGapless = function () { - // console.log(">>>>>>>>>>>>>>GAPLESS TOGGLE INSIDE MODAL"); + // console.log(">>>>>>>>>>>>>>GAPLESS TOGGLE INSIDE MODAL"); $scope.loginData.gapless = !$scope.loginData.gapless; ZMDataModel.setLogin($scope.loginData); - + ZMDataModel.zmDebug("EventModalCtrl: gapless has changed resetting everything & re-generating connkey"); - ZMDataModel.stopNetwork("EventModalCtrl-toggle gapless"); - ZMDataModel.zmDebug ("Regenerating connkey as gapless has changed"); - // console.log ("********* OFFSET FROM TOGGLE GAPLESS"); - $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - $timeout( function () { sendCommand('14',$scope.connKey, '&offset='+$scope.currentProgress.progress);},500); - //$timeout.cancel(eventQueryHandle); - //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); - + ZMDataModel.stopNetwork("EventModalCtrl-toggle gapless"); + ZMDataModel.zmDebug("Regenerating connkey as gapless has changed"); + // console.log ("********* OFFSET FROM TOGGLE GAPLESS"); + $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + $timeout(function () { + sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress); + }, 500); + //$timeout.cancel(eventQueryHandle); + //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); + }; @@ -1013,21 +998,20 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - $scope.zoomImage = function (val) - { + $scope.zoomImage = function (val) { var zl = parseInt($ionicScrollDelegate.$getByHandle("imgscroll").getScrollPosition().zoom); - if (zl == 1 && val == -1) - { - ZMDataModel.zmDebug ("Already zoomed out max"); + if (zl == 1 && val == -1) { + ZMDataModel.zmDebug("Already zoomed out max"); return; } - - - zl+=val; - ZMDataModel.zmDebug ("Zoom level is " + zl); $ionicScrollDelegate.$getByHandle("imgscroll").zoomTo(zl,true); - + + + zl += val; + ZMDataModel.zmDebug("Zoom level is " + zl); + $ionicScrollDelegate.$getByHandle("imgscroll").zoomTo(zl, true); + }; - + //-------------------------------------------------------- //Navigate to next/prev event in full screen mode @@ -1042,36 +1026,30 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //console.log("Image is zoomed in - not honoring swipe"); return; } - - if (ld.useNphZmsForEvents) - { + + if (ld.useNphZmsForEvents) { ZMDataModel.zmLog("using zms to move "); jumpToEventZms($scope.connKey, dirn); - // sendCommand ( dirn==1?'13':'12',$scope.connKey); - - } - else - { + // sendCommand ( dirn==1?'13':'12',$scope.connKey); + + } else { jumpToEvent(eid, dirn); } - + //console.log("JUMPING"); - + }; $scope.jumpToEvent = function (eid, dirn) { - // console.log("jumptoevent"); + // console.log("jumptoevent"); var ld = ZMDataModel.getLogin(); - if (ld.useNphZmsForEvents) - { + if (ld.useNphZmsForEvents) { ZMDataModel.zmLog("using zms to move "); jumpToEventZms($scope.connKey, dirn); - // sendCommand ( dirn==1?'13':'12',$scope.connKey); - - } - else - { + // sendCommand ( dirn==1?'13':'12',$scope.connKey); + + } else { jumpToEvent(eid, dirn); } @@ -1106,7 +1084,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro function outWithOld() { ZMDataModel.zmLog("ModalCtrl:Stopping network pull..."); - ZMDataModel.stopNetwork("EventModalCtrl-out with old"); + ZMDataModel.stopNetwork("EventModalCtrl-out with old"); $scope.animationInProgress = true; // give digest time for image to swap // 100 should be enough @@ -1126,52 +1104,52 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - - + + function jumpToEventZms(connkey, dirn) { - - - if ($scope.defaultVideo !== undefined && $scope.defaultVideo !='' ) - { - + + + if ($scope.defaultVideo !== undefined && $scope.defaultVideo != '') { + $ionicLoading.show({ - template: "Event navigation is not available with video feeds. ZoneMinder doesn't yet support them", - noBackdrop: true, - duration: 3000 + template: "Event navigation is not available with video feeds. ZoneMinder doesn't yet support them", + noBackdrop: true, + duration: 3000 }); return; - + } - var cmd = dirn==1?'13':'12'; + var cmd = dirn == 1 ? '13' : '12'; $scope.d_eventId = "..."; - ZMDataModel.zmDebug ("Sending " + cmd + " to " + connkey); - + ZMDataModel.zmDebug("Sending " + cmd + " to " + connkey); + $ionicLoading.show({ - template: "switching events..", - noBackdrop: true, - duration: zm.httpTimeout - }); - - console.log ("Send command connkey: "+connkey); - sendCommand ( cmd,connkey) - .then ( - function (success) - { - //console.log ("jump success " + JSON.stringify(success)); - $ionicLoading.hide(); - }, - function (error) { - + template: "switching events..", + noBackdrop: true, + duration: zm.httpTimeout + }); + + console.log("Send command connkey: " + connkey); + sendCommand(cmd, connkey) + .then( + function (success) { + //console.log ("jump success " + JSON.stringify(success)); + $ionicLoading.hide(); + }, + function (error) { + ZMDataModel.zmDebug("Hmm jump error " + JSON.stringify(error)); - ZMDataModel.stopNetwork("EventModalCtrl-jumptoEventZms error"); - $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); - // console.log ("********* OFFSET FROM JUMPTOEVENTZMS ERROR"); - $timeout( function () { sendCommand('14',$scope.connKey, '&offset='+$scope.currentProgress.progress);},500); - ZMDataModel.zmDebug ("so I'm regenerating Connkey to " + $scope.connKey); + ZMDataModel.stopNetwork("EventModalCtrl-jumptoEventZms error"); + $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); + // console.log ("********* OFFSET FROM JUMPTOEVENTZMS ERROR"); + $timeout(function () { + sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress); + }, 500); + ZMDataModel.zmDebug("so I'm regenerating Connkey to " + $scope.connKey); //$timeout.cancel(eventQueryHandle); - // eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); + // eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery); $ionicLoading.hide(); - }); + }); var slidein; var slideout; if (dirn == 1) { @@ -1188,25 +1166,25 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro function outWithOld() { - - + + $timeout(function () { element.removeClass(slideout); element.addClass(slidein) .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', inWithNew); - + }, 200); } function inWithNew() { element.removeClass(slidein); - - + + } } - - + + //-------------------------------------------------------- // utility function //-------------------------------------------------------- @@ -1316,17 +1294,17 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro .then(function (success) { - // console.log ("DUCCESS::"+JSON.stringify(success)); + // console.log ("DUCCESS::"+JSON.stringify(success)); var event = success.data.event; currentEvent = event; event.Event.BasePath = computeBasePath(event); event.Event.relativePath = computeRelativePath(event); - - event.Event.streamingURL = ZMDataModel.getStreamingURL (event.Event.MonitorId); - // event.Event.baseURL = ZMDataModel.getBaseURL (event.Event.MonitorId); + + event.Event.streamingURL = ZMDataModel.getStreamingURL(event.Event.MonitorId); + // event.Event.baseURL = ZMDataModel.getBaseURL (event.Event.MonitorId); event.Event.baseURL = loginData.url; - event.Event.imageMode = ZMDataModel.getImageMode (event.Event.MonitorId); + event.Event.imageMode = ZMDataModel.getImageMode(event.Event.MonitorId); //console.log (JSON.stringify( success)); $scope.eventName = event.Event.Name; @@ -1341,11 +1319,11 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro event.Event.DefaultVideo = ""; $scope.defaultVideo = event.Event.DefaultVideo; - - console.log ("loginData is " + JSON.stringify($scope.loginData)); - console.log ("Event ID is " + $scope.eventId); - console.log ("video is " + $scope.defaultVideo); - + + console.log("loginData is " + JSON.stringify($scope.loginData)); + console.log("Event ID is " + $scope.eventId); + console.log("video is " + $scope.defaultVideo); + neighborEvents(event.Event.Id) .then(function (success) { @@ -1364,13 +1342,13 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro event.Event.video = {}; var videoURL; - + if (event.Event.imageMode == 'path') videoURL = event.Event.baseURL + "/events/" + event.Event.relativePath + event.Event.DefaultVideo; else - videoURL = event.Event.baseURL + "/index.php?view=view_video&eid="+event.Event.Id; + videoURL = event.Event.baseURL + "/index.php?view=view_video&eid=" + event.Event.Id; - console.log("************** VIDEO IS " + videoURL); + console.log("************** VIDEO IS " + videoURL); //console.log("************** VIDEO IS " + videoURL); event.Event.video.config = { @@ -1460,25 +1438,30 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro //$scope.FrameArray = event.Frame; // $scope.slider_options.scale=[]; - // $scope.slider_modal_options.scale = []; + // $scope.slider_modal_options.scale = []; // lets framearray.datasets[0].data = []; for (i = 0; i < event.Frame.length; i++) { - - var ts=moment(event.Frame[i].TimeStamp).format(timeFormat); - + + var ts = moment(event.Frame[i].TimeStamp).format(timeFormat); + //console.log ("pushing s:" + event.Frame[i].Score+" t:"+ts); - - framearray.datasets[0].data.push({x:ts, y:event.Frame[i].Score}); + + framearray.datasets[0].data.push({ + x: ts, + y: event.Frame[i].Score + }); framearray.labels.push(""); - - + + } $scope.totalEventTime = Math.round(parseFloat(event.Event.Length)) - 1; $scope.currentEventTime = 0; - - $timeout (function() {drawGraph();},500); + + $timeout(function () { + drawGraph(); + }, 500); }, function (err) { ZMDataModel.zmLog("Error retrieving detailed frame API " + JSON.stringify(err)); @@ -1493,19 +1476,19 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro $scope.$watch('ionRange.index', function () { // $scope.mycarousel.index = parseInt($scope.ionRange.index) - 1; - + if (carouselUtils.getStop() == true) return; - - //console.log ("***ION RANGE CHANGED TO " + $scope.mycarousel.index); + + //console.log ("***ION RANGE CHANGED TO " + $scope.mycarousel.index); }); } if (typeof $scope.mycarousel !== 'undefined') { $scope.$watch('mycarousel.index', function () { - - if (currentEvent && $scope.ionRange.index == parseInt(currentEvent.Event.Frames -1)) { + + if (currentEvent && $scope.ionRange.index == parseInt(currentEvent.Event.Frames - 1)) { playbackFinished(); } // end of playback from quick scrub @@ -1513,7 +1496,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro if ($scope.event && $scope.ionRange.index == parseInt($scope.event.Event.Frames) - 1) { if (!$scope.modal || $scope.modal.isShown() == false) { - // console.log("quick scrub playback over"); + // console.log("quick scrub playback over"); carouselUtils.setStop(true); $scope.ionRange.index = 0; $scope.mycarousel.index = 1; @@ -1547,6 +1530,6 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro return number; } - -}]);
\ No newline at end of file + +}]); diff --git a/www/js/EventServerSettingsCtrl.js b/www/js/EventServerSettingsCtrl.js index e2456c2b..057ae245 100644 --- a/www/js/EventServerSettingsCtrl.js +++ b/www/js/EventServerSettingsCtrl.js @@ -2,7 +2,7 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console */ -angular.module('zmApp.controllers').controller('zmApp.EventServerSettingsCtrl', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', 'EventServer', '$ionicHistory', '$rootScope', '$state', 'message', 'ZMDataModel', '$ionicPlatform','$ionicPopup', '$timeout', function ($scope, $ionicSideMenuDelegate, zm, $stateParams, EventServer, $ionicHistory, $rootScope, $state, message, ZMDataModel, $ionicPlatform, $ionicPopup, $timeout) { +angular.module('zmApp.controllers').controller('zmApp.EventServerSettingsCtrl', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', 'EventServer', '$ionicHistory', '$rootScope', '$state', 'message', 'ZMDataModel', '$ionicPlatform','$ionicPopup', '$timeout', '$translate', function ($scope, $ionicSideMenuDelegate, zm, $stateParams, EventServer, $ionicHistory, $rootScope, $state, message, ZMDataModel, $ionicPlatform, $ionicPopup, $timeout, $translate) { $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; @@ -59,21 +59,23 @@ angular.module('zmApp.controllers').controller('zmApp.EventServerSettingsCtrl', + + $rootScope.zmPopup = $ionicPopup.show({ scope: $scope, - template: '<ion-radio-fix ng-model="myopt.selectedState" ng-value="\'events\'"> Event view </ion-radio-fix><ion-radio-fix ng-model="myopt.selectedState" ng-value="\'montage\'"> Montage view </ion-radio-fix>', + template: '<ion-radio-fix ng-model="myopt.selectedState" ng-value="\'events\'">'+ $translate.instant('kEventView')+'</ion-radio-fix><ion-radio-fix ng-model="myopt.selectedState" ng-value="\'montage\'"> Montage view </ion-radio-fix>', title: 'View to navigate to:', subTitle: 'currently set to: ' + ld.onTapScreen, buttons: [ { - text: 'Cancel', + text: $translate.instant('kButtonCancel'), }, { - text: 'OK', + text: $translate.instant('kButtonOk'), onTap: function (e) { ld.onTapScreen = $scope.myopt.selectedState; diff --git a/www/js/EventsModalGraphCtrl.js b/www/js/EventsModalGraphCtrl.js index 899b83ae..43fef865 100644 --- a/www/js/EventsModalGraphCtrl.js +++ b/www/js/EventsModalGraphCtrl.js @@ -6,7 +6,7 @@ -angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', function ($scope, $rootScope, zm, ZMDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup) { +angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', '$translate', function ($scope, $rootScope, zm, ZMDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, $translate) { @@ -158,7 +158,7 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope' labels: [], datasets: [ { - label: 'Score', + label: $translate.instant('kScore'), fill:true, backgroundColor: 'rgba(129, 207, 224, 1.0)', borderColor: 'rgb(92, 147, 159)', @@ -183,7 +183,7 @@ angular.module('zmApp.controllers').controller('EventsModalGraphCtrl', ['$scope' labels: [], datasets: [ { - label: 'Score', + label: $translate.instant ('kScore'), backgroundColor: 'rgba(129, 207, 224, 1.0)', borderColor: 'rgba(129, 207, 224, 1.0)', hoverBackgroundColor: 'rgba(248, 148, 6,1.0)', diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js index 84ab820c..83857d75 100644 --- a/www/js/LogCtrl.js +++ b/www/js/LogCtrl.js @@ -2,7 +2,7 @@ /* jslint browser: true*/ /* global saveAs, cordova,StatusBar,angular,console,moment */ -angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$rootScope','zm', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$fileLogger', '$cordovaEmailComposer', '$ionicPopup', '$timeout', '$ionicHistory', '$state', '$interval', '$ionicLoading', function ($scope, $rootScope,zm, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $fileLogger, $cordovaEmailComposer, $ionicPopup, $timeout, $ionicHistory, $state, $interval, $ionicLoading) { +angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$rootScope','zm', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$fileLogger', '$cordovaEmailComposer', '$ionicPopup', '$timeout', '$ionicHistory', '$state', '$interval', '$ionicLoading', '$tranaslate', function ($scope, $rootScope,zm, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $fileLogger, $cordovaEmailComposer, $ionicPopup, $timeout, $ionicHistory, $state, $interval, $ionicLoading, $translate) { $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; @@ -74,8 +74,8 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo $scope.sendEmail = function (logstring) { $ionicPopup.confirm({ - title: 'Sensitive Information', - template: $rootScope.appName+' will modify the logs when creating the final output to remove sensitive data like urls and passwords. However it is eventually <b>your responsibility</b> to make sure there is no sensitive data in the logs. Please make sure you review and edit the logs before you send it out.' + title: $translate.instant('kSensitiveTitle'), + template: $rootScope.appName+' '+$translate.instant('kSensitiveBody') }) .then(function (res) { if (res) sendEmailReally(logstring); @@ -153,7 +153,7 @@ saveAs(blob, fname); //console.log ("GETTING LOGS"); $ionicLoading.show({ - template: "retrieving logs...", + template: $translate.instant('kLoading'), noBackdrop: true, duration: zm.loadingTimeout }); diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js index d551743e..f973bf5c 100644 --- a/www/js/LoginCtrl.js +++ b/www/js/LoginCtrl.js @@ -2,7 +2,7 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console,alert,URI */ -angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$rootScope', 'zm', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicPopup', '$http', '$q', '$ionicLoading', 'zmAutoLogin', '$cordovaPinDialog', 'EventServer', '$ionicHistory', '$state', '$ionicActionSheet', 'SecuredPopups', '$localstorage', '$stateParams', function ($scope, $rootScope, zm, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $ionicPopup, $http, $q, $ionicLoading, zmAutoLogin, $cordovaPinDialog, EventServer, $ionicHistory, $state, $ionicActionSheet, SecuredPopups, $localstorage, $stateParams) { +angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$rootScope', 'zm', '$ionicModal', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicPopup', '$http', '$q', '$ionicLoading', 'zmAutoLogin', '$cordovaPinDialog', 'EventServer', '$ionicHistory', '$state', '$ionicActionSheet', 'SecuredPopups', '$localstorage', '$stateParams', '$translate', function ($scope, $rootScope, zm, $ionicModal, ZMDataModel, $ionicSideMenuDelegate, $ionicPopup, $http, $q, $ionicLoading, zmAutoLogin, $cordovaPinDialog, EventServer, $ionicHistory, $state, $ionicActionSheet, SecuredPopups, $localstorage, $stateParams, $translate) { $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; @@ -49,19 +49,19 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r if (as.length < 2) { $rootScope.zmPopup= SecuredPopups.show('alert',{ - title: 'Error', - template: 'You need to have at least 2 distinct configurations created for a fallback' + title: $translate.instant('kError'), + template: $translate.instant('kFallback2Configs') }); return; } - var ab = [{text:'Clear'}]; + var ab = [{text:$translate.instant('kClear')}]; var ld = ZMDataModel.getLogin(); as.forEach(function(item) { if (item != ld.serverName) ab.push({text:item});}); var sheet = $ionicActionSheet.show({ buttons: ab, - titleText: 'Select fallback', - cancelText: 'Cancel', + titleText: $translate.instant('kSelectFallback'), + cancelText: $translate.instant('kCancel'), cancel: function() {}, buttonClicked: function (index) { @@ -86,16 +86,16 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $scope.serverActionSheet = function () { var hideSheet = $ionicActionSheet.show({ buttons: serverbuttons, - destructiveText: 'Delete', - titleText: 'Manage Server Groups', - cancelText: 'Cancel', + destructiveText: $translate.instant('kDelete'), + titleText: $translate.instant('kManageServerGroups'), + cancelText: $translate.instant('kCancel'), cancel: function () { // add cancel code.. }, buttonClicked: function (index) { //console.log ("YOU WANT " + serverbuttons[index].text + " INDEX " + index); - if (serverbuttons[index].text == 'Add...') + if (serverbuttons[index].text == $translate.instant('kServerAdd')+"...") { $scope.loginData = angular.copy(ZMDataModel.getDefaultLoginObject()); @@ -148,7 +148,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r ZMDataModel.setLogin($scope.loginData); availableServers = Object.keys(ZMDataModel.getServerGroups()); - serverbuttons = [{text:'Add...'}]; + serverbuttons = [{text:$translate.instant('kServerAdd')+"..."}]; for (var servIter = 0; servIter < availableServers.length; servIter++) { serverbuttons.push({ text: availableServers[servIter] @@ -157,7 +157,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r } } else { - ZMDataModel.displayBanner('error', ['Cannot delete, need at least one']); + ZMDataModel.displayBanner('error', [$translate.instant('kBannerCannotDeleteNeedOne')]); } return true; } @@ -195,7 +195,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r oldName = ld.serverName; availableServers = Object.keys(ZMDataModel.getServerGroups()); - serverbuttons = [{text:"Add..."}]; + serverbuttons = [{text:$translate.instant('kServerAdd')+"..."}]; for (var servIter = 0; servIter < availableServers.length; servIter++) { serverbuttons.push({ text: availableServers[servIter] @@ -257,8 +257,9 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r { event.preventDefault(); $rootScope.zmPopup = SecuredPopups.show('alert',{ - title: 'Please Save', - template: 'You have changed from ' + oldName + ' to ' + ld.serverName + '. Please save this profile first.' + title: $translate.instant('kPleaseSave'), + template: $translate.instant('kProfileChangeNotification', {oldName: oldName, newName:ld.serverName}) + }); } @@ -270,120 +271,8 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r // Make a noble attempt at deciphering - $scope.detectCgi = function() - { - - if ($scope.loginData.url == "") - { - $rootScope.zmPopup = SecuredPopups.show('show',{ - title: 'Portal not configured', - cssClass: 'popup90', - template: "Please fill in your login details as well as portal URL and save it before you try to detect the cgi-path", - buttons: [{text: 'Ok'}] - - }); - return; - - } - - if ( $rootScope.authSession == 'undefined') - { - $rootScope.zmPopup = SecuredPopups.show('show',{ - title: 'Not logged in', - cssClass: 'popup90', - template: "It doesn't look like you are logged in. For detection to work, you must fill in your login details, portal URL and then tap on Save. Then come back to this feature.", - buttons: [{text: 'Ok'}] - - }); - return; - } - - var defaultText = "<br/><br/>Typical values:<br/><b>ubuntu:</b> http://server/zm/cgi-bin<br/><b>centos/fedora:</b> http://server/zm/cgi-bin-zm/"; - - if ($scope.loginData.url.slice(-1) == '/') { - $scope.loginData.url = $scope.loginData.url.slice(0, -1); - - } - - ZMDataModel.getPathZms() - .then (function (data) - { - // coming here means we were able to login - $scope.loginData.url = addhttp($scope.loginData.url); - if ($scope.loginData.useSSL) - $scope.loginData.url = $scope.loginData.url.replace("http:", "https:"); - - var c=URI.parse($scope.loginData.url); - var p1,p2,p3,text; - p1 =""; - p2 =""; - - if (c.userinfo) - p1 = c.userinfo+"@"; - if (c.port) - p2 = ":"+c.port; - - var baseUri = c.scheme+"://"+p1+c.host+p2; - var dtext = baseUri + data.toLowerCase().trim(); - dtext = dtext.substr(0, dtext.lastIndexOf("/")); - - // have we already set the right path? - if (dtext == $scope.loginData.streamingurl.toLowerCase()) - { - text = "It looks like you have already set your cgi-path correctly to <b>" + dtext +"</b>, which is what ZoneMinder reports too"; - - $rootScope.zmPopup = SecuredPopups.show('show',{ - title: 'cgi-bin settings', - cssClass: 'popup90', - template: text, - buttons: [{text: 'Ok'}] - - }); - - } - else - { - text = "Zoneminder reports your cgi-bin path as <b>"+dtext+"</b>, while you have it set as "+$scope.loginData.streamingurl.toLowerCase(); - - $rootScope.zmPopup = SecuredPopups.show('show',{ - title: 'cgi-bin settings', - cssClass: 'popup90', - template: text, - buttons: [{text: 'Ok', type:'button-positive'},{text:'Use suggestion',type:'button-balanced', onTap:function(e) {$scope.loginData.streamingurl=dtext;}}, /*{text:'try harder', onTap:function(e) {tryHarder();}}*/] - - }); - } - - - - - }, - function (error) - { - ZMDataModel.zmDebug ("Could not get PATH_ZMS:"+JSON.stringify(error)); - var text = "(could not detect cgi-path, try coming back here after setting up your portal url and credentials correctly, and saving)<br/><br/>"+defaultText; - $rootScope.zmPopup = SecuredPopups.show('alert',{ - title: 'cgi-bin settings', - cssClass: 'popup90', - - template: text - }); - - }); - - - - }; - function tryHarder() - { - $rootScope.zmPopup = SecuredPopups.show('alert',{ - title: 'Harder', - cssClass: 'popup90', - template: "trying harder" - }); - } - + //-------------------------------------------------------------------------- // When PIN is enabled, this is called to specify a PIN // FIXME: Get rid of cordovaPinDialog. It's really not needed @@ -392,12 +281,12 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r ZMDataModel.zmLog("Password prompt"); if ($scope.loginData.usePin) { $scope.loginData.pinCode = ""; - $cordovaPinDialog.prompt('Enter PIN', 'PIN Protect').then( + $cordovaPinDialog.prompt($translate.instant('kEnterPin'), $translate.instant('kPinProtect')).then( function (result1) { // console.log (JSON.stringify(result1)); if (result1.input1 && result1.buttonIndex == 1) { - $cordovaPinDialog.prompt('Reconfirm PIN', 'PIN Protect') + $cordovaPinDialog.prompt($translate.instant('kReconfirmPin'), $translate.instant('kPinProtect')) .then(function (result2) { if (result1.input1 == result2.input1) { ZMDataModel.zmLog("Pin code match"); @@ -405,7 +294,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r } else { ZMDataModel.zmLog("Pin code mismatch"); $scope.loginData.usePin = false; - ZMDataModel.displayBanner('error', ['Pin code mismatch']); + ZMDataModel.displayBanner('error', [$translate.instant('kBannerPinMismatch')]); } }, function (error) { @@ -632,7 +521,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r .finally ( function (ans) { - zmAutoLogin.doLogin("<button class='button button-clear' style='line-height: normal; min-height: 0; min-width: 0; color:#fff;' ng-click='$root.cancelAuth()'><i class='ion-close-circled'></i> authenticating...</button>") + zmAutoLogin.doLogin("<button class='button button-clear' style='line-height: normal; min-height: 0; min-width: 0; color:#fff;' ng-click='$root.cancelAuth()'><i class='ion-close-circled'></i> "+$translate.instant('kAuthenticating')+"...</button>") // Do the happy menu only if authentication works // if it does not work, there is an emitter for auth // fail in app.js that will be called to show an error @@ -659,7 +548,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $http.get(apiurl) .success(function (data) { - var loginStatus = "Please explore the menu and enjoy "+$rootScope.appName+"!"; + var loginStatus = $translate.instant('kExploreEnjoy')+" "+$rootScope.appName+"!"; EventServer.refresh(); @@ -676,7 +565,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $http.get(ld.streamingurl + "/zms") .success(function (data) { ZMDataModel.zmDebug("Urk! cgi-path returned success, but it should not have come here"); - loginStatus = "Login validated, but could not validate cgi-path. If live streams don't work please check your cgi-bin path or try using the discover feature"; + loginStatus = $translate.instant('kLoginStatusNoCgi'); ZMDataModel.zmDebug ("refreshing API version..."); ZMDataModel.getAPIversion() @@ -708,13 +597,13 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r // if its 4xx then the cgi-bin path is not valid if (status < 500) { - loginStatus = "The cgi-bin path you entered may be wrong. I can't make sure, but if your live views don't work, please review your cgi path or try using the discover feature."; + loginStatus = $translate.instant('kLoginStatusNoCgiAlt'); } if (showalert) { $rootScope.zmPopup = SecuredPopups.show('alert',{ - title: 'Login validated', + title: $translate.instant('kLoginValidatedTitle'), template: loginStatus }).then(function (res) { @@ -742,12 +631,12 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r }) .error(function (error) { - ZMDataModel.displayBanner('error', ['ZoneMinder API check failed', 'Please check API settings']); + ZMDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]); ZMDataModel.zmLog("API login error " + JSON.stringify(error)); $rootScope.zmPopup= SecuredPopups.show('alert',{ - title: 'Login validated but API failed', - template: 'Please check your API settings' + title: $translate.instant('kLoginValidAPIFailedTitle'), + template: $translate.instant('kBannerPleaseCheck') }); }); }); @@ -766,8 +655,8 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r if (!$scope.loginData.serverName) { $rootScope.zmPopup = $ionicPopup.alert({ - title: 'Error', - template: 'Server Name cannot be empty', + title: $translate.instant('kError'), + template: $translate.instant('kServerEmptyError'), }) .then(function (res) { return; diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js index 6e6282ed..ab3631aa 100644 --- a/www/js/MonitorCtrl.js +++ b/www/js/MonitorCtrl.js @@ -6,8 +6,8 @@ // refer to comments in EventCtrl for the modal stuff. They are almost the same angular.module('zmApp.controllers') - .controller('zmApp.MonitorCtrl', ['$ionicPopup', 'zm', '$scope', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$ionicLoading', '$ionicModal', '$state', '$http', '$rootScope', '$timeout','$ionicHistory', '$ionicPlatform', - function ($ionicPopup, zm, $scope, ZMDataModel, message, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope, $timeout, $ionicHistory, $ionicPlatform) { + .controller('zmApp.MonitorCtrl', ['$ionicPopup', 'zm', '$scope', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$ionicLoading', '$ionicModal', '$state', '$http', '$rootScope', '$timeout','$ionicHistory', '$ionicPlatform', '$translate', + function ($ionicPopup, zm, $scope, ZMDataModel, message, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope, $timeout, $ionicHistory, $ionicPlatform, $translate) { //----------------------------------------------------------------------- @@ -26,8 +26,8 @@ angular.module('zmApp.controllers') if ($scope.monitors.length == 0) { $rootScope.zmPopup= $ionicPopup.alert({ - title: "No Monitors found", - template: "Please check your credentials" + title: $translate.instant('kNoMonitors'), + template: $translate.instant('kPleaseCheckCredentials') }); $ionicHistory.nextViewOptions({ disableBack: true @@ -111,27 +111,27 @@ angular.module('zmApp.controllers') $scope.monFunctions = [ { - text: "Modect", + text: $translate.instant('kMonModect'), value: "Modect" }, { - text: "Mocord", + text: $translate.instant('kMonMocord'), value: "Mocord" }, { - text: "Record", + text: $translate.instant('kMonRecord'), value: "Record" }, { - text: "Nodect", + text:$translate.instant('kMonNodect'), value: "Nodect" }, { - text: "Monitor", + text: $translate.instant('kMonMonitor'), value: "Monitor" }, { - text: "None", + text: $translate.instant('kMonNone'), value: "None" } ]; @@ -146,15 +146,15 @@ angular.module('zmApp.controllers') template: '<ion-toggle ng-model="monfunc.myenabled" ng-checked="monfunc.myenabled" toggle-class="toggle-calm">Enabled</ion-toggle><ion-radio-fix ng-repeat="item in monFunctions" ng-value="item.value" ng-model="monfunc.myfunc"> {{item.text}} </ion-radio-fix>', - title: 'Change Settings for ' + monitorName, + title: $translate.instant('kChangeSettingsFor') + ' '+monitorName, buttons: [ { - text: 'Cancel', + text: $translate.instant('kButtonCancel'), }, { - text: 'Save', + text:$translate.instant('kButtonSave'), onTap: function (e) { ZMDataModel.zmDebug("MonitorCtrl:changeConfig selection:" + $scope.monfunc.myenabled + @@ -169,7 +169,7 @@ angular.module('zmApp.controllers') isEnabled = ($scope.monfunc.myenabled == true) ? '1' : '0'; $ionicLoading.show({ - template: "Applying changes. Please wait...", + template:$translate.instant('kApplyingChanges')+"...", noBackdrop: true, duration: zm.largeHttpTimeout, }); @@ -231,7 +231,7 @@ angular.module('zmApp.controllers') ZMDataModel.zmDebug("MonitorCtrl: Error changing monitor " + JSON.stringify(data)); $ionicLoading.hide(); $ionicLoading.show({ - template: "Error changing Monitor. Please check ZM logs...", + template: $translate.instant('kErrorChangingMonitors')+"...", noBackdrop: true, duration: 3000, }); @@ -339,7 +339,7 @@ angular.module('zmApp.controllers') $scope.modal = modal; $ionicLoading.show({ - template: "please wait...", + template: $translate.instant('kPleaseWait')+"...", noBackdrop: true, duration: zm.loadingTimeout }); @@ -423,7 +423,7 @@ angular.module('zmApp.controllers') .error(function (data) { ZMDataModel.zmDebug("MonitorCtrl: Error->monitor check state returned: " + JSON.stringify(data)); - ZMDataModel.displayBanner('error', ['error retrieving state', 'Please try again']); + ZMDataModel.displayBanner('error', [$translate.instant('kErrorRetrievingState'), $translate.instant('kPleaseTryAgain')]); $scope.monitors[j].Monitor.isRunning = "error"; $scope.monitors[j].Monitor.color = zm.monitorErrorColor; $scope.monitors[j].Monitor.char = "ion-help-circled"; diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js index d62839d2..ddc2f3e2 100644 --- a/www/js/MonitorModalCtrl.js +++ b/www/js/MonitorModalCtrl.js @@ -5,7 +5,7 @@ -angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', 'SecuredPopups', function ($scope, $rootScope, zm, ZMDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, SecuredPopups) { +angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$rootScope', 'zm', 'ZMDataModel', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams', '$ionicHistory', '$ionicScrollDelegate', '$q', '$sce', 'carouselUtils', '$ionicPopup', 'SecuredPopups', '$translate', function ($scope, $rootScope, zm, ZMDataModel, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http, $state, $stateParams, $ionicHistory, $ionicScrollDelegate, $q, $sce, carouselUtils, $ionicPopup, SecuredPopups, $translate) { @@ -21,7 +21,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $rootScope.authSession = "undefined"; $ionicLoading.show({ - template: 'negotiating stream authentication...', + template: $translate.instant('kNegotiatingStreamAuth')+'...', animation: 'fade-in', showBackdrop: true, duration: zm.loadingTimeout, @@ -206,7 +206,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $scope.showPTZ = !$scope.showPTZ; } else { $ionicLoading.show({ - template: "PTZ not configured for this monitor", + template: $translate.instant('kPTZnotConfigured'), noBackdrop: true, duration: 3000, }); @@ -260,7 +260,12 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ return; } - var status = ["idle", "pre-alarm","alarmed","alert","record"]; + var status = [$translate.instant('kMonIdle'), + $translate.instant('kMonPreAlarm'), + $translate.instant('kMonAlarmed'), + $translate.instant('kMonAlert'), + $translate.instant('kMonRecord') + ]; //console.log ("Inside Modal timer..."); var apiurl = ZMDataModel.getLogin().apiurl; var alarmurl = apiurl+"/monitors/alarm/id:"+$scope.monitorId+"/command:status.json"; @@ -345,7 +350,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ if (!$scope.ptzMoveCommand) { $ionicLoading.show({ - template: "Not Ready for PTZ", + template: $translate.instant('kPTZNotReady'), noBackdrop: true, duration: 2000, }); @@ -380,7 +385,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ //console.log("PTZDATA is " + JSON.stringify(ptzData)); $ionicLoading.hide(); $ionicLoading.show({ - template: "please wait...", + template: $translate.instant('kPleaseWait')+"...", noBackdrop: true, duration: zm.loadingTimeout, }); @@ -388,7 +393,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ var loginData = ZMDataModel.getLogin(); $ionicLoading.hide(); $ionicLoading.show({ - template: "Sending PTZ..", + template: $translate.instant('kSendingPTZ')+"...", noBackdrop: true, duration: zm.loadingTimeout, }); @@ -571,7 +576,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ function SaveSuccess() { $ionicLoading.show({ - template: "done!", + template: $translate.instant('kDone'), noBackdrop: true, duration: 1000 }); @@ -580,7 +585,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ function SaveError(e) { $ionicLoading.show({ - template: "error - could not save", + template: $translate.instant('kErrorSave'), noBackdrop: true, duration: 2000 }); @@ -599,17 +604,17 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ { $rootScope.zmPopup = SecuredPopups.show('show',{ title: 'Confirm', - template: "Are you sure you want to force an alarm for Monitor:"+$scope.monitorName+"?", + template: $translate.instant('kForceAlarmConfirm')+$scope.monitorName+"?", buttons: [ { - text: 'Yes', + text: $translate.instant('kButtonYes'), onTap: function(e) { enableAlarm(mid, mode); } }, { - text: 'No', + text: $translate.instant('kButtonNo'), onTap: function (e) { return; @@ -629,7 +634,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ var alarmurl = apiurl+"/monitors/alarm/id:"+mid+"/command:"+c+".json"; ZMDataModel.zmLog ("Invoking " + alarmurl); - var status = mode? "forcing alarm": "cancelling alarm"; + var status = mode? $translate.instant('kForcingAlarm'): $translate.instant('kCancellingAlarm'); $ionicLoading.show({ template: status, noBackdrop: true, @@ -639,7 +644,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $http.get(alarmurl) .then (function (data) { $ionicLoading.show({ - template: "success", + template: $translate.instant('kSuccess'), noBackdrop: true, duration: 2000, }); @@ -647,7 +652,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ function (error) { $ionicLoading.show({ - template: "error - please make sure your API supports this feature", + template: $translate.instant('kAlarmAPIError'), noBackdrop: true, duration: 3000, }); @@ -666,6 +671,12 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $scope.stateColor = function() { + var status = [$translate.instant('kMonIdle'), + $translate.instant('kMonPreAlarm'), + $translate.instant('kMonAlarmed'), + $translate.instant('kMonAlert'), + $translate.instant('kMonRecord') + ]; //console.log ("***MONSTATUS**"+$scope.monStatus+"**"); var color=""; switch ($scope.monStatus) @@ -673,19 +684,19 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ case "": color="background-color:none"; break; - case "idle": + case status[0]: color="background-color:#4B77BE"; break; - case "pre-alarm": + case status[1]: color="background-color:#e67e22"; break; - case "alarmed": + case status[2]: color="background-color:#D91E18"; break; - case "alert": + case status[3]: color="background-color:#e67e22"; break; - case "record": + case status[4]: color="background-color:#26A65B"; break; } @@ -700,7 +711,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ $scope.saveImageToPhone = function (mid) { $ionicLoading.show({ - template: "saving snapshot...", + template: $translate.instant('kSavingSnapshot')+'...', noBackdrop: true, duration: zm.httpTimeout }); @@ -839,7 +850,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ if (disp) { $ionicLoading.hide(); $ionicLoading.show({ - template: "please wait...", + template: $translate.instant('kPleaseWait')+'...', noBackdrop: true, duration: zm.loadingTimeout, }); diff --git a/www/lang/locale-en.json b/www/lang/locale-en.json index bbf8fa7f..ba7a2d56 100644 --- a/www/lang/locale-en.json +++ b/www/lang/locale-en.json @@ -1,178 +1,246 @@ { - "k1DaySummary" : "1 day summary", - "k1HourSummary" : "1 hour summary", - "k1MonthSummary" : "1 month summary", - "k1WeekSummary" : "1 week summary", - "kAlarmFrameCount" : "Alarm Frame Count", - "kAlarmMaxFPS" : "Alarm Max FPS", - "kAlarms" : "Alarms", - "kAnalyze" : "Analyze", - "kApiUrl" : "ZM api url", - "kAt" : "at", - "kAwake1" : "Keep display on", - "kAwake2" : "(when viewing footage)", - "kChangeState" : "Change State", - "kCheckCredentials" : "Please check your credentials", - "kChromeMax" : "max of 5 monitors - chrome limit", - "kConfiguration" : "Configuration", - "kCustomRange" : "Custom Range", - "kDay" : "Day", - "kDeleteEventError1" : "could not delete event", - "kDeleteEventError2" : "please check logs", - "kDeleteEventSuccess" : "deleted event", - "kDeletingEvent" : "deleting event", - "kDevOptions" : "Dev. Settings", - "kDeveloperOptionsFor" : "Developer Options for", - "kDisablePush" : "disable APNS/GCM", - "kEnable24hr" : "enable 24hr time format", - "kEnableDebug" : "Enable debug logs", - "kEnableLogs" : "Enable logs", - "kEnableNewsUpdates" : "enable news updates", - "kEnterPin" : "Enter PIN", - "kEvent" : "event", - "kEventMontage" : "Event Montage", - "kEventMontageImageScale" : "Event Montage image scale", - "kEventServer" : "Event Server", - "kEventServerConfig1" : "Please make sure your ZM settings are configured and saved before you configure the event server", - "kEventSingleImageScale" : "Event single image scale", - "kEvents" : "events", - "kExampleServer" : "eg. My House", - "kExitAppBackground" : "exit app in background", - "kExpert" : "Expert", - "kExploreEnjoy" : "Please explore the menu and enjoy zmNinja!'", - "kFallback" : "Fallback configuration", - "kFilterByDateTime" : "Filter by Date/Time", - "kFilterEvents" : "Filter Events", - "kFilterEventsBetween1" : "You are viewing events between", - "kFilterEventsBetween2" : "Do you want to delete this filter?", - "kFilterOn" : "Filter On", - "kFilterSettings" : "Filter Settings", - "kFootage" : "Footage", - "kFrame" : "frame", - "kFrameUpdate" : "Frame update", - "kFrames" : "frames", - "kFrom" : "From", - "kFromDate" : "From Date", - "kFromTime" : "From Time", - "kH264VideoSupport" : "H264 Video support", - "kHideMonsWithoutEvents" : "Hide monitors without events", - "kId" : "Id", - "kImpMsg1" : "Important Message", - "kImpMsg2" : "I'd appreciate if you upgraded ZoneMinder", - "kImpMsg3" : "You are running", - "kImpMsg4" : "has some important fixes that enhance the API amongst other things. This is required to avail of the new alarm APIs and other new features.", - "kImpMsg5" : "Reported Version", - "kImpMsg6" : "Recommended Version", - "kImpMsg7" : "Ok, got it", - "kLatestEvents" : "Latest Events", - "kLiveView" : "Live View", - "kLoad" : "load", - "kLoading" : "Loading", - "kLogs" : "Logs", - "kMaxFPS" : "Max FPS", - "kMaxItemsForTimeline" : "Max. items for Timeline", - "kMaxMonitorsMontage" : "Max monitors in montage", - "kMenuDevSettings" : "Developer Settings", - "kMenuEventMontage" : "EventMontage", - "kMenuEvents" : "Events", - "kMenuExit" : "Exit", - "kMenuHelp" : "Help", - "kMenuLogs" : "Logs", - "kMenuMonitors" : "Monitors", - "kMenuMontage" : "Montage", - "kMenuNews" : "News", - "kMenuSystemStatus" : "System Status", - "kMenuTimeline" : "Timeline", - "kMenuTitle" : "Options", - "kMenuWizard" : "Wizard", - "kMenuZMSettings" : "Settings", - "kMinAlarmCount" : "Minimum alarm count", - "kMinVersion" : "Minimum Required Version", - "kMinimumIntervals" : "minimum interval", - "kMode" : "Mode", - "kMonitors" : "Monitors", - "kMontage" : "Montage", - "kMontageImageScale" : "Montage image scale", - "kMonth" : "Month", - "kNeedToKnow" : "I need to know your ZoneMinder login and path details to get started", - "kNews" : "News", - "kNext" : "Next", - "kNoEvents" : "No events to display", - "kNoMonitors" : "No monitors to display", - "kOnTapNavigate" : "on tap, navigate to", - "kOnlyUseWebSocket" : "only use websockets", - "kPassword" : "password", - "kPathToCgi" : "path to cgi-bin", - "kPaused" : "paused", - "kPersistHidden" : "Persist hidden monitors", - "kPortalUrl" : "ZM portal url", - "kPresets" : "presets", - "kPrev" : "Prev", - "kProtect" : "protect", - "kPullToReload" : "pull to reload data", - "kRecordingProgress" : "recording in progress", - "kRefresh" : "Refresh", - "kReportEvents" : "report events", - "kReportedVersion" : "Reported Version", - "kReset" : "Reset", - "kResolution" : "Resolution", - "kRestart" : "Restart", - "kResumeDelay" : "resume delay", - "kSave" : "Save", - "kScore" : "score", - "kScrub" : "Scrub", - "kSearch" : "search", - "kSec" : "sec", - "kServerName" : "Server Name", - "kSettings" : "Settings", - "kSettingsSaved" : "Settings Saved", - "kShowAlarmedEvents" : "Show alarmed events", - "kShowAllEvents" : "Show all events", - "kShowing" : "Showing", - "kShowingEvent" : "showing event", - "kSpeed" : "speed", - "kStart" : "Start", - "kStatus" : "Status", - "kStop" : "Stop", - "kSwipeToChangeMon" : "Swipe to change monitors", - "kSystemStatus" : "System Status", - "kThanksForUsing" : "Thanks for using", - "kTimeline" : "Timeline", - "kTimelineControlDisplay" : "tap:view event, double-tap:view frame graph", - "kTimelineMessage" : "double-tap exits. touch/mouse-over and drag over items to see frames", - "kTimelineOnlyDisplaying1" : "only displaying last {{maxItemsVal}} events", - "kTo" : "to", - "kToDate" : "To Date", - "kToTime" : "To Time", - "kType" : "type", - "kUnknown" : "(unknown)", - "kUseSSL" : "Use SSL", - "kUseZmAuth" : "use ZM authentication", - "kUserName" : "user name", - "kVersion" : "Version", - "kVersionIncompatible" : "I am incompatible with your ZoneMinder version", - "kWarningLargeTimeline" : "A large value can affect timeline performance. If you find timeline performance slow, try reducing the value to 200 and work your way up from there.", - "kWeek" : "Week", - "kWelcomeWizard" : "Welcome to zmWizard", - "kWizAuthText1" : "Confused? ZM Auth is the authentication used when you enable OPT_USE_AUTH in the ZM console options screen.", - "kWizAuthText2" : "Basic Auth is when you configure a username and password in your webserver. If you are using LDAP authentication, its likely basic auth.", - "kWizBasicAuth" : "I use basic authentication", - "kWizConfigPain" : "Configuring ZoneMinder can be a pain. Let's see if zmWizard can help.", - "kWizGotoLogin" : "Go to Login Screen", - "kWizNextStep1" : "Once auto-detection is over, you could either", - "kWizNextStep2" : "Go back to previous steps and re-do", - "kWizNextStep3" : "Go to the login screen with these findings auto filled in", - "kWizPasswdNote" : "note: if your password has #?@& in it, the wizard will fail cgi detection. Its best if you temporarily change the password to a simple one, run the wizard and then change it back later", - "kWizPortalAuth" : "Portal Authentication", - "kWizPortalText" : "Lets talk about how you have configured authentication If you have enabled authentication, toggle this button", - "kWizPortalTip" : "Confused? You can easily find out your portal URL by noting down the url you see on your browser when accessing the ZoneMinder Console.", - "kWizPortalUrl" : "What is your Zoneminder portal url?", - "kWizResults" : "Results of auto-detection", - "kWizTip" : "Tip", - "kWizUseAuth" : "I use authentication", - "kWizZMAuth" : "I use ZM authentication", - "kWizard" : "Wizard", - "kWorkingOnGraph" : "working on graph data", - "kZMSettingsFor" : "ZoneMinder settings for", - "kZMUpgradeNeeded" : "ZoneMinder upgrade needed" + "k1DaySummary" : "1 day summary", + "k1HourSummary" : "1 hour summary", + "k1MonthSummary" : "1 month summary", + "k1WeekSummary" : "1 week summary", + "kAlarmAPIError" : "error - please make sure your API supports this feature", + "kAlarmFrameCount" : "Alarm Frame Count", + "kAlarmMaxFPS" : "Alarm Max FPS", + "kAlarms" : "Alarms", + "kAnalyze" : "Analyze", + "kApiUrl" : "ZM api url", + "kApplyingChanges" : "Applying changes. Please wait", + "kAt" : "at", + "kAuthenticating" : "authenticating", + "kAwake1" : "Keep display on", + "kAwake2" : "(when viewing footage)", + "kBannerAPICheckFailed" : "API check failed", + "kBannerCannotDeleteNeedOne" : "Cannot delete, need at least one", + "kBannerPinMismatch" : "Pin code mismatch", + "kBannerPleaseCheck" : "Please check settings", + "kBodyPortalNotConfigured" : "Please fill in your login details as well as portal URL and save it before you try to detect the cgi-path", + "kButtonCancel" : "Cancel", + "kButtonClear" : "Clear", + "kButtonNo" : "No", + "kButtonOk" : "OK", + "kButtonSave" : "Save", + "kButtonYes" : "Yes", + "kCancellingAlarm" : "cancelling alarm", + "kChangeSettingsFor" : "Change settings for", + "kChangeState" : "Change State", + "kCheckCredentials" : "Please check your credentials", + "kChromeMax" : "max of 5 monitors - chrome limit", + "kClear" : "Clear", + "kConfiguration" : "Configuration", + "kCustomRange" : "Custom Range", + "kDay" : "Day", + "kDelete" : "Delete", + "kDeleteEventError1" : "could not delete event", + "kDeleteEventError2" : "please check logs", + "kDeleteEventSuccess" : "deleted event", + "kDeletingEvent" : "deleting event", + "kDevOptions" : "Dev. Settings", + "kDeveloperOptionsFor" : "Developer Options for", + "kDisablePush" : "disable APNS/GCM", + "kDone" : "done", + "kEnable24hr" : "enable 24hr time format", + "kEnableDebug" : "Enable debug logs", + "kEnableLogs" : "Enable logs", + "kEnableNewsUpdates" : "enable news updates", + "kEnterPin" : "Enter PIN", + "kError" : "Error", + "kErrorChangingMonitors" : "Error changing monitors. Please check logs", + "kErrorFrameBanner" : "could not retrieve frame details", + "kErrorPleaseTryAgain" : "please try again", + "kErrorRetrievingState" : "error retrieving state", + "kErrorSave" : "Error - could not save", + "kEvent" : "event", + "kEventMontage" : "Event Montage", + "kEventMontageImageScale" : "Event Montage image scale", + "kEventServer" : "Event Server", + "kEventServerConfig1" : "Please make sure your ZM settings are configured and saved before you configure the event server", + "kEventSingleImageScale" : "Event single image scale", + "kEventView" : "Event View", + "kEvents" : "events", + "kExampleServer" : "eg. My House", + "kExitAppBackground" : "exit app in background", + "kExpert" : "Expert", + "kExploreEnjoy" : "Please explore the menu and enjoy", + "kFallback" : "Fallback configuration", + "kFallback2Configs" : "You need to have at least 2 distinct configurations created for a fallback", + "kFilterByDateTime" : "Filter by Date/Time", + "kFilterEvents" : "Filter Events", + "kFilterEventsBetween1" : "You are viewing events between", + "kFilterEventsBetween2" : "Do you want to delete this filter?", + "kFilterOn" : "Filter On", + "kFilterSettings" : "Filter Settings", + "kFootage" : "Footage", + "kForceAlarmConfirm" : "Are you sure you want to force an alarm for Monitor:", + "kForcingAlarm" : "forcing alarm", + "kFrame" : "frame", + "kFrameUpdate" : "Frame update", + "kFrames" : "frames", + "kFrom" : "From", + "kFromDate" : "From Date", + "kFromTime" : "From Time", + "kH264VideoSupport" : "H264 Video support", + "kHideMonsWithoutEvents" : "Hide monitors without events", + "kId" : "Id", + "kImpMsg1" : "Important Message", + "kImpMsg2" : "I'd appreciate if you upgraded ZoneMinder", + "kImpMsg3" : "You are running", + "kImpMsg4" : "has some important fixes that enhance the API amongst other things. This is required to avail of the new alarm APIs and other new features.", + "kImpMsg5" : "Reported Version", + "kImpMsg6" : "Recommended Version", + "kImpMsg7" : "Ok, got it", + "kLatestEvents" : "Latest Events", + "kLiveView" : "Live View", + "kLoad" : "load", + "kLoading" : "loading", + "kLoginStatusNoCgi" : "Login validated, but could not validate cgi-path. If live streams don't work please check your cgi-bin path or try using the discover feature", + "kLoginStatusNoCgiAlt" : "The cgi-bin path you entered may be wrong. I can't make sure, but if your live views don't work, please review your cgi path or try using the discover feature.", + "kLoginValidAPIFailedTitle" : "Login validated but API failed", + "kLoginValidatedTitle" : "Login Validated", + "kLogs" : "Logs", + "kManageServerGroups" : "Manage Server Groups", + "kMaxFPS" : "Max FPS", + "kMaxItemsForTimeline" : "Max. items for Timeline", + "kMaxMonitorsMontage" : "Max monitors in montage", + "kMenuDevSettings" : "Developer Settings", + "kMenuEventMontage" : "EventMontage", + "kMenuEvents" : "Events", + "kMenuExit" : "Exit", + "kMenuHelp" : "Help", + "kMenuLogs" : "Logs", + "kMenuMonitors" : "Monitors", + "kMenuMontage" : "Montage", + "kMenuNews" : "News", + "kMenuSystemStatus" : "System Status", + "kMenuTimeline" : "Timeline", + "kMenuTitle" : "Options", + "kMenuWizard" : "Wizard", + "kMenuZMSettings" : "Settings", + "kMinAlarmCount" : "Minimum alarm count", + "kMinVersion" : "Minimum Required Version", + "kMinimumIntervals" : "minimum interval", + "kMode" : "Mode", + "kMonAlarmed" : "alarmed", + "kMonAlert" : "alert", + "kMonIdle" : "idle", + "kMonMocord" : "Mocord", + "kMonModect" : "Modect", + "kMonMonitor" : "Monitor", + "kMonNodect" : "Nodect", + "kMonNone" : "None", + "kMonPreAlarm" : "pre-alarm", + "kMonRecord" : "record", + "kMonitors" : "Monitors", + "kMontage" : "Montage", + "kMontageImageScale" : "Montage image scale", + "kMonth" : "Month", + "kNeedToKnow" : "I need to know your ZoneMinder login and path details to get started", + "kNegotiatingStreamAuth" : "negotiating stream authentication", + "kNews" : "News", + "kNext" : "Next", + "kNoEvents" : "No events to display", + "kNoMonitors" : "No monitors to display", + "kOff" : "off", + "kOn" : "on", + "kOnTapNavigate" : "on tap, navigate to", + "kOnlyUseWebSocket" : "only use websockets", + "kPTZNotReady" : "Not ready for PTZ", + "kPTZnotConfigured" : "PTZ not configured for this monitor", + "kPassword" : "password", + "kPathToCgi" : "path to cgi-bin", + "kPaused" : "paused", + "kPersistHidden" : "Persist hidden monitors", + "kPinProtect" : "PIN Protect", + "kPleaseCheckCredentials" : "Please check your credentials", + "kPleaseSave" : "Please Save", + "kPleaseTryAgain" : "please try again", + "kPleaseWait" : "please wait", + "kPortalUrl" : "ZM portal url", + "kPresets" : "presets", + "kPrev" : "Prev", + "kProfileChangeNotification" : "You have changed from {{oldName}} to {{newName}}. Please save this profile first", + "kProtect" : "protect", + "kPullToReload" : "pull to reload data", + "kReconfirmPin" : "Reconfirm PIN", + "kRecordingProgress" : "recording in progress", + "kRefresh" : "Refresh", + "kReportEvents" : "report events", + "kReportedVersion" : "Reported Version", + "kReset" : "Reset", + "kResolution" : "Resolution", + "kRestart" : "Restart", + "kResumeDelay" : "resume delay", + "kSave" : "Save", + "kSavingSnapshot" : "saving snapshot", + "kScore" : "score", + "kScrub" : "Scrub", + "kSearch" : "search", + "kSec" : "sec", + "kSelectFallback" : "Select fallback", + "kSendingPTZ" : "Sending PTZ", + "kSensitiveBody" : "will modify the logs when creating the final output to remove sensitive data like urls and passwords. However it is eventually your responsibility to make sure there is no sensitive data in the logs. Please make sure you review and edit the logs before you send it out", + "kSensitiveTitle" : "Sensitive Information", + "kServerAdd" : "Add", + "kServerEmptyError" : "Server Name cannot be empty", + "kServerName" : "Server Name", + "kSettings" : "Settings", + "kSettingsSaved" : "Settings Saved", + "kShowAlarmedEvents" : "Show alarmed events", + "kShowAllEvents" : "Show all events", + "kShowing" : "Showing", + "kShowingEvent" : "showing event", + "kSpeed" : "speed", + "kStart" : "Start", + "kStatus" : "Status", + "kStop" : "Stop", + "kSuccess" : "Success", + "kSwipeToChangeMon" : "Swipe to change monitors", + "kSystemStatus" : "System Status", + "kThanksForUsing" : "Thanks for using", + "kTimeline" : "Timeline", + "kTimelineControlDisplay" : "tap:view event, double-tap:view frame graph", + "kTimelineMessage" : "double-tap exits. touch/mouse-over and drag over items to see frames", + "kTimelineOnlyDisplaying1" : "only displaying last {{maxItemsVal}} events", + "kTitleNotLoggedIn" : "Not logged in", + "kTitleNotLoggedInBody" : "It doesn't look like you are logged in. For detection to work, you must fill in your login details, portal URL and then tap on Save. Then come back to this feature.", + "kTitlePortalNotConfigured" : "Portal not configured", + "kTo" : "to", + "kToDate" : "To Date", + "kToTime" : "To Time", + "kToastSearchingPage" : "searching page ", + "kType" : "type", + "kUnknown" : "(unknown)", + "kUseSSL" : "Use SSL", + "kUseZmAuth" : "use ZM authentication", + "kUserName" : "user name", + "kVersion" : "Version", + "kVersionIncompatible" : "I am incompatible with your ZoneMinder version", + "kWarningLargeTimeline" : "A large value can affect timeline performance. If you find timeline performance slow, try reducing the value to 200 and work your way up from there.", + "kWeek" : "Week", + "kWelcomeWizard" : "Welcome to zmWizard", + "kWizAuthText1" : "Confused? ZM Auth is the authentication used when you enable OPT_USE_AUTH in the ZM console options screen.", + "kWizAuthText2" : "Basic Auth is when you configure a username and password in your webserver. If you are using LDAP authentication, its likely basic auth.", + "kWizBasicAuth" : "I use basic authentication", + "kWizConfigPain" : "Configuring ZoneMinder can be a pain. Let's see if zmWizard can help.", + "kWizGotoLogin" : "Go to Login Screen", + "kWizNextStep1" : "Once auto-detection is over, you could either", + "kWizNextStep2" : "Go back to previous steps and re-do", + "kWizNextStep3" : "Go to the login screen with these findings auto filled in", + "kWizPasswdNote" : "note: if your password has #?@& in it, the wizard will fail cgi detection. Its best if you temporarily change the password to a simple one, run the wizard and then change it back later", + "kWizPortalAuth" : "Portal Authentication", + "kWizPortalText" : "Lets talk about how you have configured authentication If you have enabled authentication, toggle this button", + "kWizPortalTip" : "Confused? You can easily find out your portal URL by noting down the url you see on your browser when accessing the ZoneMinder Console.", + "kWizPortalUrl" : "What is your Zoneminder portal url?", + "kWizResults" : "Results of auto-detection", + "kWizTip" : "Tip", + "kWizUseAuth" : "I use authentication", + "kWizZMAuth" : "I use ZM authentication", + "kWizard" : "Wizard", + "kWorkingOnGraph" : "working on graph data", + "kZMSettingsFor" : "ZoneMinder settings for", + "kZMUpgradeNeeded" : "ZoneMinder upgrade needed" }
\ No newline at end of file diff --git a/www/templates/events-modal.html b/www/templates/events-modal.html index 63c31092..238b6cb6 100644 --- a/www/templates/events-modal.html +++ b/www/templates/events-modal.html @@ -109,7 +109,7 @@ <div id="flyoutmenu" style="position:absolute;bottom:100px;left:10px"> <ul> <li ng-if="defaultVideo==''"> - <a href="" ng-click="toggleGapless()"> <i class="ion-ios-loop-strong"></i>-{{loginData.gapless?"on":"off"}}</a> + <a href="" ng-click="toggleGapless()"> <i class="ion-ios-loop-strong"></i>-{{loginData.gapless? ('kOn' | translate): ('kOff' | translate)}}</a> </li> <li ng-if="defaultVideo==''"> |
