summaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
Diffstat (limited to 'www')
-rw-r--r--www/js/BookmarkCtrl.js97
-rw-r--r--www/js/DataModel.js607
-rw-r--r--www/js/DevOptionsCtrl.js4
-rw-r--r--www/js/EventCtrl.js482
-rw-r--r--www/js/EventModalCtrl.js122
-rw-r--r--www/js/EventServer.js26
-rw-r--r--www/js/EventServerSettingsCtrl.js52
-rw-r--r--www/js/EventsGraphsCtrl.js24
-rw-r--r--www/js/FirstUseCtrl.js8
-rw-r--r--www/js/LogCtrl.js10
-rw-r--r--www/js/LoginCtrl.js298
-rw-r--r--www/js/MenuController.js314
-rw-r--r--www/js/MomentCtrl.js26
-rw-r--r--www/js/MonitorCtrl.js68
-rw-r--r--www/js/MonitorModalCtrl.js569
-rw-r--r--www/js/MontageCtrl.js83
-rw-r--r--www/js/NewsCtrl.js4
-rw-r--r--www/js/PortalLoginCtrl.js26
-rw-r--r--www/js/StateCtrl.js12
-rw-r--r--www/js/TimelineCtrl.js113
-rw-r--r--www/js/WizardCtrl.js52
-rwxr-xr-xwww/js/app.js509
-rw-r--r--www/js/ionicUtils.js2
-rw-r--r--www/lang/locale-pl.json4
-rw-r--r--www/templates/bookmark.html34
-rw-r--r--www/templates/devoptions.html13
-rw-r--r--www/templates/events-date-time-filter.html2
-rw-r--r--www/templates/events-graphs.html12
-rw-r--r--www/templates/events-modal.html34
-rw-r--r--www/templates/events-popover.html9
-rw-r--r--www/templates/events.html100
-rw-r--r--www/templates/eventserversettings.html14
-rw-r--r--www/templates/first-use.html27
-rw-r--r--www/templates/important_message.html22
-rw-r--r--www/templates/invalidapi.html21
-rw-r--r--www/templates/log.html6
-rw-r--r--www/templates/login.html12
-rw-r--r--www/templates/lowversion.html16
-rw-r--r--www/templates/menu.html32
-rw-r--r--www/templates/moment-popover.html6
-rw-r--r--www/templates/moment.html10
-rw-r--r--www/templates/monitors-modal.html58
-rw-r--r--www/templates/monitors.html31
-rw-r--r--www/templates/montage-history.html38
-rw-r--r--www/templates/montage.html58
-rw-r--r--www/templates/refresh.html8
-rw-r--r--www/templates/state.html11
-rw-r--r--www/templates/timeline-modal.html6
-rw-r--r--www/templates/timeline-popover.html6
-rw-r--r--www/templates/timeline.html11
-rw-r--r--www/templates/wizard.html48
-rw-r--r--www/templates/zm-portal-login.html12
52 files changed, 2116 insertions, 2053 deletions
diff --git a/www/js/BookmarkCtrl.js b/www/js/BookmarkCtrl.js
index 9472f8d3..b84041c7 100644
--- a/www/js/BookmarkCtrl.js
+++ b/www/js/BookmarkCtrl.js
@@ -27,7 +27,7 @@ angular.module('zmApp.controllers').controller('zmApp.BookmarkCtrl', ['$scope',
}
};
-
+
//-------------------------------------------------------------------------
// Lets make sure we set screen dim properly as we enter
// The problem is we enter other states before we leave previous states
@@ -41,54 +41,51 @@ angular.module('zmApp.controllers').controller('zmApp.BookmarkCtrl', ['$scope',
$scope.bookmarks = [];
-
-
- $scope.bookmarks.push(
- {
- text:"Change State",
- state:"app.state",
- params: {
- shortcut: {
- fn:"selectCustomState",
- fnargs:null,
- }
- }
- },
- {
- text:"Stop ZM",
- state:"app.state",
- params: {
- shortcut: {
- fn:"controlZM",
- fnargs:'stop',
- }
- },
- },
- {
- text:"Start ZM",
- state:"app.state",
- params: {
- shortcut: {
- fn:"controlZM",
- fnargs:'start',
- }
- },
- },
- {
- text:"Restart ZM",
- state:"app.state",
- params: {
- shortcut: {
- fn:"controlZM",
- fnargs:'restart',
- }
- },
- }
- );
-
- $scope.bookmarks.push({text:""});
-
-
+
+
+ $scope.bookmarks.push({
+ text: "Change State",
+ state: "app.state",
+ params: {
+ shortcut: {
+ fn: "selectCustomState",
+ fnargs: null,
+ }
+ }
+ }, {
+ text: "Stop ZM",
+ state: "app.state",
+ params: {
+ shortcut: {
+ fn: "controlZM",
+ fnargs: 'stop',
+ }
+ },
+ }, {
+ text: "Start ZM",
+ state: "app.state",
+ params: {
+ shortcut: {
+ fn: "controlZM",
+ fnargs: 'start',
+ }
+ },
+ }, {
+ text: "Restart ZM",
+ state: "app.state",
+ params: {
+ shortcut: {
+ fn: "controlZM",
+ fnargs: 'restart',
+ }
+ },
+ });
+
+ $scope.bookmarks.push({
+ text: ""
+ });
+
+
});
$scope.action = function (item) {
@@ -98,7 +95,7 @@ angular.module('zmApp.controllers').controller('zmApp.BookmarkCtrl', ['$scope',
disableAnimate: true,
expire: 300
});
- console.log ("GOIN WITH "+ JSON.stringify(item.params));
+ console.log("GOIN WITH " + JSON.stringify(item.params));
$state.go(item.state, item.params);
};
diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index 575ad982..6dbd5958 100644
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -28,7 +28,7 @@ angular.module('zmApp.controllers')
var monitors = [];
var multiservers = [];
-
+
var migrationComplete = false;
var tz = "";
@@ -43,6 +43,10 @@ angular.module('zmApp.controllers')
value: 'ar'
},
{
+ text: 'Bosnian',
+ value: 'ba'
+ },
+ {
text: 'Deutsch',
value: 'de'
},
@@ -201,9 +205,9 @@ angular.module('zmApp.controllers')
* @returns
*/
function setCordovaHttpOptions() {
-
+
if (loginData.isUseBasicAuth) {
- debug ("Cordova HTTP: configuring basic auth");
+ debug("Cordova HTTP: configuring basic auth");
cordova.plugin.http.useBasicAuth(loginData.basicAuthUser, loginData.basicAuthPassword);
}
@@ -211,9 +215,9 @@ angular.module('zmApp.controllers')
//alert("Enabling insecure SSL");
log(">>>> Disabling strict SSL checking (turn off in Dev Options if you can't connect)");
- cordova.plugin.http.setSSLCertMode('nocheck', function() {
- debug('--> SSL is permissive, will allow any certs. Use at your own risk.');
- }, function() {
+ cordova.plugin.http.setSSLCertMode('nocheck', function () {
+ debug('--> SSL is permissive, will allow any certs. Use at your own risk.');
+ }, function () {
console.log('-->Error setting SSL permissive');
});
@@ -317,30 +321,30 @@ angular.module('zmApp.controllers')
var myurl = apiurl + '/configs/viewByName/ZM_MIN_STREAMING_PORT.json';
$http.get(myurl)
.then(function (data) {
- data = data.data;
- //console.log ("GOT " + JSON.stringify(data));
+ data = data.data;
+ //console.log ("GOT " + JSON.stringify(data));
- if (data.config && data.config.Value) {
- configParams.ZM_MIN_STREAMING_PORT = data.config.Value;
- setCurrentServerMultiPortSupported(true);
- log("Got min streaming port value of: " + configParams.ZM_MIN_STREAMING_PORT);
- } else {
- setCurrentServerMultiPortSupported(false);
- log("ZM_MIN_STREAMING_PORT not configure, disabling");
- configParams.ZM_MIN_STREAMING_PORT = 0;
- }
+ if (data.config && data.config.Value) {
+ configParams.ZM_MIN_STREAMING_PORT = data.config.Value;
+ setCurrentServerMultiPortSupported(true);
+ log("Got min streaming port value of: " + configParams.ZM_MIN_STREAMING_PORT);
+ } else {
+ setCurrentServerMultiPortSupported(false);
+ log("ZM_MIN_STREAMING_PORT not configure, disabling");
+ configParams.ZM_MIN_STREAMING_PORT = 0;
+ }
- d.resolve(configParams.ZM_MIN_STREAMING_PORT);
- return (d.promise);
- },
- function (err) {
- configParams.ZM_MIN_STREAMING_PORT = 0;
- log("ZM_MIN_STREAMING_PORT not supported");
- setCurrentServerMultiPortSupported(false);
- d.resolve(configParams.ZM_MIN_STREAMING_PORT);
- return (d.promise);
- });
+ d.resolve(configParams.ZM_MIN_STREAMING_PORT);
+ return (d.promise);
+ },
+ function (err) {
+ configParams.ZM_MIN_STREAMING_PORT = 0;
+ log("ZM_MIN_STREAMING_PORT not supported");
+ setCurrentServerMultiPortSupported(false);
+ d.resolve(configParams.ZM_MIN_STREAMING_PORT);
+ return (d.promise);
+ });
} else {
log("sending Cached ZM_MIN_STREAMING_PORT " +
configParams.ZM_MIN_STREAMING_PORT);
@@ -703,8 +707,8 @@ angular.module('zmApp.controllers')
if ($rootScope.platformOS == 'desktop')
$state.go(state, p1, p2);
else
- $state.go(state, p1, p2);
- // $ionicNativeTransitions.stateGo(state, p1, p2);
+ $state.go(state, p1, p2);
+ // $ionicNativeTransitions.stateGo(state, p1, p2);
},
// used when an empty server profile is created
@@ -839,10 +843,10 @@ angular.module('zmApp.controllers')
return d.promise;
}
- /* window.cordova.plugin.cloudsettings.enableDebug(function(){
- console.log("Debug mode enabled");
- });*/
-
+ /* window.cordova.plugin.cloudsettings.enableDebug(function(){
+ console.log("Debug mode enabled");
+ });*/
+
log("CloudSync: Syncing with cloud if enabled...");
var sgl = "";
@@ -865,19 +869,18 @@ angular.module('zmApp.controllers')
log("user profile encrypted, decoding...");
var bytes = CryptoJS.AES.decrypt(sgl.toString(), zm.cipherKey);
decodedSgl = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
-
- }
- else {
+
+ } else {
decodedSgl = sgl;
}
-
+
var loadedData = decodedSgl[dsn];
-
+
if (!isEmpty(loadedData)) {
-
+
if (!loadedData.saveToCloud) {
- log ("Cloud sync is disabled, exiting...");
+ log("Cloud sync is disabled, exiting...");
d.resolve(true);
return d.promise;
}
@@ -894,7 +897,7 @@ angular.module('zmApp.controllers')
return d.promise;
},
function (err) {
- log("error syncing cloud data..."+err);
+ log("error syncing cloud data..." + err);
d.resolve(true);
return d.promise;
}, true);
@@ -905,14 +908,14 @@ angular.module('zmApp.controllers')
log("Did not find a valid local configuration, trying cloud...");
window.cordova.plugin.cloudsettings.exists(function (exists) {
-
+
if (exists) {
- log ("A cloud configuration has been found");
+ log("A cloud configuration has been found");
window.cordova.plugin.cloudsettings.load(function (cloudData) {
- console.log ("CLOUD DATA FOUND"+JSON.stringify(cloudData));
- debug ("Cloud data retrieved is:"+JSON.stringify(cloudData));
+ console.log("CLOUD DATA FOUND" + JSON.stringify(cloudData));
+ debug("Cloud data retrieved is:" + JSON.stringify(cloudData));
if (cloudData && cloudData.defaultServerName && cloudData.serverGroupList) {
- log("retrieved a valid cloud config with a defaultServerName of:"+cloudData.defaultServerName);
+ log("retrieved a valid cloud config with a defaultServerName of:" + cloudData.defaultServerName);
log("replacing local DB with cloud...");
localforage.setItem('isFirstUse', false)
.then(function () {
@@ -1212,7 +1215,7 @@ angular.module('zmApp.controllers')
}
-
+
if (typeof loginData.vibrateOnPush == 'undefined') {
debug("vibrate on push not found, setting to true");
@@ -1348,7 +1351,7 @@ angular.module('zmApp.controllers')
}
-
+
if (typeof loginData.enableThumbs == 'undefined') {
@@ -1426,7 +1429,7 @@ angular.module('zmApp.controllers')
}
-
+
if (typeof loginData.montageReviewCollapse == 'undefined') {
@@ -1444,7 +1447,7 @@ angular.module('zmApp.controllers')
log("defaultServer configuration NOT found. Keeping login at defaults");
}
-
+
// from local forage
if (window.cordova) setCordovaHttpOptions();
@@ -1710,17 +1713,17 @@ angular.module('zmApp.controllers')
// returns API version or none
//-------------------------------------------------------
getAPIversion: function () {
-
+
var d = $q.defer();
var apiurl = loginData.apiurl + '/host/getVersion.json';
- debug("getAPIversion called with "+apiurl);
+ debug("getAPIversion called with " + apiurl);
$http.get(apiurl)
.then(function (success) {
if (success.data.version) {
// console.log ("API VERSION RETURNED: " + JSON.stringify(success));
$rootScope.apiValid = true;
setCurrentServerVersion(success.data.version);
- debug("getAPI version succeded with "+success.data.version);
+ debug("getAPI version succeded with " + success.data.version);
d.resolve(success.data.version);
} else {
debug("Setting APIValid to false as API version was not retrieved");
@@ -1836,7 +1839,7 @@ angular.module('zmApp.controllers')
d.resolve(configParams.ZM_EVENT_IMAGE_DIGITS);
return (d.promise);
- },function (err) {
+ }, function (err) {
log("Error retrieving ZM_EVENT_IMAGE_DIGITS" + JSON.stringify(err), "error");
log("Taking a guess, setting ZM_EVENT_IMAGE_DIGITS to 5");
// FIXME: take a plunge and keep it at 5?
@@ -1868,17 +1871,17 @@ angular.module('zmApp.controllers')
$http.get(myurl)
.then(function (data) {
- data = data.data;
- //console.log (">>>> GOT: "+JSON.stringify(data));
- configParams.ZM_PATH_ZMS = data.config.Value;
- d.resolve(configParams.ZM_PATH_ZMS);
- return (d.promise);
- },
- function (error) {
- log("Can't retrieving ZM_PATH_ZMS: " + JSON.stringify(error));
- d.resolve("");
- return (d.promise);
- });
+ data = data.data;
+ //console.log (">>>> GOT: "+JSON.stringify(data));
+ configParams.ZM_PATH_ZMS = data.config.Value;
+ d.resolve(configParams.ZM_PATH_ZMS);
+ return (d.promise);
+ },
+ function (error) {
+ log("Can't retrieving ZM_PATH_ZMS: " + JSON.stringify(error));
+ d.resolve("");
+ return (d.promise);
+ });
return (d.promise);
},
@@ -1918,7 +1921,7 @@ angular.module('zmApp.controllers')
req = req + "&auth=" + myauthtoken;
// req = req + "&command=17";
- debug("DataModel: Pausing live stream ck:" + ck+" for "+name + " url:"+url);
+ debug("DataModel: Pausing live stream ck:" + ck + " for " + name + " url:" + url);
return $http.get(req + "&command=1")
.then(
function (s) {
@@ -1942,7 +1945,7 @@ angular.module('zmApp.controllers')
req = req + "&auth=" + myauthtoken;
// req = req + "&command=17";
- debug("DataModel: Resuming live stream ck:" + ck+ " for "+name);
+ debug("DataModel: Resuming live stream ck:" + ck + " for " + name);
return $http.get(req + "&command=2")
.then(
function (s) {
@@ -2062,75 +2065,75 @@ angular.module('zmApp.controllers')
debug("Monitor URL to fetch is:" + myurl);
$http.get(myurl /*,{timeout:15000}*/ )
.then(function (data) {
- // console.log("HTTP success got " + JSON.stringify(data.monitors));
- data = data.data;
- monitors = data.monitors;
+ // console.log("HTTP success got " + JSON.stringify(data.monitors));
+ data = data.data;
+ monitors = data.monitors;
- if ($rootScope.authSession == 'undefined') {
- log("Now that we have monitors, lets get AuthKey...");
- getAuthKey(monitors[0].Monitor.Id, (Math.floor((Math.random() * 999999) + 1)).toString());
- }
- monitors.sort(function (a, b) {
- return parseInt(a.Monitor.Sequence) - parseInt(b.Monitor.Sequence);
- });
- //console.log("promise resolved inside HTTP success");
- monitorsLoaded = 1;
-
- reloadMonitorDisplayStatus();
-
- debug("Inside getMonitors, will also regen connkeys");
- debug("Now trying to get multi-server data, if present");
- $http.get(apiurl + "/servers.json")
- .then(function (data) {
- data = data.data;
- // We found a server list API, so lets make sure
- // we get the hostname as it will be needed for playback
- log("multi server list loaded" + JSON.stringify(data));
- multiservers = data.servers;
-
- var multiserver_scheme = "http://";
- //console.log ("PORTAL URL IS:"+loginData.url);
- if (loginData.url && (loginData.url.toLowerCase().indexOf("https://") != -1)) {
- debug ("Portal scheme is https, will use https for any multi-server");
- multiserver_scheme = "https://";
- }
- debug ("multi-server protocol will be:"+multiserver_scheme);
-
- for (var i = 0; i < monitors.length; i++) {
-
- // make them all show for now
- monitors[i].Monitor.listDisplay = 'show';
- monitors[i].Monitor.isAlarmed = false;
- monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
- monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
-
- var serverFound = false;
- for (var j = 0; j < multiservers.length; j++) {
- //console.log ("Comparing " + multiservers[j].Server.Id + " AND " + monitors[i].Monitor.ServerId);
- if (multiservers[j].Server.Id == monitors[i].Monitor.ServerId) {
- //console.log ("Found match");
- serverFound = true;
- break;
+ if ($rootScope.authSession == 'undefined') {
+ log("Now that we have monitors, lets get AuthKey...");
+ getAuthKey(monitors[0].Monitor.Id, (Math.floor((Math.random() * 999999) + 1)).toString());
+ }
+ monitors.sort(function (a, b) {
+ return parseInt(a.Monitor.Sequence) - parseInt(b.Monitor.Sequence);
+ });
+ //console.log("promise resolved inside HTTP success");
+ monitorsLoaded = 1;
+
+ reloadMonitorDisplayStatus();
+
+ debug("Inside getMonitors, will also regen connkeys");
+ debug("Now trying to get multi-server data, if present");
+ $http.get(apiurl + "/servers.json")
+ .then(function (data) {
+ data = data.data;
+ // We found a server list API, so lets make sure
+ // we get the hostname as it will be needed for playback
+ log("multi server list loaded" + JSON.stringify(data));
+ multiservers = data.servers;
+
+ var multiserver_scheme = "http://";
+ //console.log ("PORTAL URL IS:"+loginData.url);
+ if (loginData.url && (loginData.url.toLowerCase().indexOf("https://") != -1)) {
+ debug("Portal scheme is https, will use https for any multi-server");
+ multiserver_scheme = "https://";
}
+ debug("multi-server protocol will be:" + multiserver_scheme);
- }
- if (serverFound) {
- if (!/^https?:\/\//i.test(multiservers[j].Server.Hostname)) {
- multiservers[j].Server.Hostname = multiserver_scheme + multiservers[j].Server.Hostname;
- }
+ for (var i = 0; i < monitors.length; i++) {
+
+ // make them all show for now
+ monitors[i].Monitor.listDisplay = 'show';
+ monitors[i].Monitor.isAlarmed = false;
+ monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
- debug("Monitor " + monitors[i].Monitor.Id + " has a recording server hostname of " + multiservers[j].Server.Hostname);
+ var serverFound = false;
+ for (var j = 0; j < multiservers.length; j++) {
+ //console.log ("Comparing " + multiservers[j].Server.Id + " AND " + monitors[i].Monitor.ServerId);
+ if (multiservers[j].Server.Id == monitors[i].Monitor.ServerId) {
+ //console.log ("Found match");
+ serverFound = true;
+ break;
+ }
+
+ }
+ if (serverFound) {
+ if (!/^https?:\/\//i.test(multiservers[j].Server.Hostname)) {
+ multiservers[j].Server.Hostname = multiserver_scheme + multiservers[j].Server.Hostname;
+ }
+ debug("Monitor " + monitors[i].Monitor.Id + " has a recording server hostname of " + multiservers[j].Server.Hostname);
- // Now here is the logic, I need to retrieve serverhostname,
- // and slap on the host protocol and path. Meh.
- var p = URI.parse(loginData.streamingurl);
- var s = URI.parse(multiservers[j].Server.Hostname);
+ // Now here is the logic, I need to retrieve serverhostname,
+ // and slap on the host protocol and path. Meh.
- /* if (!p.port && !isNaN(p.path)) {
+ var p = URI.parse(loginData.streamingurl);
+ var s = URI.parse(multiservers[j].Server.Hostname);
+
+ /* if (!p.port && !isNaN(p.path)) {
debug ("Portal: port path reversed?");
var tp = p.port;
p.port = p.path;
@@ -2144,174 +2147,174 @@ angular.module('zmApp.controllers')
s.path = tp;
}
*/
-
- debug("recording server parsed is " + JSON.stringify(s));
- debug("portal parsed is " + JSON.stringify(p));
- var st = "";
- var baseurl = "";
- var streamingurl = "";
+ debug("recording server parsed is " + JSON.stringify(s));
+ debug("portal parsed is " + JSON.stringify(p));
+ var st = "";
+ var baseurl = "";
+ var streamingurl = "";
- st += (s.scheme ? s.scheme : p.scheme) + "://"; // server scheme overrides
+ st += (s.scheme ? s.scheme : p.scheme) + "://"; // server scheme overrides
- // if server doesn't have a protocol, what we want is in path
- if (!s.host) {
- s.host = s.path;
- s.path = undefined;
- }
- st += s.host;
+ // if server doesn't have a protocol, what we want is in path
+ if (!s.host) {
+ s.host = s.path;
+ s.path = undefined;
+ }
- //console.log ("STEP 1: ST="+st);
+ st += s.host;
- if (zmsPort <= 0 || loginData.disableSimulStreaming) {
- if (p.port || s.port) {
- st += (s.port ? ":" + s.port : ":" + p.port);
- streamingurl = st;
- //console.log ("STEP 2 no ZMS: ST="+st);
+ //console.log ("STEP 1: ST="+st);
- }
+ if (zmsPort <= 0 || loginData.disableSimulStreaming) {
+ if (p.port || s.port) {
+ st += (s.port ? ":" + s.port : ":" + p.port);
+ streamingurl = st;
+ //console.log ("STEP 2 no ZMS: ST="+st);
- } else {
- var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
- streamingurl = st + ':' + sport;
+ }
- if (p.port || s.port)
- st += (s.port ? ":" + s.port : ":" + p.port);
- //console.log ("STEP 2: ST="+st);
+ } else {
+ var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
+ streamingurl = st + ':' + sport;
- }
+ if (p.port || s.port)
+ st += (s.port ? ":" + s.port : ":" + p.port);
+ //console.log ("STEP 2: ST="+st);
+ }
- baseurl = st;
- controlURL = st;
- st += (s.path ? s.path : p.path);
- streamingurl += (s.path ? s.path : p.path);
+ baseurl = st;
+ controlURL = st;
- //console.log ("STEP 3: ST="+st);
+ st += (s.path ? s.path : p.path);
+ streamingurl += (s.path ? s.path : p.path);
+ //console.log ("STEP 3: ST="+st);
- //console.log ("----------STREAMING URL PARSED AS " + st);
- monitors[i].Monitor.streamingURL = st;
- monitors[i].Monitor.baseURL = baseurl;
- monitors[i].Monitor.controlURL = controlURL;
- //console.log ("** Streaming="+st+" **base="+baseurl);
- // starting 1.30 we have fid=xxx mode to return images
- monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
- // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
+ //console.log ("----------STREAMING URL PARSED AS " + st);
- //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL );
- //debug ("Base URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.baseURL );
+ monitors[i].Monitor.streamingURL = st;
+ monitors[i].Monitor.baseURL = baseurl;
+ monitors[i].Monitor.controlURL = controlURL;
+ //console.log ("** Streaming="+st+" **base="+baseurl);
+ // starting 1.30 we have fid=xxx mode to return images
+ monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
+ // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
- } else {
- //monitors[i].Monitor.listDisplay = 'show';
- monitors[i].Monitor.isAlarmed = false;
- monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
- monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL );
+ //debug ("Base URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.baseURL );
- var st2 = loginData.streamingurl;
+ } else {
+ //monitors[i].Monitor.listDisplay = 'show';
+ monitors[i].Monitor.isAlarmed = false;
+ monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
- if (zmsPort > 0 && !loginData.disableSimulStreaming) {
- // we need to insert minport
- st2 = "";
- var p2 = URI.parse(loginData.streamingurl);
- var p3 = URI.parse(loginData.url);
- st2 += p2.scheme + "://";
- if (!p2.host) {
- p2.host = p2.path;
- p2.path = undefined;
- }
- st2 += p2.host;
- var sport2 = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
- st2 = st2 + ':' + sport2;
+ var st2 = loginData.streamingurl;
- controlURL = st2;
+ if (zmsPort > 0 && !loginData.disableSimulStreaming) {
+ // we need to insert minport
+ st2 = "";
+ var p2 = URI.parse(loginData.streamingurl);
+ var p3 = URI.parse(loginData.url);
+ st2 += p2.scheme + "://";
+ if (!p2.host) {
+ p2.host = p2.path;
+ p2.path = undefined;
+ }
+ st2 += p2.host;
+ var sport2 = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
+ st2 = st2 + ':' + sport2;
- if (p2.path) st2 += p2.path;
- if (p3.path) controlURL += p3.path;
- }
+ controlURL = st2;
- monitors[i].Monitor.streamingURL = st2;
- monitors[i].Monitor.controlURL = controlURL;
- //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL );
- //console.log ("NO SERVER MATCH CONSTRUCTED STREAMING PATH="+st2);
- monitors[i].Monitor.baseURL = loginData.url;
- monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
-
- // but now check if forced path
- if (loginData.forceImageModePath) {
- debug("Overriding, setting image mode to true as you have requested force enable");
- monitors[i].Monitor.imageMode = 'path';
- }
+ if (p2.path) st2 += p2.path;
+ if (p3.path) controlURL += p3.path;
+ }
- // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
- }
- }
- // now get packery hide if applicable
- reloadMonitorDisplayStatus();
- d.resolve(monitors);
- },
- function (err) {
- log("multi server list loading error");
- multiservers = [];
-
- for (var i = 0; i < monitors.length; i++) {
- //monitors[i].Monitor.listDisplay = 'show';
- monitors[i].Monitor.isAlarmed = false;
- monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
- monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
- var st = loginData.streamingurl;
- if (zmsPort > 0) {
- // we need to insert minport
- st = "";
- var p = URI.parse(loginData.streamingurl);
- st += p.scheme + "://";
- if (!p.host) {
- p.host = p.path;
- p.path = undefined;
- }
- st += p.host;
- var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
- st = st + ':' + sport;
- if (p.path) st += p.path;
+ monitors[i].Monitor.streamingURL = st2;
+ monitors[i].Monitor.controlURL = controlURL;
+ //debug ("Streaming URL for Monitor " + monitors[i].Monitor.Id + " is " + monitors[i].Monitor.streamingURL );
+ //console.log ("NO SERVER MATCH CONSTRUCTED STREAMING PATH="+st2);
+ monitors[i].Monitor.baseURL = loginData.url;
+ monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
+
+ // but now check if forced path
+ if (loginData.forceImageModePath) {
+ debug("Overriding, setting image mode to true as you have requested force enable");
+ monitors[i].Monitor.imageMode = 'path';
+ }
+ // debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
+ }
+ }
+ // now get packery hide if applicable
+ reloadMonitorDisplayStatus();
+ d.resolve(monitors);
+ },
+ function (err) {
+ log("multi server list loading error");
+ multiservers = [];
+
+ for (var i = 0; i < monitors.length; i++) {
+ //monitors[i].Monitor.listDisplay = 'show';
+ monitors[i].Monitor.isAlarmed = false;
+ monitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ monitors[i].Monitor.rndKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ var st = loginData.streamingurl;
+ if (zmsPort > 0) {
+ // we need to insert minport
+ st = "";
+ var p = URI.parse(loginData.streamingurl);
+ st += p.scheme + "://";
+ if (!p.host) {
+ p.host = p.path;
+ p.path = undefined;
+ }
+ st += p.host;
+ var sport = parseInt(zmsPort) + parseInt(monitors[i].Monitor.Id);
+ st = st + ':' + sport;
+ if (p.path) st += p.path;
- }
- monitors[i].Monitor.streamingURL = st;
- // console.log ("CONSTRUCTED STREAMING PATH="+st);
- monitors[i].Monitor.baseURL = loginData.url;
+ }
- monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
- //debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
+ monitors[i].Monitor.streamingURL = st;
+ // console.log ("CONSTRUCTED STREAMING PATH="+st);
+ monitors[i].Monitor.baseURL = loginData.url;
- }
- d.resolve(monitors);
+ monitors[i].Monitor.imageMode = (versionCompare($rootScope.apiVersion, "1.30") == -1) ? "path" : "fid";
+ //debug("API " + $rootScope.apiVersion + ": Monitor " + monitors[i].Monitor.Id + " will use " + monitors[i].Monitor.imageMode + " for direct image access");
- });
+ }
+ d.resolve(monitors);
- $ionicLoading.hide();
- log("Monitor load was successful, loaded " + monitors.length + " monitors");
+ });
- },
- function (err) {
- //console.log("HTTP Error " + err);
- log("Monitor load failed " + JSON.stringify(err), "error");
- // To keep it simple for now, I'm translating an error
- // to imply no monitors could be loaded. FIXME: conver to proper error
- monitors = [];
- //console.log("promise resolved inside HTTP fail");
- displayBanner('error', ['error retrieving monitor list', 'please try again']);
- d.resolve(monitors);
- $ionicLoading.hide();
- monitorsLoaded = 0;
- });
+ $ionicLoading.hide();
+ log("Monitor load was successful, loaded " + monitors.length + " monitors");
+
+ },
+ function (err) {
+ //console.log("HTTP Error " + err);
+ log("Monitor load failed " + JSON.stringify(err), "error");
+ // To keep it simple for now, I'm translating an error
+ // to imply no monitors could be loaded. FIXME: conver to proper error
+ monitors = [];
+ //console.log("promise resolved inside HTTP fail");
+ displayBanner('error', ['error retrieving monitor list', 'please try again']);
+ d.resolve(monitors);
+ $ionicLoading.hide();
+ monitorsLoaded = 0;
+ });
});
return d.promise;
@@ -2337,7 +2340,7 @@ angular.module('zmApp.controllers')
url: myurl,
method: 'GET',
transformResponse: undefined,
- responseType:'text',
+ responseType: 'text',
})
// $http.get(myurl)
.then(function (textsucc) {
@@ -2539,25 +2542,25 @@ angular.module('zmApp.controllers')
});
//var myurl = (monitorId == 0) ? apiurl + "/events.json?page=1" : apiurl + "/events/index/MonitorId:" + monitorId + ".json?page=1";
-
+
$http.get(myurl)
.then(function (data) {
- data = data.data;
- $ionicLoading.hide();
- //console.log ("**** EVENTS PAGES I GOT "+JSON.stringify(data));
- //console.log("**** PAGE COUNT IS " + data.pagination.pageCount);
- d.resolve(data.pagination);
- return d.promise;
- },
- function (error) {
- $ionicLoading.hide();
- // console.log("*** ERROR GETTING TOTAL PAGES ***");
- log("Error retrieving page count of events " + JSON.stringify(error), "error");
- displayBanner('error', ['error retrieving event page count', 'please try again']);
+ data = data.data;
+ $ionicLoading.hide();
+ //console.log ("**** EVENTS PAGES I GOT "+JSON.stringify(data));
+ //console.log("**** PAGE COUNT IS " + data.pagination.pageCount);
+ d.resolve(data.pagination);
+ return d.promise;
+ },
+ function (error) {
+ $ionicLoading.hide();
+ // console.log("*** ERROR GETTING TOTAL PAGES ***");
+ log("Error retrieving page count of events " + JSON.stringify(error), "error");
+ displayBanner('error', ['error retrieving event page count', 'please try again']);
- d.reject(error);
- return d.promise;
- });
+ d.reject(error);
+ return d.promise;
+ });
return d.promise;
},
@@ -2609,10 +2612,10 @@ angular.module('zmApp.controllers')
myurl = myurl + "/AlarmFrames >=:" + (loginData.enableAlarmCount ? loginData.minAlarmCount : 0);
- myurl = myurl + ".json?&sort=StartTime&direction=desc&page="+pageId;
+ myurl = myurl + ".json?&sort=StartTime&direction=desc&page=" + pageId;
-
- debug ("getEvents:"+myurl);
+
+ debug("getEvents:" + myurl);
// Simulated data
// myurl = "https://api.myjson.com/bins/4jx44.json";
@@ -2621,31 +2624,31 @@ angular.module('zmApp.controllers')
$http.get(myurl /*,{timeout:15000}*/ )
.then(function (data) {
- data = data.data;
- if (loadingStr != 'none') $ionicLoading.hide();
- //myevents = data.events;
- myevents = data;
+ data = data.data;
+ if (loadingStr != 'none') $ionicLoading.hide();
+ //myevents = data.events;
+ myevents = data;
-
- d.resolve(myevents);
- return d.promise;
- },
- function (err) {
- if (loadingStr != 'none') $ionicLoading.hide();
- displayBanner('error', ['error retrieving event list', 'please try again']);
- //console.log("HTTP Events error " + err);
- log("Error fetching events for page " + pageId + " Err: " + JSON.stringify(err), "error");
- // I need to reject this as I have infinite scrolling
- // implemented in EventCtrl.js --> and if it does not know
- // it got an error going to the next page, it will get into
- // an infinite loop as we are at the bottom of the list always
-
- d.reject(myevents);
-
-
- return d.promise;
- });
+ d.resolve(myevents);
+ return d.promise;
+
+ },
+ function (err) {
+ if (loadingStr != 'none') $ionicLoading.hide();
+ displayBanner('error', ['error retrieving event list', 'please try again']);
+ //console.log("HTTP Events error " + err);
+ log("Error fetching events for page " + pageId + " Err: " + JSON.stringify(err), "error");
+ // I need to reject this as I have infinite scrolling
+ // implemented in EventCtrl.js --> and if it does not know
+ // it got an error going to the next page, it will get into
+ // an infinite loop as we are at the bottom of the list always
+
+ d.reject(myevents);
+
+
+ return d.promise;
+ });
return d.promise;
},
@@ -2881,7 +2884,7 @@ angular.module('zmApp.controllers')
$http.get(loginData.apiurl + '/host/logout.json', {
timeout: 7000,
transformResponse: undefined,
- // responseType:'text',
+ // responseType:'text',
})
.then(function (s) {
debug("Logout returned... ");
@@ -2926,7 +2929,7 @@ angular.module('zmApp.controllers')
}
})
.then(function (succ) {
- $ionicLoading.hide();
+ $ionicLoading.hide();
d.resolve(true);
return d.promise;
},
diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js
index 7d50aa4e..dab4570b 100644
--- a/www/js/DevOptionsCtrl.js
+++ b/www/js/DevOptionsCtrl.js
@@ -103,12 +103,12 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
if ($scope.loginData.montageResizeSteps < 1) {
$scope.loginData.montageResizeSteps = 1;
- }
+ }
if ($scope.loginData.montageResizeSteps > 50) {
$scope.loginData.montageResizeSteps = 50;
- }
+ }
if ((parseInt($scope.loginData.montageQuality) < zm.safeMontageLimit) ||
(parseInt($scope.loginData.montageQuality) > 100)) {
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index 32367682..90b615a2 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -169,7 +169,7 @@ angular.module('zmApp.controllers')
$scope.id = parseInt($stateParams.id, 10);
if (isNaN($scope.id)) $scope.id = 0;
-
+
$scope.showEvent = $stateParams.playEvent || false;
$scope.monitors = NVRDataModel.getMonitorsNow();
@@ -237,7 +237,7 @@ angular.module('zmApp.controllers')
});
$scope.showSearch = false;
-
+
moreEvents = true;
$scope.viewTitle = {
title: ""
@@ -259,7 +259,7 @@ angular.module('zmApp.controllers')
$http.get(apiurl)
.then(function (data) {},
- function (err) {});
+ function (err) {});
}
@@ -378,126 +378,126 @@ angular.module('zmApp.controllers')
//NVRDataModel.debug ("GETTING EVENTS USING "+$scope.id+" "+nolangFrom+" "+ nolangTo);
-
- NVRDataModel.debug("EventCtrl: grabbing events for: id=" + $scope.id + " Date/Time:" + $rootScope.fromString +
- "-" + $rootScope.toString);
- nolangFrom = "";
- nolangTo = "";
- if ($rootScope.fromString)
- nolangFrom = moment($rootScope.fromString).locale('en').format("YYYY-MM-DD HH:mm:ss");
- if ($rootScope.toString)
- nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss");
-
- NVRDataModel.getEvents($scope.id, currEventsPage, "", nolangFrom, nolangTo)
- .then(function (data) {
- pageLoaded = true;
- //$scope.viewTitle.title = data.pagination.count;
+ NVRDataModel.debug("EventCtrl: grabbing events for: id=" + $scope.id + " Date/Time:" + $rootScope.fromString +
+ "-" + $rootScope.toString);
+ nolangFrom = "";
+ nolangTo = "";
+ if ($rootScope.fromString)
+ nolangFrom = moment($rootScope.fromString).locale('en').format("YYYY-MM-DD HH:mm:ss");
+ if ($rootScope.toString)
+ nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss");
+
+ NVRDataModel.getEvents($scope.id, currEventsPage, "", nolangFrom, nolangTo)
+ .then(function (data) {
- console.log (JSON.stringify(data.pagination));
- if (data.pagination && data.pagination.pageCount)
- maxEventsPage = data.pagination.pageCount;
-
- NVRDataModel.debug ("We have a total of "+maxEventsPage+" and are at page="+currEventsPage);
+ pageLoaded = true;
+ //$scope.viewTitle.title = data.pagination.count;
- // console.log ("WE GOT EVENTS="+JSON.stringify(data));
- var myevents = data.events;
+ console.log(JSON.stringify(data.pagination));
+ if (data.pagination && data.pagination.pageCount)
+ maxEventsPage = data.pagination.pageCount;
- NVRDataModel.debug("EventCtrl: success, got " + myevents.length + " events");
- var loginData = NVRDataModel.getLogin();
+ NVRDataModel.debug("We have a total of " + maxEventsPage + " and are at page=" + currEventsPage);
- //console.log ("-------->MON LEN"+$scope.monitors.length);
+ // console.log ("WE GOT EVENTS="+JSON.stringify(data));
+ var myevents = data.events;
- for (var i = 0; i < myevents.length; i++) {
+ NVRDataModel.debug("EventCtrl: success, got " + myevents.length + " events");
+ var loginData = NVRDataModel.getLogin();
- var idfound = true;
- if (loginData.persistMontageOrder) {
- idfound = false;
- for (var ii = 0; ii < $scope.monitors.length; ii++) {
- if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId && (NVRDataModel.isNotHidden(myevents[i].Event.MonitorId) || showHiddenMonitors)) {
- // console.log ("FOUND IT");
+ //console.log ("-------->MON LEN"+$scope.monitors.length);
- idfound = true;
- break;
- }
- }
+ for (var i = 0; i < myevents.length; i++) {
+
+ var idfound = true;
+ if (loginData.persistMontageOrder) {
+ idfound = false;
+ for (var ii = 0; ii < $scope.monitors.length; ii++) {
+ if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId && (NVRDataModel.isNotHidden(myevents[i].Event.MonitorId) || showHiddenMonitors)) {
+ // console.log ("FOUND IT");
+
+ idfound = true;
+ break;
}
+ }
+ }
- //console.log ("IDFOUND="+idfound + " AND MON LEN="+$scope.monitors.length);
+ //console.log ("IDFOUND="+idfound + " AND MON LEN="+$scope.monitors.length);
- myevents[i].Event.humanizeTime = humanizeTime(myevents[i].Event.StartTime);
- myevents[i].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[i].Event.MonitorId);
- myevents[i].Event.baseURL = NVRDataModel.getBaseURL(myevents[i].Event.MonitorId);
- myevents[i].Event.imageMode = NVRDataModel.getImageMode(myevents[i].Event.MonitorId);
+ myevents[i].Event.humanizeTime = humanizeTime(myevents[i].Event.StartTime);
+ myevents[i].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[i].Event.MonitorId);
+ myevents[i].Event.baseURL = NVRDataModel.getBaseURL(myevents[i].Event.MonitorId);
+ myevents[i].Event.imageMode = NVRDataModel.getImageMode(myevents[i].Event.MonitorId);
- //console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL);
+ //console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL);
- // console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.baseURL);
+ // console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.baseURL);
- myevents[i].Event.MonitorName = NVRDataModel.getMonitorName(myevents[i].Event.MonitorId);
- myevents[i].Event.ShowScrub = false;
- myevents[i].Event.height = eventsListDetailsHeight;
- // now construct base path
- myevents[i].Event.BasePath = computeBasePath(myevents[i]);
- myevents[i].Event.relativePath = computeRelativePath(myevents[i]);
+ myevents[i].Event.MonitorName = NVRDataModel.getMonitorName(myevents[i].Event.MonitorId);
+ myevents[i].Event.ShowScrub = false;
+ myevents[i].Event.height = eventsListDetailsHeight;
+ // now construct base path
+ myevents[i].Event.BasePath = computeBasePath(myevents[i]);
+ myevents[i].Event.relativePath = computeRelativePath(myevents[i]);
- // get thumbW/H
+ // get thumbW/H
- var tempMon = NVRDataModel.getMonitorObject(myevents[i].Event.MonitorId);
- if (tempMon != undefined) {
+ var tempMon = NVRDataModel.getMonitorObject(myevents[i].Event.MonitorId);
+ if (tempMon != undefined) {
- var mw = parseInt(tempMon.Monitor.Width);
- var mh = parseInt(tempMon.Monitor.Height);
- var mo = parseInt(tempMon.Monitor.Orientation);
- myevents[i].Event.Rotation = '';
+ var mw = parseInt(tempMon.Monitor.Width);
+ var mh = parseInt(tempMon.Monitor.Height);
+ var mo = parseInt(tempMon.Monitor.Orientation);
+ myevents[i].Event.Rotation = '';
- var th = computeThumbnailSize(mw, mh, mo);
- myevents[i].Event.thumbWidth = th.w;
- myevents[i].Event.thumbHeight = th.h;
- }
+ var th = computeThumbnailSize(mw, mh, mo);
+ myevents[i].Event.thumbWidth = th.w;
+ myevents[i].Event.thumbHeight = th.h;
+ }
- // in multiserver BasePath is login url for frames
- // http://login.url/index.php?view=frame&eid=19696772&fid=21
+ // in multiserver BasePath is login url for frames
+ // http://login.url/index.php?view=frame&eid=19696772&fid=21
- // console.log ("COMPARING "+NVRDataModel.getLogin().url+ " TO " +myevents[i].Event.baseURL);
- if (NVRDataModel.getLogin().url != myevents[i].Event.baseURL) {
- //NVRDataModel.debug ("Multi server, changing base");
- myevents[i].Event.baseURL = NVRDataModel.getLogin().url;
+ // console.log ("COMPARING "+NVRDataModel.getLogin().url+ " TO " +myevents[i].Event.baseURL);
+ if (NVRDataModel.getLogin().url != myevents[i].Event.baseURL) {
+ //NVRDataModel.debug ("Multi server, changing base");
+ myevents[i].Event.baseURL = NVRDataModel.getLogin().url;
- }
+ }
- if (myevents[i].Event.imageMode == 'path')
- //if (1)
- myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/events/" + myevents[i].Event.relativePath + myevents[i].Event.DefaultVideo;
- else
- myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id;
+ if (myevents[i].Event.imageMode == 'path')
+ //if (1)
+ myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/events/" + myevents[i].Event.relativePath + myevents[i].Event.DefaultVideo;
+ else
+ myevents[i].Event.videoPath = myevents[i].Event.baseURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id;
- // if (idfound)
- if (idfound) {
+ // if (idfound)
+ if (idfound) {
- //NVRDataModel.debug ("PUSHING "+JSON.stringify(myevents[i]));
- $scope.events.push(myevents[i]);
- //console.log ("SCOPE EVENTS LEN="+$scope.events.length);
- } else {
- //NVRDataModel.debug ("Skipping Event MID = " + myevents[i].Event.MonitorId);
- }
+ //NVRDataModel.debug ("PUSHING "+JSON.stringify(myevents[i]));
+ $scope.events.push(myevents[i]);
+ //console.log ("SCOPE EVENTS LEN="+$scope.events.length);
+ } else {
+ //NVRDataModel.debug ("Skipping Event MID = " + myevents[i].Event.MonitorId);
+ }
- } //for
-
- //$scope.events = myevents;
- // we only need to stop the template from loading when the list is empty
- // so this can be false once we have _some_ content
- // FIXME: check reload
- $scope.eventsBeingLoaded = false;
- // to avoid only few events being displayed
- // if last page has less events
- //console.log("**Loading Next Page ***");
- if (myevents.length < 50) {
- //console.log ("EVENTS LOADED="+JSON.stringify($scope.events));
- NVRDataModel.debug("EventCtrl:loading one more page just in case we don't have enough to display");
- loadMore();
- }
- });
+ } //for
+
+ //$scope.events = myevents;
+ // we only need to stop the template from loading when the list is empty
+ // so this can be false once we have _some_ content
+ // FIXME: check reload
+ $scope.eventsBeingLoaded = false;
+ // to avoid only few events being displayed
+ // if last page has less events
+ //console.log("**Loading Next Page ***");
+ if (myevents.length < 50) {
+ //console.log ("EVENTS LOADED="+JSON.stringify($scope.events));
+ NVRDataModel.debug("EventCtrl:loading one more page just in case we don't have enough to display");
+ loadMore();
+ }
+ });
}
@@ -547,14 +547,14 @@ angular.module('zmApp.controllers')
cordova.plugins.photoLibrary.requestAuthorization(
function () {
//url = "https://picsum.photos/200/300/?random";
-
+
var fileTransfer = new FileTransfer();
var urle = encodeURI(url);
-
-
+
+
fileTransfer.onprogress = function (progressEvent) {
if (progressEvent.lengthComputable) {
-
+
$timeout(function () {
var perc = Math.floor(progressEvent.loaded / progressEvent.total * 100);
$ionicLoading.show({
@@ -563,18 +563,18 @@ angular.module('zmApp.controllers')
//duration: zm.httpTimeout
});
});
-
-
+
+
}
};
-
+
fileTransfer.download(urle, cordova.file.dataDirectory + fname,
function (entry) {
NVRDataModel.debug("local download complete: " + entry.toURL());
NVRDataModel.debug("Now trying to move it to album");
var pluginName = (fname == "zmNinja.mp4" ? "saveVideo" : "saveImage");
-
-
+
+
cordova.plugins.photoLibrary[pluginName](entry.toURL(), album,
function (cameraRollAssetId) {
SaveSuccess();
@@ -587,27 +587,27 @@ angular.module('zmApp.controllers')
NVRDataModel.debug("could not delete temp file: " + JSON.stringify(e));
}
);
-
-
+
+
},
function (err) {
NVRDataModel.debug("Saving error:" + JSON.stringify(err));
SaveError();
-
+
});
-
-
-
-
+
+
+
+
},
function (err) {
NVRDataModel.log("error downloading:" + JSON.stringify(err));
SaveError();
}, !loginData.enableStrictSSL, {});
-
-
-
-
+
+
+
+
// User gave us permission to his library, retry reading it!
},
function (err) {
@@ -615,30 +615,30 @@ angular.module('zmApp.controllers')
NVRDataModel.debug("Permission not granted");
SaveError();
}, // if options not provided, defaults to {read: true}.
-
+
{
read: true,
write: true
}
);
-
+
} else {
//desktop
-
+
$ionicLoading.hide();
-
- $rootScope.zmPopup = SecuredPopups.show('alert', {
+
+ $rootScope.zmPopup = SecuredPopups.show('alert', {
title: $translate.instant('kNote'),
- template: $translate.instant('kDownloadVideoImage')+"<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>"+" "+$translate.instant('kDownload')+"</a></center>",
+ template: $translate.instant('kDownloadVideoImage') + "<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>" + " " + $translate.instant('kDownload') + "</a></center>",
okText: $translate.instant('kDismiss'),
- okType:'button-stable'
+ okType: 'button-stable'
});
-
-
-
+
+
+
}
-
+
}
@@ -1720,42 +1720,42 @@ angular.module('zmApp.controllers')
return $http.delete(apiDelete)
.then(function (data) {
- data = data.data;
- $ionicLoading.hide();
- NVRDataModel.debug("delete output: " + JSON.stringify(data));
+ data = data.data;
+ $ionicLoading.hide();
+ NVRDataModel.debug("delete output: " + JSON.stringify(data));
- if (data.message == 'Error') {
- $ionicLoading.show({
- template: "{{'kError' | translate}}...",
- noBackdrop: true,
- duration: 1500
- });
+ if (data.message == 'Error') {
+ $ionicLoading.show({
+ template: "{{'kError' | translate}}...",
+ noBackdrop: true,
+ duration: 1500
+ });
- } else {
+ } else {
- $ionicLoading.hide();
- $ionicLoading.show({
- template: "{{'kSuccess' | translate}}...",
- noBackdrop: true,
- duration: 1000
- });
- if (itemid >= 0) $scope.events.splice(itemid, 1);
+ $ionicLoading.hide();
+ $ionicLoading.show({
+ template: "{{'kSuccess' | translate}}...",
+ noBackdrop: true,
+ duration: 1000
+ });
+ if (itemid >= 0) $scope.events.splice(itemid, 1);
- }
+ }
- // NVRDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000);
+ // NVRDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000);
- //doRefresh();
+ //doRefresh();
- },
- function (data) {
- $ionicLoading.hide();
- NVRDataModel.debug("delete error: " + JSON.stringify(data));
- NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]);
- });
+ },
+ function (data) {
+ $ionicLoading.hide();
+ NVRDataModel.debug("delete error: " + JSON.stringify(data));
+ NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]);
+ });
}
//------------------------------------------------
@@ -2105,46 +2105,46 @@ angular.module('zmApp.controllers')
NVRDataModel.log("API for event details" + myurl);
$http.get(myurl)
.then(function (data) {
- data = data.data;
- $scope.FrameArray = data.event.Frame;
- // $scope.slider_options.scale=[];
+ data = data.data;
+ $scope.FrameArray = data.event.Frame;
+ // $scope.slider_options.scale=[];
- //$scope.slider_options.scale = [];
+ //$scope.slider_options.scale = [];
- var i;
- var timestamp = null;
- for (i = 0; i < data.event.Frame.length; i++) {
- if (data.event.Frame[i].Type == "Alarm") {
+ var i;
+ var timestamp = null;
+ for (i = 0; i < data.event.Frame.length; i++) {
+ if (data.event.Frame[i].Type == "Alarm") {
- //console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length);
- var atype;
- if (timestamp != data.event.Frame[i].TimeStamp) {
+ //console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length);
+ var atype;
+ if (timestamp != data.event.Frame[i].TimeStamp) {
- atype = $translate.instant('kShowTimeDiffFrames');
- } else {
- atype = $translate.instant('kShowAllFrames');
+ atype = $translate.instant('kShowTimeDiffFrames');
+ } else {
+ atype = $translate.instant('kShowAllFrames');
+ }
+ $scope.alarm_images.push({
+ type: atype,
+ id: data.event.Frame[i].Id,
+ frameid: data.event.Frame[i].FrameId,
+ score: data.event.Frame[i].Score,
+ fname: padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-capture.jpg",
+ aname: padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-analyse.jpg",
+ time: data.event.Frame[i].TimeStamp
+ });
+ timestamp = data.event.Frame[i].TimeStamp;
}
- $scope.alarm_images.push({
- type: atype,
- id: data.event.Frame[i].Id,
- frameid: data.event.Frame[i].FrameId,
- score: data.event.Frame[i].Score,
- fname: padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-capture.jpg",
- aname: padToN(data.event.Frame[i].FrameId, eventImageDigits) + "-analyse.jpg",
- time: data.event.Frame[i].TimeStamp
- });
- timestamp = data.event.Frame[i].TimeStamp;
- }
- }
- oldEvent = event;
+ }
+ oldEvent = event;
- //console.log (JSON.stringify(data));
- },
- function (err) {
- NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
- NVRDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']);
- });
+ //console.log (JSON.stringify(data));
+ },
+ function (err) {
+ NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
+ NVRDataModel.displayBanner('error', ['could not retrieve frame details', 'please try again']);
+ });
} // end of groupType == alarms
else // groupType == scrub
@@ -2218,30 +2218,30 @@ angular.module('zmApp.controllers')
NVRDataModel.log("API for event details" + myurl_frames);
$http.get(myurl_frames)
.then(function (data) {
- data = data.data;
- $scope.FrameArray = data.event.Frame;
- // $scope.slider_options.scale=[];
+ data = data.data;
+ $scope.FrameArray = data.event.Frame;
+ // $scope.slider_options.scale=[];
- //$scope.slider_options.scale = [];
+ //$scope.slider_options.scale = [];
- var i;
- for (i = 0; i < data.event.Frame.length; i++) {
+ var i;
+ for (i = 0; i < data.event.Frame.length; i++) {
- //console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length);
- $scope.slides.push({
- id: data.event.Frame[i].Id,
- frameid: data.event.Frame[i].FrameId,
+ //console.log ("**ONLY ALARM AT " + i + "of " + data.event.Frame.length);
+ $scope.slides.push({
+ id: data.event.Frame[i].Id,
+ frameid: data.event.Frame[i].FrameId,
- });
+ });
- }
+ }
- //console.log (JSON.stringify(data));
- },
- function (err) {
- NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
- NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]);
- });
+ //console.log (JSON.stringify(data));
+ },
+ function (err) {
+ NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
+ NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]);
+ });
}
@@ -2280,32 +2280,32 @@ angular.module('zmApp.controllers')
NVRDataModel.log("API for event details" + myurl2);
$http.get(myurl2)
.then(function (data) {
- data = data.data;
- $scope.FrameArray = data.event.Frame;
- // $scope.slider_options.scale=[];
- $scope.slider_options.scale = [];
-
- var i;
- for (i = 0; i < data.event.Frame.length; i++) {
- if (data.event.Frame[i].Type == "Alarm") {
-
- //console.log ("**ALARM AT " + i + "of " + data.event.Frame.length);
- $scope.slider_options.scale.push({
- val: data.event.Frame[i].FrameId,
- label: ' '
- });
- } else {
- //$scope.slider_options.scale.push(' ');
- }
+ data = data.data;
+ $scope.FrameArray = data.event.Frame;
+ // $scope.slider_options.scale=[];
+ $scope.slider_options.scale = [];
- }
+ var i;
+ for (i = 0; i < data.event.Frame.length; i++) {
+ if (data.event.Frame[i].Type == "Alarm") {
- //console.log (JSON.stringify(data));
- },
- function (err) {
- NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
- NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]);
- });
+ //console.log ("**ALARM AT " + i + "of " + data.event.Frame.length);
+ $scope.slider_options.scale.push({
+ val: data.event.Frame[i].FrameId,
+ label: ' '
+ });
+ } else {
+ //$scope.slider_options.scale.push(' ');
+ }
+
+ }
+
+ //console.log (JSON.stringify(data));
+ },
+ function (err) {
+ NVRDataModel.log("Error retrieving detailed frame API " + JSON.stringify(err));
+ NVRDataModel.displayBanner('error', [$translate.instant('kErrorFrameBanner'), $translate.instant('kErrorPleaseTryAgain')]);
+ });
oldEvent = event;
$rootScope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111;
@@ -2739,12 +2739,12 @@ angular.module('zmApp.controllers')
// except greater page limits than reported
console.log("***** LOADING MORE INFINITE SCROLL ****");
-
+
if ((currEventsPage >= maxEventsPage) && (pageLoaded)) {
moreEvents = false;
- NVRDataModel.debug ("No more - We have a total of "+maxEventsPage+" and are at page="+currEventsPage);
+ NVRDataModel.debug("No more - We have a total of " + maxEventsPage + " and are at page=" + currEventsPage);
- console.log("*** At Page " + currEventsPage + " of "+maxEventsPage+", not proceeding");
+ console.log("*** At Page " + currEventsPage + " of " + maxEventsPage + ", not proceeding");
return;
}
@@ -2781,7 +2781,7 @@ angular.module('zmApp.controllers')
var loginData = NVRDataModel.getLogin();
// console.log("Got new page of events with Page=" + eventsPage);
var myevents = data.events;
-
+
for (var i = 0; i < myevents.length; i++) {
@@ -2864,11 +2864,11 @@ angular.module('zmApp.controllers')
};
-
+
function recomputeThumbSize() {
- NVRDataModel.debug ("EventCtrl: recompute thumbnails");
+ NVRDataModel.debug("EventCtrl: recompute thumbnails");
- for (var i=0; i < $scope.events.length; i++) {
+ for (var i = 0; i < $scope.events.length; i++) {
var tempMon = NVRDataModel.getMonitorObject($scope.events[i].Event.MonitorId);
if (tempMon != undefined) {
@@ -2889,9 +2889,9 @@ angular.module('zmApp.controllers')
}
function computeThumbnailSize(mw, mh, mo) {
-
-
- tw = Math.min(Math.round(0.35 * $rootScope.devWidth),200);
+
+
+ tw = Math.min(Math.round(0.35 * $rootScope.devWidth), 200);
th = 150;
var ratio = mw / mh;
@@ -2931,7 +2931,7 @@ angular.module('zmApp.controllers')
$scope.constructThumbnail = function (event) {
var stream = "";
stream = event.Event.baseURL +
- "/index.php?view=image&show=capture&fid=" +
+ "/index.php?view=image&show=capture&fid=" +
(event.Event.MaxScoreFrameId ? event.Event.MaxScoreFrameId : "1&eid=" + event.Event.Id) +
"&width=" + event.Event.thumbWidth * 2 +
"&height=" + event.Event.thumbHeight * 2;
diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js
index 0e6d6be7..b992017c 100644
--- a/www/js/EventModalCtrl.js
+++ b/www/js/EventModalCtrl.js
@@ -403,49 +403,49 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
}
})
.then(function (resp) {
- //NVRDataModel.debug ("processEvent success:"+JSON.stringify(resp));
+ //NVRDataModel.debug ("processEvent success:"+JSON.stringify(resp));
- resp = resp.data;
- if (resp.result == "Ok") {
+ resp = resp.data;
+ if (resp.result == "Ok") {
- if (resp.status) $scope.currentProgress.progress = resp.status.progress;
- if (resp.status && resp.status.event) $scope.eventId = resp.status.event;
- $scope.d_eventId = $scope.eventId;
- if (resp.status) $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";
+ if (resp.status) $scope.currentProgress.progress = resp.status.progress;
+ if (resp.status && resp.status.event) $scope.eventId = resp.status.event;
+ $scope.d_eventId = $scope.eventId;
+ if (resp.status) $scope.currentRate = resp.status.rate;
- $scope.sliderProgress.progress = $scope.currentProgress.progress;
+ if ($scope.currentProgress.progress > $scope.currentEventDuration) $scope.currentProgress.progress = $scope.currentEventDuration;
+ $scope.progressText = "At " + $scope.currentProgress.progress + "s of " + $scope.currentEventDuration + "s";
- // 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)
+ $scope.sliderProgress.progress = $scope.currentProgress.progress;
- //$timeout (checkEvent(), zm.eventPlaybackQuery);
- //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
+ // 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)
- } else // resp.result was messed up
+ //$timeout (checkEvent(), zm.eventPlaybackQuery);
+ //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
- {
- NVRDataModel.debug("Hmm I found an error " + JSON.stringify(resp));
- //window.stop();
- // $scope.connKey = (Math.floor((Math.random() * 999999) + 1)).toString();
+ } else // resp.result was messed up
- // console.log (JSON.stringify(resp));
- /*$timeout(function()
{
- sendCommand('14', $scope.connKey, '&offset=' + $scope.currentProgress.progress);
- }, 500);
- NVRDataModel.debug("so I'm regenerating Connkey to " + $scope.connKey);*/
+ NVRDataModel.debug("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);
+ NVRDataModel.debug("so I'm regenerating Connkey to " + $scope.connKey);*/
- }
- },
- function (resp) {
- NVRDataModel.debug("processEvent error:" + JSON.stringify(resp));
- //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
+ }
+ },
+ function (resp) {
+ NVRDataModel.debug("processEvent error:" + JSON.stringify(resp));
+ //eventQueryHandle = $timeout (function(){checkEvent();}, zm.eventPlaybackQuery);
- });
+ });
}
@@ -1038,12 +1038,12 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
//desktop
$ionicLoading.hide();
-
- $rootScope.zmPopup = SecuredPopups.show('alert', {
+
+ $rootScope.zmPopup = SecuredPopups.show('alert', {
title: $translate.instant('kNote'),
- template: $translate.instant('kDownloadVideoImage')+"<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>"+" "+$translate.instant('kDownload')+"</a></center>",
+ template: $translate.instant('kDownloadVideoImage') + "<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download>" + " " + $translate.instant('kDownload') + "</a></center>",
okText: $translate.instant('kDismiss'),
- okType:'button-stable'
+ okType: 'button-stable'
});
@@ -1551,42 +1551,42 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro
return $http.delete(apiDelete)
.then(function (data) {
- data = data.data;
- $ionicLoading.hide();
- // NVRDataModel.debug("delete output: " + JSON.stringify(data));
+ data = data.data;
+ $ionicLoading.hide();
+ // NVRDataModel.debug("delete output: " + JSON.stringify(data));
- if (data.message == 'Error') {
- $ionicLoading.show({
- template: "{{'kError' | translate}}...",
- noBackdrop: true,
- duration: 1500
- });
+ if (data.message == 'Error') {
+ $ionicLoading.show({
+ template: "{{'kError' | translate}}...",
+ noBackdrop: true,
+ duration: 1500
+ });
- } else {
+ } else {
- $ionicLoading.hide();
- $ionicLoading.show({
- template: "{{'kSuccess' | translate}}...",
- noBackdrop: true,
- duration: 1000
- });
+ $ionicLoading.hide();
+ $ionicLoading.show({
+ template: "{{'kSuccess' | translate}}...",
+ noBackdrop: true,
+ duration: 1000
+ });
- }
+ }
- // NVRDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000);
+ // NVRDataModel.displayBanner('info', [$translate.instant('kDeleteEventSuccess')], 2000, 2000);
- //doRefresh();
+ //doRefresh();
- },
- function (data) {
- $ionicLoading.hide();
- NVRDataModel.debug("delete error: " + JSON.stringify(data));
- NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]);
- });
+ },
+ function (data) {
+ $ionicLoading.hide();
+ NVRDataModel.debug("delete error: " + JSON.stringify(data));
+ NVRDataModel.displayBanner('error', [$translate.instant('kDeleteEventError1'), $translate.instant('kDeleteEventError2')]);
+ });
}
//--------------------------------------------------------
//Navigate to next/prev event in full screen mode
diff --git a/www/js/EventServer.js b/www/js/EventServer.js
index 32f6cbac..1340b88d 100644
--- a/www/js/EventServer.js
+++ b/www/js/EventServer.js
@@ -319,24 +319,23 @@ angular.module('zmApp.controllers')
NVRDataModel.log("Clearing error/close cbk, disconnecting and deleting Event Server socket...");
- if ($rootScope.platforOS == 'desktop'){
+ if ($rootScope.platforOS == 'desktop') {
if (typeof ws === 'undefined') {
NVRDataModel.log("Event server socket is empty, nothing to disconnect");
return;
}
-
-
+
+
ws.onmessage = null;
ws.close();
ws = undefined;
- }
- else {
+ } else {
if (nativeWebSocketId != -1) //native;
- CordovaWebsocketPlugin.wsClose(nativeWebSocketId, 1000, "Connection closed");
- nativeWebSocketId = -1;
+ CordovaWebsocketPlugin.wsClose(nativeWebSocketId, 1000, "Connection closed");
+ nativeWebSocketId = -1;
}
-
+
}
@@ -371,13 +370,12 @@ angular.module('zmApp.controllers')
NVRDataModel.debug("~~~~ sendMessage: Sending->" + jmsg);
if ($rootScope.platformOS == 'desktop') {
- ws.send(jmsg);
- }
- else {
+ ws.send(jmsg);
+ } else {
if (nativeWebSocketId != -1)
- CordovaWebsocketPlugin.wsSend(nativeWebSocketId, jmsg);
- else
- NVRDataModel.debug ("ERROR:native websocket not initialized, can't send "+jmsg);
+ CordovaWebsocketPlugin.wsSend(nativeWebSocketId, jmsg);
+ else
+ NVRDataModel.debug("ERROR:native websocket not initialized, can't send " + jmsg);
}
diff --git a/www/js/EventServerSettingsCtrl.js b/www/js/EventServerSettingsCtrl.js
index c5857369..6b04eefa 100644
--- a/www/js/EventServerSettingsCtrl.js
+++ b/www/js/EventServerSettingsCtrl.js
@@ -207,36 +207,36 @@
EventServer.disconnect();
EventServer.init()
.then(function (data) {
- // console.log("Sending control filter");
- NVRDataModel.debug("Sending Control message 'filter' with monlist=" + monstring + " and interval=" + intervalstring);
- EventServer.sendMessage("control", {
- type: 'filter',
- monlist: monstring,
- intlist: intervalstring,
- token: $rootScope.apnsToken
- }, 1);
-
- if ($rootScope.apnsToken != "")
- // if its defined then this is post init work
- // so lets transmit state here
-
- {
- // we need to disable the token
- NVRDataModel.debug("Sending token state " + pushstate);
- EventServer.sendMessage('push', {
- type: 'token',
- platform: plat,
- token: $rootScope.apnsToken,
- state: pushstate
+ // console.log("Sending control filter");
+ NVRDataModel.debug("Sending Control message 'filter' with monlist=" + monstring + " and interval=" + intervalstring);
+ EventServer.sendMessage("control", {
+ type: 'filter',
+ monlist: monstring,
+ intlist: intervalstring,
+ token: $rootScope.apnsToken
}, 1);
+ if ($rootScope.apnsToken != "")
+ // if its defined then this is post init work
+ // so lets transmit state here
+
+ {
+ // we need to disable the token
+ NVRDataModel.debug("Sending token state " + pushstate);
+ EventServer.sendMessage('push', {
+ type: 'token',
+ platform: plat,
+ token: $rootScope.apnsToken,
+ state: pushstate
+ }, 1);
+
+ }
+
+ },
+ function (err) {
+ NVRDataModel.debug("Event Server init failed");
}
- },
- function (err) {
- NVRDataModel.debug("Event Server init failed");
- }
-
);
} // no event server configured/enabled
diff --git a/www/js/EventsGraphsCtrl.js b/www/js/EventsGraphsCtrl.js
index cad2cc0b..8174f7e0 100644
--- a/www/js/EventsGraphsCtrl.js
+++ b/www/js/EventsGraphsCtrl.js
@@ -191,18 +191,18 @@ angular.module('zmApp.controllers').controller('zmApp.EventsGraphsCtrl', ['$ioni
NVRDataModel.log("EventGraph: composed url is " + url);
$http.get(url /*,{timeout:15000}*/ )
.then(function (data) {
- data = data.data;
- NVRDataModel.debug("Event count for monitor" +
- monitors[j].Monitor.Id + " is " + data.pagination.count);
- $scope.chart.data.datasets[0].data[j] = data.pagination.count;
- },
- function (data) {
- // ideally I should be treating it as an error
- // but what I am really doing now is treating it like no events
- // works but TBD: make this into a proper error handler
- $scope.chart.data.datasets[0].data[j] = 0;
- NVRDataModel.log("Error retrieving events for graph " + JSON.stringify(data), "error");
- });
+ data = data.data;
+ NVRDataModel.debug("Event count for monitor" +
+ monitors[j].Monitor.Id + " is " + data.pagination.count);
+ $scope.chart.data.datasets[0].data[j] = data.pagination.count;
+ },
+ function (data) {
+ // ideally I should be treating it as an error
+ // but what I am really doing now is treating it like no events
+ // works but TBD: make this into a proper error handler
+ $scope.chart.data.datasets[0].data[j] = 0;
+ NVRDataModel.log("Error retrieving events for graph " + JSON.stringify(data), "error");
+ });
})(i); // j
} //for
});
diff --git a/www/js/FirstUseCtrl.js b/www/js/FirstUseCtrl.js
index 1ad42e9c..ca8ff14b 100644
--- a/www/js/FirstUseCtrl.js
+++ b/www/js/FirstUseCtrl.js
@@ -18,11 +18,11 @@ angular.module('zmApp.controllers').controller('zmApp.FirstUseCtrl', ['$scope',
//
if (window.cordova) {
- cordova.plugin.http.setSSLCertMode('nocheck', function() {
+ cordova.plugin.http.setSSLCertMode('nocheck', function () {
NVRDataModel.debug('--> First use -> SSL is permissive, will allow any certs for now. You can change it later.');
- }, function() {
- console.log('-->First Use -> Error setting SSL permissive');
- });
+ }, function () {
+ console.log('-->First Use -> Error setting SSL permissive');
+ });
}
diff --git a/www/js/LogCtrl.js b/www/js/LogCtrl.js
index 920cc499..78a02992 100644
--- a/www/js/LogCtrl.js
+++ b/www/js/LogCtrl.js
@@ -261,12 +261,12 @@ angular.module('zmApp.controllers').controller('zmApp.LogCtrl', ['$scope', '$roo
//console.log("**VIEW ** Log Ctrl Entered");
- /*n $scope.cloudString = "loading...";
- window.cordova.plugin.cloudsettings.load(
- function (succ) {$scope.cloudString = JSON.stringify(succ);},
- function (err) {$scope.cloudString = JSON.stringify(err);}
+ /*n $scope.cloudString = "loading...";
+ window.cordova.plugin.cloudsettings.load(
+ function (succ) {$scope.cloudString = JSON.stringify(succ);},
+ function (err) {$scope.cloudString = JSON.stringify(err);}
- );*/
+ );*/
$ionicSideMenuDelegate.canDragContent(false);
$scope.selectOn = false;
diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js
index d2dfe899..ca6b9df9 100644
--- a/www/js/LoginCtrl.js
+++ b/www/js/LoginCtrl.js
@@ -456,13 +456,13 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
//console.log ("*********** SAVE ITEMS CALLED ");
//console.log('Saving login');
-
- NVRDataModel.debug ("Inside save Items");
+
+ NVRDataModel.debug("Inside save Items");
$rootScope.alarmCount = 0;
$rootScope.isAlarm = false;
-
-
+
+
NVRDataModel.setFirstUse(false);
NVRDataModel.setCurrentServerVersion('');
NVRDataModel.setCurrentServerMultiPortSupported(false);
@@ -583,7 +583,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
if ($rootScope.platformOS != 'desktop') {
if ($scope.loginData.isUseBasicAuth) {
- NVRDataModel.debug ("Cordova HTTP: configuring basic auth");
+ NVRDataModel.debug("Cordova HTTP: configuring basic auth");
cordova.plugin.http.useBasicAuth($scope.loginData.basicAuthUser, $scope.loginData.basicAuthPassword);
}
@@ -591,9 +591,9 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
//alert("Enabling insecure SSL");
NVRDataModel.log(">>>> Disabling strict SSL checking (turn off in Dev Options if you can't connect)");
- cordova.plugin.http.setSSLCertMode('nocheck', function() {
- NVRDataModel.debug('--> SSL is permissive, will allow any certs. Use at your own risk.');
- }, function() {
+ cordova.plugin.http.setSSLCertMode('nocheck', function () {
+ NVRDataModel.debug('--> SSL is permissive, will allow any certs. Use at your own risk.');
+ }, function () {
console.log('-->Error setting SSL permissive');
});
@@ -604,40 +604,38 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
}
if ($scope.loginData.saveToCloud) {
- NVRDataModel.debug ("writing data to cloud");
-
+ NVRDataModel.debug("writing data to cloud");
+
var serverGroupList = NVRDataModel.getServerGroups();
serverGroupList[$scope.loginData.serverName] = angular.copy($scope.loginData);
var ct = CryptoJS.AES.encrypt(JSON.stringify(serverGroupList), zm.cipherKey).toString();
window.cordova.plugin.cloudsettings.save({
- 'serverGroupList': ct,
- 'defaultServerName': $scope.loginData.serverName
- },
- function () {
- NVRDataModel.debug("local data synced with cloud...");
-
-
- },
- function (err) {
- NVRDataModel.debug("error syncing cloud data..."+JSON.stringify(err));
-
- }, true);
-
- }
- else {
- NVRDataModel.debug ("Clearing cloud settings...");
- window.cordova.plugin.cloudsettings.save({
- },
- function () {
- NVRDataModel.debug("cloud data cleared");
-
- },
- function (err) {
- NVRDataModel.debug("error clearing cloud data: " + err);
-
- }, true);
+ 'serverGroupList': ct,
+ 'defaultServerName': $scope.loginData.serverName
+ },
+ function () {
+ NVRDataModel.debug("local data synced with cloud...");
+
+
+ },
+ function (err) {
+ NVRDataModel.debug("error syncing cloud data..." + JSON.stringify(err));
+
+ }, true);
+
+ } else {
+ NVRDataModel.debug("Clearing cloud settings...");
+ window.cordova.plugin.cloudsettings.save({},
+ function () {
+ NVRDataModel.debug("cloud data cleared");
+
+ },
+ function (err) {
+ NVRDataModel.debug("error clearing cloud data: " + err);
+
+ }, true);
}
@@ -650,27 +648,27 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
if ($scope.loginData.isUseEventServer) {
EventServer.init()
- .then (function (succ) {
- if ($rootScope.apnsToken && $scope.loginData.disablePush != true) {
- NVRDataModel.log("Making sure we get push notifications");
- EventServer.sendMessage('push', {
- type: 'token',
- platform: $rootScope.platformOS,
- token: $rootScope.apnsToken,
- state: "enabled"
- }, 1);
- }
- EventServer.sendMessage("control", {
- type: 'filter',
- monlist: $scope.loginData.eventServerMonitors,
- intlist: $scope.loginData.eventServerInterval,
- token: $rootScope.apnsToken
- });
- },
- function (err) {
- NVRDataModel.log ("Event server init failed");
- });
-
+ .then(function (succ) {
+ if ($rootScope.apnsToken && $scope.loginData.disablePush != true) {
+ NVRDataModel.log("Making sure we get push notifications");
+ EventServer.sendMessage('push', {
+ type: 'token',
+ platform: $rootScope.platformOS,
+ token: $rootScope.apnsToken,
+ state: "enabled"
+ }, 1);
+ }
+ EventServer.sendMessage("control", {
+ type: 'filter',
+ monlist: $scope.loginData.eventServerMonitors,
+ intlist: $scope.loginData.eventServerInterval,
+ token: $rootScope.apnsToken
+ });
+ },
+ function (err) {
+ NVRDataModel.log("Event server init failed");
+ });
+
}
@@ -702,103 +700,103 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
$http.get(apiurl)
.then(function (data) {
- data = data.data;
- NVRDataModel.getTimeZone(true);
- var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!";
- EventServer.refresh();
-
- // now grab and report PATH_ZMS
- NVRDataModel.getPathZms()
- .then(function (data) {
- var ld = NVRDataModel.getLogin();
- var zm_cgi = data.toLowerCase();
-
- var user_cgi = (ld.streamingurl).toLowerCase();
- NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi);
-
- $http.get(ld.streamingurl + "/zms")
- .then(function (data) {
- data = data.data;
- NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here");
- loginStatus = $translate.instant('kLoginStatusNoCgi');
-
- NVRDataModel.debug("refreshing API version...");
- NVRDataModel.getAPIversion()
- .then(function (data) {
- var refresh = NVRDataModel.getMonitors(1);
- $rootScope.apiVersion = data;
- },
- function (error) {
- var refresh = NVRDataModel.getMonitors(1);
- $rootScope.apiVersion = "0.0.0";
- NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
- });
-
- if (showalert) {
- $rootScope.zmPopup = SecuredPopups.show('alert', {
- title: $translate.instant('kLoginValidatedTitle'),
- template: loginStatus,
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
- }).then(function (res) {
-
- $ionicSideMenuDelegate.toggleLeft();
- NVRDataModel.debug("Force reloading monitors...");
+ data = data.data;
+ NVRDataModel.getTimeZone(true);
+ var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!";
+ EventServer.refresh();
+
+ // now grab and report PATH_ZMS
+ NVRDataModel.getPathZms()
+ .then(function (data) {
+ var ld = NVRDataModel.getLogin();
+ var zm_cgi = data.toLowerCase();
+
+ var user_cgi = (ld.streamingurl).toLowerCase();
+ NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi);
+
+ $http.get(ld.streamingurl + "/zms")
+ .then(function (data) {
+ data = data.data;
+ NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here");
+ loginStatus = $translate.instant('kLoginStatusNoCgi');
+
+ NVRDataModel.debug("refreshing API version...");
+ NVRDataModel.getAPIversion()
+ .then(function (data) {
+ var refresh = NVRDataModel.getMonitors(1);
+ $rootScope.apiVersion = data;
+ },
+ function (error) {
+ var refresh = NVRDataModel.getMonitors(1);
+ $rootScope.apiVersion = "0.0.0";
+ NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
+ });
+
+ if (showalert) {
+ $rootScope.zmPopup = SecuredPopups.show('alert', {
+ title: $translate.instant('kLoginValidatedTitle'),
+ template: loginStatus,
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ }).then(function (res) {
+
+ $ionicSideMenuDelegate.toggleLeft();
+ NVRDataModel.debug("Force reloading monitors...");
+
+ });
+ }
+ },
+ function (error, status) {
+ // If its 5xx, then the cgi-bin path is valid
+ // if its 4xx then the cgi-bin path is not valid
+
+ if (status < 500) {
+ loginStatus = $translate.instant('kLoginStatusNoCgiAlt');
+ }
+
+ if (showalert) {
+ $rootScope.zmPopup = SecuredPopups.show('alert', {
+ title: $translate.instant('kLoginValidatedTitle'),
+ template: loginStatus,
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ }).then(function (res) {
+
+ $ionicSideMenuDelegate.toggleLeft();
+ NVRDataModel.debug("Force reloading monitors...");
+
+ });
+ } else // make sure CGI error is always shown
+ {
+ NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]);
+ }
+ NVRDataModel.debug("refreshing API version...");
+ NVRDataModel.getAPIversion()
+ .then(function (data) {
+ var refresh = NVRDataModel.getMonitors(1);
+ $rootScope.apiVersion = data;
+ },
+ function (error) {
+ var refresh = NVRDataModel.getMonitors(1);
+ $rootScope.apiVersion = "0.0.0";
+ NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
+ });
});
- }
- },
- function (error, status) {
- // If its 5xx, then the cgi-bin path is valid
- // if its 4xx then the cgi-bin path is not valid
-
- if (status < 500) {
- loginStatus = $translate.instant('kLoginStatusNoCgiAlt');
- }
-
- if (showalert) {
- $rootScope.zmPopup = SecuredPopups.show('alert', {
- title: $translate.instant('kLoginValidatedTitle'),
- template: loginStatus,
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
- }).then(function (res) {
-
- $ionicSideMenuDelegate.toggleLeft();
- NVRDataModel.debug("Force reloading monitors...");
+ });
- });
- } else // make sure CGI error is always shown
- {
- NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]);
- }
- NVRDataModel.debug("refreshing API version...");
- NVRDataModel.getAPIversion()
- .then(function (data) {
- var refresh = NVRDataModel.getMonitors(1);
- $rootScope.apiVersion = data;
- },
- function (error) {
- var refresh = NVRDataModel.getMonitors(1);
- $rootScope.apiVersion = "0.0.0";
- NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
- });
-
- });
- });
+ },
+ function (error) {
+ NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]);
+ NVRDataModel.log("API login error " + JSON.stringify(error));
- },
- function (error) {
- NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]);
- NVRDataModel.log("API login error " + JSON.stringify(error));
-
- $rootScope.zmPopup = SecuredPopups.show('alert', {
- title: $translate.instant('kLoginValidAPIFailedTitle'),
- template: $translate.instant('kBannerPleaseCheck'),
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
+ $rootScope.zmPopup = SecuredPopups.show('alert', {
+ title: $translate.instant('kLoginValidAPIFailedTitle'),
+ template: $translate.instant('kBannerPleaseCheck'),
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ });
});
- });
});
}
@@ -810,7 +808,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
$scope.saveItems = function () {
- NVRDataModel.debug ("User tapped save, calling SaveItems");
+ NVRDataModel.debug("User tapped save, calling SaveItems");
NVRDataModel.clearZmsMultiPortSupport();
if (!$scope.loginData.serverName) {
$rootScope.zmPopup = $ionicPopup.alert({
diff --git a/www/js/MenuController.js b/www/js/MenuController.js
index d9d4d114..39b6ce7f 100644
--- a/www/js/MenuController.js
+++ b/www/js/MenuController.js
@@ -2,7 +2,7 @@
/* jslint browser: true*/
/* global cordova,StatusBar,angular,console */
-angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory', '$state', 'NVRDataModel', '$rootScope', '$ionicPopup', '$translate', '$timeout', '$location','EventServer', 'zmAutoLogin','$http','SecuredPopups',function ($scope, $ionicSideMenuDelegate, zm, $stateParams, $ionicHistory, $state, NVRDataModel, $rootScope, $ionicPopup, $translate, $timeout, $location, EventServer, zmAutoLogin, $http, SecuredPopups) {
+angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory', '$state', 'NVRDataModel', '$rootScope', '$ionicPopup', '$translate', '$timeout', '$location', 'EventServer', 'zmAutoLogin', '$http', 'SecuredPopups', function ($scope, $ionicSideMenuDelegate, zm, $stateParams, $ionicHistory, $state, NVRDataModel, $rootScope, $ionicPopup, $translate, $timeout, $location, EventServer, zmAutoLogin, $http, SecuredPopups) {
$scope.openMenu = function () {
$ionicSideMenuDelegate.toggleLeft();
};
@@ -13,9 +13,9 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
//----------------------------------------------------------------
- $scope.go = function(p) {
-
-
+ $scope.go = function (p) {
+
+
$ionicHistory.nextViewOptions({
historyRoot: true,
disableAnimate: true,
@@ -23,7 +23,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
});
$ionicSideMenuDelegate.toggleLeft();
$location.path(p);
- };
+ };
$scope.navigateView = function (view, args) {
@@ -50,20 +50,20 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
$rootScope.alarmCount = 0;
$rootScope.isAlarm = false;
$rootScope.authSession = '';
-
-
-
-
+
+
+
+
// First lets kill current stuf
- NVRDataModel.debug ("** Resetting existing server");
+ NVRDataModel.debug("** Resetting existing server");
var cld = NVRDataModel.getLogin();
if (cld.isUseEventServer) {
- NVRDataModel.debug ("Stopping Event server");
+ NVRDataModel.debug("Stopping Event server");
EventServer.disconnect();
}
- NVRDataModel.debug ("**Switching to new server...");
+ NVRDataModel.debug("**Switching to new server...");
NVRDataModel.clearZmsMultiPortSupport();
var zmServers = NVRDataModel.getServerGroups();
@@ -71,7 +71,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
NVRDataModel.debug("Retrieved state for this profile:" + JSON.stringify(loginData));
NVRDataModel.setLogin(loginData);
-
+
if (!loginData.isUseBasicAuth) {
$rootScope.basicAuthHeader = '';
@@ -87,7 +87,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
if (window.cordova) {
if (loginData.isUseBasicAuth) {
- NVRDataModel.debug ("Cordova HTTP: configuring basic auth");
+ NVRDataModel.debug("Cordova HTTP: configuring basic auth");
cordova.plugin.http.useBasicAuth(loginData.basicAuthUser, loginData.basicAuthPassword);
}
@@ -95,9 +95,9 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
//alert("Enabling insecure SSL");
NVRDataModel.log(">>>> Disabling strict SSL checking (turn off in Dev Options if you can't connect)");
- cordova.plugin.http.setSSLCertMode('nocheck', function() {
+ cordova.plugin.http.setSSLCertMode('nocheck', function () {
NVRDataModel.debug('--> SSL is permissive, will allow any certs. Use at your own risk.');
- }, function() {
+ }, function () {
console.log('-->Error setting SSL permissive');
});
@@ -112,26 +112,26 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
if (loginData.isUseEventServer) {
EventServer.init()
- .then (function (succ) {
- EventServer.sendMessage("control", {
- type: 'filter',
- monlist: loginData.eventServerMonitors,
- intlist: loginData.eventServerInterval,
- token: $rootScope.apnsToken
- });
- },
- function (err) {
- NVRDataModel.debug ("EventServer init failed");
- });
-
-
+ .then(function (succ) {
+ EventServer.sendMessage("control", {
+ type: 'filter',
+ monlist: loginData.eventServerMonitors,
+ intlist: loginData.eventServerInterval,
+ token: $rootScope.apnsToken
+ });
+ },
+ function (err) {
+ NVRDataModel.debug("EventServer init failed");
+ });
+
+
}
var apiurl = loginData.apiurl + '/host/getVersion.json';
var portalurl = loginData.url + '/index.php';
- 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>&nbsp;" + $translate.instant('kAuthenticating') + "...</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>&nbsp;" + $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
@@ -147,132 +147,132 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
$http.get(apiurl)
.then(function (data) {
- data = data.data;
- NVRDataModel.getTimeZone(true);
- var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!";
- EventServer.refresh();
-
- // now grab and report PATH_ZMS
- NVRDataModel.getPathZms()
- .then(function (data) {
- var ld = NVRDataModel.getLogin();
- var zm_cgi = data.toLowerCase();
-
- var user_cgi = (ld.streamingurl).toLowerCase();
- NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi);
-
- $http.get(ld.streamingurl + "/zms")
- .then(function (data) {
- data = data.data;
- NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here");
- loginStatus = $translate.instant('kLoginStatusNoCgi');
-
- NVRDataModel.debug("refreshing API version...");
- NVRDataModel.getAPIversion()
- .then(function (data) {
- $rootScope.apiVersion = data;
- var refresh = NVRDataModel.getMonitors(1)
- .then (function () {
-
-
- $ionicHistory.nextViewOptions({
- disableBack: true
- });
+ data = data.data;
+ NVRDataModel.getTimeZone(true);
+ var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!";
+ EventServer.refresh();
+
+ // now grab and report PATH_ZMS
+ NVRDataModel.getPathZms()
+ .then(function (data) {
+ var ld = NVRDataModel.getLogin();
+ var zm_cgi = data.toLowerCase();
+
+ var user_cgi = (ld.streamingurl).toLowerCase();
+ NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi);
+
+ $http.get(ld.streamingurl + "/zms")
+ .then(function (data) {
+ data = data.data;
+ NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here");
+ loginStatus = $translate.instant('kLoginStatusNoCgi');
+
+ NVRDataModel.debug("refreshing API version...");
+ NVRDataModel.getAPIversion()
+ .then(function (data) {
+ $rootScope.apiVersion = data;
+ var refresh = NVRDataModel.getMonitors(1)
+ .then(function () {
+
+
+ $ionicHistory.nextViewOptions({
+ disableBack: true
+ });
+
+ console.log("+++ state go after getMonitors force");
+ $state.go('app.refresh', {
+ "view": $state.current.name
+ });
+ return;
+ });
+
+
+ },
+ function (error) {
+ var refresh = NVRDataModel.getMonitors(1)
+ .then(function () {
+ console.log("+++ state go after API version error: " + error);
+ $rootScope.apiVersion = "0.0.0";
+ NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
+
+ $ionicHistory.nextViewOptions({
+ disableBack: true
+ });
+
+
+ $state.go('app.refresh', {
+ "view": $state.current.name
+ });
+ return;
+
+ });
+
+
- console.log ("+++ state go after getMonitors force");
- $state.go('app.refresh', {
- "view": $state.current.name
- });
- return;
- });
-
-
- },
- function (error) {
- var refresh = NVRDataModel.getMonitors(1)
- .then (function() {
- console.log ("+++ state go after API version error: "+error);
- $rootScope.apiVersion = "0.0.0";
- NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
-
- $ionicHistory.nextViewOptions({
- disableBack: true
- });
-
-
- $state.go('app.refresh', {
- "view": $state.current.name
- });
- return;
-
- });
-
-
-
- });
-
- },
- function (error, status) {
- // If its 5xx, then the cgi-bin path is valid
- // if its 4xx then the cgi-bin path is not valid
-
- if (status < 500) {
- loginStatus = $translate.instant('kLoginStatusNoCgiAlt');
- }
-
- NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]);
-
- NVRDataModel.debug("refreshing API version...");
- NVRDataModel.getAPIversion()
- .then(function (data) {
- var refresh = NVRDataModel.getMonitors(1)
- .then (function () {
- $rootScope.apiVersion = data;
- $ionicHistory.nextViewOptions({
- disableBack: true
- });
-
- console.log ("+++ state go after 5xx");
- $state.go('app.refresh', {
- "view": $state.current.name
- });
- return;
- });
-
- },
- function (error) {
- var refresh = NVRDataModel.getMonitors(1)
- .then (function() {
- $rootScope.apiVersion = "0.0.0";
- NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
- $ionicHistory.nextViewOptions({
- disableBack: true
});
- console.log ("+++ state go after API version force");
- $state.go('app.refresh', {
- "view": $state.current.name
+
+ },
+ function (error, status) {
+ // If its 5xx, then the cgi-bin path is valid
+ // if its 4xx then the cgi-bin path is not valid
+
+ if (status < 500) {
+ loginStatus = $translate.instant('kLoginStatusNoCgiAlt');
+ }
+
+ NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]);
+
+ NVRDataModel.debug("refreshing API version...");
+ NVRDataModel.getAPIversion()
+ .then(function (data) {
+ var refresh = NVRDataModel.getMonitors(1)
+ .then(function () {
+ $rootScope.apiVersion = data;
+ $ionicHistory.nextViewOptions({
+ disableBack: true
+ });
+
+ console.log("+++ state go after 5xx");
+ $state.go('app.refresh', {
+ "view": $state.current.name
+ });
+ return;
+ });
+
+ },
+ function (error) {
+ var refresh = NVRDataModel.getMonitors(1)
+ .then(function () {
+ $rootScope.apiVersion = "0.0.0";
+ NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
+ $ionicHistory.nextViewOptions({
+ disableBack: true
+ });
+ console.log("+++ state go after API version force");
+ $state.go('app.refresh', {
+ "view": $state.current.name
+ });
+ return;
+
+ });
+
});
- return;
- });
-
- });
+ });
+ });
- });
- });
+ },
+ function (error) {
+ NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]);
+ NVRDataModel.log("API login error " + JSON.stringify(error));
- },
- function (error) {
- NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]);
- NVRDataModel.log("API login error " + JSON.stringify(error));
-
- $rootScope.zmPopup = SecuredPopups.show('alert', {
- title: $translate.instant('kLoginValidAPIFailedTitle'),
- template: $translate.instant('kBannerPleaseCheck'),
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
+ $rootScope.zmPopup = SecuredPopups.show('alert', {
+ title: $translate.instant('kLoginValidAPIFailedTitle'),
+ template: $translate.instant('kBannerPleaseCheck'),
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ });
});
- });
});
@@ -281,16 +281,18 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
$scope.switchProfiles = function () {
$scope.newServer = {
- val:""
+ val: ""
};
$scope.avs = Object.keys(NVRDataModel.getServerGroups());
- $scope.avs = $scope.avs.filter(function() { return true; });
-
+ $scope.avs = $scope.avs.filter(function () {
+ return true;
+ });
+
if ($scope.avs.length <= 1) {
return;
}
-
+
$rootScope.zmPopup = $ionicPopup.show({
scope: $scope,
template: '<ion-radio-fix ng-if="item" ng-repeat="item in avs" ng-value="item" ng-model="newServer.val"> {{item}} </ion-radio-fix>',
@@ -302,7 +304,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
onTap: function (e) {
if ($ionicSideMenuDelegate.isOpen()) {
$ionicSideMenuDelegate.toggleLeft();
-
+
}
}
@@ -313,7 +315,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
NVRDataModel.log("Server selected:" + $scope.newServer.val);
if ($ionicSideMenuDelegate.isOpen()) {
$ionicSideMenuDelegate.toggleLeft();
-
+
}
if (NVRDataModel.getLogin().serverName != $scope.newServer.val)
switchToServer($scope.newServer.val);
@@ -328,7 +330,7 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
});
-
+
};
diff --git a/www/js/MomentCtrl.js b/www/js/MomentCtrl.js
index 5aad9a4d..6a56158e 100644
--- a/www/js/MomentCtrl.js
+++ b/www/js/MomentCtrl.js
@@ -150,7 +150,7 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
}
- if ($scope.expand)
+ if ($scope.expand)
_expandAll(moments);
else _collapseAll(moments);
@@ -323,20 +323,20 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
var ld = NVRDataModel.getLogin();
ld.montageReviewCollapse = $scope.expand;
- console.log (">>>>>>>>> SAVING EXPAND AS:"+$scope.expand);
+ console.log(">>>>>>>>> SAVING EXPAND AS:" + $scope.expand);
NVRDataModel.setLogin(ld);
};
function expandAll() {
-
+
_expandAll($scope.moments);
}
function _expandAll(arr) {
- NVRDataModel.debug ("Expanding all images");
+ NVRDataModel.debug("Expanding all images");
for (var i = 0; i < arr.length; i++) {
arr[i].Event.hide = false;
arr[i].Event.icon = 'ion-code-working';
@@ -348,10 +348,10 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
$timeout(function () {
masonry.reloadItems();
jiggleAway();
-
+
}, 100);
}
-
+
}
function collapseAll() {
@@ -360,8 +360,8 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
}
function _collapseAll(arr) {
-
- NVRDataModel.debug ("Collapsing all images");
+
+ NVRDataModel.debug("Collapsing all images");
for (var i = 0; i < monitors.length; i++) {
var firstFound = false;
var firstIndex = -1;
@@ -398,10 +398,10 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
$timeout(function () {
masonry.reloadItems();
jiggleAway();
-
+
}, 100);
}
-
+
}
//----------------------------------------------------------------
@@ -845,9 +845,9 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
$scope.expand = ld.montageReviewCollapse;
- console.log (">>>>>>>>> RESTORING EXPAND AS:"+$scope.expand);
+ console.log(">>>>>>>>> RESTORING EXPAND AS:" + $scope.expand);
$scope.isMaxScoreFramePresent = false;
-
+
$scope.loadingStatus = $translate.instant('kLoading');
$scope.gridSize = ld.momentGridSize;
momentType = ld.momentArrangeBy;
@@ -863,7 +863,7 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
constructMask();
$scope.isSubMenu = ld.enableMomentSubMenu;
-
+
for (var i = 0; i < monitors.length; i++) {
if (excludeMonitors.indexOf(monitors[i].Monitor.Id) != -1) {
diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js
index 881d6a2c..9edb1e36 100644
--- a/www/js/MonitorCtrl.js
+++ b/www/js/MonitorCtrl.js
@@ -182,12 +182,12 @@ angular.module('zmApp.controllers')
})
.then(function () {
- NVRDataModel.debug("MonitorCtrl: Not restarting ZM - Make sure you have the patch installed in MonitorsController.php or this won't work");
- },
- function (data, status, headers, config) {
- NVRDataModel.debug("MonitorCtrl: Error changing monitor " + JSON.stringify(data));
- $scope.monfunc.myfailedIds.push(item);
- });
+ NVRDataModel.debug("MonitorCtrl: Not restarting ZM - Make sure you have the patch installed in MonitorsController.php or this won't work");
+ },
+ function (data, status, headers, config) {
+ NVRDataModel.debug("MonitorCtrl: Error changing monitor " + JSON.stringify(data));
+ $scope.monfunc.myfailedIds.push(item);
+ });
$scope.monfunc.mypromises.push(httpPromise);
});
@@ -420,34 +420,34 @@ angular.module('zmApp.controllers')
//console.log("**** ZMC CHECK " + apiMonCheck);
$http.get(apiMonCheck)
.then(function (data) {
- data = data.data;
- NVRDataModel.debug("MonitorCtrl: monitor check state returned: " + JSON.stringify(data));
- if (data.statustext.indexOf("not running") > -1) {
- $scope.monitors[j].Monitor.isRunning = "false";
- $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor;
- $scope.monitors[j].Monitor.char = "ion-close-circled";
- } else if (data.statustext.indexOf("pending") > -1) {
- $scope.monitors[j].Monitor.isRunning = "pending";
- $scope.monitors[j].Monitor.color = zm.monitorPendingColor;
- } else if (data.statustext.indexOf("running since") > -1) {
- $scope.monitors[j].Monitor.isRunning = "true";
- $scope.monitors[j].Monitor.color = zm.monitorRunningColor;
- } else if (data.statustext.indexOf("Unable to connect") > -1) {
- $scope.monitors[j].Monitor.isRunning = "false";
- $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor;
- $scope.monitors[j].Monitor.char = "ion-close-circled";
- }
-
- $scope.monitors[j].Monitor.isRunningText = data.statustext;
- },
- function (data) {
- NVRDataModel.debug("MonitorCtrl: Error->monitor check state returned: " +
- JSON.stringify(data));
- NVRDataModel.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";
- });
+ data = data.data;
+ NVRDataModel.debug("MonitorCtrl: monitor check state returned: " + JSON.stringify(data));
+ if (data.statustext.indexOf("not running") > -1) {
+ $scope.monitors[j].Monitor.isRunning = "false";
+ $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor;
+ $scope.monitors[j].Monitor.char = "ion-close-circled";
+ } else if (data.statustext.indexOf("pending") > -1) {
+ $scope.monitors[j].Monitor.isRunning = "pending";
+ $scope.monitors[j].Monitor.color = zm.monitorPendingColor;
+ } else if (data.statustext.indexOf("running since") > -1) {
+ $scope.monitors[j].Monitor.isRunning = "true";
+ $scope.monitors[j].Monitor.color = zm.monitorRunningColor;
+ } else if (data.statustext.indexOf("Unable to connect") > -1) {
+ $scope.monitors[j].Monitor.isRunning = "false";
+ $scope.monitors[j].Monitor.color = zm.monitorNotRunningColor;
+ $scope.monitors[j].Monitor.char = "ion-close-circled";
+ }
+
+ $scope.monitors[j].Monitor.isRunningText = data.statustext;
+ },
+ function (data) {
+ NVRDataModel.debug("MonitorCtrl: Error->monitor check state returned: " +
+ JSON.stringify(data));
+ NVRDataModel.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";
+ });
})(i);
}
diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js
index cc110197..9c074c4b 100644
--- a/www/js/MonitorModalCtrl.js
+++ b/www/js/MonitorModalCtrl.js
@@ -76,9 +76,9 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
}.bind(this), zm.alarmStatusTime);
-
- if ($rootScope.platformOS == 'desktop') {
+
+ if ($rootScope.platformOS == 'desktop') {
window.addEventListener('keydown', keyboardHandler, true);
}
@@ -98,67 +98,79 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
TOGGLEPTZ_P: 80,
UPLEFT_Q: 81,
- UP_W:87,
- UPRIGHT_E:69,
+ UP_W: 87,
+ UPRIGHT_E: 69,
- LEFT_A:65,
+ LEFT_A: 65,
CENTER_S: 83,
- RIGHT_D:68,
+ RIGHT_D: 68,
- DOWNLEFT_Z:90,
- DOWN_X:88,
- DOWNRIGHT_C:67,
+ DOWNLEFT_Z: 90,
+ DOWN_X: 88,
+ DOWNRIGHT_C: 67,
ESC: 27
-
+
};
- $timeout (function () {
+ $timeout(function () {
var keyCode = evt.keyCode;
-
- console.log (keyCode + " PRESSED");
+
+ console.log(keyCode + " PRESSED");
if (keyCode == keyCodes.ESC) {
$scope.closeModal();
- }
- else if (keyCode == keyCodes.LEFT) {
+ } else if (keyCode == keyCodes.LEFT) {
$scope.monStatus = "";
moveToMonitor($scope.monitorId, -1);
- }
- else if (keyCode == keyCodes.RIGHT) {
+ } else if (keyCode == keyCodes.RIGHT) {
$scope.monStatus = "";
moveToMonitor($scope.monitorId, 1);
- }
-
- else if (keyCode == keyCodes.TOGGLEPTZ_P) {
+ } else if (keyCode == keyCodes.TOGGLEPTZ_P) {
$scope.togglePTZ();
- }
- else { // rest of the functions are PTZ
+ } else { // rest of the functions are PTZ
if (!$scope.showPTZ) {
- NVRDataModel.debug ("PTZ is not on, or disabled");
+ NVRDataModel.debug("PTZ is not on, or disabled");
return;
}
// coming here means PTZ is on
var cmd = "";
switch (keyCode) {
- case keyCodes.UPLEFT_Q: cmd = 'UpLeft'; break;
- case keyCodes.UP_W:cmd = 'Up'; break;
- case keyCodes.UPRIGHT_E:cmd = 'UpRight'; break;
- case keyCodes.LEFT_A:cmd = 'Left'; break;
- case keyCodes.CENTER_S: cmd = 'presetHome'; break;
- case keyCodes.RIGHT_D: cmd = 'Right'; break;
- case keyCodes.DOWNLEFT_Z: cmd = 'UpLeft'; break;
- case keyCodes.DOWN_X: cmd = 'Down'; break;
- case keyCodes.DOWNRIGHT_C: cmd = 'DownRight'; break;
+ case keyCodes.UPLEFT_Q:
+ cmd = 'UpLeft';
+ break;
+ case keyCodes.UP_W:
+ cmd = 'Up';
+ break;
+ case keyCodes.UPRIGHT_E:
+ cmd = 'UpRight';
+ break;
+ case keyCodes.LEFT_A:
+ cmd = 'Left';
+ break;
+ case keyCodes.CENTER_S:
+ cmd = 'presetHome';
+ break;
+ case keyCodes.RIGHT_D:
+ cmd = 'Right';
+ break;
+ case keyCodes.DOWNLEFT_Z:
+ cmd = 'UpLeft';
+ break;
+ case keyCodes.DOWN_X:
+ cmd = 'Down';
+ break;
+ case keyCodes.DOWNRIGHT_C:
+ cmd = 'DownRight';
+ break;
}
if (cmd) {
- NVRDataModel.debug ("Invoking controlPTZ with "+cmd);
+ NVRDataModel.debug("Invoking controlPTZ with " + cmd);
$scope.controlPTZ($scope.monitorId, cmd);
- }
- else {
- NVRDataModel.debug ("ignoring invalid PTZ command");
+ } else {
+ NVRDataModel.debug("ignoring invalid PTZ command");
}
}
@@ -854,17 +866,17 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
});
req.then(function (resp) {
- //console.log("SUCCESS: " + JSON.stringify(resp));
- $ionicLoading.hide();
+ //console.log("SUCCESS: " + JSON.stringify(resp));
+ $ionicLoading.hide();
+
+ },
+ function (resp) {
+ $ionicLoading.hide();
+ //console.log("ERROR: " + JSON.stringify(resp));
+ NVRDataModel.log("Error sending PTZ:" + JSON.stringify(resp), "error");
+ });
- },
- function (resp) {
- $ionicLoading.hide();
- //console.log("ERROR: " + JSON.stringify(resp));
- NVRDataModel.log("Error sending PTZ:" + JSON.stringify(resp), "error");
- });
-
}
$scope.getZoomLevel = function () {
@@ -897,7 +909,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
function moveToMonitor(m, d) {
-
+
if ($scope.isZoneEdit) {
NVRDataModel.log("Not cycling, as you are editing zones");
return;
@@ -1074,7 +1086,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
function triggerAlarm(mid, mode) {
var apiurl = NVRDataModel.getLogin().apiurl;
- var c = mode=='on' ? 'on' : 'off';
+ var c = mode == 'on' ? 'on' : 'off';
var alarmurl = apiurl + "/monitors/alarm/id:" + mid + "/command:" + c + ".json";
NVRDataModel.log("Invoking " + alarmurl);
@@ -1198,7 +1210,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
if ($rootScope.platformOS != 'desktop') {
var album = 'zmNinja';
- NVRDataModel.debug ("Trying to save image to album: "+album);
+ NVRDataModel.debug("Trying to save image to album: " + album);
cordova.plugins.photoLibrary.requestAuthorization(
function () {
//url = "https://picsum.photos/200/300/?random";
@@ -1207,41 +1219,45 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
var urle = encodeURI(url);
var fname = "zmninja.jpg";
- fileTransfer.download(urle, cordova.file.dataDirectory + fname,
- function(entry){
+ fileTransfer.download(urle, cordova.file.dataDirectory + fname,
+ function (entry) {
NVRDataModel.debug("local download complete: " + entry.toURL());
NVRDataModel.debug("Now trying to move it to album");
- cordova.plugins.photoLibrary.saveImage(entry.toURL(), album,
+ cordova.plugins.photoLibrary.saveImage(entry.toURL(), album,
function (cameraRollAssetId) {
- SaveSuccess();
- $cordovaFile.removeFile(cordova.file.dataDirectory, fname)
- .then (
- function () {
- NVRDataModel.debug ("file removed from data directory");
- },
- function (e) {
- NVRDataModel.debug ("could not delete temp file: "+JSON.stringify(e));
- }
- );
-
-
- }, function (err) {
- NVRDataModel.debug ("Saving error:" + JSON.stringify(err));
- SaveError();
-
- });
-
- },
- function(err) { NVRDataModel.debug ("error downloading:"+JSON.stringify(err));SaveError();}, !loginData.enableStrictSSL, {});
+ SaveSuccess();
+ $cordovaFile.removeFile(cordova.file.dataDirectory, fname)
+ .then(
+ function () {
+ NVRDataModel.debug("file removed from data directory");
+ },
+ function (e) {
+ NVRDataModel.debug("could not delete temp file: " + JSON.stringify(e));
+ }
+ );
+
+
+ },
+ function (err) {
+ NVRDataModel.debug("Saving error:" + JSON.stringify(err));
+ SaveError();
+
+ });
+
+ },
+ function (err) {
+ NVRDataModel.debug("error downloading:" + JSON.stringify(err));
+ SaveError();
+ }, !loginData.enableStrictSSL, {});
+
+
-
-
// User gave us permission to his library, retry reading it!
},
function (err) {
// User denied the access
- NVRDataModel.debug ("Permission not granted");
+ NVRDataModel.debug("Permission not granted");
SaveError();
}, // if options not provided, defaults to {read: true}.
@@ -1250,21 +1266,19 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
write: true
}
);
- }
-
- else {
+ } else {
$ionicLoading.hide();
-
+
$rootScope.zmPopup = SecuredPopups.show('alert', {
- title: $translate.instant('kNote'),
- template: $translate.instant('kDownloadVideoImage')+"<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download=\"balls.jpg\">"+" "+$translate.instant('kDownload')+"</a></center>",
- okText: $translate.instant('kDismiss'),
- okType:'button-stable'
- });
-
- }
-
+ title: $translate.instant('kNote'),
+ template: $translate.instant('kDownloadVideoImage') + "<br/><br/><center><a href='" + url + "' class='button button-assertive icon ion-android-download' download=\"balls.jpg\">" + " " + $translate.instant('kDownload') + "</a></center>",
+ okText: $translate.instant('kDismiss'),
+ okType: 'button-stable'
+ });
+
+ }
+
}
@@ -1355,17 +1369,17 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
$scope.$on('modal.removed', function () {
if ($rootScope.platformOS == 'android') {
- NVRDataModel.debug ("Deregistering handlers for multi-window");
+ NVRDataModel.debug("Deregistering handlers for multi-window");
window.MultiWindowPlugin.deregisterOnStop("monitormodal-pause");
window.MultiWindowPlugin.deregisterOnStart("monitormodal-resume");
-
+
}
- if ($rootScope.platformOS == 'desktop') {
- NVRDataModel.debug ("Removing keyboard handler");
+ if ($rootScope.platformOS == 'desktop') {
+ NVRDataModel.debug("Removing keyboard handler");
window.removeEventListener('keydown', keyboardHandler, true);
-
+
}
as(); // dregister auth success
$scope.isModalActive = false;
@@ -1461,42 +1475,42 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
});
req.then(function (resp) {
- resp = resp.data;
- if (resp.result == "Ok" && ndx != -1) {
- var ld = NVRDataModel.getLogin();
- var apiurl = ld.apiurl + "/events/" + resp.status.event + ".json";
- //console.log ("API " + apiurl);
- $http.get(apiurl)
- .then(function (data) {
- data = data.data;
- if ($scope.MontageMonitors[ndx].eventUrlTime != data.event.Event.StartTime) {
-
- var element = angular.element(document.getElementById($scope.MontageMonitors[ndx].Monitor.Id + "-timeline"));
- element.removeClass('animated slideInRight');
- element.addClass('animated slideOutRight');
- $timeout(function () {
- element.removeClass('animated slideOutRight');
- element.addClass('animated slideInRight');
- $scope.MontageMonitors[ndx].eventUrlTime = data.event.Event.StartTime;
- }, 300);
+ resp = resp.data;
+ if (resp.result == "Ok" && ndx != -1) {
+ var ld = NVRDataModel.getLogin();
+ var apiurl = ld.apiurl + "/events/" + resp.status.event + ".json";
+ //console.log ("API " + apiurl);
+ $http.get(apiurl)
+ .then(function (data) {
+ data = data.data;
+ if ($scope.MontageMonitors[ndx].eventUrlTime != data.event.Event.StartTime) {
+
+ var element = angular.element(document.getElementById($scope.MontageMonitors[ndx].Monitor.Id + "-timeline"));
+ element.removeClass('animated slideInRight');
+ element.addClass('animated slideOutRight');
+ $timeout(function () {
+ element.removeClass('animated slideOutRight');
+ element.addClass('animated slideInRight');
+ $scope.MontageMonitors[ndx].eventUrlTime = data.event.Event.StartTime;
+ }, 300);
- }
+ }
- },
- function (data) {
- $scope.MontageMonitors[ndx].eventUrlTime = "-";
- });
+ },
+ function (data) {
+ $scope.MontageMonitors[ndx].eventUrlTime = "-";
+ });
- }
+ }
- },
+ },
+
+ function (resp) {
+ //console.log("ERROR: " + JSON.stringify(resp));
+ NVRDataModel.log("Error sending event command " + JSON.stringify(resp), "error");
+ });
- function (resp) {
- //console.log("ERROR: " + JSON.stringify(resp));
- NVRDataModel.log("Error sending event command " + JSON.stringify(resp), "error");
- });
-
}
$scope.toggleListMenu = function () {
@@ -1562,198 +1576,198 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
var url = ld.apiurl + "/monitors/" + mid + ".json";
$http.get(url)
.then(function (data) {
- data = data.data;
- $scope.isControllable = data.monitor.Monitor.Controllable;
+ data = data.data;
+ $scope.isControllable = data.monitor.Monitor.Controllable;
- // *** Only for testing - comment out //
- //$scope.isControllable = '1';
- // for testing only
- // $scope.isControllable = 1;
- $scope.controlid = data.monitor.Monitor.ControlId;
- if ($scope.isControllable == '1') {
+ // *** Only for testing - comment out //
+ //$scope.isControllable = '1';
+ // for testing only
+ // $scope.isControllable = 1;
+ $scope.controlid = data.monitor.Monitor.ControlId;
+ if ($scope.isControllable == '1') {
- var apiurl = NVRDataModel.getLogin().apiurl;
- var myurl = apiurl + "/controls/" + $scope.controlid + ".json";
- NVRDataModel.debug("configurePTZ : getting controllable data " + myurl);
+ var apiurl = NVRDataModel.getLogin().apiurl;
+ var myurl = apiurl + "/controls/" + $scope.controlid + ".json";
+ NVRDataModel.debug("configurePTZ : getting controllable data " + myurl);
- $http.get(myurl)
- .then(function (data) {
- data = data.data;
- // *** Only for testing - comment out - start//
- /*data.Control.Control.CanSleep = '1';
- data.Control.Control.CanWake = '1';
- data.Control.Control.CanReset = '1';
- data.Control.Control.CanZoom = '1';
- data.control.Control.HasPresets = '1';
- data.control.Control.HasHomePreset = '1';*/
- // *** Only for testing - comment out - end //
-
-
- //data.control.Control.HasPresets = '1';
- //data.control.Control.HasHomePreset = '1'
-
-
- $scope.ptzMoveCommand = "move"; // start with as move;
- $scope.ptzStopCommand = "";
-
- // console.log ("GOT CONTROL "+JSON.stringify(data.control.Control));
-
- if (data.control.Control.CanZoom == '1') {
- $scope.canZoom = true;
- if (data.control.Control.CanZoomCon == '1') {
- $scope.zoomInCommand = "zoomConTele";
- $scope.zoomOutCommand = "zoomConWide";
-
- } else if (data.control.Control.CanZoomRel == '1') {
- $scope.zoomInCommand = "zoomRelTele";
- $scope.zoomOutCommand = "zoomRelWide";
- } else if (data.control.Control.CanZoomAbs == '1') {
- $scope.zoomInCommand = "zoomRelAbs";
- $scope.zoomOutCommand = "zoomRelAbs";
- }
- }
+ $http.get(myurl)
+ .then(function (data) {
+ data = data.data;
+ // *** Only for testing - comment out - start//
+ /*data.Control.Control.CanSleep = '1';
+ data.Control.Control.CanWake = '1';
+ data.Control.Control.CanReset = '1';
+ data.Control.Control.CanZoom = '1';
+ data.control.Control.HasPresets = '1';
+ data.control.Control.HasHomePreset = '1';*/
+ // *** Only for testing - comment out - end //
- NVRDataModel.debug("configurePTZ: control data returned " + JSON.stringify(data));
+ //data.control.Control.HasPresets = '1';
+ //data.control.Control.HasHomePreset = '1'
- if (data.control.Control.CanMoveMap == '1') {
- //seems moveMap uses Up/Down/Left/Right,
- // so no prefix
- $scope.ptzMoveCommand = "";
- $scope.ptzStopCommand = "moveStop";
- // console.log ("MoveAbs set");
- }
+ $scope.ptzMoveCommand = "move"; // start with as move;
+ $scope.ptzStopCommand = "";
- if (data.control.Control.CanMoveAbs == '1') {
+ // console.log ("GOT CONTROL "+JSON.stringify(data.control.Control));
- $scope.ptzMoveCommand = "moveAbs";
- $scope.ptzStopCommand = "moveStop";
- // console.log ("MoveAbs set");
- }
+ if (data.control.Control.CanZoom == '1') {
+ $scope.canZoom = true;
+ if (data.control.Control.CanZoomCon == '1') {
+ $scope.zoomInCommand = "zoomConTele";
+ $scope.zoomOutCommand = "zoomConWide";
- if (data.control.Control.CanMoveRel == '1') {
+ } else if (data.control.Control.CanZoomRel == '1') {
+ $scope.zoomInCommand = "zoomRelTele";
+ $scope.zoomOutCommand = "zoomRelWide";
+ } else if (data.control.Control.CanZoomAbs == '1') {
+ $scope.zoomInCommand = "zoomRelAbs";
+ $scope.zoomOutCommand = "zoomRelAbs";
+ }
+ }
- $scope.ptzMoveCommand = "moveRel";
- $scope.ptzStopCommand = "moveStop";
- }
+ NVRDataModel.debug("configurePTZ: control data returned " + JSON.stringify(data));
+ if (data.control.Control.CanMoveMap == '1') {
- // Prefer con over rel if both enabled
- // I've tested con
+ //seems moveMap uses Up/Down/Left/Right,
+ // so no prefix
+ $scope.ptzMoveCommand = "";
+ $scope.ptzStopCommand = "moveStop";
+ // console.log ("MoveAbs set");
+ }
- if (data.control.Control.CanMoveCon == '1') {
+ if (data.control.Control.CanMoveAbs == '1') {
- $scope.ptzMoveCommand = "moveCon";
- $scope.ptzStopCommand = "moveStop";
- }
- //CanMoveMap
+ $scope.ptzMoveCommand = "moveAbs";
+ $scope.ptzStopCommand = "moveStop";
+ // console.log ("MoveAbs set");
+ }
- // presets
- NVRDataModel.debug("ConfigurePTZ Preset value is " + data.control.Control.HasPresets);
- $scope.ptzPresets = [];
+ if (data.control.Control.CanMoveRel == '1') {
+ $scope.ptzMoveCommand = "moveRel";
+ $scope.ptzStopCommand = "moveStop";
+ }
- if (data.control.Control.HasPresets == '1') {
- //$scope.presetAndControl = $translate.instant('kPresets');
+ // Prefer con over rel if both enabled
+ // I've tested con
- $scope.ptzPresetCount = parseInt(data.control.Control.NumPresets);
- //$scope.ptzPresetCount =80;
+ if (data.control.Control.CanMoveCon == '1') {
- NVRDataModel.debug("ConfigurePTZ Number of presets is " + $scope.ptzPresetCount);
+ $scope.ptzMoveCommand = "moveCon";
+ $scope.ptzStopCommand = "moveStop";
+ }
+ //CanMoveMap
- for (var p = 0; p < $scope.ptzPresetCount; p++) {
- $scope.ptzPresets.push({
- name: (p + 1).toString(),
- icon: '',
- cmd: "presetGoto" + (p + 1).toString(),
- style: 'button-royal'
- });
+ // presets
+ NVRDataModel.debug("ConfigurePTZ Preset value is " + data.control.Control.HasPresets);
+ $scope.ptzPresets = [];
- }
- if (data.control.Control.HasHomePreset == '1') {
- $scope.ptzPresets.unshift({
- name: '',
- icon: "ion-ios-home",
- cmd: 'presetHome',
- style: 'button-royal'
- });
- }
- /* MAKE SURE THIS IS THE FIRST ICON */
- $scope.ptzPresets.unshift({
- // name: 'W',
- icon: "ion-chevron-up",
- cmd: 'special-hide-unhide',
- style: 'button-royal button-dark ',
- });
+ if (data.control.Control.HasPresets == '1') {
+ //$scope.presetAndControl = $translate.instant('kPresets');
+ $scope.ptzPresetCount = parseInt(data.control.Control.NumPresets);
+ //$scope.ptzPresetCount =80;
- }
- /*else
- {
- $scope.presetAndControl = $translate.instant('kMore');
- }*/
- // lets add these to the end
- // strictly speaking, they aren't really presets, but meh for now
+ NVRDataModel.debug("ConfigurePTZ Number of presets is " + $scope.ptzPresetCount);
- // no need to darken these buttons if presets are not there
- var buttonAccent = "button-dark";
- if ($scope.ptzPresets.length == 0) {
- buttonAccent = "";
- }
+ for (var p = 0; p < $scope.ptzPresetCount; p++) {
+ $scope.ptzPresets.push({
+ name: (p + 1).toString(),
+ icon: '',
+ cmd: "presetGoto" + (p + 1).toString(),
+ style: 'button-royal'
+ });
- if (data.control.Control.CanWake == '1') {
+ }
- $scope.ptzPresets.push({
- name: 'W',
- icon: "ion-eye",
- cmd: 'wake',
- style: 'button-royal ' + buttonAccent
- });
+ if (data.control.Control.HasHomePreset == '1') {
+ $scope.ptzPresets.unshift({
+ name: '',
+ icon: "ion-ios-home",
+ cmd: 'presetHome',
+ style: 'button-royal'
+ });
- }
+ }
- if (data.control.Control.CanSleep == '1') {
- $scope.ptzPresets.push({
- name: 'S',
- icon: "ion-eye-disabled",
- cmd: 'sleep',
- style: 'button-royal ' + buttonAccent
- });
+ /* MAKE SURE THIS IS THE FIRST ICON */
+ $scope.ptzPresets.unshift({
+ // name: 'W',
+ icon: "ion-chevron-up",
+ cmd: 'special-hide-unhide',
+ style: 'button-royal button-dark ',
+ });
- }
- if (data.control.Control.CanReset == '1') {
- $scope.ptzPresets.push({
- name: 'R',
- icon: "ion-ios-loop-strong",
- cmd: 'reset',
- style: 'button-royal ' + buttonAccent
- });
+ }
+ /*else
+ {
+ $scope.presetAndControl = $translate.instant('kMore');
+ }*/
+ // lets add these to the end
+ // strictly speaking, they aren't really presets, but meh for now
- }
+ // no need to darken these buttons if presets are not there
+ var buttonAccent = "button-dark";
+ if ($scope.ptzPresets.length == 0) {
+ buttonAccent = "";
+ }
- NVRDataModel.log("ConfigurePTZ Modal: ControlDB reports PTZ command to be " + $scope.ptzMoveCommand);
- },
- function (data) {
- // console.log("** Error retrieving move PTZ command");
- NVRDataModel.log("ConfigurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error");
- });
+ if (data.control.Control.CanWake == '1') {
- } else {
- NVRDataModel.log("configurePTZ " + mid + " is not PTZ controllable");
- }
- },
- function (data) {
- // console.log("** Error retrieving move PTZ command");
- NVRDataModel.log("configurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error");
- });
+ $scope.ptzPresets.push({
+ name: 'W',
+ icon: "ion-eye",
+ cmd: 'wake',
+ style: 'button-royal ' + buttonAccent
+ });
+
+ }
+
+ if (data.control.Control.CanSleep == '1') {
+ $scope.ptzPresets.push({
+ name: 'S',
+ icon: "ion-eye-disabled",
+ cmd: 'sleep',
+ style: 'button-royal ' + buttonAccent
+ });
+
+ }
+
+ if (data.control.Control.CanReset == '1') {
+ $scope.ptzPresets.push({
+ name: 'R',
+ icon: "ion-ios-loop-strong",
+ cmd: 'reset',
+ style: 'button-royal ' + buttonAccent
+ });
+
+ }
+
+ NVRDataModel.log("ConfigurePTZ Modal: ControlDB reports PTZ command to be " + $scope.ptzMoveCommand);
+ },
+ function (data) {
+ // console.log("** Error retrieving move PTZ command");
+ NVRDataModel.log("ConfigurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error");
+ });
+
+ } else {
+ NVRDataModel.log("configurePTZ " + mid + " is not PTZ controllable");
+ }
+ },
+ function (data) {
+ // console.log("** Error retrieving move PTZ command");
+ NVRDataModel.log("configurePTZ : Error retrieving PTZ command " + JSON.stringify(data), "error");
+ });
}
@@ -1799,11 +1813,10 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$
document.addEventListener("pause", onPause, false);
document.addEventListener("resume", onResume, false);
- }
- else {
- NVRDataModel.debug ("MonitorModal: Android detected, using cordova-multiwindow plugin for onStop/onStart instead");
- window.MultiWindowPlugin.registerOnStop("monitormodal-pause", onPause);
- window.MultiWindowPlugin.registerOnStart("monitormodal-resume", onResume);
+ } else {
+ NVRDataModel.debug("MonitorModal: Android detected, using cordova-multiwindow plugin for onStop/onStart instead");
+ window.MultiWindowPlugin.registerOnStop("monitormodal-pause", onPause);
+ window.MultiWindowPlugin.registerOnStart("monitormodal-resume", onResume);
}
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index f4c77a80..161a1025 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -35,7 +35,7 @@ angular.module('zmApp.controllers')
SNAPSHOT: 1,
ACTIVE: 2,
STOPPED: 3,
- PAUSED:4
+ PAUSED: 4
};
var currentStreamState = streamState.SNAPSHOT; // first load snapshot
@@ -49,7 +49,7 @@ angular.module('zmApp.controllers')
var as = $scope.$on("auth-success", function () {
- /* var tnow = new Date();
+ /* var tnow = new Date();
var s = Math.round((tnow - timeInMontage) / 1000);
NVRDataModel.debug ("Montage re-auth: time since we are here: " + s +
" seconds");
@@ -313,7 +313,7 @@ angular.module('zmApp.controllers')
pckry = new Packery('.grid', {
itemSelector: '.grid-item',
percentPosition: true,
- //columnWidth: '.grid-sizer',
+ //columnWidth: '.grid-sizer',
gutter: 0,
initLayout: layouttype,
shiftPercentResize: true,
@@ -334,15 +334,15 @@ angular.module('zmApp.controllers')
progressCalled = true;
loadCount++;
- // console.log ("loaded "+loadCount+" of "+positions.length);
+ // console.log ("loaded "+loadCount+" of "+positions.length);
// if (layouttype) $timeout (function(){layout(pckry);},100);
});
- $timeout (function() {
+ $timeout(function () {
if ($scope.areImagesLoading) {
- NVRDataModel.debug ("Images still loading after 15secs?");
+ NVRDataModel.debug("Images still loading after 15secs?");
allImagesLoadedOrFailed();
}
@@ -365,10 +365,12 @@ angular.module('zmApp.controllers')
});
function allImagesLoadedOrFailed() {
-
- $timeout (function() {$scope.areImagesLoading = false;});
-
+
+ $timeout(function () {
+ $scope.areImagesLoading = false;
+ });
+
currentStreamState = streamState.SNAPSHOT;
if (simulStreaming) {
@@ -664,7 +666,7 @@ angular.module('zmApp.controllers')
else
$scope.timeNow = moment().tz(NVRDataModel.getTimeZoneNow()).format(NVRDataModel.getTimeFormatSec());
-
+
if (simulStreaming) {
// console.log ("Skipping timer as simulStreaming");
return;
@@ -683,7 +685,7 @@ angular.module('zmApp.controllers')
// if you see the time move, montage should move
-
+
//$scope.timeNow = moment().format(NVRDataModel.getTimeFormatSec());
//console.log ("Inside Montage timer...");
@@ -1187,11 +1189,11 @@ angular.module('zmApp.controllers')
if (simulStreaming) {
NVRDataModel.debug("Pausing all streams in montage to save memory/nw...");
-
- for (var i = 0; i < $scope.MontageMonitors.length; i++) {
- if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.pauseLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL, $scope.MontageMonitors[i].Monitor.Name);
- }
-
+
+ for (var i = 0; i < $scope.MontageMonitors.length; i++) {
+ if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.pauseLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL, $scope.MontageMonitors[i].Monitor.Name);
+ }
+
}
});
@@ -1325,12 +1327,12 @@ angular.module('zmApp.controllers')
for (var i = 0; i < $scope.MontageMonitors.length; i++) {
if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.resumeLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL, $scope.MontageMonitors[i].Monitor.Name);
}
- /* NVRDataModel.regenConnKeys();
- $scope.monitors = NVRDataModel.getMonitorsNow();
- $scope.MontageMonitors = angular.copy($scope.monitors);*/
+ /* NVRDataModel.regenConnKeys();
+ $scope.monitors = NVRDataModel.getMonitorsNow();
+ $scope.MontageMonitors = angular.copy($scope.monitors);*/
}
-
+
}
@@ -1377,7 +1379,7 @@ angular.module('zmApp.controllers')
broadcastHandles = [];
-
+
$timeout(function () {
if (!$scope.singleMonitorModalOpen && simulStreaming) {
NVRDataModel.debug("Killing all streams in montage to save memory/nw...");
@@ -1432,9 +1434,9 @@ angular.module('zmApp.controllers')
$scope.$on('$ionicView.leave', function () {
// console.log("**VIEW ** Montage Ctrl Left, force removing modal");
if ($rootScope.platformOS == 'android') {
- NVRDataModel.debug ("Deregistering handlers for multi-window");
+ NVRDataModel.debug("Deregistering handlers for multi-window");
window.MultiWindowPlugin.deregisterOnStop("montage-pause");
-
+
}
if ($scope.modal) $scope.modal.remove();
});
@@ -1771,7 +1773,7 @@ angular.module('zmApp.controllers')
var stream;
if (currentStreamState == streamState.STOPPED || monitor.Monitor.listDisplay == 'noshow' || $rootScope.authSession == 'undefined') {
- // console.log ("STREAM=empty and auth="+$rootScope.authSession);
+ // console.log ("STREAM=empty and auth="+$rootScope.authSession);
return "";
}
@@ -1794,7 +1796,7 @@ angular.module('zmApp.controllers')
//"&rand="+$scope.randToAvoidCacheMem +
- // console.log("STREAM=" + stream);
+ // console.log("STREAM=" + stream);
return stream;
};
@@ -2004,10 +2006,9 @@ angular.module('zmApp.controllers')
if ($rootScope.platformOS != 'android') {
document.addEventListener("pause", onPause, false);
- }
- else {
- NVRDataModel.debug ("MontageCtrl: Android detected, using cordova-multiwindow plugin for onStop/onStart instead");
- window.MultiWindowPlugin.registerOnStop("montage-pause", onPause);
+ } else {
+ NVRDataModel.debug("MontageCtrl: Android detected, using cordova-multiwindow plugin for onStop/onStart instead");
+ window.MultiWindowPlugin.registerOnStop("montage-pause", onPause);
}
// document.addEventListener("resume", onResume, false);
@@ -2189,18 +2190,18 @@ angular.module('zmApp.controllers')
pckry.once('layoutComplete', resizeComplete);
pckry.layout();
- /* pckry.getItemElements().forEach(function (elem) {
- var id = elem.getAttribute("data-item-id");
- var sz = elem.getAttribute("data-item-size");
- if (isNaN(sz)) sz = 20;
- //console.log("NOW IT IS-> " + id + ":" + sz);
- if (oldScales[id] != sz) {
- //console.log("Calling FIT on " + id + " size:" + oldScales[id] + "->" + sz);
- pckry.once('fitComplete', resizeComplete);
- pckry.fit(elem);
-
- }
- });*/
+ /* pckry.getItemElements().forEach(function (elem) {
+ var id = elem.getAttribute("data-item-id");
+ var sz = elem.getAttribute("data-item-size");
+ if (isNaN(sz)) sz = 20;
+ //console.log("NOW IT IS-> " + id + ":" + sz);
+ if (oldScales[id] != sz) {
+ //console.log("Calling FIT on " + id + " size:" + oldScales[id] + "->" + sz);
+ pckry.once('fitComplete', resizeComplete);
+ pckry.fit(elem);
+
+ }
+ });*/
} else //shrink
{
//console.log("Calling shift");
diff --git a/www/js/NewsCtrl.js b/www/js/NewsCtrl.js
index 55712753..ba45fb0e 100644
--- a/www/js/NewsCtrl.js
+++ b/www/js/NewsCtrl.js
@@ -88,12 +88,12 @@ angular.module('zmApp.controllers').controller('zmApp.NewsCtrl', ['$scope', '$ro
$http.get(zm.blogUrl, {
- responseType:'text'
+ responseType: 'text'
})
.then(function (datastr) {
datastr = datastr.data;
var trunc = "])}while(1);</x>";
- datastr= datastr.substr(trunc.length);
+ datastr = datastr.substr(trunc.length);
// console.log ("DATA:"+data);
//
var data = JSON.parse(datastr);
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index 2397adef..7fb4cc50 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -3,7 +3,7 @@
/*This is for the loop closure I am using in line 143 */
/* jslint browser: true*/
/* global vis,cordova,StatusBar,angular,console,moment */
-angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionicPlatform', '$scope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', 'zmAutoLogin', '$ionicHistory', 'EventServer', '$translate', '$ionicPopup',function ($ionicPlatform, $scope, zm, NVRDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, zmAutoLogin, $ionicHistory, EventServer, $translate, $ionicPopup) {
+angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionicPlatform', '$scope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', 'zmAutoLogin', '$ionicHistory', 'EventServer', '$translate', '$ionicPopup', function ($ionicPlatform, $scope, zm, NVRDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, zmAutoLogin, $ionicHistory, EventServer, $translate, $ionicPopup) {
var processPush = false;
var broadcastHandles = [];
@@ -437,18 +437,18 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
EventServer.init();
NVRDataModel.zmPrivacyProcessed()
- .then (function (val) {
- console.log(">>>>>>>>>>>>>>>>>>> PRIVACY PROCEESSED:"+val);
- if (!val) {
- var alertPopup = $ionicPopup.alert({
- title: $translate.instant ('kNote'),
- template: $translate.instant('kDataPrivacyZM'),
- okText: $translate.instant('kButtonOk'),
- cancelText: $translate.instant('kButtonCancel'),
- });
+ .then(function (val) {
+ console.log(">>>>>>>>>>>>>>>>>>> PRIVACY PROCEESSED:" + val);
+ if (!val) {
+ var alertPopup = $ionicPopup.alert({
+ title: $translate.instant('kNote'),
+ template: $translate.instant('kDataPrivacyZM'),
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ });
- }
- });
+ }
+ });
// if push broadcast happens BEFORE this, then no
// state change will occur here which is good
@@ -551,6 +551,6 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
NVRDataModel.log("Entering Portal Main");
var loginData;
$ionicSideMenuDelegate.canDragContent(true);
-
+
}]);
diff --git a/www/js/StateCtrl.js b/www/js/StateCtrl.js
index d845d02a..62bffb81 100644
--- a/www/js/StateCtrl.js
+++ b/www/js/StateCtrl.js
@@ -63,16 +63,16 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup'
$scope.$on('$ionicView.enter', function () {
// console.log("**VIEW ** Montage Ctrl Entered");
NVRDataModel.setAwake(false);
-
+
});
$scope.$on('$ionicView.afterEnter', function () {
// console.log("**VIEW ** Montage Ctrl Entered");
-
- console.log ("STATE SHORTCUT: " + JSON.stringify($stateParams));
- $stateParams.shortcut && $stateParams.shortcut.fn &&
- $scope[$stateParams.shortcut.fn]($stateParams.shortcut.fnargs); // jshint ignore:line
-
+
+ console.log("STATE SHORTCUT: " + JSON.stringify($stateParams));
+ $stateParams.shortcut && $stateParams.shortcut.fn &&
+ $scope[$stateParams.shortcut.fn]($stateParams.shortcut.fnargs); // jshint ignore:line
+
});
//---------------------------------------------------------
diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js
index a5c7f818..e1fbc4ef 100644
--- a/www/js/TimelineCtrl.js
+++ b/www/js/TimelineCtrl.js
@@ -277,10 +277,10 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//-------------------------------------------------
$scope.$on('$ionicView.leave', function () {
- if ($rootScope.platformOS == 'desktop') {
- NVRDataModel.debug ("Removing keyboard handler");
+ if ($rootScope.platformOS == 'desktop') {
+ NVRDataModel.debug("Removing keyboard handler");
window.removeEventListener('keydown', keyboardHandler, true);
-
+
}
NVRDataModel.debug("Timeline: Deregistering broadcast handles");
@@ -311,16 +311,16 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
timeline = '';
$scope.newEvents = '';
- if ($rootScope.platformOS == 'desktop') {
+ if ($rootScope.platformOS == 'desktop') {
window.addEventListener('keydown', keyboardHandler, true);
-
+
}
-
+
});
// Keyboard handler for desktop versions
- function keyboardHandler(evt) {
+ function keyboardHandler(evt) {
var handled = false;
var keyCodes = {
@@ -328,51 +328,42 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//events
LEFT: 37,
RIGHT: 39,
- UP:38,
- DOWN:40,
+ UP: 38,
+ DOWN: 40,
ESC: 27,
-
+
PREVDAY_A: 65,
NEXTDAY_D: 68,
-
+
};
- $timeout (function () {
+ $timeout(function () {
var keyCode = evt.keyCode;
-
- console.log (keyCode + " PRESSED");
+
+ console.log(keyCode + " PRESSED");
if (keyCode == keyCodes.UP) {
timeline.zoomIn(0.2);
- }
- else if (keyCode == keyCodes.DOWN) {
+ } else if (keyCode == keyCodes.DOWN) {
timeline.zoomIn(0.2);
- }
- else if (keyCode == keyCodes.LEFT) {
-
- move (-0.2);
- }
- else if (keyCode == keyCodes.RIGHT) {
- move (0.2);
- }
+ } else if (keyCode == keyCodes.LEFT) {
- else if (keyCode == keyCodes.ESC) {
+ move(-0.2);
+ } else if (keyCode == keyCodes.RIGHT) {
+ move(0.2);
+ } else if (keyCode == keyCodes.ESC) {
timeline.fit();
- }
-
- else if (keyCode == keyCodes.PREVDAY_A) {
+ } else if (keyCode == keyCodes.PREVDAY_A) {
$scope.moveDays(-1);
- }
-
- else if (keyCode == keyCodes.NEXTDAY_D) {
+ } else if (keyCode == keyCodes.NEXTDAY_D) {
$scope.moveDays(1);
}
-
+
handled = true;
return handled;
@@ -1104,7 +1095,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
NVRDataModel.getEventsPages(0, fromDateNoLang, toDateNoLang)
.then(function (epData) {
- var pages = 1;
+ var pages = 1;
var itemsPerPage = parseInt(epData.limit);
var iterCount;
@@ -1120,7 +1111,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
while ((pages <= epData.pageCount) && (iterCount > 0)) {
var promise = NVRDataModel.getEvents(0, pages, "none", fromDateNoLang, toDateNoLang);
promises.push(promise);
-
+
pages++;
iterCount--;
@@ -1128,7 +1119,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
$q.all(promises)
.then(function (data) {
- NVRDataModel.debug("TimelineCtrl/drawgraph: all pages of graph data received " );
+ NVRDataModel.debug("TimelineCtrl/drawgraph: all pages of graph data received ");
graphIndex = 0;
NVRDataModel.log("Creating " + $scope.monitors.length + " groups for the graph");
// create groups
@@ -1146,8 +1137,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
for (var j = 0; j < data.length; j++) {
var myevents = data[j].events;
- // console.log ("****************DATA ="+JSON.stringify(data[j]));
- // console.log ("**********************************");
+ // console.log ("****************DATA ="+JSON.stringify(data[j]));
+ // console.log ("**********************************");
if (graphIndex > count) {
NVRDataModel.log("Exiting page count graph - reached limit of " + count);
break;
@@ -1208,30 +1199,30 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//console.log ("ADDED "+tzs+" " +tze);
if (!graphData.get(myevents[i].Event.Id)) {
- graphData.add({
- //id: graphIndex,
- id: myevents[i].Event.Id,
- content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[i].Event.AlarmFrames + ") " + "(" + myevents[i].Event.Id + ") " + myevents[i].Event.Notes + "</span>",
-
- start: tzs,
- //start: myevents[i].Event.StartTime,
- //end: myevents[i].Event.EndTime,
- end: tze,
- group: myevents[i].Event.MonitorId,
- //type: "range",
- style: "background-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length] +
- ";border-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length],
- myframes: myevents[i].Event.Frames,
- mydur: myevents[i].Event.Length,
- myeid: myevents[i].Event.Id,
- myename: myevents[i].Event.Name,
- myvideo: myevents[i].Event.DefaultVideo,
- myevent: myevents[i]
-
- });
- //console.log ("IED="+myevents[i].Event.Id);
- graphIndex++;
- }
+ graphData.add({
+ //id: graphIndex,
+ id: myevents[i].Event.Id,
+ content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[i].Event.AlarmFrames + ") " + "(" + myevents[i].Event.Id + ") " + myevents[i].Event.Notes + "</span>",
+
+ start: tzs,
+ //start: myevents[i].Event.StartTime,
+ //end: myevents[i].Event.EndTime,
+ end: tze,
+ group: myevents[i].Event.MonitorId,
+ //type: "range",
+ style: "background-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length] +
+ ";border-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length],
+ myframes: myevents[i].Event.Frames,
+ mydur: myevents[i].Event.Length,
+ myeid: myevents[i].Event.Id,
+ myename: myevents[i].Event.Name,
+ myvideo: myevents[i].Event.DefaultVideo,
+ myevent: myevents[i]
+
+ });
+ //console.log ("IED="+myevents[i].Event.Id);
+ graphIndex++;
+ }
} else {
//console.log ("SKIPPED GRAPH ID " + graphIndex);
}
diff --git a/www/js/WizardCtrl.js b/www/js/WizardCtrl.js
index a152f537..f4b3d456 100644
--- a/www/js/WizardCtrl.js
+++ b/www/js/WizardCtrl.js
@@ -39,32 +39,32 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$
}
})
.then(function (data, status, headers) {
- data = data.data;
- //console.log("LOOKING FOR " + zm.loginScreenString);
- //console.log("DATA RECEIVED " + JSON.stringify(data));
- if (data.indexOf(zm.loginScreenString) == -1) {
-
- $scope.wizard.loginURL = $scope.wizard.fqportal;
- $scope.wizard.portalValidText = $translate.instant('kPortal') + ": " + $scope.wizard.loginURL;
- $scope.wizard.portalColor = "#16a085";
- d.resolve(true);
- return d.promise;
- } else {
- //console.log("************ERROR");
+ data = data.data;
+ //console.log("LOOKING FOR " + zm.loginScreenString);
+ //console.log("DATA RECEIVED " + JSON.stringify(data));
+ if (data.indexOf(zm.loginScreenString) == -1) {
+
+ $scope.wizard.loginURL = $scope.wizard.fqportal;
+ $scope.wizard.portalValidText = $translate.instant('kPortal') + ": " + $scope.wizard.loginURL;
+ $scope.wizard.portalColor = "#16a085";
+ d.resolve(true);
+ return d.promise;
+ } else {
+ //console.log("************ERROR");
+ $scope.wizard.portalValidText = $translate.instant('kPortalDetectionFailed');
+ $scope.wizard.portalColor = "#e74c3c";
+ d.reject(false);
+ return d.promise;
+ }
+ },
+ function (error) {
+ // console.log("************ERROR:"+ JSON.stringify(error));
$scope.wizard.portalValidText = $translate.instant('kPortalDetectionFailed');
$scope.wizard.portalColor = "#e74c3c";
d.reject(false);
return d.promise;
- }
- },
- function (error) {
- // console.log("************ERROR:"+ JSON.stringify(error));
- $scope.wizard.portalValidText = $translate.instant('kPortalDetectionFailed');
- $scope.wizard.portalColor = "#e74c3c";
- d.reject(false);
- return d.promise;
- });
+ });
return d.promise;
@@ -141,7 +141,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$
return d.promise;
}
-
+
return findFirstReachableUrl(urls.slice(1), tail);
});
} else {
@@ -196,11 +196,11 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$
var urls = [a1, a2, a3, a4, a5];
// can't use getPathZms as loginData is not inited yet
- $http.get ($scope.wizard.apiURL+"/configs/viewByName/ZM_PATH_ZMS.json")
- //NVRDataModel.getPathZms() // what does ZM have stored in PATH_ZMS?
+ $http.get($scope.wizard.apiURL + "/configs/viewByName/ZM_PATH_ZMS.json")
+ //NVRDataModel.getPathZms() // what does ZM have stored in PATH_ZMS?
.then(function (data) {
// remove zms or nph-zms
- var str = data.data.config.Value;
+ var str = data.data.config.Value;
var path = str.trim();
path = path.replace("/nph-zms", "");
path = path.replace("/zms", "");
@@ -396,7 +396,7 @@ angular.module('zmApp.controllers').controller('zmApp.WizardCtrl', ['$scope', '$
//--------------------------------------------------------------------------
function validateDataNewAPI() {
-
+
}
function validateData() {
diff --git a/www/js/app.js b/www/js/app.js
index da87b821..fef31358 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -11,8 +11,6 @@
var appVersion = "0.0.0";
-
-
// core app start stuff
angular.module('zmApp', [
'ionic',
@@ -25,7 +23,6 @@ angular.module('zmApp', [
'com.2fdevs.videogular',
'com.2fdevs.videogular.plugins.controls',
'com.2fdevs.videogular.plugins.overlayplay',
- //'ionic-native-transitions',
'mgo-angular-wizard',
'pascalprecht.translate',
'uk.ac.soton.ecs.videogular.plugins.cuepoints',
@@ -120,7 +117,7 @@ angular.module('zmApp', [
// window title and going out of sync
// seems to get stuck in mobile
.controller('zmApp.appCtrl', function ($scope, $rootScope) {
- $scope.$on('$ionicView.afterEnter', function(ev, data) {
+ $scope.$on('$ionicView.afterEnter', function (ev, data) {
if ($rootScope.platformOS == 'desktop') ev.stopPropagation();
});
})
@@ -763,7 +760,7 @@ angular.module('zmApp', [
// $localstorage.set("lastUpdateCheck", moment().toISOString());
//console.log ("FULL STRING " + success.data.tag_name);
- // console.log ("^^^^^^^^^^^^^ GOT: " + JSON.stringify(success));
+ // console.log ("^^^^^^^^^^^^^ GOT: " + JSON.stringify(success));
var res = success.data.tag_name.match("v(.*)");
zmUpdateVersion = res[1];
@@ -785,8 +782,8 @@ angular.module('zmApp', [
NVRDataModel.log("Checking for news updates");
$http.get(zm.blogUrl, {
- responseType:'text',
- transformResponse:undefined
+ responseType: 'text',
+ transformResponse: undefined
})
.then(function (datastr) {
@@ -914,22 +911,22 @@ angular.module('zmApp', [
// we need AUTH_HASH_LOGIN to be on for WKWebView /mobile
if (ld.isUseAuth && $rootScope.platformOS != 'desktop') {
- NVRDataModel.getAuthHashLogin()
- .then (function (data) {
-
- if (data.data && data.data.config.Value != '1') {
- $ionicPopup.alert({
- title: $translate.instant('kError'),
- template: $translate.instant('kAuthHashDisabled')
- });
- }
+ NVRDataModel.getAuthHashLogin()
+ .then(function (data) {
- },
- function (err) {
- console.log ("AUTH HASH ERROR: "+JSON.stringify(conf));
- });
+ if (data.data && data.data.config.Value != '1') {
+ $ionicPopup.alert({
+ title: $translate.instant('kError'),
+ template: $translate.instant('kAuthHashDisabled')
+ });
+ }
+
+ },
+ function (err) {
+ console.log("AUTH HASH ERROR: " + JSON.stringify(conf));
+ });
}
-
+
});
@@ -974,7 +971,7 @@ angular.module('zmApp', [
var ld = NVRDataModel.getLogin();
var statename = $ionicHistory.currentStateName();
-
+
if (statename == "montage-history") {
NVRDataModel.log("Skipping login process as we are in montage history. Re-logging will mess up the stream");
@@ -1009,8 +1006,8 @@ angular.module('zmApp', [
$ionicLoading.show({
template: $translate.instant('kReachabilityFailed'),
noBackdrop: true,
-
- });
+
+ });
NVRDataModel.debug(">>>>>>>>>>>> Failed first login, trying reachability");
NVRDataModel.getReachableConfig(true)
.then(function (data) {
@@ -1064,7 +1061,7 @@ angular.module('zmApp', [
}
- if (!str) str = $translate.instant ('kAuthenticating');
+ if (!str) str = $translate.instant('kAuthenticating');
if (str) {
$ionicLoading.show({
@@ -1082,102 +1079,106 @@ angular.module('zmApp', [
//first login using new API
var loginAPI = loginData.apiurl + '/host/login.json';
-
+
$http({
- method:'post',
- url: loginAPI,
- timeout:httpDelay,
- headers: {'Content-Type': 'application/x-www-form-urlencoded'},
- responseType:'text',
- transformResponse: undefined,
- transformRequest: function(obj) {
- var str = [];
- for(var p in obj)
- str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
- return str.join("&");
- },
- data: {user: loginData.username, pass: loginData.password}
- })
- //$http.get(loginAPI)
+ method: 'post',
+ url: loginAPI,
+ timeout: httpDelay,
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ responseType: 'text',
+ transformResponse: undefined,
+ transformRequest: function (obj) {
+ var str = [];
+ for (var p in obj)
+ str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
+ return str.join("&");
+ },
+ data: {
+ user: loginData.username,
+ pass: loginData.password
+ }
+ })
+ //$http.get(loginAPI)
.then(function (textsucc) {
- $ionicLoading.hide();
+ $ionicLoading.hide();
var succ;
-
+
try {
succ = JSON.parse(textsucc.data);
- if (!succ.version) {
- NVRDataModel.debug ("API login returned fake success, going back to webscrape");
- var ld = NVRDataModel.getLogin();
- ld.loginAPISupported = false;
- NVRDataModel.setLogin(ld);
-
- loginWebScrape()
- .then ( function (succ) {
+ if (!succ.version) {
+ NVRDataModel.debug("API login returned fake success, going back to webscrape");
+ var ld = NVRDataModel.getLogin();
+ ld.loginAPISupported = false;
+ NVRDataModel.setLogin(ld);
+
+ loginWebScrape()
+ .then(function (succ) {
d.resolve("Login Success");
return d.promise;
- },
- function (err) {
- $ionicLoading.hide();
- d.reject("Login Error");
- return (d.promise);
- });
- return d.promise;
- }
- NVRDataModel.debug ("API based login returned... ");
- NVRDataModel.setCurrentServerVersion(succ.version);
- $ionicLoading.hide();
- //$rootScope.loggedIntoZm = 1;
- $rootScope.authSession = '';
-
- if (succ.credentials) {
- $rootScope.authSession = "&" + succ.credentials;
- if (succ.append_password == '1') {
- $rootScope.authSession = $rootScope.authSession +
- loginData.password;
- }
+ },
+ function (err) {
+ $ionicLoading.hide();
+ d.reject("Login Error");
+ return (d.promise);
+ });
+ return d.promise;
+ }
+ NVRDataModel.debug("API based login returned... ");
+ NVRDataModel.setCurrentServerVersion(succ.version);
+ $ionicLoading.hide();
+ //$rootScope.loggedIntoZm = 1;
+ $rootScope.authSession = '';
+
+ if (succ.credentials) {
+ $rootScope.authSession = "&" + succ.credentials;
+ if (succ.append_password == '1') {
+ $rootScope.authSession = $rootScope.authSession +
+ loginData.password;
}
-
- var ldg = NVRDataModel.getLogin();
- ldg.loginAPISupported = true;
- NVRDataModel.setLogin(ldg);
-
- NVRDataModel.log("Stream authentication construction: " +
+ }
+
+ var ldg = NVRDataModel.getLogin();
+ ldg.loginAPISupported = true;
+ NVRDataModel.setLogin(ldg);
+
+ NVRDataModel.log("Stream authentication construction: " +
$rootScope.authSession);
-
- NVRDataModel.log("zmAutologin successfully logged into Zoneminder via API");
-
-
-
- d.resolve("Login Success");
-
- $rootScope.$broadcast('auth-success', succ);
- }
- catch (e) {
- NVRDataModel.debug ("Login API approach did not work...");
+
+ NVRDataModel.log("zmAutologin successfully logged into Zoneminder via API");
+
+
+
+ d.resolve("Login Success");
+
+ $rootScope.$broadcast('auth-success', succ);
+ } catch (e) {
+ NVRDataModel.debug("Login API approach did not work...");
var ld = NVRDataModel.getLogin();
- ld.loginAPISupported = false;
- NVRDataModel.setLogin(ld);
- loginWebScrape()
- .then ( function (succ) {
+ ld.loginAPISupported = false;
+ NVRDataModel.setLogin(ld);
+ loginWebScrape()
+ .then(function (succ) {
d.resolve("Login Success");
return d.promise;
- },
- function (err) {
- $ionicLoading.hide();
- d.reject("Login Error");
- return (d.promise);
- });
- return d.promise;
+ },
+ function (err) {
+ $ionicLoading.hide();
+ d.reject("Login Error");
+ return (d.promise);
+ });
+ return d.promise;
}
-
+
},
function (err) {
@@ -1186,36 +1187,35 @@ angular.module('zmApp', [
if (1) {
- //if (err && err.data && 'success' in err.data) {
+ //if (err && err.data && 'success' in err.data) {
console.log("API based login not supported, need to use web scraping...");
// login using old web scraping
var ld = NVRDataModel.getLogin();
ld.loginAPISupported = false;
NVRDataModel.setLogin(ld);
loginWebScrape()
- .then ( function (succ) {
- d.resolve("Login Success");
- return d.promise;
- },
- function (err) {
- d.reject("Login Error");
- return (d.promise);
- });
+ .then(function (succ) {
+ d.resolve("Login Success");
+ return d.promise;
+ },
+ function (err) {
+ d.reject("Login Error");
+ return (d.promise);
+ });
- }
- else {
+ } else {
// $rootScope.loggedIntoZm = -1;
- //console.log("**** ZM Login FAILED");
- NVRDataModel.log("zmAutologin Error via API: some meta foo", "error");
- $rootScope.$broadcast('auth-error', "I'm confused why");
+ //console.log("**** ZM Login FAILED");
+ NVRDataModel.log("zmAutologin Error via API: some meta foo", "error");
+ $rootScope.$broadcast('auth-error', "I'm confused why");
- d.reject("Login Error");
- return (d.promise);
+ d.reject("Login Error");
+ return (d.promise);
}
-
+
}
);
@@ -1238,7 +1238,7 @@ angular.module('zmApp', [
noBackdrop: true,
duration: httpDelay
});
-
+
NVRDataModel.isReCaptcha()
.then(function (result) {
@@ -1294,83 +1294,83 @@ angular.module('zmApp', [
}
})
.then(function (data, status, headers) {
- // console.log(">>>>>>>>>>>>>> PARALLEL POST SUCCESS");
- data = data.data;
- $ionicLoading.hide();
+ // console.log(">>>>>>>>>>>>>> PARALLEL POST SUCCESS");
+ data = data.data;
+ $ionicLoading.hide();
- // Coming here does not mean success
- // it could also be a bad login, but
- // ZM returns you to login.php and returns 200 OK
- // so we will check if the data has
- // <title>ZM - Login</title> -- it it does then its the login page
+ // Coming here does not mean success
+ // it could also be a bad login, but
+ // ZM returns you to login.php and returns 200 OK
+ // so we will check if the data has
+ // <title>ZM - Login</title> -- it it does then its the login page
- if (data.indexOf(zm.loginScreenString) == -1) {
- //eventServer.start();
- //$rootScope.loggedIntoZm = 1;
+ if (data.indexOf(zm.loginScreenString) == -1) {
+ //eventServer.start();
+ //$rootScope.loggedIntoZm = 1;
- NVRDataModel.log("zmAutologin successfully logged into Zoneminder");
- $rootScope.apiValid = true;
+ NVRDataModel.log("zmAutologin successfully logged into Zoneminder");
+ $rootScope.apiValid = true;
- // now go to authKey part, so don't return yet...
+ // now go to authKey part, so don't return yet...
- } else // this means login error
- {
- // $rootScope.loggedIntoZm = -1;
- //console.log("**** ZM Login FAILED");
- NVRDataModel.log("zmAutologin Error: Bad Credentials ", "error");
- $rootScope.$broadcast('auth-error', "incorrect credentials");
+ } else // this means login error
+ {
+ // $rootScope.loggedIntoZm = -1;
+ //console.log("**** ZM Login FAILED");
+ NVRDataModel.log("zmAutologin Error: Bad Credentials ", "error");
+ $rootScope.$broadcast('auth-error', "incorrect credentials");
- d.reject("Login Error");
- return (d.promise);
- // no need to go to next code, so return above
- }
+ d.reject("Login Error");
+ return (d.promise);
+ // no need to go to next code, so return above
+ }
- // Now go ahead and re-get auth key
- // if login was a success
- $rootScope.authSession = "undefined";
- var ld = NVRDataModel.getLogin();
- NVRDataModel.getAuthKey($rootScope.validMonitorId)
- .then(function (success) {
+ // Now go ahead and re-get auth key
+ // if login was a success
+ $rootScope.authSession = "undefined";
+ var ld = NVRDataModel.getLogin();
+ NVRDataModel.getAuthKey($rootScope.validMonitorId)
+ .then(function (success) {
- //console.log(success);
- $rootScope.authSession = success;
- NVRDataModel.log("Stream authentication construction: " +
- $rootScope.authSession);
+ //console.log(success);
+ $rootScope.authSession = success;
+ NVRDataModel.log("Stream authentication construction: " +
+ $rootScope.authSession);
d.resolve("Login Success");
$rootScope.$broadcast('auth-success', data);
return d.promise;
- },
- function (error) {
- //console.log(error);
+ },
+ function (error) {
+ //console.log(error);
- NVRDataModel.log("Modal: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession);
- NVRDataModel.debug("Error was: " + JSON.stringify(error));
- d.resolve("Login Success");
- $rootScope.$broadcast('auth-success', data);
- });
+ NVRDataModel.log("Modal: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession);
+ NVRDataModel.debug("Error was: " + JSON.stringify(error));
+ d.resolve("Login Success");
+ $rootScope.$broadcast('auth-success', data);
+ });
- return (d.promise);
+ return (d.promise);
- },
- function (error, status) {
+ },
+ function (error, status) {
- // console.log(">>>>>>>>>>>>>> PARALLEL POST ERROR");
- $ionicLoading.hide();
+ // console.log(">>>>>>>>>>>>>> PARALLEL POST ERROR");
+ $ionicLoading.hide();
- //console.log("**** ZM Login FAILED");
+ //console.log("**** ZM Login FAILED");
- // FIXME: Is this sometimes results in null
+ // FIXME: Is this sometimes results in null
- NVRDataModel.log("zmAutologin Error " + JSON.stringify(error) + " and status " + status);
- // bad urls etc come here
- //$rootScope.loggedIntoZm = -1;
- $rootScope.$broadcast('auth-error', error);
+ NVRDataModel.log("zmAutologin Error " + JSON.stringify(error) + " and status " + status);
+ // bad urls etc come here
+ //$rootScope.loggedIntoZm = -1;
+ $rootScope.$broadcast('auth-error', error);
- d.reject("Login Error");
- return d.promise;
- });
- return d.promise;
+ d.reject("Login Error");
+ return d.promise;
+ });
+ return d.promise;
}
function start() {
@@ -1392,7 +1392,7 @@ angular.module('zmApp', [
var ld = NVRDataModel.getLogin();
$interval.cancel(zmAutoLoginHandle);
- // $rootScope.loggedIntoZm = 0;
+ // $rootScope.loggedIntoZm = 0;
NVRDataModel.log("Cancelling zmAutologin timer");
}
@@ -1482,7 +1482,7 @@ angular.module('zmApp', [
$rootScope.toTime = "";
$rootScope.fromString = "";
$rootScope.toString = "";
- // $rootScope.loggedIntoZm = 0;
+ // $rootScope.loggedIntoZm = 0;
$rootScope.apnsToken = '';
$rootScope.tappedNotification = 0;
$rootScope.tappedMid = 0;
@@ -1514,7 +1514,7 @@ angular.module('zmApp', [
NVRDataModel.debug("**EXCEPTION**" + error.reason + " caused by " + error.cause);
};
-
+
if ($rootScope.platformOS == 'desktop' && 0) {
window.addEventListener('beforeunload', function (ev) {
@@ -1540,7 +1540,7 @@ angular.module('zmApp', [
});
});
- }
+ }
// DPAD Handler - disabled for now
// when ready add ionic cordova plugin add https://github.com/pliablepixels/cordova-plugin-android-tv.git
@@ -1677,7 +1677,7 @@ angular.module('zmApp', [
$rootScope.online = true;
$timeout(function () {
- // NVRDataModel.debug ("Ignoring - Alex R. Hack");
+ // NVRDataModel.debug ("Ignoring - Alex R. Hack");
if (0) {
var networkState = "browser not supported";
if (navigator.connection) networkState = navigator.connection.type;
@@ -1693,12 +1693,12 @@ angular.module('zmApp', [
NVRDataModel.debug("Not changing bandwidth state, as auto change is not on");
}
NVRDataModel.log("Your network is online, re-authenticating");
- zmAutoLogin.doLogin($translate.instant('kReAuthenticating'));
+ zmAutoLogin.doLogin($translate.instant('kReAuthenticating'));
}
-
+
}, 1000); // need a time gap, seems network type registers late
-
+
});
}, false);
@@ -1767,7 +1767,7 @@ angular.module('zmApp', [
$rootScope.dpadId = 0;
-
+
if ($rootScope.apiValid == false && toState.name != 'app.invalidapi' && toState.data.requireLogin == true) {
event.preventDefault();
@@ -1778,27 +1778,26 @@ angular.module('zmApp', [
}
-
- if ((NVRDataModel.hasLoginInfo() || toState.data.requireLogin == false) && toState.name != "app.invalidapi" ) {
+
+ if ((NVRDataModel.hasLoginInfo() || toState.data.requireLogin == false) && toState.name != "app.invalidapi") {
//console.log("State transition is authorized");
- if (toState.name != "app.refresh" &&
- toState.name != "app.first-use" &&
- toState.name != "app.zm-portal-login"
- )
- {
+ if (toState.name != "app.refresh" &&
+ toState.name != "app.first-use" &&
+ toState.name != "app.zm-portal-login"
+ ) {
- NVRDataModel.debug ("Setting last-desktop-state to:"+JSON.stringify(toState));
+ NVRDataModel.debug("Setting last-desktop-state to:" + JSON.stringify(toState));
localforage.setItem('last-desktop-state', {
'name': toState.name,
'params': toState.params
});
-
-
+
+
}
$rootScope.dpadState = toState.name.replace("app.", "");
return;
-
+
} else {
NVRDataModel.log("In Auth State trans: Not logged in, requested to go to " + JSON.stringify(toState));
// event.preventDefault();
@@ -1826,8 +1825,8 @@ angular.module('zmApp', [
// right about now, store last-state as the callback doesn't seem
// to work in Windows
-
- NVRDataModel.debug ("Setting last-desktop-state to:"+JSON.stringify(toState)+" with params:"+JSON.stringify(toParams));
+
+ NVRDataModel.debug("Setting last-desktop-state to:" + JSON.stringify(toState) + " with params:" + JSON.stringify(toParams));
localforage.setItem('last-desktop-state', {
'name': toState,
'params': toParams
@@ -1896,12 +1895,15 @@ angular.module('zmApp', [
//console.log("localforage config");
NVRDataModel.configureStorageDB()
- .then (function () {NVRDataModel.log ("localforage driver:"+localforage.driver()); return NVRDataModel.cloudSync(); } )
- .then(function () {
+ .then(function () {
+ NVRDataModel.log("localforage driver:" + localforage.driver());
+ return NVRDataModel.cloudSync();
+ })
+ .then(function () {
// this should alert "cordovaSQLiteDriver" when in an emulator or a device
-
+
// Now lets import old data if it exists:
- NVRDataModel.log ("Cloudsync operation complete, continuing...");
+ NVRDataModel.log("Cloudsync operation complete, continuing...");
var defaultServerName = $localstorage.get("defaultServerName");
localforage.getItem("defaultServerName")
@@ -1995,9 +1997,9 @@ angular.module('zmApp', [
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
- if (window.cordova ) {
+ if (window.cordova) {
console.log("------------->Keyboard foonone");
- //window.cordova.plugins.Keyboard.disableScroll(true);
+ //window.cordova.plugins.Keyboard.disableScroll(true);
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
@@ -2061,7 +2063,7 @@ angular.module('zmApp', [
NVRDataModel.log("First time detected ");
$state.go("app.first-use");
return;
-
+
} else {
continueRestOfInit();
}
@@ -2080,12 +2082,16 @@ angular.module('zmApp', [
localforage.getItem('last-desktop-state')
.then(function (succ) {
- console.log ("FOUND STATE" + JSON.stringify(succ) + ":"+succ);
+ console.log("FOUND STATE" + JSON.stringify(succ) + ":" + succ);
// sanitize this
- if (!succ.name || typeof succ.name !== 'string') {succ.name = "app.montage";}
-
- if (!succ.params) {succ.params = {};}
+ if (!succ.name || typeof succ.name !== 'string') {
+ succ.name = "app.montage";
+ }
+
+ if (!succ.params) {
+ succ.params = {};
+ }
if (succ) {
if (succ.name == 'app.invalidapi' || succ.name == 'app.refresh' || succ.name == 'app.importantmessage' || succ.name == "app.first-use" || succ.name == "app.zm-portal-login" || !succ.name) {
succ.name = 'app.montage';
@@ -2094,7 +2100,7 @@ angular.module('zmApp', [
$rootScope.lastState = succ.name;
if ($rootScope.lastState.indexOf("app.") == -1) {
$rootScope.lastState = "app." + $rootScope.lastState;
-
+
}
$rootScope.lastStateParam = succ.params;
@@ -2102,7 +2108,7 @@ angular.module('zmApp', [
NVRDataModel.debug("last state=" + $rootScope.lastState + " param=" + $rootScope.lastStateParam);
-
+
}
loadServices();
@@ -2123,7 +2129,7 @@ angular.module('zmApp', [
zmCheckUpdates.start();
NVRDataModel.log("Setting up POST LOGIN timer");
zmAutoLogin.start();
- setupPauseAndResume();
+ setupPauseAndResume();
}
@@ -2132,25 +2138,24 @@ angular.module('zmApp', [
function setupPauseAndResume() {
NVRDataModel.log("Setting up pause and resume handler AFTER language is loaded...");
-
+
if ($rootScope.platformOS != 'android') {
- document.addEventListener("resume", function () {
- resumeHandler();
+ document.addEventListener("resume", function () {
+ resumeHandler();
}, false);
document.addEventListener("pause", function () {
pauseHandler();
}, false);
- }
- else {
- NVRDataModel.debug ("Android detected, using cordova-multiwindow plugin for onStop/onStart instead");
+ } else {
+ NVRDataModel.debug("Android detected, using cordova-multiwindow plugin for onStop/onStart instead");
window.MultiWindowPlugin.registerOnStop("app-pause", pauseHandler);
window.MultiWindowPlugin.registerOnStart("app-resume", resumeHandler);
-
+
}
-
+
function resumeHandler() {
NVRDataModel.setBackground(false);
NVRDataModel.setJustResumed(true);
@@ -2281,7 +2286,7 @@ angular.module('zmApp', [
// a) https://www.exratione.com/2013/08/angularjs-wrapping-http-for-fun-and-profit/
// b) https://gist.github.com/adamreisnz/354364e2a58786e2be71
- $provide.decorator('$http', ['$delegate', '$q', function($delegate, $q) {
+ $provide.decorator('$http', ['$delegate', '$q', function ($delegate, $q) {
// create function which overrides $http function
var $http = $delegate;
@@ -2289,12 +2294,12 @@ angular.module('zmApp', [
var url;
var method;
- url = arguments[0].url;
- method = arguments[0].method;
+ url = arguments[0].url;
+ method = arguments[0].method;
var isOutgoingRequest = /^(http|https):\/\//.test(url);
if (window.cordova && isOutgoingRequest) {
-
-
+
+
var d = $q.defer();
var options = {
method: method,
@@ -2303,41 +2308,44 @@ angular.module('zmApp', [
timeout: arguments[0].timeout,
responseType: arguments[0].responseType
};
- // console.log ("**** -->"+method+"<-- using native HTTP with:"+encodeURI(url)+" payload:"+JSON.stringify(options));
- cordova.plugin.http.sendRequest(encodeURI(url),options,
+ // console.log ("**** -->"+method+"<-- using native HTTP with:"+encodeURI(url)+" payload:"+JSON.stringify(options));
+ cordova.plugin.http.sendRequest(encodeURI(url), options,
function (succ) {
// automatic JSON parse if no responseType: text
// fall back to text if JSON parse fails too
- if (options.responseType =='text') {
+ if (options.responseType == 'text') {
// don't parse into JSON
- d.resolve({"data":succ.data});
+ d.resolve({
+ "data": succ.data
+ });
return d.promise;
- }
- else {
+ } else {
try {
- d.resolve({"data":JSON.parse(succ.data)});
+ d.resolve({
+ "data": JSON.parse(succ.data)
+ });
return d.promise;
- }
- catch (e) {
+ } catch (e) {
- //console.log ("*** Native HTTP response: JSON parsing failed for "+url+", returning text");
- d.resolve({"data":succ.data});
+ //console.log ("*** Native HTTP response: JSON parsing failed for "+url+", returning text");
+ d.resolve({
+ "data": succ.data
+ });
return d.promise;
}
}
- },
+ },
function (err) {
- console.log ("*** Inside native HTTP error: "+JSON.stringify(err));
-
+ console.log("*** Inside native HTTP error: " + JSON.stringify(err));
+
d.reject(err);
return d.promise;
});
- return d.promise;
-
- }
- else { // not cordova, so lets go back to default http
- // console.log ("**** "+method+" using XHR HTTP for "+url);
+ return d.promise;
+
+ } else { // not cordova, so lets go back to default http
+ // console.log ("**** "+method+" using XHR HTTP for "+url);
return $http.apply($http, arguments);
}
@@ -2351,23 +2359,23 @@ angular.module('zmApp', [
return $http[key].apply($http, arguments);
};
});
- // wrap convenience functions
- $delegate.get = function (url,config) {
+ // wrap convenience functions
+ $delegate.get = function (url, config) {
return wrapper(angular.extend(config || {}, {
method: 'get',
url: url
}));
};
- $delegate.post = function (url,data,config) {
+ $delegate.post = function (url, data, config) {
return wrapper(angular.extend(config || {}, {
method: 'post',
url: url,
- data:data
+ data: data
}));
};
- $delegate.delete = function (url,config) {
+ $delegate.delete = function (url, config) {
return wrapper(angular.extend(config || {}, {
method: 'delete',
url: url
@@ -2401,8 +2409,9 @@ angular.module('zmApp', [
//$translateProvider.useLocalStorage();
- $translateProvider.registerAvailableLanguageKeys(['en', 'de', 'es', 'fr', 'it', 'ru', 'ja', 'ko', 'nl', 'pl', 'zh', 'zh_CN', 'zh_TW', 'pt', 'ar', 'hi', 'hu'], {
+ $translateProvider.registerAvailableLanguageKeys(['en', 'ba', 'de', 'es', 'fr', 'it', 'ru', 'ja', 'ko', 'nl', 'pl', 'zh', 'zh_CN', 'zh_TW', 'pt', 'ar', 'hi', 'hu'], {
'en_*': 'en',
+ 'ba_*': 'ba',
'de_*': 'de',
'es_*': 'es',
'fr_*': 'fr',
@@ -2435,7 +2444,7 @@ angular.module('zmApp', [
//controller: 'AppCtrl'
})
-
+
.state('app.login', {
data: {
diff --git a/www/js/ionicUtils.js b/www/js/ionicUtils.js
index c5da1304..cf75d1f4 100644
--- a/www/js/ionicUtils.js
+++ b/www/js/ionicUtils.js
@@ -21,7 +21,7 @@ angular.module('ionic.utils', [])
$window.localStorage[key] = JSON.stringify(value);
},
getObject: function (key) {
-
+
return JSON.parse($window.localStorage[key] || '{}');
}
};
diff --git a/www/lang/locale-pl.json b/www/lang/locale-pl.json
index 58b49ed4..486d0e0d 100644
--- a/www/lang/locale-pl.json
+++ b/www/lang/locale-pl.json
@@ -15,6 +15,7 @@
"kApplyingChanges" :"Stosuję zmiany. Proszę czekać",
"kArrangingImages" :"układam obrazki",
"kAt" :"przy",
+ "kAuthHashDisabled" :"AUTH_HASH_LOGINS powinien być włączony w celu wyświetlania obrazów. Zrestartuj ZM po włączeniu.",
"kAuthSuccess" :"uwierzytelniono",
"kAuthenticating" :"uwierzytelniam",
"kAuthenticatingWebScrape" :"uwierzytelnianie przez web scrape",
@@ -73,7 +74,10 @@
"kDiscoveringAPI" :"wykrywam API",
"kDiscoveringCGI" :"wykrywam CGI",
"kDiscoveringPortal" :"wykrywam portal",
+ "kDismiss" :"Anuluj",
"kDone" :"gotowe",
+ "kDownload" :"Pobierz",
+ "kDownloadVideoImage" :"Aby pobrać wciśnij poniższy przycisk. Jeśli pobierasz Video, nie ma paska postępu, monitoruj więc wielkość pliku.",
"kEmailNotConfigured" :"Email nie został skonfigurowany",
"kEnable24hr" :"Włącz format czasu 24 godz.",
"kEnableDebug" :"Włącz dzienniki debugowania",
diff --git a/www/templates/bookmark.html b/www/templates/bookmark.html
index 3538dbfd..af5e4516 100644
--- a/www/templates/bookmark.html
+++ b/www/templates/bookmark.html
@@ -11,7 +11,7 @@
<div class="col col-25" ng-if="$index < bookmarks.length" ng-click="action(bookmarks[$index])">
<div class="bookmarkButton">
<i ng-class="(bookmarks[$index].text=='') ? 'ion-plus-circled':'ion-share'">
- <br/>
+ <br />
<span class="bookmark_text"> {{bookmarks[$index].text}}</span>
</i>
</div>
@@ -21,31 +21,31 @@
<div class="col col-25" ng-if="$index + 1 < bookmarks.length" ng-click="action(bookmarks[$index+1])">
<div class="bookmarkButton">
<i ng-class="(bookmarks[$index+1].text=='') ? 'ion-plus-circled':'ion-share'">
- <br/>
+ <br />
<span class="bookmark_text"> {{bookmarks[$index+1].text}}</span>
</i>
</div>
- </div>
+ </div>
- <div class="col col-25" ng-if="$index + 2 < bookmarks.length" ng-click="action(bookmarks[$index+2])">
- <div class="bookmarkButton">
- <i ng-class="(bookmarks[$index+2].text=='') ? 'ion-plus-circled':'ion-share'">
- <br/>
- <span class="bookmark_text"> {{bookmarks[$index+2].text}}</span>
- </i>
- </div>
+ <div class="col col-25" ng-if="$index + 2 < bookmarks.length" ng-click="action(bookmarks[$index+2])">
+ <div class="bookmarkButton">
+ <i ng-class="(bookmarks[$index+2].text=='') ? 'ion-plus-circled':'ion-share'">
+ <br />
+ <span class="bookmark_text"> {{bookmarks[$index+2].text}}</span>
+ </i>
</div>
+ </div>
- <div class="col col-25" ng-if="$index + 3 < bookmarks.length" ng-click="action(bookmarks[$index+3])">
- <div class="bookmarkButton">
- <i ng-class="(bookmarks[$index+3].text=='') ? 'ion-plus-circled':'ion-share'">
- <br/>
- <span class="bookmark_text"> {{bookmarks[$index+3].text}}</span>
- </i>
+ <div class="col col-25" ng-if="$index + 3 < bookmarks.length" ng-click="action(bookmarks[$index+3])">
+ <div class="bookmarkButton">
+ <i ng-class="(bookmarks[$index+3].text=='') ? 'ion-plus-circled':'ion-share'">
+ <br />
+ <span class="bookmark_text"> {{bookmarks[$index+3].text}}</span>
+ </i>
- </div>
</div>
</div>
+ </div>
</ion-content>
</ion-view>
diff --git a/www/templates/devoptions.html b/www/templates/devoptions.html
index 77608027..c2937a3b 100644
--- a/www/templates/devoptions.html
+++ b/www/templates/devoptions.html
@@ -11,7 +11,8 @@
<ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
<div class="list list-inset">
<span style="color:rgb(100,100,100)">
- <i class="ion-android-settings" style="font-size:150%"></i> {{'kDeveloperOptionsFor'|translate}} {{loginData.serverName}}
+ <i class="ion-android-settings" style="font-size:150%"></i> {{'kDeveloperOptionsFor'|translate}}
+ {{loginData.serverName}}
</span>
<div class="item item-input-inset">
{{'kFrameUpdate'|translate}} ({{'kSec'|translate}}.)&nbsp;
@@ -109,17 +110,17 @@
{{'kMaxItemsForTimeline' | translate}}&nbsp;
<label class="item-input-wrapper">
<input type="tel" placeholder="" ng-model="loginData.graphSize">
- <br/>
+ <br />
</label>
- <br/>
+ <br />
</div>
<div class="item item-text-wrap item-input-inset">
{{'kMinAlarmCount' | translate}}&nbsp;
<label class="item-input-wrapper">
<input type="tel" placeholder="" ng-model="loginData.minAlarmCount">
- <br/>
+ <br />
</label>
- <br/>
+ <br />
</div>
<div class="item" style="background-color:#C8F7C5" ng-if="loginData.graphSize > 5000">
<label class="animated fadeInDown item-text-wrap">
@@ -142,7 +143,7 @@
</ion-toggle>
</label>
-
+
<label>
<ion-toggle ng-model="loginData.enableThumbs" toggle-class="toggle-calm">
<span class="item-text-wrap">{{'kEnableThumbs' | translate}}
diff --git a/www/templates/events-date-time-filter.html b/www/templates/events-date-time-filter.html
index 395c29d2..262feed8 100644
--- a/www/templates/events-date-time-filter.html
+++ b/www/templates/events-date-time-filter.html
@@ -16,7 +16,7 @@
<span class="input-label">{{'kToTime'|translate}}</span>
<input type="time" ng-model="$root.toTime">
</label>
- <br/>
+ <br />
<center>
<button class="button" ng-click="saveFilters();"> {{'kSave'|translate}}
</button>
diff --git a/www/templates/events-graphs.html b/www/templates/events-graphs.html
index 573bf6ad..33287e3f 100644
--- a/www/templates/events-graphs.html
+++ b/www/templates/events-graphs.html
@@ -17,7 +17,8 @@
<ion-nav-view>
<ion-content class="has-header">
<div ng-controller="zmApp.EventsGraphsCtrl">
- <canvas tc-chartjs-bar chart-data="chart.data" chart-options="chart.options" ng-click="handleChartClick($event)" chart="chartwithbars">
+ <canvas tc-chartjs-bar chart-data="chart.data" chart-options="chart.options" ng-click="handleChartClick($event)"
+ chart="chartwithbars">
</canvas>
</div>
</ion-content>
@@ -29,7 +30,8 @@
<ion-content>
<div ng-controller="zmApp.EventsGraphsCtrl">
<div style="overflow:scroll;">
- <canvas tc-chartjs-bar chart-data="chart.data" chart-options="chart.options" ng-click="handleChartClick($event)" chart="chartwithbars">
+ <canvas tc-chartjs-bar chart-data="chart.data" chart-options="chart.options" ng-click="handleChartClick($event)"
+ chart="chartwithbars">
</canvas>
</div>
</div>
@@ -42,7 +44,8 @@
<ion-content>
<div ng-controller="zmApp.EventsGraphsCtrl">
<div style="overflow:scroll;">
- <canvas tc-chartjs-bar chart-data="chart.data" chart-options="chart.options" chart="chartwithbars" ng-click="handleChartClick($event)">
+ <canvas tc-chartjs-bar chart-data="chart.data" chart-options="chart.options" chart="chartwithbars"
+ ng-click="handleChartClick($event)">
</canvas>
</div>
</div>
@@ -55,7 +58,8 @@
<ion-content>
<div ng-controller="zmApp.EventsGraphsCtrl">
<div style="overflow:scroll;">
- <canvas tc-chartjs-bar chart-data="chart.data" chart-options="chart.options" chart="chartwithbars" ng-click="handleChartClick($event)">
+ <canvas tc-chartjs-bar chart-data="chart.data" chart-options="chart.options" chart="chartwithbars"
+ ng-click="handleChartClick($event)">
</canvas>
</div>
</div>
diff --git a/www/templates/events-modal.html b/www/templates/events-modal.html
index 1f168b69..164c3f62 100644
--- a/www/templates/events-modal.html
+++ b/www/templates/events-modal.html
@@ -19,8 +19,8 @@
</ion-scroll>
</div>
- <ion-scroll has-bouncing=false min-zoom=1 zooming="true" direction="xy" delegate-handle="imgscroll" overflow-scroll="false"
- scrollbar-x="false" scrollbar-y="false">
+ <ion-scroll has-bouncing=false min-zoom=1 zooming="true" direction="xy" delegate-handle="imgscroll"
+ overflow-scroll="false" scrollbar-x="false" scrollbar-y="false">
<div id="full-screen-event" style="height: 100vh;">
<div ng-if="defaultVideo=='' || isSnapShot()">
@@ -35,15 +35,15 @@
<img ng-if="!liveFeedMid" image-spinner-src="{{constructStream()}}" ng-class="{'object-fit_cover':imageFit==false, 'object-fit_contain':imageFit==true}"
- on-double-tap="closeModal();" img-spinner-w="1024" img-spinner-h="768" image-spinner-loader="lines" imageonload="modalImageLoaded()"
- on-swipe-left="onSwipeEvent(nextId,1)" on-swipe-right="onSwipeEvent(prevId,-1)" />
+ on-double-tap="closeModal();" img-spinner-w="1024" img-spinner-h="768" image-spinner-loader="lines"
+ imageonload="modalImageLoaded()" on-swipe-left="onSwipeEvent(nextId,1)" on-swipe-right="onSwipeEvent(prevId,-1)" />
<div ng-if="liveFeedMid">
<img image-spinner-src="{{loginData.streamingurl}}/nph-zms?mode=jpeg&monitor={{liveFeedMid}}&connkey={{connKey}}{{$root.authSession}}"
ng-class="{'object-fit_cover':imageFit==false, 'object-fit_contain':imageFit==true}" on-double-tap="closeModal();"
- img-spinner-w="1024" img-spinner-h="768" image-spinner-loader="lines" imageonload="modalImageLoaded()" on-swipe-left="onSwipeEvent(nextId,1)"
- on-swipe-right="onSwipeEvent(prevId,-1)" />
+ img-spinner-w="1024" img-spinner-h="768" image-spinner-loader="lines" imageonload="modalImageLoaded()"
+ on-swipe-left="onSwipeEvent(nextId,1)" on-swipe-right="onSwipeEvent(prevId,-1)" />
<div class="events-range-modal-text">
<span class="events-range-modal-warning-text">{{eventWarning}}</span>
</div>
@@ -51,7 +51,8 @@
- <div ng-if="isPaused" style="position:absolute; top:50%; left:50%;white-space:nowrap;overflow:hidden;z-index:999" class="header-paused">
+ <div ng-if="isPaused" style="position:absolute; top:50%; left:50%;white-space:nowrap;overflow:hidden;z-index:999"
+ class="header-paused">
&nbsp;
<i class="ion-pause"></i> {{'kPaused' | translate}}&nbsp;
</div>
@@ -64,11 +65,11 @@
<!-- <div style="height:{{$root.devHeight}}px; width:{{$root.devWidth}}px;">-->
<div on-swipe-left="onSwipeEvent(nextId,1)" on-swipe-right="onSwipeEvent(prevId,-1)" ng-style="{'height':$root.devHeight+'px', 'width':$root.devWidth+'px'}">
- <videogular vg-can-play="onCanPlay()" vg-native-fullscreen="videoObject.config.nativeFullScreen" vg-player-ready="onPlayerReady($API)"
- vg-update-playback="onPlaybackUpdate($playBack)" vg-plays-inline="videoObject.config.playsInline" vg-theme="videoObject.config.theme"
- vg-complete="playbackFinished()" on-double-tap="closeModal();" vg-autoplay="videoObject.config.autoPlay"
- vg-responsive="videoObject.config.responsive" vg-update-time="videoTime(event.Event.StartTime,$currentTime)"
- vg-error="onVideoError($event)">
+ <videogular vg-can-play="onCanPlay()" vg-native-fullscreen="videoObject.config.nativeFullScreen"
+ vg-player-ready="onPlayerReady($API)" vg-update-playback="onPlaybackUpdate($playBack)"
+ vg-plays-inline="videoObject.config.playsInline" vg-theme="videoObject.config.theme" vg-complete="playbackFinished()"
+ on-double-tap="closeModal();" vg-autoplay="videoObject.config.autoPlay" vg-responsive="videoObject.config.responsive"
+ vg-update-time="videoTime(event.Event.StartTime,$currentTime)" vg-error="onVideoError($event)">
<vg-media vg-src="videoObject.config.sources" vg-native-controls="videoObject.config.nativeControls">
</vg-media>
<vg-controls>
@@ -102,7 +103,8 @@
<div ng-show="defaultVideo=='' && !liveFeedMid && !isSnapShot()">
<div id="event_canvas">
<canvas style="padding-left:23px;
- padding-right:23px;" id="eventchart" width="auto" height="20"></canvas>
+ padding-right:23px;" id="eventchart" width="auto"
+ height="20"></canvas>
</div>
<div ng-if="checkEventOn" id="event_slider" data-tap-disabled="false">
@@ -124,8 +126,8 @@
<div ng-show="!liveFeedMid">
- <nav mfb-menu position="br" effect="zoomin" label="{{'kCollapse'|translate}}" active-icon="ion-chevron-down" resting-icon="ion-chevron-up"
- toggling-method="click">
+ <nav mfb-menu position="br" effect="zoomin" label="{{'kCollapse'|translate}}" active-icon="ion-chevron-down"
+ resting-icon="ion-chevron-up" toggling-method="click">
<a mfb-button icon="ion-arrow-right-c" label="{{'kNextEvent'|translate}}" ng-click="jumpToEvent(nextId,1);"></a>
<a mfb-button icon="ion-arrow-left-c" label="{{'kPrevEvent'|translate}}" ng-click="jumpToEvent(prevId,-1);"></a>
<a ng-if="!isSnapShot()" mfb-button icon="ion-arrow-resize" label="{{imageFit? ('kFillScreen' | translate):('kFitScreen' | translate)}}"
@@ -161,7 +163,7 @@
</a>
</li>
-
+
<li ng-if="isToggleListMenu && defaultVideo !='' && defaultVideo != undefined">
<a href="" ng-click="saveEventVideoToPhoneWithPerms()">
diff --git a/www/templates/events-popover.html b/www/templates/events-popover.html
index 5c7e7c15..d61f8f5b 100644
--- a/www/templates/events-popover.html
+++ b/www/templates/events-popover.html
@@ -1,15 +1,18 @@
<ion-popover-view class="fit">
<ion-content>
<div class="list" ng-click="popover.hide()">
- <a class="item" ng-href="" ng-click="popover.hide();$state.go('app.events-date-time-filter');">{{'kFilterByDateTime' | translate}}</a>
+ <a class="item" ng-href="" ng-click="popover.hide();$state.go('app.events-date-time-filter');">{{'kFilterByDateTime'
+ | translate}}</a>
<!-- <a class="item" ng-href="" ng-click=" popover.hide();$state.go('events-graphs');" >
Event Graphs
</a>-->
<a class="item" ng-href="" ng-click="popover.hide();doRefresh();">
{{'kRefresh' | translate}}
</a>
- <a class="item" ng-href="" ng-click="popover.hide();toggleMinAlarmFrameCount();" ng-if="loginData.enableAlarmCount">{{'kShowAllEvents' | translate}}</a>
- <a class="item" ng-href="" ng-click="popover.hide();toggleMinAlarmFrameCount();" ng-if="!loginData.enableAlarmCount"> {{'kShowAlarmedEvents' | translate}}</a>
+ <a class="item" ng-href="" ng-click="popover.hide();toggleMinAlarmFrameCount();" ng-if="loginData.enableAlarmCount">{{'kShowAllEvents'
+ | translate}}</a>
+ <a class="item" ng-href="" ng-click="popover.hide();toggleMinAlarmFrameCount();" ng-if="!loginData.enableAlarmCount">
+ {{'kShowAlarmedEvents' | translate}}</a>
</div>
</ion-content>
</ion-popover-view>
diff --git a/www/templates/events.html b/www/templates/events.html
index b3a0ea46..b312a79c 100644
--- a/www/templates/events.html
+++ b/www/templates/events.html
@@ -15,7 +15,8 @@
<ion-header-bar class="bar bar-subheader item-input-inset">
<label class="item-input-wrapper">
<i class="icon ion-ios7-search placeholder-icon"></i>
- <input type="search" placeholder="{{'kSearch'|translate}}" ng-model="search.text" autocorrect="off" autocomplete="off">
+ <input type="search" placeholder="{{'kSearch'|translate}}" ng-model="search.text" autocorrect="off"
+ autocomplete="off">
</label>
</ion-header-bar>
</div>
@@ -27,7 +28,8 @@
<div ng-if="!eventsBeingLoaded">
<ion-list show-delete="eventList.showDelete">
<ion-item force-refresh-images="true" collection-repeat="event in events| filter:search.text | eventListFilter
- " item-height="event.Event.height" id="item-{{$index}}" on-swipe-left="checkSwipe($index);">
+ "
+ item-height="event.Event.height" id="item-{{$index}}" on-swipe-left="checkSwipe($index);">
<span style="float:left;margin-top:-18px;background-color:#96281B;color:#fff;font-size:11px;opacity:0.7;border-radius: 0px 0px 5px 5px;">&nbsp;&nbsp;&nbsp;
<i class="ion-calendar"></i>&nbsp;&nbsp;{{prettifyTime(event.Event.StartTime)}}&nbsp;{{tzAbbr}}&nbsp;</span>&nbsp;&nbsp;
<span style="float:left;margin-top:-18px;background-color:#fff;color:#888;font-size:11px;opacity:1;">&nbsp;&nbsp;
@@ -69,32 +71,26 @@
<b>
<i ng-if="event.Event.Archived=='1'" class="ion-ios-flag" style="color:red">&nbsp;</i>{{event.Event.MonitorName}}</b>
<span ng-if="!loginData.enableThumbs">({{event.Event.Id}})</span> &nbsp;
- <br/>
+ <br />
<i class="ion-images"></i> {{event.Event.Frames}} &nbsp;
<i class="ion-ios-bell-outline"></i> {{event.Event.AlarmFrames}} &nbsp;
- <br/>
+ <br />
<span style="font-size:80%; color:rgb(110,110,110)">
{{humanize(event.Event.Length)}}
</span>
- <br/>
+ <br />
</div>
- <div align="right" class="col col-40" ng-if="loginData.enableThumbs" >
-
+ <div align="right" class="col col-40" ng-if="loginData.enableThumbs">
+
+
+ <img bg-color="#6C7A89" ng-src="{{constructThumbnail(event)}}" on-tap="closeIfOpen(event);openModalWithSnapshot(event)"
+ width="{{event.Event.thumbWidth}}px" height="{{event.Event.thumbHeight}}px" />
- <img bg-color="#6C7A89" src="{{constructThumbnail(event)}}"
- on-tap="closeIfOpen(event);openModalWithSnapshot(event)" width="{{event.Event.thumbWidth}}px" height="{{event.Event.thumbHeight}}px" />
- <!--
- <img ng-image-appear no-loader transition-duration="0.3s" animation="fillIn" bg-color="#6C7A89" ng-src="{{constructThumbnail(event)}}"
- on-tap="closeIfOpen(event);openModalWithSnapshot(event)" width="{{event.Event.thumbWidth}}px" height="{{event.Event.thumbHeight}}px" />
- -->
-
- <!--<p>{{event.Event.thumbWidth}}px*{{event.Event.thumbHeight}}px</p>-->
-
</div>
@@ -104,9 +100,9 @@
<div class="col">
<div class="item-text-wrap">
<i class="ion-ios-pricetags-outline"></i>&nbsp; {{event.Event.Name}}
- <br/>
+ <br />
<i class="ion-calendar"></i>&nbsp; {{prettify(event.Event.StartTime)}}&nbsp;{{tzAbbr}}&nbsp;
- <br/>
+ <br />
<i class="ion-clipboard"></i>&nbsp; {{event.Event.Notes}}
<!-- <br/> Default video:{{event.Event.relativePath}}{{event.Event.DefaultVideo}}-->
@@ -137,8 +133,8 @@
<!-- this is the event scrub/alarm frames area -->
<div ng-if="isGroupShown(event)">
<div ng-if="groupType=='alarms'">
- <br/>
- <br/>
+ <br />
+ <br />
<div style="height:190px;">
<p>
<!--scroll <i class="icon ion-arrow-left-c"></i>
@@ -161,9 +157,8 @@
<span translate="kFrame"></span>:{{alarm.frameid}},
<span translate="kScore"></span>:{{alarm.score}},
<span translate="kTime"></span>: {{prettifyTimeSec(alarm.time)}}</figcaption>
- <img ng-src="{{constructAlarmFrame(event,alarm,true)}}" fallback-src="{{constructAlarmFrame(event,alarm,false)}}" style="width: auto; height: auto;max-width: 100%;max-height: 170px"
- on-tap="showImage(event.Event.baseURL,event.Event.relativePath,alarm.fname, alarm.frameid, event.Event.Id, event.Event.imageMode, alarm.id, alarm_images, $index)"
- />
+ <img ng-src="{{constructAlarmFrame(event,alarm,true)}}" fallback-src="{{constructAlarmFrame(event,alarm,false)}}"
+ style="width: auto; height: auto;max-width: 100%;max-height: 170px" on-tap="showImage(event.Event.baseURL,event.Event.relativePath,alarm.fname, alarm.frameid, event.Event.Id, event.Event.imageMode, alarm.id, alarm_images, $index)" />
</figure>
@@ -175,35 +170,36 @@
</div>
<div ng-if="groupType=='scrub'">
<div ng-if="event.Event.DefaultVideo=='' || loginData.enableh264==false">
- <br/>
- <br/>
- <br/>
+ <br />
+ <br />
+ <br />
<div style="width:90%">
<input ng-model="ionRange.index" type="text" id="mySlider1" slider options="slider_options" />
</div>
- <br/>
+ <br />
<p>{{mycarousel.index+1}}/{{event.Event.Frames}}
<span translate="kType"></span>: {{FrameArray[mycarousel.index].Type}}</p>
<div style="height:190px">
- <ul rn-carousel rn-carousel-buffered rn-carousel-transition="none" rn-swipe-disabled="true" rn-carousel-index="mycarousel.index"
- rn-carousel-auto-slide="{{event.Event.Length/event.Event.Frames}}" rn-carousel-pause-on-hover rn-platform="{{$root.platformOS}}">
+ <ul rn-carousel rn-carousel-buffered rn-carousel-transition="none" rn-swipe-disabled="true"
+ rn-carousel-index="mycarousel.index" rn-carousel-auto-slide="{{event.Event.Length/event.Event.Frames}}"
+ rn-carousel-pause-on-hover rn-platform="{{$root.platformOS}}">
<li ng-repeat="slide in slides">
- <img imageonload="finishedLoadingImage($index)" image-spinner-src="{{constructScrubFrame(event,slide)}}" image-spinner-loader="lines"
- height="190px" ;/>
+ <img imageonload="finishedLoadingImage($index)" image-spinner-src="{{constructScrubFrame(event,slide)}}"
+ image-spinner-loader="lines" height="190px" ; />
- <br/>
+ <br />
</li>
</ul>
</div>
</div>
<!-- no DefaultVideo -->
<div ng-if="event.Event.DefaultVideo!='' && loginData.enableh264 == true">
- <br/>
- <br/>
- <br/>
+ <br />
+ <br />
+ <br />
<div class="videogular-container">
- <videogular vg-theme="event.Event.video.config.theme" vg-plays-inline="'true'" vg-auto-play="'true'" vg-responsive="true"
- vg-player-ready="readyToPlay($API)">
+ <videogular vg-theme="event.Event.video.config.theme" vg-plays-inline="'true'" vg-auto-play="'true'"
+ vg-responsive="true" vg-player-ready="readyToPlay($API)">
<vg-overlay-play></vg-overlay-play>
<vg-controls>
<vg-play-pause-button></vg-play-pause-button>
@@ -230,25 +226,27 @@
</ion-delete-button>
- <ion-option-button ng-if="event.Event.Archived == 1" class="button-balanced" ng-click="archiveUnarchiveEvent($index,event.Event.Id)">{{'kUnflag' | translate}}</ion-option-button>
+ <ion-option-button ng-if="event.Event.Archived == 1" class="button-balanced" ng-click="archiveUnarchiveEvent($index,event.Event.Id)">{{'kUnflag'
+ | translate}}</ion-option-button>
- <ion-option-button ng-if="event.Event.Archived == 0" class="button-assertive" ng-click="archiveUnarchiveEvent($index, event.Event.Id)">{{'kFlag' | translate}}</ion-option-button>
+ <ion-option-button ng-if="event.Event.Archived == 0" class="button-assertive" ng-click="archiveUnarchiveEvent($index, event.Event.Id)">{{'kFlag'
+ | translate}}</ion-option-button>
<!-- hack to make sure swipe left displays well
if there is no content and our list height is set
to a larger height, the swipe display acts weird -->
- <br/>
- <br/>
- <br/>
- <br/>
- <br/>
- <br/>
- <br/>
- <br/>
- <br/>
- <br/>
+ <br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <br />
</ion-item>
</ion-list>
@@ -342,8 +340,8 @@
</div>
</div>
- <br/>
- <br/>
+ <br />
+ <br />
</ion-pull-up-content>
</ion-pull-up-footer>
</ion-view>
diff --git a/www/templates/eventserversettings.html b/www/templates/eventserversettings.html
index 602f8ca4..a56652e4 100644
--- a/www/templates/eventserversettings.html
+++ b/www/templates/eventserversettings.html
@@ -21,18 +21,22 @@
<input autocapitalize="none" autocomplete="off" autocorrect="off" type="text" placeholder="{{'kEventNotificationUrl' | translate}}"
ng-model="loginData.eventServer">
</label>
- <ion-toggle ng-if="loginData.isUseEventServer" ng-model="loginData.disablePush" toggle-class="toggle-calm" class="item-text-wrap">{{'kOnlyUseWebSocket'| translate }}
- <br/>
+ <ion-toggle ng-if="loginData.isUseEventServer" ng-model="loginData.disablePush" toggle-class="toggle-calm" class="item-text-wrap">{{'kOnlyUseWebSocket'|
+ translate }}
+ <br />
<p>{{'kDisablePush' | translate }}</p>
</ion-toggle>
<!-- vibrate app setting is not av. on iOS-->
- <ion-toggle ng-if="loginData.isUseEventServer && $root.platformOS !='ios'" ng-model="loginData.vibrateOnPush" toggle-class="toggle-calm">{{'kVibrateOnPush'| translate }}</ion-toggle>
- <ion-toggle ng-if="loginData.isUseEventServer" ng-model="loginData.soundOnPush" toggle-class="toggle-calm" class="item-text-wrap">{{'kSoundOnPush'| translate }}</ion-toggle>
+ <ion-toggle ng-if="loginData.isUseEventServer && $root.platformOS !='ios'" ng-model="loginData.vibrateOnPush"
+ toggle-class="toggle-calm">{{'kVibrateOnPush'| translate }}</ion-toggle>
+ <ion-toggle ng-if="loginData.isUseEventServer" ng-model="loginData.soundOnPush" toggle-class="toggle-calm" class="item-text-wrap">{{'kSoundOnPush'|
+ translate }}</ion-toggle>
<ion-list>
<div ng-repeat="monitor in monitors">
<ion-item class="custom-list" ng-click="toggleGroup(monitor)" ng-class="{active: isGroupShown(monitor)}">
- <i class="icon" ng-class="isGroupShown(monitor) ? 'ion-minus' : 'ion-plus'"></i> &nbsp; {{monitor.Monitor.Name}}
+ <i class="icon" ng-class="isGroupShown(monitor) ? 'ion-minus' : 'ion-plus'"></i> &nbsp;
+ {{monitor.Monitor.Name}}
</ion-item>
<ion-item class="item-accordion" ng-show="isGroupShown(monitor)">
<span class="item-checkbox">
diff --git a/www/templates/first-use.html b/www/templates/first-use.html
index 616f0cd0..5f98bb6b 100644
--- a/www/templates/first-use.html
+++ b/www/templates/first-use.html
@@ -2,23 +2,23 @@
<ion-content class="pin-background">
<div style="margin-left:20px; margin-right:20px">
<center>
- <br/>
- <br/>
+ <br />
+ <br />
<div id="responsive-image">
<img src="img/authlogo.png">
</div>
- <br/>
+ <br />
<span style="color:white">
<h2 style="color:white">Hi There!</h2>
- <br/>
+ <br />
<h4 style="color:white">{{'kThanksForUsing' | translate}} {{$root.appName}}.
- <br/>
- <br/> {{'kNeedToKnow' | translate}}
+ <br />
+ <br /> {{'kNeedToKnow' | translate}}
</h4>
- <br/>
+ <br />
</span>
- <br/>
+ <br />
<div id="firstuse">
<button class="button icon icon-left ion-wand button-stable animated bounceInUp" ng-click="goToWizard()">
{{'kWizard' | translate}}
@@ -26,14 +26,15 @@
<button class="button icon icon-left ion-university button-stable animated bounceInUp" ng-click="goToLogin()">
{{'kExpert' | translate }}
</button>
- <br/>
+ <br />
<center>
- <button class="button button-clear icon icon-left ion-android-globe white-button-text animated bounceInUp" ng-click="switchLang()">
- {{'kLanguage' | translate}}
+ <button class="button button-clear icon icon-left ion-android-globe white-button-text animated bounceInUp"
+ ng-click="switchLang()">
+ {{'kLanguage' | translate}}
</button>
<div class="animated bounceInUp">
- <small ><a style="text-decoration:none; color:white"
- href="#" onclick="window.open('https://medium.com/zmninja/zmninja-privacy-and-your-data-5489a5974baf', '_blank', 'location=yes'); return false;">{{'kDataPrivacy' | translate}}</a>
+ <small><a style="text-decoration:none; color:white" href="#" onclick="window.open('https://medium.com/zmninja/zmninja-privacy-and-your-data-5489a5974baf', '_blank', 'location=yes'); return false;">{{'kDataPrivacy'
+ | translate}}</a>
</small>
</div>
</center>
diff --git a/www/templates/important_message.html b/www/templates/important_message.html
index 3838dd76..933c3802 100644
--- a/www/templates/important_message.html
+++ b/www/templates/important_message.html
@@ -5,24 +5,24 @@
<ion-content class="pin-background">
<div style="margin-left:20px; margin-right:20px">
<center>
- <br/>
- <br/>
+ <br />
+ <br />
<div id="responsive-image">
<img src="img/authlogo.png">
</div>
- <br/>
+ <br />
<span style="color:white">
<h2 style="color:white" class="animated bounce">{{'kImpMsg1' | translate}}</h2>
- <br/>
+ <br />
<h4 style="color:white">{{'kImpMsg2' | translate}}</h4>
- <br/> {{'kImpMsg3' | translate}} v{{currentVersion}}.
- <br/> v{{recommendedVersion}} {{'kImpMsg4' | translate}}
- <br/> {{'kImpMsg5' | translate}}:
+ <br /> {{'kImpMsg3' | translate}} v{{currentVersion}}.
+ <br /> v{{recommendedVersion}} {{'kImpMsg4' | translate}}
+ <br /> {{'kImpMsg5' | translate}}:
<b>v{{currentVersion}}</b>
- <br/> {{'kImpMsg6' | translate}}:
+ <br /> {{'kImpMsg6' | translate}}:
<b>v{{recommendedVersion}}</b>
- <br/>
- <br/>
+ <br />
+ <br />
<button class="button button-stable animated bounceInUp" ng-click="openMenu()">
{{'kImpMsg7' | translate}}
@@ -31,7 +31,7 @@
</span>
</center>
- <br/>
+ <br />
</div>
</ion-content>
</ion-view>
diff --git a/www/templates/invalidapi.html b/www/templates/invalidapi.html
index 3a63e545..c73e8be7 100644
--- a/www/templates/invalidapi.html
+++ b/www/templates/invalidapi.html
@@ -5,27 +5,28 @@
<ion-content class="pin-background">
<div style="margin-left:20px; margin-right:20px">
<center>
- <br/>
- <br/>
+ <br />
+ <br />
<div id="responsive-image">
<img src="img/authlogo.png">
</div>
- <br/>
+ <br />
<span style="color:white">
<h2 style="color:white" class="animated bounce">{{'kInvalidAPIHeader' | translate}}</h2>
- <br/>
+ <br />
<h4 style="color:white">{{'kInvalidAPIBody' | translate}}</h4>
- <br/>
- <br/>
+ <br />
+ <br />
<button class="button button-stable animated bounceInUp" ng-click="readFAQ()">
- {{'kInvalidAPIRead' | translate}}</button> <button class="button button-stable animated bounceInUp" ng-click="openMenu()">
- {{'kMenuOptions' | translate}}</button>
-
+ {{'kInvalidAPIRead' | translate}}</button> <button class="button button-stable animated bounceInUp"
+ ng-click="openMenu()">
+ {{'kMenuOptions' | translate}}</button>
+
</span>
</center>
- <br/>
+ <br />
</div>
</ion-content>
</ion-view>
diff --git a/www/templates/log.html b/www/templates/log.html
index fb97ff72..0ad840d8 100644
--- a/www/templates/log.html
+++ b/www/templates/log.html
@@ -21,11 +21,11 @@
</ion-nav-buttons>
<ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
- <!-- <h2> iCloud: </h2>
+ <!-- <h2> iCloud: </h2>
{{cloudString}}
<br/>-->
-
+
<div ng-if="logEntity=='ZoneMinder'">
<button class="button button-small button-stable icon ion-chevron-left" ng-click="changePage(1)">
@@ -44,7 +44,7 @@
</div>
- <br/>
+ <br />
<!-- don't indent here its a pre-->
<pre class="selectable" data-tap-disabled="{{selectOn}}">{{log.logString}}</pre>
</ion-content>
diff --git a/www/templates/login.html b/www/templates/login.html
index 8fbd1dc3..2d406223 100644
--- a/www/templates/login.html
+++ b/www/templates/login.html
@@ -16,12 +16,12 @@
</label>
</div>
<label>
-
- <ion-toggle ng-if="$root.platformOS != 'desktop'" ng-model="loginData.saveToCloud" toggle-class="toggle-calm">
+
+ <ion-toggle ng-if="$root.platformOS != 'desktop'" ng-model="loginData.saveToCloud" toggle-class="toggle-calm">
<span class="item-text-wrap">{{'kSaveToCloud'|translate}}</span>
<p ng-if="$root.platformOS=='ios'"> <span class="item-text-wrap">{{'kSaveToCloudIOS' | translate}}</span></p>
<p ng-if="$root.platformOS=='android'"> <span class="item-text-wrap">{{'kSaveToCloudANDROID' | translate}}</span></p>
- </ion-toggle>
+ </ion-toggle>
<ion-toggle ng-model="loginData.enableLowBandwidth" toggle-class="toggle-calm">
<span class="item-text-wrap">{{'kLowBandwidth'|translate}}</span>
@@ -43,7 +43,8 @@
<div ng-if="loginData.isUseAuth">
<label class="item item-input item-floating-label">
<span class="input-label">{{'kUserName'|translate}}</span>
- <input autocapitalize="none" autocomplete="off" autocorrect="off" type="text" placeholder="{{'kUserName' | translate}}" ng-model="loginData.username">
+ <input autocapitalize="none" autocomplete="off" autocorrect="off" type="text" placeholder="{{'kUserName' | translate}}"
+ ng-model="loginData.username">
</label>
<label class="item item-input item-floating-label">
<span class="input-label">{{'kPassword' | translate}}</span>
@@ -57,7 +58,8 @@
<div ng-if="loginData.isUseBasicAuth">
<label class="item item-input item-floating-label">
<span class="input-label">{{'kUserName'|translate}}</span>
- <input autocapitalize="none" autocomplete="off" autocorrect="off" type="text" placeholder="{{'kUserName' | translate}}" ng-model="loginData.basicAuthUser">
+ <input autocapitalize="none" autocomplete="off" autocorrect="off" type="text" placeholder="{{'kUserName' | translate}}"
+ ng-model="loginData.basicAuthUser">
</label>
<label class="item item-input item-floating-label">
<span class="input-label">{{'kPassword' | translate}}</span>
diff --git a/www/templates/lowversion.html b/www/templates/lowversion.html
index 50a3e978..440406b7 100644
--- a/www/templates/lowversion.html
+++ b/www/templates/lowversion.html
@@ -2,25 +2,25 @@
<ion-content class="pin-background">
<div style="margin-left:20px; margin-right:20px">
<center>
- <br/>
- <br/>
+ <br />
+ <br />
<div id="responsive-image">
<img src="img/authlogo.png">
</div>
- <br/>
+ <br />
<span style="color:white">
<h2 style="color:white" class="animated bounce">{{'kZMUpgradeNeeded' | translate}}</h2>
- <br/>
+ <br />
<h4 style="color:white">{{'kVersionIncompatible' | translate }}</h4>
- <br/> {{'kReportedVersion' | translate}}:
+ <br /> {{'kReportedVersion' | translate}}:
<b>{{currentVersion}}</b>
- <br/> {{'kMinVersion' | translate}}:
+ <br /> {{'kMinVersion' | translate}}:
<b>{{requiredVersion}}</b>
- <br/>
+ <br />
</span>
- <br/>
+ <br />
</center>
</div>
</ion-content>
diff --git a/www/templates/menu.html b/www/templates/menu.html
index 32fc15e7..4e70c9b3 100644
--- a/www/templates/menu.html
+++ b/www/templates/menu.html
@@ -10,7 +10,7 @@
</ion-side-menu-content>
<ion-side-menu>
<ion-header-bar class="bar bar-header bar-stable">
- <button class="button icon ion-person-stalker" ng-click="switchProfiles()"></button>
+ <button class="button icon ion-person-stalker" ng-click="switchProfiles()"></button>
<h1 class="title">{{'kMenuOptions'|translate}}</h1>
</button>
</ion-header-bar>
@@ -21,11 +21,11 @@
<ion-item ng-if="0" href="#/app/bookmark" ng-click="go('/app/bookmark)')">
<span class=" item-icon-left">
- <i class="icon ion-bookmark"></i>
- </span>{{'kBookmark'| translate}}
+ <i class="icon ion-bookmark"></i>
+ </span>{{'kBookmark'| translate}}
</ion-item>
- <ion-item id="menu-move-1" href="#/app/montage" ng-click="go('/app/montage')" >
+ <ion-item id="menu-move-1" href="#/app/montage" ng-click="go('/app/montage')">
<!--<span ng-if="$root.runMode=='lowbw'" style="float:right;margin-top:-18px;background-color:#f1c40f;color:#000;font-size:11px;opacity:0.7;width:20px;border-radius: 0px 0px 5px 5px;display:inline-block;text-align:center;">&nbsp;<i class="icon ion-arrow-graph-down-left"></i>&nbsp;</span>-->
<span class=" item-icon-left">
@@ -34,28 +34,28 @@
</ion-item>
<!--<ion-item ng-click="navigateView('app.timeline')" menu-close>-->
- <ion-item id="menu-move-2" href="#/app/timeline" ng-click="go('/app/timeline')" >
+ <ion-item id="menu-move-2" href="#/app/timeline" ng-click="go('/app/timeline')">
<span class=" item-icon-left">
<i class="icon ion-android-time"></i>
</span>{{'kMenuTimeline'|translate}}
</ion-item>
<!--<ion-item ng-click="navigateView('app.events', {id:0,playEvent:false})" menu-close>-->
- <ion-item id="menu-move-3" href="#/app/events/0/false" ng-click="go('/app/events/0/false')" >
+ <ion-item id="menu-move-3" href="#/app/events/0/false" ng-click="go('/app/events/0/false')">
<span class=" item-icon-left">
<i class="icon ion-ios-calendar-outline"></i>
</span>{{'kMenuEvents'|translate}}
</ion-item>
<!--<ion-item ng-click="navigateView('app.moment')" menu-close>-->
- <ion-item id="menu-move-4" ng-click="go('/app/moment')" href="#/app/moment" ng-click="go('/app/moment')">
+ <ion-item id="menu-move-4" ng-click="go('/app/moment')" href="#/app/moment" ng-click="go('/app/moment')">
<span class=" item-icon-left">
<i class="icon ion-star"></i>
</span>{{'kMoment24Heading'|translate}}
</ion-item>
<!-- <ion-item ng-click="navigateView('app.montage-history')" menu-close>-->
- <ion-item id="menu-move-5" href="#/app/montage-history" ng-click="go('/app/montage-history')" >
+ <ion-item id="menu-move-5" href="#/app/montage-history" ng-click="go('/app/montage-history')">
<span class=" item-icon-left">
<i class="icon ion-ios-keypad-outline"></i>
</span>{{'kMenuEventMontage'|translate}}
@@ -63,21 +63,21 @@
<!--<ion-item ng-click="navigateView('app.monitors')" menu-close>-->
- <ion-item id="menu-move-6" href="#/app/monitors" ng-click="go('/app/monitors')" >
+ <ion-item id="menu-move-6" href="#/app/monitors" ng-click="go('/app/monitors')">
<span class=" item-icon-left">
<i class="icon ion-ios-videocam-outline"></i>
</span>{{'kMenuMonitors'|translate}}
</ion-item>
<!--<ion-item ng-click="navigateView('app.state')" menu-close>-->
- <ion-item id="menu-move-7" href="#/app/state" ng-click="go('/app/state')">
+ <ion-item id="menu-move-7" href="#/app/state" ng-click="go('/app/state')">
<span class=" item-icon-left">
<i class="icon ion-information-circled"></i>
</span> {{'kMenuSystemStatus'|translate}}
</ion-item>
<!--<ion-item nav-clear menu-close ng-click="navigateView('app.login', {wizard:false})" >-->
- <ion-item id="menu-move-8" nav-clear href="#/app/login/false" ng-click="go('/app/login/false')">
+ <ion-item id="menu-move-8" nav-clear href="#/app/login/false" ng-click="go('/app/login/false')">
<span class=" item-icon-left">
<i class="icon ion-person"></i>
{{'kMenuZMSettings'|translate}}
@@ -88,7 +88,7 @@
</span>
</ion-item>
- <ion-item id="menu-move-9" nav-clear href="#/app/devoptions" ng-click="go('/app/devoptions')" >
+ <ion-item id="menu-move-9" nav-clear href="#/app/devoptions" ng-click="go('/app/devoptions')">
<!--<ion-item nav-clear menu-close ng-click="navigateView('app.devoptions')">-->
<span class=" item-icon-left">
<i class="icon ion-settings"></i>
@@ -102,7 +102,7 @@
</ion-item>
<!--<ion-item nav-clear menu-close ng-click="navigateView('app.help')" >-->
- <ion-item id="menu-move-10" nav-clear href="#/app/help" ng-click="go('/app/help')">
+ <ion-item id="menu-move-10" nav-clear href="#/app/help" ng-click="go('/app/help')">
<span class=" item-icon-left">
<i class="icon ion-help"></i>
</span> {{'kMenuHelp'|translate}}
@@ -110,7 +110,7 @@
<!--<ion-item nav-clear menu-close ng-click="navigateView('app.wizard')" >-->
- <ion-item id="menu-move-11" nav-clear href="#/app/wizard" ng-click="go('/app/wizard')">
+ <ion-item id="menu-move-11" nav-clear href="#/app/wizard" ng-click="go('/app/wizard')">
<span class=" item-icon-left">
<i class="icon ion-wand"></i>
</span> {{'kMenuWizard'|translate}}
@@ -127,7 +127,7 @@
</div>
<!--<ion-item nav-clear menu-close ng-click="navigateView('app.log')" >-->
- <ion-item id="menu-move-12" nav-clear href="#/app/log" ng-click="go('/app/log')">
+ <ion-item id="menu-move-12" nav-clear href="#/app/log" ng-click="go('/app/log')">
<span class=" item-icon-left">
<i class="icon ion-clipboard"></i>
</span> {{'kMenuLogs'|translate}}
@@ -150,7 +150,7 @@
</div>
<ion-item style="color:rgb(106, 106, 106); font-size:90%;">
<i class="ion-ios-location"></i> {{$root.getLocalTimeZone();}}
- <br/>
+ <br />
<span ng-if="$root.isTzSupported()">
<i class="icon icon-server"></i> {{$root.getServerTimeZoneNow();}} </span>
</ion-item>
diff --git a/www/templates/moment-popover.html b/www/templates/moment-popover.html
index 8cc8cab4..6d2485ca 100644
--- a/www/templates/moment-popover.html
+++ b/www/templates/moment-popover.html
@@ -8,12 +8,14 @@
</a>
- <a class="item" ng-href="" ng-click="popover.remove();getMoments('monitorName');">{{'kMomentMenuByMonitor' | translate}}
+ <a class="item" ng-href="" ng-click="popover.remove();getMoments('monitorName');">{{'kMomentMenuByMonitor' |
+ translate}}
<i ng-if="::isChecked('kMomentMenuByMonitor')" class="ion-checkmark"></i>
</a>
- <a class="item" ng-href="" ng-click="popover.remove();getMoments('MaxScore');">{{'kMomentMenuByScore' | translate}}
+ <a class="item" ng-href="" ng-click="popover.remove();getMoments('MaxScore');">{{'kMomentMenuByScore' |
+ translate}}
<i ng-if="::isChecked('kMomentMenuByScore')" class="ion-checkmark"></i>
</a>
diff --git a/www/templates/moment.html b/www/templates/moment.html
index 2e60dce6..45cdbd13 100644
--- a/www/templates/moment.html
+++ b/www/templates/moment.html
@@ -29,10 +29,11 @@
<div ng-if="areImagesLoading" class="screen-note">&nbsp;{{ 'kArrangingImages' | translate }}...&nbsp;</div>
- <div ng-if="!areImagesLoading && !isMaxScoreFramePresent" class="screen-note">&nbsp;{{ 'kApiUpgrade' | translate }}&nbsp;</div>
+ <div ng-if="!areImagesLoading && !isMaxScoreFramePresent" class="screen-note">&nbsp;{{ 'kApiUpgrade' | translate
+ }}&nbsp;</div>
<div ng-if="isSubMenu">
- <br/>
+ <br />
<div id="flyoutmenu" style="float:left">
<ul>
<li>
@@ -88,7 +89,7 @@
</div>
<div style="clear: both;"></div>
- <br/>
+ <br />
</div>
@@ -105,8 +106,7 @@
<button class="button button-small button-icon icon {{moment.Event.icon}}" ng-click="toggleCollapse(moment.Event.MonitorId, moment.Event.Id)"></button>{{moment.Event.collapseCount}}&nbsp;</span>
</figcaption>
<img image-spinner-src="{{constructFrame(moment)}}" img-spinner-w="{{moment.Event.width}}" img-spinner-h="{{moment.Event.height}}"
- image-spinner-loader="lines" on-tap="playEvent(moment)"
- />
+ image-spinner-loader="lines" on-tap="playEvent(moment)" />
<div ng-if="showIcons" class="normal-subfigcaption">
<button ng-class="moment.Event.pinned? 'button button-small button-icon icon ion-ios-flag assertive': 'button button-small button-icon icon ion-pin'"
diff --git a/www/templates/monitors-modal.html b/www/templates/monitors-modal.html
index 0b6ec69c..f039780a 100644
--- a/www/templates/monitors-modal.html
+++ b/www/templates/monitors-modal.html
@@ -3,8 +3,8 @@
<ion-content ng-cloak on-double-tap="closeModal();" scroll="false">
<div id="imagecontainer">
- <ion-scroll ng-if="!isZoneEdit" on-scroll="checkZoom()" delegate-handle="imgscroll" has-bouncing=false min-zoom=1 zooming="true"
- direction="xy" style="width: 100%;" overflow-scroll="false">
+ <ion-scroll ng-if="!isZoneEdit" on-scroll="checkZoom()" delegate-handle="imgscroll" has-bouncing=false min-zoom=1
+ zooming="true" direction="xy" style="width: 100%;" overflow-scroll="false">
<!-- android needs this 100vh - otherwise max- does not work -->
<!-- -->
<div id="monitorimage" style="height: 100vh;" class="main">
@@ -13,17 +13,18 @@
<!--<span style="color:white">{{currentStreamMode}}</span>-->
- <img id="singlemonitor" style="width:100vw; height:100vh;" image-spinner-loader="lines" image-spinner-src="{{constructSingleStream()}}"
- ng-class="{'object-fit_cover':imageFit==false, 'object-fit_contain':imageFit==true}" on-swipe-left="onSwipe(monitorId,1)"
- on-swipe-right="onSwipe(monitorId,-1)" on-double-tap="closeModal();" imageonload="imageLoaded()" />
+ <img id="singlemonitor" style="width:100vw; height:100vh;" image-spinner-loader="lines"
+ image-spinner-src="{{constructSingleStream()}}" ng-class="{'object-fit_cover':imageFit==false, 'object-fit_contain':imageFit==true}"
+ on-swipe-left="onSwipe(monitorId,1)" on-swipe-right="onSwipe(monitorId,-1)" on-double-tap="closeModal();"
+ imageonload="imageLoaded()" />
</div>
<div ng-if="animationInProgress">
<img style="width:100vw; height:100vh" ng-src="img/pausevideo.png" class="object-fit_contain" />
</div>
</div>
<div ng-if="$root.authSession=='undefined'">
- <img id="singlemonitor" ng-src="img/pausevideo.png" style="width:100vw; height:100vh; display:block;" class="object-fit_contain"
- width="{{((devWidth)/(7-monitorSize[$index]))}}px;" />
+ <img id="singlemonitor" ng-src="img/pausevideo.png" style="width:100vw; height:100vh; display:block;"
+ class="object-fit_contain" width="{{((devWidth)/(7-monitorSize[$index]))}}px;" />
</div>
</div>
</ion-scroll>
@@ -32,8 +33,8 @@
<!-- egads, ion-scroll is a bind-on-start directive, so I have to repeat this thanks to zooming = false. Must be a better way -->
- <ion-scroll ng-if="isZoneEdit" delegate-handle="imgscroll" has-bouncing=false min-zoom=1 zooming="false" direction="xy" style="width: 100%;"
- overflow-scroll="false">
+ <ion-scroll ng-if="isZoneEdit" delegate-handle="imgscroll" has-bouncing=false min-zoom=1 zooming="false"
+ direction="xy" style="width: 100%;" overflow-scroll="false">
<!-- android needs this 100vh - otherwise max- does not work -->
<!-- -->
<div id="monitorimage" style="height: 100vh;" class="main">
@@ -41,31 +42,35 @@
<div ng-if="!animationInProgress && !isBackground() && connKey">
<!--<span style="color:white">{{currentStreamMode}}</span>-->
- <img id="singlemonitor" style="width:100vw; height:100vh;" image-spinner-loader="lines" image-spinner-src="{{constructSingleStream()}}"
- ng-class="{'object-fit_cover':imageFit==false, 'object-fit_contain':imageFit==true}" on-swipe-left="onSwipe(monitorId,1)"
- on-swipe-right="onSwipe(monitorId,-1)" on-double-tap="closeModal();" imageonload="imageLoaded()" />
+ <img id="singlemonitor" style="width:100vw; height:100vh;" image-spinner-loader="lines"
+ image-spinner-src="{{constructSingleStream()}}" ng-class="{'object-fit_cover':imageFit==false, 'object-fit_contain':imageFit==true}"
+ on-swipe-left="onSwipe(monitorId,1)" on-swipe-right="onSwipe(monitorId,-1)" on-double-tap="closeModal();"
+ imageonload="imageLoaded()" />
</div>
<div ng-if="animationInProgress || isBackground()">
<img style="width:100vw; height:100vh" ng-src="img/pausevideo.png" class="object-fit_contain" />
</div>
</div>
<div ng-if="$root.authSession=='undefined'">
- <img id="singlemonitor" ng-src="img/pausevideo.png" style="width:100vw; height:100vh; display:block;" class="object-fit_contain"
- width="{{((devWidth)/(7-monitorSize[$index]))}}px;" />
+ <img id="singlemonitor" ng-src="img/pausevideo.png" style="width:100vw; height:100vh; display:block;"
+ class="object-fit_contain" width="{{((devWidth)/(7-monitorSize[$index]))}}px;" />
</div>
</div>
</ion-scroll>
<!-- zone overlays if enabled -->
<div ng-show="showZones">
- <svg id="zsvg" width="100vw" height="100vh" class="zonelayer" ng-attr-view_box="0 0 {{cw}} {{ch}}" ng-attr-preserve_aspect_ratio="{{aspectFit}}"
- on-swipe-left="onSwipe(monitorId,1)" on-swipe-right="onSwipe(monitorId,-1)" on-double-tap="closeModal();">
+ <svg id="zsvg" width="100vw" height="100vh" class="zonelayer" ng-attr-view_box="0 0 {{cw}} {{ch}}"
+ ng-attr-preserve_aspect_ratio="{{aspectFit}}" on-swipe-left="onSwipe(monitorId,1)" on-swipe-right="onSwipe(monitorId,-1)"
+ on-double-tap="closeModal();">
<polygon ng-repeat="item in zoneArray track by $index" ng-class="{'object-fit_cover {{item.type}}':imageFit==false, 'object-fit_contain {{item.type}}':imageFit==true}"
- ng-attr-points="{{item.coords}}" /> </polygon>
+ ng-attr-points="{{item.coords}}" />
+ </polygon>
- <circle id="circle-{{$index}}" ng-show="isZoneEdit" ng-repeat="item in circlePoints track by $index" class="zonepoint" ng-class="{'object-fit_cover {{item.type}}':imageFit==false, 'object-fit_contain {{item.type}}':imageFit==true}"
+ <circle id="circle-{{$index}}" ng-show="isZoneEdit" ng-repeat="item in circlePoints track by $index" class="zonepoint"
+ ng-class="{'object-fit_cover {{item.type}}':imageFit==false, 'object-fit_contain {{item.type}}':imageFit==true}"
ng-attr-cx="{{item.x}}" ng-attr-cy="{{item.y}}" ng-attr-r="{{csize}}" />
@@ -89,8 +94,8 @@
</div>
</ion-scroll>
- <button ng-if="!ptzButtonsShown" class="button {{ptzPresets[0].icon}} button-small {{ptzPresets[0].style}}" style="float:left;margin-right:10px;margin-bottom:10px;"
- ng-click="controlPTZ(monitorId, ptzPresets[0].cmd);">{{ptzPresets[0].name}}</button>
+ <button ng-if="!ptzButtonsShown" class="button {{ptzPresets[0].icon}} button-small {{ptzPresets[0].style}}"
+ style="float:left;margin-right:10px;margin-bottom:10px;" ng-click="controlPTZ(monitorId, ptzPresets[0].cmd);">{{ptzPresets[0].name}}</button>
</div>
@@ -100,23 +105,24 @@
<a class="button button-small icon ion-search button-positive" href="" ng-click="controlPTZ(monitorId, zoomOutCommand);">-</a>
<a class="button button-small icon ion-search button-positive" href="" ng-click="controlPTZ(monitorId, zoomStopCommand);">x</a>
</div>
- <br/>
+ <br />
<a class="button button-small icon ion-stop button-assertive" href="" ng-click="controlPTZ(monitorId, ptzStopCommand);"></a>
<a class="button button-small button-royal" href="" ng-click="togglePresets();">{{controlToggle}}</a>
</div>
</div>
</ion-modal-view>
- <nav mfb-menu position="tr" effect="zoomin" label="{{'kCollapse' | translate}}" active-icon="ion-chevron-up" resting-icon="ion-chevron-down"
- toggling-method="click">
- <button mfb-button icon="ion-arrow-resize" label="{{imageFit? ('kFillScreen' | translate):('kFitScreen' | translate)}}" ng-click="scaleImage();">
+ <nav mfb-menu position="tr" effect="zoomin" label="{{'kCollapse' | translate}}" active-icon="ion-chevron-up"
+ resting-icon="ion-chevron-down" toggling-method="click">
+ <button mfb-button icon="ion-arrow-resize" label="{{imageFit? ('kFillScreen' | translate):('kFitScreen' | translate)}}"
+ ng-click="scaleImage();">
</button>
<button mfb-button icon="ion-refresh" label="{{'kRefresh' | translate}}" ng-click="reloadView();">
</button>
<button mfb-button icon="ion-arrow-expand" label="{{'kControl'| translate}}" ng-click="togglePTZ();">
</button>
</nav>
- <nav mfb-menu position="br" effect="zoomin" label="{{'kCollapse' | translate}}" active-icon="ion-chevron-down" resting-icon="ion-chevron-up"
- toggling-method="click">
+ <nav mfb-menu position="br" effect="zoomin" label="{{'kCollapse' | translate}}" active-icon="ion-chevron-down"
+ resting-icon="ion-chevron-up" toggling-method="click">
<button mfb-button icon="ion-android-arrow-back" label="{{'kPrevMonitor' | translate}} " ng-click="onTap(monitorId,-1);">
</button>
<button mfb-button icon="ion-android-arrow-forward" label="{{'kNextMonitor' | translate}}" ng-click="onTap(monitorId,1);">
diff --git a/www/templates/monitors.html b/www/templates/monitors.html
index 6f37a6d3..fbd1ce26 100644
--- a/www/templates/monitors.html
+++ b/www/templates/monitors.html
@@ -1,6 +1,6 @@
<ion-view view-title="{{'kMonitors' | translate}}" cache-view="false">
<ion-nav-buttons side="left">
- <button id="monitors-move-2" class="button button-icon button-clear ion-navicon" ng-click="openMenu()">
+ <button id="monitors-move-2" class="button button-icon button-clear ion-navicon" ng-click="openMenu()">
</button>
<button data-badge="{{$root.alarmCount}}" class="animated infinite tada button button-icon button-clear ion-ios-bell notification-badge"
ng-click="handleAlarms();" ng-if="$root.isAlarm"></button>
@@ -9,9 +9,10 @@
<ion-refresher pulling-text="Pull to reload Monitors..." spinner="bubbles" on-refresh="doRefresh()">
</ion-refresher>
<div style="float:right;margin-top:3px;margin-right:8px;">
- <a id="monitors-move-2" class="button button-small icon icon-left icon ion-ios-world-outline" href="" ng-click="changeConfig('All', '','1','Monitor');">{{'kGlobalConfiguration' | translate}}</a>
+ <a id="monitors-move-2" class="button button-small icon icon-left icon ion-ios-world-outline" href="" ng-click="changeConfig('All', '','1','Monitor');">{{'kGlobalConfiguration'
+ | translate}}</a>
</div>
- <br/>
+ <br />
<div class="list card" ng-repeat="monitor in monitors">
<div class="item" ng-style="{'background-color': monitor.Monitor.Enabled=='1'?'white':'white'}">
<div ng-if="monitor.Monitor.Enabled == '1'">
@@ -40,20 +41,22 @@
</span>
</div>
<p>{{'kMode' | translate}} :{{monitor.Monitor.Function}}
- <br/> {{'kResolution' | translate}}: {{monitor.Monitor.Width}}*{{monitor.Monitor.Height}}
- <br/> {{'kMaxFPS' | translate}}: {{monitor.Monitor.MaxFPS}}
- <br/> {{'kAlarmMaxFPS' | translate}}:{{monitor.Monitor.AlarmMaxFPS}}
- <br/> {{'kAlarmFrameCount' |translate}}: {{monitor.Monitor.AlarmFrameCount}}
- <br/> {{'kStatus' | translate}}: {{monitor.Monitor.isRunningText}}
- <br/> {{'kId' | translate}}: {{monitor.Monitor.Id}}
- <br/> {{'kEventRecording' | translate}}: {{(monitor.Monitor.VideoWriter>0?'kVideo':'kImages') | translate}}
- <br/>
- <br/>
+ <br /> {{'kResolution' | translate}}: {{monitor.Monitor.Width}}*{{monitor.Monitor.Height}}
+ <br /> {{'kMaxFPS' | translate}}: {{monitor.Monitor.MaxFPS}}
+ <br /> {{'kAlarmMaxFPS' | translate}}:{{monitor.Monitor.AlarmMaxFPS}}
+ <br /> {{'kAlarmFrameCount' |translate}}: {{monitor.Monitor.AlarmFrameCount}}
+ <br /> {{'kStatus' | translate}}: {{monitor.Monitor.isRunningText}}
+ <br /> {{'kId' | translate}}: {{monitor.Monitor.Id}}
+ <br /> {{'kEventRecording' | translate}}: {{(monitor.Monitor.VideoWriter>0?'kVideo':'kImages') | translate}}
+ <br />
+ <br />
</p>
<div style="float:right;">
- <a class="button button-small icon icon-left icon ion-gear-a" href="" ng-click="changeConfig(monitor.Monitor.Name, monitor.Monitor.Id,monitor.Monitor.Enabled,monitor.Monitor.Function);">{{'kConfiguration' | translate}}</a>
+ <a class="button button-small icon icon-left icon ion-gear-a" href="" ng-click="changeConfig(monitor.Monitor.Name, monitor.Monitor.Id,monitor.Monitor.Enabled,monitor.Monitor.Function);">{{'kConfiguration'
+ | translate}}</a>
<a class="button button-small icon icon-left ion-calendar" href="#/app/events/{{monitor.Monitor.Id}}/false">{{'kEventsCap'|translate}}</a>
- <a class="button button-small icon icon-left ion-ios-eye" ng-click="openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey, monitor)">{{'kLiveView' | translate}} </a>
+ <a class="button button-small icon icon-left ion-ios-eye" ng-click="openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey, monitor)">{{'kLiveView'
+ | translate}} </a>
</div>
</div>
</div>
diff --git a/www/templates/montage-history.html b/www/templates/montage-history.html
index 742aeccc..6f67ad7f 100644
--- a/www/templates/montage-history.html
+++ b/www/templates/montage-history.html
@@ -12,8 +12,10 @@
<button data-badge="{{$root.alarmCount}}" class="animated infinite tada button button-icon button-clear ion-ios-bell notification-badge"
ng-click="handleAlarms();" ng-if="$root.isAlarm"></button>
</ion-nav-buttons>
- <ion-content has-bouncing="false" style="background-color:#444444" delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
- <div class="timeline_text"> {{'kFrom' | translate}}:{{prettifyDateTimeFirst(datetimeValueFrom.value)}} ({{humanizeTime(datetimeValueFrom.value)}})
+ <ion-content has-bouncing="false" style="background-color:#444444" delegate-handle="none" overflow-scroll="false"
+ mouse-wheel-scroll>
+ <div class="timeline_text"> {{'kFrom' | translate}}:{{prettifyDateTimeFirst(datetimeValueFrom.value)}}
+ ({{humanizeTime(datetimeValueFrom.value)}})
<div ng-if="!isMultiPort">({{'kChromeMax' | translate}})</div>
</div>
<div ng-if="isScreenReady" class="grid" id="mygrid">
@@ -23,13 +25,13 @@
<div ng-if="monitor.Monitor.eventUrl != 'img/noevent.png' && monitor.Monitor.connKey !=''">
- <div class="grid-item grid-item-{{monitor.Monitor.gridScale}} " data-item-id="{{monitor.Monitor.Id}}" data-item-size="{{monitor.Monitor.gridScale}}"
- data-item-listdisplay="{{monitor.Monitor.listDisplay}}">
+ <div class="grid-item grid-item-{{monitor.Monitor.gridScale}} " data-item-id="{{monitor.Monitor.Id}}"
+ data-item-size="{{monitor.Monitor.gridScale}}" data-item-listdisplay="{{monitor.Monitor.listDisplay}}">
<figure height="{{Monitor.monitor.height}}" width="{{Monitor.monitor.width}}" class="{{dragBorder}}" ng-if=" monitor.Monitor.listDisplay!='noshow'">
- <img class="{{monitor.Monitor.selectStyle}}" image-spinner-src="{{constructStream(monitor)}}" image-spinner-loader="lines"
- on-tap="!isDragabillyOn?togglePause(monitor.Monitor.Id):toggleSelectItem($index)" on-swipe-left="toggleControls()"
- on-swipe-right="toggleControls()" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}"
- />
+ <img class="{{monitor.Monitor.selectStyle}}" image-spinner-src="{{constructStream(monitor)}}"
+ image-spinner-loader="lines" on-tap="!isDragabillyOn?togglePause(monitor.Monitor.Id):toggleSelectItem($index)"
+ on-swipe-left="toggleControls()" on-swipe-right="toggleControls()" img-spinner-w="{{monitor.Monitor.Width}}"
+ img-spinner-h="{{monitor.Monitor.Height}}" />
<figcaption class="normal-figcaption">
&nbsp;
@@ -42,23 +44,26 @@
</span> {{monitor.Monitor.Name}}&nbsp;
<div ng-if="sliderVal.showTimeline && $root.runMode!='lowbw'" style="white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font-size:9px"
class="header-event-id" id="{{monitor.Monitor.Id}}-timeline">[{{monitor.Monitor.eid}}]
- <i class="ion-clock"></i> {{prettifyDateTimeFirst(monitor.Monitor.eventUrlTime)}} ({{humanizeTime(monitor.Monitor.eventUrlTime)}})&nbsp;
+ <i class="ion-clock"></i> {{prettifyDateTimeFirst(monitor.Monitor.eventUrlTime)}}
+ ({{humanizeTime(monitor.Monitor.eventUrlTime)}})&nbsp;
</div>
</figcaption>
</figure>
<!-- wait for packery otherwise we get large ranges -->
<div ng-show="packeryDone">
<div class="range" style="position:absolute;top:5%;width:95%;z-index:999">
- <input on-release="seek(monitor.Monitor.Id,monitor.Monitor.sliderProgress.progress )" type="range" min="0" max="{{monitor.Monitor.eventDuration}}"
- ng-model="monitor.Monitor.sliderProgress.progress">
+ <input on-release="seek(monitor.Monitor.Id,monitor.Monitor.sliderProgress.progress )" type="range" min="0"
+ max="{{monitor.Monitor.eventDuration}}" ng-model="monitor.Monitor.sliderProgress.progress">
</div>
<div id="history_canvas_video">
<canvas style="padding-left:23px;
- padding-right:23px;z-index:998" id="eventchart-{{monitor.Monitor.Id}}" width="auto" height="20"></canvas>
+ padding-right:23px;z-index:998" id="eventchart-{{monitor.Monitor.Id}}"
+ width="auto" height="20"></canvas>
</div>
</div>
<div ng-if="monitor.Monitor.seek" style="position:absolute;top:0px; left: 0px; width:100%;height:100%; background-color:rgba(0,0,0,0.3); z-index:99999">
- <div style="position:relative;top:50%;text-align:center;color:white;background-color:rgba(0,0,0,0.5);">{{'kPleaseWait' | translate}}</div>
+ <div style="position:relative;top:50%;text-align:center;color:white;background-color:rgba(0,0,0,0.5);">{{'kPleaseWait'
+ | translate}}</div>
</div>
</div>
</div>
@@ -109,7 +114,8 @@
</div>
</div>
<ion-item>
- <div ion-datetime-picker title="From" am-pm={{!loginData.use24hr}} ng-model="datetimeValueFrom.value" ng-change="dateChanged()">
+ <div ion-datetime-picker title="From" am-pm={{!loginData.use24hr}} ng-model="datetimeValueFrom.value"
+ ng-change="dateChanged()">
<b>{{'kFrom' | translate }}: </b>{{datetimeValueFrom.value | date: timeFormat}}
</div> ({{humanizeTime(datetimeValueFrom.value)}})
</ion-item>
@@ -117,11 +123,11 @@
<div class="row">
<div class="col col-75">
- <br/>
+ <br />
<div style="width:90%;color:black;">
<input ng-model="sliderVal.rate" type="text" id="mySlider6" slider options="slider_modal_options_rate" />
</div>
- <br/>
+ <br />
</div>
<div class="col col-25" style="background-color:#AEA8D3;text-align:center"> {{'kSpeed' | translate }} </div>
</div>
diff --git a/www/templates/montage.html b/www/templates/montage.html
index b37e16b6..9555d0d8 100644
--- a/www/templates/montage.html
+++ b/www/templates/montage.html
@@ -1,72 +1,73 @@
<ion-view cache-view="false" hide-nav-bar="{{minimal}}">
<ion-nav-title>{{currentProfileName}}</ion-nav-title>
<ion-nav-buttons side="left">
- <button id="montage-move-1" class="button button-icon button-clear ion-navicon" ng-click="openMenu()"></button>
+ <button id="montage-move-1" class="button button-icon button-clear ion-navicon" ng-click="openMenu()"></button>
&nbsp;
- <button class="button button-icon button-clear ion-eye" ng-click="hideUnhide();">&nbsp;
+ <button class="button button-icon button-clear ion-eye" ng-click="hideUnhide();">&nbsp;
</button>
- <button id="montage-move-2" class="button button-icon button-clear ion-chevron-down" ng-click="toggleSubMenuFunction();">&nbsp;
+ <button id="montage-move-2" class="button button-icon button-clear ion-chevron-down" ng-click="toggleSubMenuFunction();">&nbsp;
</button>
<button data-badge="{{$root.alarmCount}}" class="animated infinite tada button button-icon button-clear ion-ios-bell notification-badge"
ng-click="handleAlarms();" ng-if="$root.isAlarm"></button>
</ion-nav-buttons>
<ion-nav-buttons side="right">
- <span ng-click="toggleTimeType()" class="icon montage-time">
+ <span ng-click="toggleTimeType()" class="icon montage-time">
<i ng-class="(iconTimeNow=='server')?'icon-server':'ion-ios-location'"></i>
{{timeNow}}&nbsp;</span>
- <button class="button button-icon button-clear ion-arrow-move" ng-click="dragToggle();">&nbsp;
+ <button class="button button-icon button-clear ion-arrow-move" ng-click="dragToggle();">&nbsp;
</button>
<!--
<button class="button button-icon button-clear ion-monitor" ng-click="cast();">&nbsp;
</button>
-->
- <button id="montage-move-3" class="button button-icon button-clear ion-loop" ng-click="resetSizes();">&nbsp;
+ <button id="montage-move-3" class="button button-icon button-clear ion-loop" ng-click="resetSizes();">&nbsp;
</button>
- <button class="button button-icon button-clear ion-android-contract" ng-click="switchMinimal()">
+ <button class="button button-icon button-clear ion-android-contract" ng-click="switchMinimal()">
</button>
</ion-nav-buttons>
- <ion-content ng-cloak has-bouncing="false" style="background-color:#444444" delegate-handle="montage-delegate" overflow-scroll="false">
+ <ion-content ng-cloak has-bouncing="false" style="background-color:#444444" delegate-handle="montage-delegate"
+ overflow-scroll="false">
<div ng-if="areImagesLoading" class="screen-note">&nbsp;{{ 'kArrangingImages' | translate }}...&nbsp;</div>
<div ng-if="!minimal && toggleSubMenu">
<!-- this is header -->
- <br/>
+ <br />
<div id="flyoutmenu" style="float:left">
<ul>
<!-- <li>
<a href="" ng-click="killAllImages()"> <i class="ion-ionic"></i></a>
</li>-->
- <li >
- <a id="montage-move-4" ng-click="sliderChanged(1)" >
+ <li>
+ <a id="montage-move-4" ng-click="sliderChanged(1)">
<i class="ion-plus-circled"></i>
</a>
</li>
- <li >
- <a id="montage-move-5" ng-click="sliderChanged(-1)" >
+ <li>
+ <a id="montage-move-5" ng-click="sliderChanged(-1)">
<i class="ion-minus-circled"></i>
</a>
</li>
- <li >
- <a id="montage-move-6" ng-click="squeezeMonitors()" >
+ <li>
+ <a id="montage-move-6" ng-click="squeezeMonitors()">
<i class="ion-android-apps"></i>
</a>
</li>
<li ng-style="{'background-color': isCycleOn()?'rgba(69, 170, 242,0.7)':'rgba(108, 122, 137, 0.7)'}" ng-if="!isDragabillyOn">
- <a ng-click="toggleCycle()">
+ <a ng-click="toggleCycle()">
<i class="ion-android-bicycle"></i>:{{getCycleStatus()}}</a>
</li>
<li ng-if="isDragabillyOn">
- <a ng-click="hideMonitor(monitor.Monitor.Id)">
+ <a ng-click="hideMonitor(monitor.Monitor.Id)">
<i class="ion-close-circled"></i>
</a>
</li>
<li ng-if="isDragabillyOn">
- <a ng-click="toggleStamp()">
+ <a ng-click="toggleStamp()">
<i class="ion-pin"></i>
</a>
</li>
@@ -99,7 +100,7 @@
</div>
<div style="clear: both;"></div>
- <br/>
+ <br />
</div>
<!-- now lets draw the montage windows -->
<div class="grid" id="mygrid">
@@ -110,8 +111,8 @@
<span ng-repeat="monitor in MontageMonitors | onlyEnabled |limitTo: monLimit">
- <div class="grid-item grid-item-{{monitor.Monitor.gridScale}} " data-item-id="{{monitor.Monitor.Id}}" data-item-size="{{monitor.Monitor.gridScale}}"
- data-item-listdisplay="{{monitor.Monitor.listDisplay}} ">
+ <div class="grid-item grid-item-{{monitor.Monitor.gridScale}} " data-item-id="{{monitor.Monitor.Id}}"
+ data-item-size="{{monitor.Monitor.gridScale}}" data-item-listdisplay="{{monitor.Monitor.listDisplay}} ">
<!-- <figure>
<iframe width="200" height="100" src="https://news.google.com" frameborder="2" ></iframe>
@@ -123,17 +124,16 @@
<!--<div ng-if="$root.authSession!='undefined' && !isBackground() && !areImagesLoading">-->
<div ng-if="!minimal">
- <img class="{{monitor.Monitor.selectStyle}}" id="img-{{$index}}" image-spinner-src="{{constructStream(monitor)}}" ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);"
- image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}"
- />
+ <img class="{{monitor.Monitor.selectStyle}}" id="img-{{$index}}" image-spinner-src="{{constructStream(monitor)}}"
+ ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);"
+ image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}" />
</div>
<div ng-if="minimal">
<img id="img-{{$index}}" image-spinner-src="{{constructStream(monitor)}}" ng-click="!isDragabillyOn?openModal(monitor.Monitor.Id, monitor.Monitor.Controllable, monitor.Monitor.ControlId, monitor.Monitor.connKey,monitor):toggleSelectItem(monitor.Monitor.Id);"
- image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}"
- />
+ image-spinner-loader="lines" img-spinner-w="{{monitor.Monitor.Width}}" img-spinner-h="{{monitor.Monitor.Height}}" />
</div>
@@ -162,8 +162,8 @@
{{ 'kLowBWDisplay' | translate }}
</div>
<div ng-show="minimal">
- <nav mfb-menu position="br" effect="zoomin" label="{{'kCollapse' | translate}}" active-icon="ion-chevron-down" resting-icon="ion-chevron-up"
- toggling-method="click">
+ <nav mfb-menu position="br" effect="zoomin" label="{{'kCollapse' | translate}}" active-icon="ion-chevron-down"
+ resting-icon="ion-chevron-up" toggling-method="click">
<button mfb-button icon="ion-arrow-expand" label="{{'kIncreaseSize' | translate}}" ng-click="sliderChanged(1)">
</button>
<button mfb-button icon="ion-arrow-shrink" label="{{'kDecreaseSize' | translate}}" ng-click="sliderChanged(-1)">
@@ -178,5 +178,5 @@
ng-click="handleAlarmsWhileMinimized();" ng-if="$root.isAlarm"></a>
</span>
</div>
- <br/>
+ <br />
</ion-view>
diff --git a/www/templates/refresh.html b/www/templates/refresh.html
index d9081ffa..42f0fc19 100644
--- a/www/templates/refresh.html
+++ b/www/templates/refresh.html
@@ -2,15 +2,15 @@
<ion-content class="pin-background">
<div style="margin-left:20px; margin-right:20px">
<center>
- <br/>
- <br/>
- <br/>
+ <br />
+ <br />
+ <br />
<span style="color:white">
<h4 style="color:rgb(156, 156, 156)">{{'kLoading' | translate}}</h2>
</span>
- <br/>
+ <br />
</center>
</div>
</ion-content>
diff --git a/www/templates/state.html b/www/templates/state.html
index dd672e7a..f5bff536 100644
--- a/www/templates/state.html
+++ b/www/templates/state.html
@@ -35,16 +35,19 @@
</div>
</div>
</ion-item>
-
+
<ion-item>
<div>
<div class="row">
<div class="col text-center">
<a class="button button-small button-outline button-dark " ng-click="selectCustomState();" href="">{{'kChangeState'|translate}}</a>
- <a class="button button-small button-outline button-dark " ng-click="controlZM('restart');" href="">{{'kRestart' | translate}}</a>
- <a class="button button-small button-outline button-dark" href="" ng-click="controlZM('stop');">{{'kStop' | translate}}</a>
- <a class="button button-small button-outline button-dark" ng-click="controlZM('start');" href="">{{'kStart' | translate}}</a>
+ <a class="button button-small button-outline button-dark " ng-click="controlZM('restart');" href="">{{'kRestart'
+ | translate}}</a>
+ <a class="button button-small button-outline button-dark" href="" ng-click="controlZM('stop');">{{'kStop'
+ | translate}}</a>
+ <a class="button button-small button-outline button-dark" ng-click="controlZM('start');" href="">{{'kStart'
+ | translate}}</a>
</div>
</div>
</div>
diff --git a/www/templates/timeline-modal.html b/www/templates/timeline-modal.html
index 64b854ff..3ae0aba7 100644
--- a/www/templates/timeline-modal.html
+++ b/www/templates/timeline-modal.html
@@ -2,7 +2,7 @@
<ion-modal-view cache-view="false">
<ion-content ng-cloak on-double-tap="closeModal()" delegate-handle="timeline-modal-delegate">
<div ng-controller="TimelineModalCtrl">
- <br/>
+ <br />
<div class="item item-divider">{{mName}}&nbsp;
<i class="ion-arrow-right-b"></i>&nbsp;{{'kEvent' | translate}}:{{eid}} ({{humanizeTime}})
<button class="button icon-left button-small button-positive" style="float:right; opacity:0.7" ng-click="switchType()">
@@ -41,8 +41,8 @@
</ion-content>
- <nav mfb-menu position="br" effect="zoomin" label="{{'kCollapse'|translate}}" active-icon="ion-chevron-down" resting-icon="ion-chevron-up"
- toggling-method="click">
+ <nav mfb-menu position="br" effect="zoomin" label="{{'kCollapse'|translate}}" active-icon="ion-chevron-down"
+ resting-icon="ion-chevron-up" toggling-method="click">
<a mfb-button icon="ion-close" label="{{'kExit' | translate}}" ng-click="closeModal()"> </a>
</nav>
diff --git a/www/templates/timeline-popover.html b/www/templates/timeline-popover.html
index b1bd802e..a16abe93 100644
--- a/www/templates/timeline-popover.html
+++ b/www/templates/timeline-popover.html
@@ -4,8 +4,10 @@
<div class="list" ng-click="popover.hide()">
- <a class="item" ng-href="" ng-click="popover.hide();toggleMinAlarmFrameCount();" ng-if="loginData.enableAlarmCount">{{'kShowAllEvents' | translate}}</a>
- <a class="item" ng-href="" ng-click="popover.hide();toggleMinAlarmFrameCount();" ng-if="!loginData.enableAlarmCount"> {{'kShowAlarmedEvents' | translate}}</a>
+ <a class="item" ng-href="" ng-click="popover.hide();toggleMinAlarmFrameCount();" ng-if="loginData.enableAlarmCount">{{'kShowAllEvents'
+ | translate}}</a>
+ <a class="item" ng-href="" ng-click="popover.hide();toggleMinAlarmFrameCount();" ng-if="!loginData.enableAlarmCount">
+ {{'kShowAlarmedEvents' | translate}}</a>
<a class="item" ng-href="" ng-click="popover.hide();buttonClicked(0);">{{'kMonth' | translate}}</a>
<a class="item" ng-href="" ng-click=" popover.hide();buttonClicked(1);">
{{'kWeek' | translate}}
diff --git a/www/templates/timeline.html b/www/templates/timeline.html
index 34847eea..b7a4d4b0 100644
--- a/www/templates/timeline.html
+++ b/www/templates/timeline.html
@@ -19,14 +19,15 @@
<!--<ion-content data-tap-disabled="true">-->
<ion-content delegate-handle="none" overflow-scroll="false" mouse-wheel-scroll>
<div style="padding-left:15px; font-size:10px; color:grey">
- {{prettify(fromDate)}} - {{prettify(toDate)}} &nbsp;{{tzAbbr}}&nbsp; ({{'kTimelineOnlyDisplaying1' | translate:translationData}})
+ {{prettify(fromDate)}} - {{prettify(toDate)}} &nbsp;{{tzAbbr}}&nbsp; ({{'kTimelineOnlyDisplaying1' |
+ translate:translationData}})
<strong>
- <br/>{{timelineControls}}</strong>
+ <br />{{timelineControls}}</strong>
</div>
<ion-spinner icon="spiral" style="position:absolute; top:50%;left:50%" ng-if="!graphLoaded"></ion-spinner>
<div ng-if="!graphLoaded">
- <br/>
- <br/>
+ <br />
+ <br />
<center>
<p>{{'kWorkingOnGraph' | translate}}...</p>
</center>
@@ -35,7 +36,7 @@
<div id="visualization" data-tap-disabled="true">
</div>
</div>
- <br/>
+ <br />
<div style="padding-left:15px; font-size:10px; color:grey">
<button ng-click="toggleTap()" class="button button-small button-dark">
diff --git a/www/templates/wizard.html b/www/templates/wizard.html
index c7b3694b..84b7dba7 100644
--- a/www/templates/wizard.html
+++ b/www/templates/wizard.html
@@ -7,7 +7,8 @@
<!-- portal url -->
<wz-step wz-title="1" canexit="exitPortal">
<h4>
- <i id="transition-delay" class="animated swing ion-wand" style="font-size:2em"></i> {{'kWelcomeWizard' | translate}}</h4>
+ <i id="transition-delay" class="animated swing ion-wand" style="font-size:2em"></i> {{'kWelcomeWizard' |
+ translate}}</h4>
<img src="img/wizard.svg" width="100px" style="float:left" />
<p>{{'kWizConfigPain' | translate}}</p>
<h4>{{'kWizPortalUrl' | translate}}</h4>
@@ -19,10 +20,10 @@
<a class="button icon-left ion-information-circled button-clear button-dark" ng-click="toggleTip()">{{wizard.tiptext}}</a>
<div class="wizardtip" ng-show="wizard.tipshow">
<b>{{'kWizTip' | translate}}: </b>{{'kWizPortalTip' | translate}}
- <br/>
+ <br />
<img src="img/portalurl.png" width="30%">
</div>
- <br/>
+ <br />
<button class="button button-small icon icon-right ion-chevron-right" wz-next>{{'kNext' | translate}}</button>
</wz-step>
<!-- auth mode -->
@@ -30,12 +31,15 @@
<h4>{{'kWizPortalAuth' | translate}}</h4>
<!--<img src="img/wizard.svg" width="100px" style="float:left"/>-->
<p>{{'kWizPortalText' | translate}}</p>
- <ion-toggle ng-change="toggleAuth()" ng-model="wizard.useauth" toggle-class="toggle-calm">{{'kWizUseAuth' | translate}}</ion-toggle>
- <ion-toggle ng-show="wizard.useauth" ng-model="wizard.usezmauth" toggle-class="toggle-calm">{{'kWizZMAuth' | translate}}</ion-toggle>
+ <ion-toggle ng-change="toggleAuth()" ng-model="wizard.useauth" toggle-class="toggle-calm">{{'kWizUseAuth' |
+ translate}}</ion-toggle>
+ <ion-toggle ng-show="wizard.useauth" ng-model="wizard.usezmauth" toggle-class="toggle-calm">{{'kWizZMAuth' |
+ translate}}</ion-toggle>
<div ng-if="wizard.usezmauth">
<label class="item item-input item-floating-label">
<span class="input-label">{{'kUserName' | translate}}</span>
- <input autocorrect="off" autocapitalize="none" autocomplete="off" type="text" ng-model="wizard.zmuser" placeholder="{{'kPlaceHolderZMAuthUser'|translate}}">
+ <input autocorrect="off" autocapitalize="none" autocomplete="off" type="text" ng-model="wizard.zmuser"
+ placeholder="{{'kPlaceHolderZMAuthUser'|translate}}">
</label>
<label class="item item-text-wrap item-input item-floating-label">
<span class="input-label">{{'kPassword' | translate}}</span>
@@ -43,13 +47,15 @@
<!--<p >{{'kWizPasswdNote' | translate}}</p>-->
</label>
</div>
- <ion-toggle ng-show="wizard.useauth" ng-model="wizard.usebasicauth" toggle-class="toggle-calm">{{'kWizBasicAuth' | translate}}
+ <ion-toggle ng-show="wizard.useauth" ng-model="wizard.usebasicauth" toggle-class="toggle-calm">{{'kWizBasicAuth'
+ | translate}}
<p ng-show="wizard.usebasicauth">{{'kWarningBasicAuth'|translate}}</p>
</ion-toggle>
<label class="item item-input item-floating-label" ng-show="wizard.usebasicauth">
<span class="input-label">{{'kUserName' | translate}}</span>
- <input autocorrect="off" autocapitalize="none" autocomplete="off" type="text" ng-model="wizard.basicuser" placeholder="{{'kPlaceHolderBasicAuthUser'|translate}}">
+ <input autocorrect="off" autocapitalize="none" autocomplete="off" type="text" ng-model="wizard.basicuser"
+ placeholder="{{'kPlaceHolderBasicAuthUser'|translate}}">
</label>
<label class="item item-input item-text-wrap item-floating-label" ng-show="wizard.usebasicauth">
<span class="input-label">{{'kPassword' | translate}}</span>
@@ -60,29 +66,30 @@
<a class="button icon-left ion-information-circled button-clear button-dark" ng-click="toggleTip()">{{wizard.tiptext}}</a>
<div class="wizardtip" ng-show="wizard.tipshow">
<b>{{'kWizTip'| translate}} </b> {{'kWizAuthText1' | translate}}
- <br/> {{'kWizAuthText2' | translate}}
+ <br /> {{'kWizAuthText2' | translate}}
</div>
- <br/>
+ <br />
<button class="button button-small icon icon-left ion-chevron-left" wz-previous>{{'kPrev' | translate}}</button>
- <button class="button button-small icon icon-right ion-chevron-right" ng-click="exitAuth()">{{'kNext' | translate}}</button>
+ <button class="button button-small icon icon-right ion-chevron-right" ng-click="exitAuth()">{{'kNext' |
+ translate}}</button>
</wz-step>
<wz-step wz-title="3">
- <br/>
- <br/>
+ <br />
+ <br />
<h4>{{'kWizResults' | translate}}</h4>
<span ng-if="wizard.portalValidText" ng-style="{'color':wizard.portalColor}">
<i ng-class="wizard.portalColor=='#16a085' ? 'ion-checkmark-circled':'ion-close-circled'"></i>&nbsp;{{wizard.portalValidText}}
- <br/>
+ <br />
</span>
<span ng-if="wizard.apiValidText" ng-style="{'color':wizard.apiColor}">
<i ng-class=" wizard.apiColor=='#16a085' ? 'ion-checkmark-circled':'ion-close-circled'"></i>&nbsp;{{wizard.apiValidText}}
- <br/>
+ <br />
</span>
<span ng-if="wizard.streamingValidText" ng-style="{'color':wizard.streamingColor}">
<i ng-class="wizard.streamingColor=='#16a085' ? 'ion-checkmark-circled':'ion-close-circled'"></i>&nbsp;{{wizard.streamingValidText}}
- <br/>
+ <br />
</span>
- <br/>
+ <br />
<div class="wizardtip">
{{'kWizNextStep1' | translate}}:
<ul class="wiz-list">
@@ -90,10 +97,11 @@
<li>{{'kWizNextStep3' | translate}}</li>
</ul>
</div>
- <br/>
- <br/>
+ <br />
+ <br />
<button class="button button-small icon icon-left ion-chevron-left" wz-previous>{{'kPrev' | translate}}</button>
- <button class="button button-small icon icon-right ion-chevron-right" ng-click="gotoLoginState()">{{'kWizGotoLogin' | translate}}</button>
+ <button class="button button-small icon icon-right ion-chevron-right" ng-click="gotoLoginState()">{{'kWizGotoLogin'
+ | translate}}</button>
</wz-step>
</wizard>
</ion-content>
diff --git a/www/templates/zm-portal-login.html b/www/templates/zm-portal-login.html
index 903ae7c6..c3431cd4 100644
--- a/www/templates/zm-portal-login.html
+++ b/www/templates/zm-portal-login.html
@@ -2,8 +2,8 @@
<ion-content class="pin-background" scroll="false">
<div style="margin-left:20px; margin-right:20px">
<center>
- <br/>
- <br/>
+ <br />
+ <br />
<div id="responsive-image">
<img src="img/authlogo.png">
</div>
@@ -12,15 +12,15 @@
<div class="pinCode">
<input id="pin-box" type="number" pattern="[0-9]*" ng-model="pindata.pin" ng-keyup="pinChange()" />
</div>
- <br/>
+ <br />
<span style="color:white">{{pindata.status}}</span>
- <br/>
+ <br />
<button class="button button-dark icon ion-unlocked" ng-click="unlock()"> Unlock
</button>
</div>
<div id="really-your-fault" class="animated fadeIn" style="color:white">{{'kPortalNotice' | translate}}
- <br/>
- <br/>{{'kPortalNoticeSub' | translate}}</div>
+ <br />
+ <br />{{'kPortalNoticeSub' | translate}}</div>
</center>
</div>
</ion-content>