From 86e4e291bfda3365c0bb82bacb2b9990a86ce759 Mon Sep 17 00:00:00 2001 From: ARC Date: Sat, 25 Apr 2015 09:13:54 -0400 Subject: First Commit --- www/js/DataModel.js | 235 +++++++++++++++++++++++++++++++++++++++++++++ www/js/EventCtrl.js | 54 +++++++++++ www/js/EventsGraphsCtrl.js | 157 ++++++++++++++++++++++++++++++ www/js/HttpFactory.js | 94 ++++++++++++++++++ www/js/LoginCtrl.js | 17 ++++ www/js/MonitorCtrl.js | 28 ++++++ www/js/MontageCtrl.js | 53 ++++++++++ www/js/app.js | 167 ++++++++++++++++++++++++++++++++ www/js/controllers.js | 8 ++ 9 files changed, 813 insertions(+) create mode 100644 www/js/DataModel.js create mode 100644 www/js/EventCtrl.js create mode 100644 www/js/EventsGraphsCtrl.js create mode 100644 www/js/HttpFactory.js create mode 100644 www/js/LoginCtrl.js create mode 100644 www/js/MonitorCtrl.js create mode 100644 www/js/MontageCtrl.js create mode 100644 www/js/app.js create mode 100644 www/js/controllers.js (limited to 'www/js') diff --git a/www/js/DataModel.js b/www/js/DataModel.js new file mode 100644 index 00000000..cd5e411f --- /dev/null +++ b/www/js/DataModel.js @@ -0,0 +1,235 @@ +angular.module('zmApp.controllers').service('ZMDataModel', ['$http', '$q', '$ionicLoading', function ($http, $q, $ionicLoading) { + // var deferred=''; + var monitorsLoaded = 0; + var simulationMode = 0; // make 1 for simulation + var simSize = 30; + var montageSize = 3; + var monitors = []; + var oldevents = []; + var loginData = { + 'username': '', + 'password': '', + 'url': '', + 'apiurl': '' + }; + //greeas + + var simulation = + { + fillSimulatedMonitors: function(cnt) + { + var simmonitors = []; + console.log ("*** Returning "+cnt+" simulated monitors"); + for (var i=0; i < cnt; i++) + { + + + simmonitors.push( + { + "Monitor": + { + "Id":i.toString(), + "Name":"Monitor Simulation "+i.toString(), + "Type":"Remote", + "Function":"Modect", + "Enabled":"1", + "Width":"1280", + "Height":"960", + "Colours":"4", + "MaxFPS":"10.00", + "AlarmMaxFPS":"10.00", + "AlarmFrameCount":"10.00" + } + } + ); + + } + console.log ("Simulated: "+JSON.stringify(simmonitors)); + return simmonitors; + }, + }; + + return { + + init: function () { + console.log("****** DATAMODEL INIT SERVICE CALLED ********"); + var montageSize = 2; + + if (window.localStorage.getItem("username") != undefined) { + loginData.username = + window.localStorage.getItem("username"); + + } + if (window.localStorage.getItem("password") != undefined) { + loginData.password = + window.localStorage.getItem("password"); + + } + + if (window.localStorage.getItem("url") != undefined) { + loginData.url = + window.localStorage.getItem("url"); + + } + + if (window.localStorage.getItem("apiurl") != undefined) { + loginData.apiurl = + window.localStorage.getItem("apiurl"); + + } + + monitorsLoaded = 0; + console.log("Getting out of ZMDataModel init"); + + }, + + + + getLogin: function () { + return loginData; + }, + setLogin: function (newLogin) { + loginData = newLogin; + window.localStorage.setItem("username", loginData.username); + window.localStorage.setItem("password", loginData.password); + window.localStorage.setItem("url", loginData.url); + window.localStorage.setItem("apiurl", loginData.apiurl); + + }, + + getMonitors: function (forceReload) { + console.log("** Inside ZMData getMonitors with forceReload=" + forceReload); + var d = $q.defer(); + if (((monitorsLoaded == 0) || (forceReload == 1)) && (simulationMode !=1) ) // monitors are empty or force reload + { + console.log("ZMDataModel: Invoking HTTP Factory to load monitors"); + var apiurl = loginData.apiurl; + var myurl = apiurl + "/monitors.json"; + $http.get(myurl) + .success(function (data) { + console.log ("HTTP success got " + JSON.stringify(data.monitors)); + monitors = data.monitors; + console.log("promise resolved inside HTTP success"); + monitorsLoaded = 1; + d.resolve(monitors); + }) + .error(function (err) { + console.log("HTTP Error " + err); + monitors = []; + console.log("promise resolved inside HTTP fail"); + d.resolve(monitors); + }); + return d.promise; + + } else // monitors are loaded + { + if (simulationMode == 1) + { + monitors = simulation.fillSimulatedMonitors(simSize); + //fillSimulatedMonitors + } + console.log("Returning pre-loaded list of " + monitors.length + " monitors"); + d.resolve(monitors); + return d.promise; + } + + }, + setMonitors: function (mon) { + console.log("ZMData setMonitors called with " + mon.length + " monitors"); + monitors = mon; + }, + + getAllPreexistingEvents: function() + { + console.log ("returning "+oldevents.length+" preexisting events"); + return oldevents; + }, + + + getEvents: function (monitorId) { + + $ionicLoading.show({ + template: 'Loading ZoneMinder Events...', + animation: 'fade-in', + showBackdrop: true, + maxWidth: 200, + showDelay: 0 + }); + + console.log("ZMData getEvents called with ID="+monitorId); + var d = $q.defer(); + var myevents = []; + var apiurl = loginData.apiurl; + var myurl = (monitorId == 0) ? apiurl + "/events.json" : apiurl + "/events/index/MonitorId:"+monitorId+".json"; + console.log ("Constructed URL is " + myurl); + $http.get(myurl) + .success(function (data) { + $ionicLoading.hide(); + myevents = data.events.reverse(); + if (monitorId == 0) + { + oldevents = myevents; + } + //console.log (JSON.stringify(data)); + console.log("Returning " + myevents.length + "events"); + d.resolve(myevents); + return d.promise; + + }) + .error(function (err) { + $ionicLoading.hide(); + console.log("HTTP Events error " + err); + d.resolve(myevents); + if (monitorId ==0) + { + oldevents = []; + } + return d.promise; + }) + return d.promise; + + }, + + getMontageSize: function () { + return montageSize; + }, + setMontageSize: function (montage) { + montageSize = montage; + }, + + getMonitorsLoaded: function () { + console.log("**** Inside promise function "); + var deferred = $q.defer(); + if (monitorsLoaded != 0) { + deferred.resolve(monitorsLoaded); + } + + return deferred.promise; + }, + setMonitorsLoaded: function (loaded) { + console.log("ZMData.setMonitorsLoaded=" + loaded); + monitorsLoaded = loaded; + }, + + getMonitorName: function (id) { + var idnum = parseInt(id); + // console.log ("I have " + monitors.length + " monitors to match"); + + //console.log (JSON.stringify(monitors)); + for (var i = 0; i < monitors.length; i++) { + // console.log ("Searching for:"+idnum+"& got:"+monitors[i].Monitor.Id); + //console.log ("Searching for monitors id:"+monitors[i].Mo + // console.log ("Iteration #"+i+" " +monitors[i].Monitor.Id + " " + monitors[i].Monitor.Name); + if (parseInt(monitors[i].Monitor.Id) == idnum) { + // console.log ("Matched, exiting getMonitorname"); + return monitors[i].Monitor.Name; + } + + } + return "(Unknown)"; + }, + + + + }; +}]); \ No newline at end of file diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js new file mode 100644 index 00000000..8c0ea8ba --- /dev/null +++ b/www/js/EventCtrl.js @@ -0,0 +1,54 @@ +angular.module('zmApp.controllers').controller('zmApp.EventCtrl', function ($ionicPlatform, $scope, $stateParams, message, ZMDataModel,$ionicSideMenuDelegate) { + console.log("I got STATE PARAM " + $stateParams.id); + $scope.id = parseInt($stateParams.id,10); + +$scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + } + + console.log("***CALLING EVENTS FACTORY"); + var lData = ZMDataModel.getLogin(); + console.log("ZM Service Username = " + lData.username); + $scope.monitors = message; + $scope.events = ZMDataModel.getEvents($scope.id) + .then(function (data) { + console.log("EventCtrl Got events"); + //var events = []; + var myevents = data; + for (var i = 0; i < myevents.length; i++) { + + myevents[i].Event.MonitorName = ZMDataModel.getMonitorName(myevents[i].Event.MonitorId); + } + + //for (var i = 0; i< myevents.length; i++) + // { + // console.log ("I got Name as " + myevents[i].Event.MonitorName); + // } + $scope.events = myevents; + }); + //ZMDataModel.getEvents(); + + + $scope.doRefresh = function () { + console.log("***Pull to Refresh"); + $scope.events = []; + $scope.events = ZMDataModel.getEvents($scope.id) + .then(function (data) { + console.log("EventCtrl Got events"); + //var events = []; + var myevents = data; + for (var i = 0; i < myevents.length; i++) { + + myevents[i].Event.MonitorName = ZMDataModel.getMonitorName(myevents[i].Event.MonitorId); + } + + //for (var i = 0; i< myevents.length; i++) + // { + // console.log ("I got Name as " + myevents[i].Event.MonitorName); + // } + $scope.events = myevents; + $scope.$broadcast('scroll.refreshComplete'); + }); + }; //dorefresh + +}); \ No newline at end of file diff --git a/www/js/EventsGraphsCtrl.js b/www/js/EventsGraphsCtrl.js new file mode 100644 index 00000000..2bd04e12 --- /dev/null +++ b/www/js/EventsGraphsCtrl.js @@ -0,0 +1,157 @@ +angular.module('zmApp.controllers').controller('zmApp.EventsGraphsCtrl', function ($ionicPlatform, $scope, ZMDataModel, $ionicSideMenuDelegate, $rootScope, $http) { + console.log("Inside Graphs controller"); + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + } + + $scope.navTitle = 'Tab Page'; + $scope.leftButtons = [{ + type: 'button-icon icon ion-navicon', + tap: function (e) { + $scope.toggleMenu(); + } + }]; + + $scope.anotherChart = function() + { + //alert ("Well I got called!"); + $scope.chart2Object = {}; //test + $scope.chart2Object.data = [ + ['Monitor', 'Events', { + role: 'style' + }, { + role: 'annotation' + }], + ['', 0, '', ''] // needed to get rid of the initial error of charts + ]; + + + $scope.chart2Object.type = "BarChart"; + $scope.chart2Object.options = { + title: 'Events per monitor PER HOUR', + height: $rootScope.devHeight, + animation: { + duration: 700, + easing: 'out', + startup: 'false', + }, + + + } + + var monitors = []; + console.log("*** Grabbing lists of events and monitors "); + ZMDataModel.getMonitors(0).then(function (data) { + + monitors = data; + var loginData = ZMDataModel.getLogin(); + //var events = ZMDataModel.getAllPreexistingEvents(); + // lets get the event count for all + for (var i = 0; i < monitors.length; i++) { + (function (j) { + //monevents[monitors[j].Monitor.Id].monName = monitors[j].Monitor.Name; + + var url = loginData.apiurl + + "/events/index/MonitorId:" + monitors[j].Monitor.Id + + ".json?page=1"; + console.log("Monitor event URL:" + url); + $http.get(url) + .success(function (data) { + console.log("**** EVENT COUNT FOR MONITOR " + + monitors[j].Monitor.Id + " IS " + data.pagination.count); + + console.log("Pushing " + monitors[j].Monitor.Name + + " AND " + data.pagination.count); + + $scope.chart2Object.data.push + ([monitors[j].Monitor.Name, data.pagination.count, + 'opacity: 0.4', data.pagination.count]); + + }) + .error(function (data) { + console.log("**** EVENT COUNT FOR MONITOR " + + monitors[i].Monitor.Id + " IS ERROR "); + $scope.chart2Object.data.push([monitors[j].Monitor.Name, + 0, 'opacity: 0.4', 0]); + + }); + + })(i); // j + + } //for + + }); + + }; // scope function + + + + + $scope.chartObject = {}; //test + $scope.chartObject.data = [ + ['Monitor', 'Events', { + role: 'style' + }, { + role: 'annotation' + }], + ['', 0, '', ''] // needed to get rid of the initial error of charts + ]; + + + $scope.chartObject.type = "BarChart"; + $scope.chartObject.options = { + title: 'Events per monitor', + height: $rootScope.devHeight, + animation: { + duration: 700, + easing: 'out', + startup: 'false', + }, + + + } + + var monitors = []; + console.log("*** Grabbing lists of events and monitors "); + ZMDataModel.getMonitors(0).then(function (data) { + + monitors = data; + var loginData = ZMDataModel.getLogin(); + //var events = ZMDataModel.getAllPreexistingEvents(); + // lets get the event count for all + for (var i = 0; i < monitors.length; i++) { + (function (j) { + //monevents[monitors[j].Monitor.Id].monName = monitors[j].Monitor.Name; + + var url = loginData.apiurl + + "/events/index/MonitorId:" + monitors[j].Monitor.Id + + ".json?page=1"; + console.log("Monitor event URL:" + url); + $http.get(url) + .success(function (data) { + console.log("**** EVENT COUNT FOR MONITOR " + + monitors[j].Monitor.Id + " IS " + data.pagination.count); + + console.log("Pushing " + monitors[j].Monitor.Name + + " AND " + data.pagination.count); + + $scope.chartObject.data.push + ([monitors[j].Monitor.Name, data.pagination.count, + 'opacity: 0.4', data.pagination.count]); + + }) + .error(function (data) { + console.log("**** EVENT COUNT FOR MONITOR " + + monitors[i].Monitor.Id + " IS ERROR "); + $scope.chartObject.data.push([monitors[j].Monitor.Name, + 0, 'opacity: 0.4', 0]); + + }); + + })(i); // j + + } //for + + }); + +}); \ No newline at end of file diff --git a/www/js/HttpFactory.js b/www/js/HttpFactory.js new file mode 100644 index 00000000..c11daba1 --- /dev/null +++ b/www/js/HttpFactory.js @@ -0,0 +1,94 @@ +angular.module('zmApp.controllers').factory('ZMHttpFactory', ['$http', '$rootScope','$ionicLoading', '$ionicPopup','$timeout' + function($http, $rootScope, $ionicLoading, $ionicPopup, $timeout) { + + + + return { + getMonitors: function(loginData) { + console.log ("Inside HTTP getMonitors"); + $ionicLoading.show({ + template: 'Loading ZoneMinder Monitors...', + animation: 'fade-in', + showBackdrop: true, + maxWidth: 200, + showDelay: 0 + }); + + var monitors = []; + + var apiurl = loginData.apiurl; + var myurl = apiurl+"/monitors.jsona"; + + return $http({ + url: myurl, + method: 'get' + + }) //http + .then(function(response) { + var data = response.data; + //console.log("****YAY" + JSON.stringify(data)); + // $rootScope.$broadcast ('handleZoneMinderMonitorsUpdate',monitors); + $ionicLoading.hide(); + console.log ("** Settings Monitors from HTTP"); + //ZMDataModel.setMonitors(data.monitors); + + // ZMDataModel.setMonitorsLoaded(1); + monitors = data.monitors; + console.log ("**** returning "+monitors.length+" monitors from HTTP"); + return monitors; + }, + function (result) + { + console.log ("**** Error in HTTP"); + $ionicLoading.hide(); + //ZMDataModel.setMonitorsLoaded(1); + //$ionicPopup.alert ({title: "Error", template:"Error retrieving Monitors. \nPlease check if your Settings are correct. "}); + //return ZMDataModel.getMonitors(); + return monitors; + } + ); //then + }, //getMonitors + + getEvents: function(loginData) { + + $ionicLoading.show({ + template: 'Loading ZoneMinder Events...', + animation: 'fade-in', + showBackdrop: true, + maxWidth: 200, + showDelay: 0 + }); + + var myevents = []; + var apiurl = loginData.apiurl; + //var myurl = $rootScope.loginData.url+'/zm/index.php?skin=xml'; + var myurl = apiurl + "/events.json"; + console.log("***MAKING REQUEST to "+ myurl); + return $http({ + url: myurl, + method: 'get', + headers: { + //'Content-Type': 'application/x-www-form-urlencoded', + 'Accept': '*/*', + } + + }) //http + .then(function(response) { + var data = response.data; + // $rootScope.$broadcast ('handleZoneMinderMonitorsUpdate',monitors); + $ionicLoading.hide(); + myevents = response.data; + return myevents.events.reverse(); + }, + function (result) + { + console.log ("**** Error in HTTP"); + $ionicLoading.hide(); + //$ionicPopup.alert ({title: "Error", template:"Error retrieving Monitors. \nPlease check if your Settings are correct. "}); + return myevents; + } + ); //then + }, //getEvents + } + } +]); \ No newline at end of file diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js new file mode 100644 index 00000000..2e428c18 --- /dev/null +++ b/www/js/LoginCtrl.js @@ -0,0 +1,17 @@ +angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', function ($scope, $rootScope, $ionicModal, ZMDataModel,$ionicSideMenuDelegate) { +$scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + } + + $scope.loginData = ZMDataModel.getLogin(); + + + // Perform the login action when the user submits the login form + $scope.login = function () { + console.log('Saving login'); + ZMDataModel.setLogin($scope.loginData); + + + + }; +}) \ No newline at end of file diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js new file mode 100644 index 00000000..300f5538 --- /dev/null +++ b/www/js/MonitorCtrl.js @@ -0,0 +1,28 @@ +angular.module('zmApp.controllers').controller('zmApp.MonitorCtrl', function ($scope, ZMDataModel, message,$ionicSideMenuDelegate) { + + $scope.monitors = []; + +$scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + } + + console.log("***EVENTS: Waiting for Monitors to load before I proceed"); + + $scope.monitors = message; + // console.log("I GOT " + $scope.monitors); + + console.log("HERE"); + + $scope.doRefresh = function () { + console.log("***Pull to Refresh"); + $scope.monitors = []; + + var refresh = ZMDataModel.getMonitors(1); + refresh.then(function (data) { + $scope.monitors = data; + $scope.$broadcast('scroll.refreshComplete'); + }); + + }; + +}); \ No newline at end of file diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js new file mode 100644 index 00000000..115bd513 --- /dev/null +++ b/www/js/MontageCtrl.js @@ -0,0 +1,53 @@ +angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', function ($scope, $rootScope, ZMDataModel, message,$ionicSideMenuDelegate) { + + + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + } + + //var monsize =3; + console.log("********* Inside Montage Ctrl"); + $scope.LoginData = ZMDataModel.getLogin(); + $scope.slider = {}; + $scope.slider.monsize = ZMDataModel.getMontageSize(); + $scope.$on('$ionicView.afterEnter', function () { + $rootScope.rand = Math.floor((Math.random() * 100000) + 1); + //console.log("*********IN VIEW, generated " + $rootScope.rand); + + console.log("Rootscoxxpe Montage is " + ZMDataModel.getMontageSize() + " and slider montage is " + $scope.slider.monsize); + }); + + + + + + $scope.$watch('slider.monsize', function () { + console.log('Slider has changed'); + ZMDataModel.setMontageSize($scope.slider.monsize); + console.log("Rootscope Montage is " + ZMDataModel.getMontageSize() + " and slider montage is " + $scope.slider.monsize); + //$rootScope.montageSize = $scope.slider.monsize; + }); + + $scope.monitors = []; + console.log("Inside MontageCtrl waiting for monitors to load..."); + + $scope.monitors = message; + console.log("I have received the monitors inside Montage and there are " + $scope.monitors.length); + // console.log("***CALLING FACTORY"); + //ZMHttpFactory.getMonitors().then(function(data) //{ + // $scope.monitors = data; + // console.log("I GOT " + $scope.monitors); + // }); + + $scope.doRefresh = function () { + console.log("***Pull to Refresh"); + $scope.monitors = []; + + var refresh = ZMDataModel.getMonitors(1); + refresh.then(function (data) { + $scope.monitors = data; + $scope.$broadcast('scroll.refreshComplete'); + }); + + }; +}); \ No newline at end of file diff --git a/www/js/app.js b/www/js/app.js new file mode 100644 index 00000000..a5f58a6b --- /dev/null +++ b/www/js/app.js @@ -0,0 +1,167 @@ + +// core app start stuff +angular.module('zmApp', [ + 'ionic', + 'zmApp.controllers', + + ]) + +.run(function ($ionicPlatform, $ionicPopup, $rootScope, $state, ZMDataModel) { + + ZMDataModel.init(); + var loginData = ZMDataModel.getLogin(); + + if (loginData.username && loginData.password && loginData.url && loginData.apiurl) { + console.log("VALID CREDENTIALS. Grabbing Monitors"); + ZMDataModel.getMonitors(0); + + } + + window.onorientationchange = function() { + console.log ("**ORIENTATION CHANGE**"); + var pixelRatio = window.devicePixelRatio || 1; + $rootScope.devWidth = ((window.innerWidth > 0) ? window.innerWidth : screen.width); + $rootScope.devHeight = ((window.innerHeight > 0) ? window.innerHeight : screen.height); + console.log("********Computed Dev Width & Height as" + $rootScope.devWidth+"*"+$rootScope.devHeight); + } + + $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { + // console.log ("***** STATE CHANGE CHECK ****"); + var requireLogin = toState.data.requireLogin; + // console.log ("STATE REQUIRE LOGIN: "+requireLogin); + if (requireLogin) { + event.preventDefault(); + //$state.go('app'); + //$ionicPopup.alert ({title: "Error", template:"You are not logged in."}); + //alert ("Not logged in"); + // get me a login modal! + } + }); + + + $ionicPlatform.ready(function () { + var pixelRatio = window.devicePixelRatio || 1; + $rootScope.devWidth = ((window.innerWidth > 0) ? window.innerWidth : screen.width); + $rootScope.devHeight = ((window.innerHeight > 0) ? window.innerHeight : screen.height); + + console.log("********Computed Dev Width & Height as" + $rootScope.devWidth+"*"+$rootScope.devHeight); + + document.addEventListener("resume", function () { + console.log("****The application is resuming from the background"); + $rootScope.rand = Math.floor((Math.random() * 100000) + 1); + console.log("** generated Random of " + $rootScope.rand); + $state.go($state.current, {}, { + reload: true + }); + }, false); + + + if (window.cordova && window.cordova.plugins.Keyboard) { + cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); + } + if (window.StatusBar) { + // org.apache.cordova.statusbar required + StatusBar.styleDefault(); + } + + + }); +}) + + +.config(function ($stateProvider, $urlRouterProvider) { + + + $stateProvider + + /*.state('app', { + data: { + requireLogin: false + }, + url: "/app", + abstract: true, + templateUrl: "templates/intro.html", + controller: 'zmApp.AppCtrl', + + + })*/ + + .state('login', { + data: { + requireLogin: false + }, + url: "/login", + templateUrl: "templates/login.html", + controller: 'zmApp.LoginCtrl', + + + }) + + .state('monitors', { + data: { + requireLogin: false + }, + resolve: { + message: function (ZMDataModel) { + console.log("Inside app.montage resolve"); + return ZMDataModel.getMonitors(0); + } + }, + url: "/monitors", + templateUrl: "templates/monitors.html", + controller: 'zmApp.MonitorCtrl', + + }) + + + + + .state('events', { + data: { + requireLogin: false + }, + resolve: { + message: function (ZMDataModel) { + console.log("Inside app.events resolve"); + return ZMDataModel.getMonitors(0); + } + }, + url: "/events/:id", + templateUrl: "templates/events.html", + controller: 'zmApp.EventCtrl', + + }) + +//n + .state('events-graphs', { + data: { + requireLogin: false + }, + url: "/events-graphs", + templateUrl: "templates/events-graphs.html", + controller: 'zmApp.EventsGraphsCtrl', + }) + + + .state('montage', { + data: { + requireLogin: false + }, + resolve: { + message: function (ZMDataModel) { + console.log("Inside app.montage resolve"); + return ZMDataModel.getMonitors(0); + } + }, + url: "/montage", + templateUrl: "templates/montage.html", + controller: 'zmApp.MontageCtrl', + +}); + + + // if none of the above states are matched, use this as the fallback + var defaultState = "/monitors"; + //var defaultState = "/app/montage"; + $urlRouterProvider.otherwise(defaultState); +}); \ No newline at end of file diff --git a/www/js/controllers.js b/www/js/controllers.js new file mode 100644 index 00000000..8e4c9e69 --- /dev/null +++ b/www/js/controllers.js @@ -0,0 +1,8 @@ +angular.module('zmApp.controllers', ['ionic', 'googlechart' ]) + +.controller('zmApp.AppCtrl', function($scope, $ionicSideMenuDelegate) { + $scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + } +}); +//test \ No newline at end of file -- cgit v1.2.3