1 |
|
{"version":3,"sources":["app.module.js","app.config.js","DeviceService.js","RangeService.js","VehicleService.js","infoController.js","mainController.js","mapController.js","searchController.js","graphAverageSpeed.js","graphNumberVehicles.js"],"names":["angular","module","constant","APP_NAME","APP_VERSION","API_URL","API_TOKEN","DEFAULT_POSITION","lat","lng","DEFAULT_ZOOM","DEFAULT_ZOOM_MIN","DEFAULT_RANGE_DATE_DAY","from","to","DEFAULT_RANGE_TIME_HOUR","factory","$resource","config","id","period","get","url","method","headers","Content-Type","Accept","jwt","query","isArray","controller","$rootScope","$scope","$location","Device","Vehicle","Range","this","$onInit","selectDevice","showInfoLoading","vehicles","urlExportCsv","directions","undefined","name","isLoadRange","data","response","graphShow","console","log","handleErrorResponse","$emit","$on","event","args","params","search","range","fromDate","moment","isValid","toDate","add","fromTime","hour","toTime","isTime","maxDate","minDate","max","last_date","first_date","min","deviceId","direction","getRange","dateFrom","format","dateTo","timeFrom","timeTo","renderGraph","generateUrlExportCsv","relativeUrl","replace","paramsUrl","jQuery","param","changeRange","traffics","changeDirection","vehicle","color","labels","unique","map","d","date","useVehiclesIds","typeVehicleId","filterVehicles","grep","n","indexOf","datasetsNumberVehicles","datasetsAverageSpeed","i","traffic","datasetNumberVehicles","label","backgroundColor","borderColor","borderWidth","datasetAverageSpeed","fill","cubicInterpolationMode","pointRadius","l","j","length","push","numberVehicleAverage","numberVehicle","speedAverage","datasets","infoClose","$window","showLoadingScreen","onload","$apply","newUrl","oldUrl","historyUrl","q","isDirection","modalError","status","title","body","button","modal","clickButton","reloadApp","backdrop","keyboard","location","reload","markers","google","maps","Map","document","getElementById","center","zoom","minZoom","zoomControl","mapTypeControl","scaleControl","streetViewControl","rotateControl","fullscreenControl","mapTypeId","MapTypeId","ROADMAP","showDirection","lctn","createMarker","marker","Marker","position","infoWindow","InfoWindow","content","street","town","addListener","closeInfoWindows","open","setCenter","getPosition","setZoom","close","locations","showSearchLoading","searchLocations","address","component","template","canvas","getContext","graphLine","destroy","Chart","type","options","responsive","pointDot","legend","scales","xAxes","ticks","autoSkip","maxTicksLimit","yAxes","scaleLabel","display","labelString","beginAtZero","suggestedMax","tooltips","mode","intersect","callbacks","tooltipItems","yLabel","canvasGraphNumberVehicles","graphNumberVehicles","onResize","chart","size","height","update","stacked"],"mappings":"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","file":"app.min.js","sourcesContent":["angular.module('pvpk', ['ngResource']);","angular.module('pvpk')\r\n .constant('config', {\r\n APP_NAME: 'PVPK',\r\n APP_VERSION: '1.3.3',\r\n API_URL: API_URL,\r\n API_TOKEN: API_TOKEN,\r\n DEFAULT_POSITION: {lat: 49.53, lng: 13.3},\r\n DEFAULT_ZOOM: 10,\r\n DEFAULT_ZOOM_MIN: 7,\r\n DEFAULT_RANGE_DATE_DAY: {from: -30, to: -1},\r\n DEFAULT_RANGE_TIME_HOUR: {from: 7, to: 16}\r\n });","angular.module('pvpk')\r\n .factory('Device', ['$resource', 'config', function ($resource, config) {\r\n return $resource(config.API_URL + '/devices/:id', {id: '@id', period: '@period'}, {\r\n 'get': {\r\n url: config.API_URL + '/devices/:id/:period',\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'jwt': config.API_TOKEN\r\n }\r\n },\r\n 'query': {\r\n url: config.API_URL + '/devices',\r\n method: 'GET',\r\n isArray: true,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'jwt': config.API_TOKEN\r\n }\r\n }\r\n });\r\n }]);","angular.module('pvpk')\r\n .factory('Range', ['$resource', 'config', function ($resource, config) {\r\n return $resource(config.API_URL + '/range', null, {\r\n 'get': {\r\n url: config.API_URL + '/range',\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'jwt': config.API_TOKEN\r\n }\r\n }\r\n });\r\n }]);","angular.module('pvpk')\r\n .factory('Vehicle', ['$resource', 'config', function ($resource, config) {\r\n return $resource(config.API_URL + '/vehicles', null, {\r\n 'query': {\r\n url: config.API_URL + '/vehicles',\r\n method: 'GET',\r\n isArray: true,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'jwt': config.API_TOKEN\r\n }\r\n }\r\n });\r\n }]);","angular.module('pvpk')\r\n .controller('infoController', ['$rootScope', '$scope', '$location', 'config', 'Device', 'Vehicle', 'Range', function ($rootScope, $scope, $location, config, Device, Vehicle, Range) {\r\n\r\n this.$onInit = function () {\r\n $rootScope.selectDevice = null;\r\n $scope.showInfoLoading = false;\r\n $scope.vehicles = [];\r\n $scope.urlExportCsv = null;\r\n $scope.directions = [\r\n {id: undefined, name: 'po směru i proti směru'},\r\n {id: 1, name: 'po směru'},\r\n {id: 2, name: 'proti směru'}];\r\n $scope.isLoadRange = false;\r\n\r\n Vehicle.query(null, function (data) {\r\n $scope.vehicles = data;\r\n }, function (response) {\r\n $rootScope.graphShow = false;\r\n console.log('Error api all Vehicles');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n\r\n $rootScope.$emit('setRangeFromUrl', null);\r\n };\r\n\r\n $rootScope.$on('setRangeFromUrl', function (event, args) {\r\n var params = $location.search();\r\n\r\n $scope.range = {\r\n fromDate: moment(params.fromDate, 'YYYY-MM-DD').isValid() ? moment(params.fromDate).toDate() : moment().add(config.DEFAULT_RANGE_DATE_DAY.from, 'd').toDate(),\r\n toDate: moment(params.toDate, 'YYYY-MM-DD').isValid() ? moment(params.toDate).toDate() : moment().add(config.DEFAULT_RANGE_DATE_DAY.to, 'd').toDate(),\r\n fromTime: moment(params.fromTime, 'HH:mm').isValid() ? moment(params.fromTime, 'HH:mm').toDate() : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.from}).toDate(),\r\n toTime: moment(params.toTime, 'HH:mm').isValid() ? moment(params.toTime, 'HH:mm').toDate() : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.to}).toDate(),\r\n isTime: params.isTime == 0 ? false : true,\r\n maxDate: $scope.range == null ? null : $scope.range.maxDate,\r\n minDate: $scope.range == null ? null : $scope.range.minDate\r\n };\r\n\r\n if (!$scope.isLoadRange) {\r\n Range.get(null, function (data) {\r\n $scope.range.fromDate = moment.max(moment(data.last_date).add(config.DEFAULT_RANGE_DATE_DAY.from, 'd'), moment(data.first_date)).toDate();\r\n $scope.range.toDate = moment.min(moment($scope.range.toDate), moment(data.last_date)).toDate();\r\n $scope.range.maxDate = moment(data.last_date).toDate();\r\n $scope.range.minDate = moment(data.first_date).toDate();\r\n $scope.isLoadRange = true;\r\n }, function (response) {\r\n console.log('Error api get Range');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n }\r\n });\r\n\r\n $rootScope.$on('infoLocation', function (event, args) {\r\n $scope.showInfoLoading = true;\r\n\r\n var params = $location.search();\r\n params.deviceId = args.id;\r\n params.direction = args.direction;\r\n $location.search(params);\r\n\r\n var range = $scope.getRange();\r\n\r\n var query = {\r\n period: range.isTime ? 'time-period' : 'day-period',\r\n id: args.id,\r\n direction: args.direction,\r\n dateFrom: range.fromDate.format('YYYY-MM-DD'),\r\n dateTo: range.toDate.format('YYYY-MM-DD'),\r\n timeFrom: range.isTime ? range.fromTime.format('HH:mm') : null,\r\n timeTo: range.isTime ? range.toTime.format('HH:mm') : null\r\n };\r\n\r\n Device.get(query, function (data) {\r\n $rootScope.selectDevice = data;\r\n $scope.renderGraph();\r\n $scope.urlExportCsv = $scope.generateUrlExportCsv(query);\r\n\r\n $scope.showInfoLoading = false;\r\n }, function (response) {\r\n $rootScope.selectDevice = null;\r\n $scope.showInfoLoading = false;\r\n console.log('Error api get Devices');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n\r\n });\r\n\r\n $scope.generateUrlExportCsv = function (query) {\r\n var relativeUrl = '/devices/:id/:period/csv?'.replace(':id', query.id).replace(':period', query.period);\r\n delete query.id;\r\n delete query.period;\r\n\r\n var paramsUrl = jQuery.param(query);\r\n return config.API_URL + relativeUrl + paramsUrl;\r\n };\r\n\r\n $scope.changeRange = function () {\r\n if ($scope.range.fromDate >= $scope.range.toDate || ($scope.range.isTime && $scope.range.fromTime >= $scope.range.toTime)) {\r\n $rootScope.selectDevice.traffics = [];\r\n return;\r\n }\r\n\r\n if (!($scope.range.fromDate >= $scope.range.minDate && $scope.range.toDate <= $scope.range.maxDate\r\n && $scope.range.toDate >= $scope.range.minDate && $scope.range.fromDate <= $scope.range.maxDate)) {\r\n $rootScope.selectDevice.traffics = [];\r\n return;\r\n }\r\n\r\n\r\n var range = $scope.getRange();\r\n\r\n var params = $location.search();\r\n params.fromDate = range.fromDate.format('YYYY-MM-DD');\r\n params.toDate = range.toDate.format('YYYY-MM-DD');\r\n params.fromTime = range.isTime ? range.fromTime.format('HH:mm') : null;\r\n params.toTime = range.isTime ? range.toTime.format('HH:mm') : null;\r\n params.isTime = range.isTime ? null : 0;\r\n $location.search(params);\r\n\r\n if ($rootScope.selectDevice)\r\n $rootScope.$emit('infoLocation', {\r\n id: $rootScope.selectDevice.id,\r\n direction: $rootScope.selectDevice.direction\r\n });\r\n };\r\n\r\n $scope.changeDirection = function () {\r\n\r\n $rootScope.$emit('infoLocation', {\r\n id: $rootScope.selectDevice.id,\r\n direction: $rootScope.selectDevice.direction\r\n });\r\n };\r\n\r\n $scope.getRange = function () {\r\n return {\r\n fromDate: moment($scope.range.fromDate).isValid() ? moment($scope.range.fromDate) : moment().add(config.DEFAULT_RANGE_DATE_DAY.from, 'd'),\r\n toDate: moment($scope.range.toDate).isValid() ? moment($scope.range.toDate) : moment().add(config.DEFAULT_RANGE_DATE_DAY.to, 'd'),\r\n fromTime: moment($scope.range.fromTime).isValid() ? moment($scope.range.fromTime) : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.from}),\r\n toTime: moment($scope.range.toTime).isValid() ? moment($scope.range.toTime) : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.to}),\r\n isTime: $scope.range.isTime ? true : false\r\n };\r\n };\r\n\r\n $scope.renderGraph = function () {\r\n var color = ['rgba(158, 158, 158, #alpha)', 'rgba(213, 0, 0, #alpha)', 'rgba(0, 123, 255, #alpha)', 'rgba(170, 0, 255, #alpha)',\r\n 'rgba(0, 200, 83, #alpha)', 'rgba(255, 214, 0, #alpha)', 'rgba(255, 109, 0, #alpha)',\r\n 'rgba(174, 234, 0, #alpha)', 'rgba(98, 0, 234, #alpha)', 'rgba(255, 171, 0, #alpha)', 'rgba(100, 221, 23, #alpha)', 'rgba(0, 184, 212, #alpha)'];\r\n\r\n var labels = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {\r\n return $scope.range.isTime ? d.timeFrom : moment(d.date, 'YYYY-MM-DD').format('D.M.YYYY');\r\n }));\r\n\r\n var useVehiclesIds = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {\r\n return d.typeVehicleId;\r\n }));\r\n\r\n var filterVehicles = jQuery.grep($scope.vehicles, function (n) {\r\n return useVehiclesIds.indexOf(n.id) >= 0;\r\n });\r\n\r\n var datasetsNumberVehicles = [];\r\n var datasetsAverageSpeed = [];\r\n\r\n for (var i = 0, vehicle; vehicle = filterVehicles[i]; i++) {\r\n var datasetNumberVehicles = {\r\n label: vehicle.name,\r\n backgroundColor: color[vehicle.id].replace(\"#alpha\", \"0.3\"),\r\n borderColor: color[vehicle.id].replace(\"#alpha\", \"1\"),\r\n borderWidth: 2,\r\n data: []\r\n };\r\n\r\n var datasetAverageSpeed = {\r\n data: [],\r\n borderWidth: 2,\r\n label: vehicle.name,\r\n fill: false,\r\n backgroundColor: color[vehicle.id].replace(\"#alpha\", \"0.3\"),\r\n borderColor: color[vehicle.id].replace(\"#alpha\", \"1\"),\r\n cubicInterpolationMode: 'monotone',\r\n pointRadius: 0\r\n };\r\n\r\n var l = 0;\r\n for (var j = 0, traffic; traffic = $rootScope.selectDevice.traffics[j]; j++) {\r\n if (($scope.range.isTime && labels[l] !== traffic.timeFrom) || (!$scope.range.isTime && labels[l] !== moment(traffic.date, 'YYYY-MM-DD').format('D.M.YYYY'))) {\r\n l++;\r\n if (datasetNumberVehicles.data.length < l) {\r\n datasetNumberVehicles.data.push(0);\r\n datasetAverageSpeed.data.push(0);\r\n }\r\n }\r\n if (traffic.typeVehicleId === vehicle.id) {\r\n datasetNumberVehicles.data.push($scope.range.isTime ? traffic.numberVehicleAverage : traffic.numberVehicle);\r\n datasetAverageSpeed.data.push(traffic.speedAverage <= 0 ? 0 : traffic.speedAverage);\r\n }\r\n }\r\n datasetsNumberVehicles.push(datasetNumberVehicles);\r\n datasetsAverageSpeed.push(datasetAverageSpeed);\r\n }\r\n\r\n $rootScope.$emit('renderGraphNumberVehicles', {\r\n data: {\r\n labels: labels,\r\n datasets: datasetsNumberVehicles\r\n }\r\n });\r\n\r\n $rootScope.$emit('renderGraphAverageSpeed', {\r\n data: {\r\n labels: labels,\r\n datasets: datasetsAverageSpeed\r\n }\r\n });\r\n };\r\n\r\n $scope.infoClose = function () {\r\n $rootScope.selectDevice = null;\r\n\r\n var params = $location.search();\r\n params.deviceId = null;\r\n params.direction = null;\r\n $location.search(params);\r\n\r\n $rootScope.$emit('setDefaultMap', null);\r\n };\r\n }]);\r\n","angular.module('pvpk')\r\n .controller('mainController', ['$rootScope', '$scope', '$location', '$window', function ($rootScope, $scope, $location, $window) {\r\n\r\n this.$onInit = function () {\r\n $scope.showLoadingScreen = true;\r\n };\r\n\r\n $window.onload = function () {\r\n var params = $location.search();\r\n if (params.deviceId) {\r\n $rootScope.$emit('activeMarker', {id: params.deviceId});\r\n }\r\n\r\n $scope.$apply(function () {\r\n $scope.showLoadingScreen = false;\r\n });\r\n };\r\n\r\n $rootScope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) {\r\n var params = $location.search();\r\n\r\n if (newUrl !== oldUrl && $scope.historyUrl) {\r\n if ($scope.historyUrl.q !== $scope.historyUrl.q || $scope.historyUrl.isDirection != params.isDirection) {\r\n $rootScope.$emit('setSearchFromUrl', null);\r\n }\r\n\r\n if ($scope.historyUrl.fromDate !== params.fromDate || $scope.historyUrl.toDate !== params.toDate ||\r\n $scope.historyUrl.fromTime !== params.fromTime || $scope.historyUrl.toTime !== params.toTime) {\r\n $rootScope.$emit('setRangeFromUrl', null);\r\n if (params.deviceId) {\r\n $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});\r\n }\r\n } else if (params.deviceId && ($scope.historyUrl.deviceId !== params.deviceId || $scope.historyUrl.direction !== params.direction)) {\r\n $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});\r\n $rootScope.$emit('activeMarker', {id: params.deviceId});\r\n } else if (!params.deviceId && $scope.historyUrl.deviceId) {\r\n $rootScope.selectDevice = null;\r\n $rootScope.$emit('setDefaultMap', null);\r\n }\r\n } else if (params.deviceId) {\r\n $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});\r\n }\r\n\r\n $scope.historyUrl = $location.search();\r\n });\r\n\r\n $rootScope.handleErrorResponse = function (response) {\r\n\r\n var modalError = jQuery('#modalError');\r\n switch (response.status) {\r\n case 400:\r\n console.log('API ERROR 400');\r\n $scope.modalError = {\r\n title: 'Neplatný požadavek',\r\n body: 'Požadavek nemůže být vyřízen, poněvadž byl syntakticky nesprávně zapsán.',\r\n button: 'OK'\r\n };\r\n modalError.modal('show');\r\n break;\r\n case 401:\r\n $scope.modalError = {\r\n title: 'Platnost webové aplikace vypršela',\r\n body: 'Pro obnovení platnosti stačí stisknout tlačítko Obnovit.',\r\n button: 'Obnovit',\r\n clickButton: $scope.reloadApp\r\n };\r\n modalError.modal({backdrop: 'static', keyboard: false});\r\n break;\r\n case 404:\r\n console.log('API ERROR 404');\r\n $scope.modalError = {title: 'Nenalezen', body: 'Záznam nebyl nalezen.', button: 'OK'};\r\n modalError.modal('show');\r\n break;\r\n case 500:\r\n console.log('API ERROR 500');\r\n $scope.modalError = {title: 'Chyba', body: 'Chyba serveru. Zopakujte akci později.', button: 'OK'};\r\n modalError.modal('show');\r\n break;\r\n case -1:\r\n console.log('API NOT CONNECTED');\r\n $scope.modalError = {\r\n title: 'Připojení k internetu',\r\n body: 'Nejste připojeni k internetu. Zkontrolujte připojení.',\r\n button: 'OK'\r\n };\r\n modalError.modal('show');\r\n break;\r\n default:\r\n console.log('API UNKNOWN ERROR');\r\n $scope.modalError = {title: 'Neočekávaná chyba', body: 'Nastala neočekávaná chyba.', button: 'OK'};\r\n modalError.modal('show');\r\n break;\r\n }\r\n };\r\n\r\n $scope.reloadApp = function () {\r\n $window.location.reload();\r\n }\r\n }]);","angular.module('pvpk')\r\n .controller('mapController', ['$rootScope', '$scope', 'config', 'Device', function ($rootScope, $scope, config, Device) {\r\n\r\n this.$onInit = function () {\r\n $scope.markers = [];\r\n\r\n $scope.map = new google.maps.Map(document.getElementById('map'), {\r\n center: config.DEFAULT_POSITION,\r\n zoom: config.DEFAULT_ZOOM,\r\n minZoom: config.DEFAULT_ZOOM_MIN,\r\n zoomControl: true,\r\n mapTypeControl: false,\r\n scaleControl: false,\r\n streetViewControl: false,\r\n rotateControl: false,\r\n fullscreenControl: false,\r\n mapTypeId: google.maps.MapTypeId.ROADMAP\r\n });\r\n\r\n Device.query({showDirection: 0}, function (data) {\r\n for (var i = 0, lctn; lctn = data[i]; i++) {\r\n $scope.createMarker(lctn);\r\n }\r\n }, function (response) {\r\n console.log('Error api all Devices');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n };\r\n\r\n $scope.createMarker = function (lctn) {\r\n if (lctn.lat && lctn.lng) {\r\n var marker = new google.maps.Marker({\r\n map: $scope.map,\r\n position: {lat: lctn.lat, lng: lctn.lng},\r\n title: lctn.name,\r\n infoWindow: new google.maps.InfoWindow({\r\n content: '<h6 class=\"mb-1\">' + lctn.name + '</h6>'\r\n + '<address>' + lctn.street + ', ' + lctn.town + '</address>'\r\n }),\r\n id: lctn.id\r\n });\r\n\r\n marker.addListener('click', function () {\r\n $scope.closeInfoWindows();\r\n marker.infoWindow.open($scope.map, marker);\r\n $rootScope.$emit('infoLocation', {id: lctn.id});\r\n });\r\n\r\n $scope.markers.push(marker);\r\n }\r\n };\r\n\r\n $rootScope.$on('activeMarker', function (event, args) {\r\n for (var i = 0, marker; marker = $scope.markers[i]; i++) {\r\n if (marker.id && marker.id === args.id && marker.infoWindow) {\r\n $scope.map.setCenter(marker.getPosition());\r\n $scope.map.setZoom(12);\r\n marker.infoWindow.open($scope.map, marker);\r\n } else {\r\n marker.infoWindow.close();\r\n }\r\n }\r\n });\r\n\r\n $rootScope.$on('setDefaultMap', function (event, args) {\r\n $scope.map.setCenter(config.DEFAULT_POSITION);\r\n $scope.map.setZoom(config.DEFAULT_ZOOM);\r\n $scope.closeInfoWindows();\r\n });\r\n\r\n $scope.closeInfoWindows = function () {\r\n for (var i = 0, marker; marker = $scope.markers[i]; i++) {\r\n marker.infoWindow.close();\r\n }\r\n };\r\n }]);","angular.module('pvpk')\r\n .controller('searchController', ['$rootScope', '$scope', '$location', 'config', 'Device', function ($rootScope, $scope, $location, config, Device) {\r\n\r\n this.$onInit = function () {\r\n $scope.config = config;\r\n $scope.locations = [];\r\n $scope.showSearchLoading = false;\r\n\r\n $rootScope.$emit('setSearchFromUrl', null);\r\n };\r\n\r\n $scope.searchLocations = function () {\r\n var params = $location.search();\r\n params.q = $scope.search.q;\r\n params.isDirection = $scope.search.isDirection ? 1 : null;\r\n $location.search(params);\r\n\r\n if (!$scope.search.q || $scope.search.q.length <= 1) {\r\n $scope.locations = [];\r\n return;\r\n }\r\n\r\n $scope.showSearchLoading = true;\r\n\r\n Device.query({\r\n address: $scope.search.q,\r\n showDirection: $scope.search.isDirection ? 1 : 0\r\n }, function (data) {\r\n $scope.locations = data;\r\n $scope.showSearchLoading = false;\r\n }, function (response) {\r\n $scope.showSearchLoading = false;\r\n console.log('Error api all Devices');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n };\r\n\r\n $rootScope.$on('setSearchFromUrl', function (event, args) {\r\n var params = $location.search();\r\n $scope.search = {\r\n q: params.q,\r\n isDirection: params.isDirection ? !!+params.isDirection : false\r\n };\r\n $scope.searchLocations();\r\n });\r\n\r\n $scope.selectDevice = function (id, direction) {\r\n $rootScope.$emit('activeMarker', {id: id});\r\n $rootScope.$emit('infoLocation', {id: id, direction: direction});\r\n };\r\n\r\n }]);","angular.module('pvpk')\r\n .component('graphAverageSpeed', {\r\n template: '<div><canvas id=\"graphAverageSpeed\" class=\"graph-size mb-5\"></canvas></div>',\r\n controller: ['$rootScope', '$scope', function ($rootScope, $scope) {\r\n\r\n $rootScope.$on('renderGraphAverageSpeed', function (event, args) {\r\n var canvas = document.getElementById('graphAverageSpeed').getContext('2d');\r\n\r\n if ($scope.graphLine)\r\n $scope.graphLine.destroy();\r\n\r\n $scope.graphLine = new Chart(canvas, {\r\n type: 'line',\r\n data: args.data,\r\n options: {\r\n responsive: true,\r\n pointDot: false,\r\n legend: {\r\n position: 'bottom'\r\n },\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 15\r\n }\r\n }],\r\n yAxes: [{\r\n scaleLabel: {\r\n display: true,\r\n labelString: 'km/h'\r\n },\r\n ticks: {\r\n beginAtZero: true,\r\n suggestedMax: 70\r\n }\r\n }]\r\n },\r\n tooltips: {\r\n mode: 'index',\r\n intersect: false,\r\n callbacks: {\r\n label: function (tooltipItems) {\r\n return tooltipItems.yLabel + ' km/h';\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n });\r\n\r\n }]\r\n });","angular.module('pvpk')\r\n .component('graphNumberVehicles', {\r\n template: '<div><canvas id=\"graphNumberVehicles\" class=\"graph-size mb-5\"></canvas></div>',\r\n controller: ['$rootScope', '$scope', function ($rootScope, $scope) {\r\n\r\n $rootScope.$on('renderGraphNumberVehicles', function (event, args) {\r\n var canvasGraphNumberVehicles = document.getElementById('graphNumberVehicles').getContext('2d');\r\n\r\n if ($scope.graphNumberVehicles)\r\n $scope.graphNumberVehicles.destroy();\r\n\r\n $scope.graphNumberVehicles = new Chart(canvasGraphNumberVehicles, {\r\n type: 'bar',\r\n data: args.data,\r\n options: {\r\n responsive: true,\r\n onResize: function (chart, size) {\r\n chart.options.legend.display = size.height > 240;\r\n chart.update();\r\n },\r\n legend: {\r\n position: 'bottom'\r\n },\r\n scales: {\r\n xAxes: [{\r\n stacked: true,\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 15\r\n }\r\n }],\r\n yAxes: [{\r\n scaleLabel: {\r\n display: true,\r\n labelString: \"počet vozidel\"\r\n },\r\n stacked: true\r\n }]\r\n },\r\n tooltips: {\r\n mode: 'index',\r\n intersect: false\r\n }\r\n }\r\n });\r\n\r\n });\r\n\r\n }]\r\n });"]}
|
|
1 |
{"version":3,"sources":["app.module.js","app.config.js","DeviceService.js","RangeService.js","VehicleService.js","infoController.js","mainController.js","mapController.js","searchController.js","graphAverageSpeed.js","graphNumberVehicles.js"],"names":["angular","module","constant","APP_NAME","APP_VERSION","API_URL","API_TOKEN","DEFAULT_POSITION","lat","lng","DEFAULT_ZOOM","DEFAULT_ZOOM_MIN","DEFAULT_RANGE_DATE_DAY","from","to","DEFAULT_RANGE_TIME_HOUR","factory","$resource","config","id","period","get","url","method","headers","Content-Type","Accept","jwt","query","isArray","controller","$rootScope","$scope","$location","Device","Vehicle","Range","this","$onInit","selectDevice","showInfoLoading","vehicles","urlExportCsv","directions","undefined","name","isLoadRange","data","response","graphShow","console","log","handleErrorResponse","$emit","$on","event","args","params","search","range","fromDate","moment","isValid","toDate","add","fromTime","hour","toTime","isTime","maxDate","minDate","max","last_date","first_date","min","deviceId","direction","getRange","dateFrom","format","dateTo","timeFrom","timeTo","renderGraph","generateUrlExportCsv","relativeUrl","replace","paramsUrl","jQuery","param","changeRange","traffics","changeDirection","vehicle","color","labels","unique","map","d","date","useVehiclesIds","typeVehicleId","filterVehicles","grep","n","indexOf","datasetsNumberVehicles","datasetsAverageSpeed","i","traffic","datasetNumberVehicles","label","backgroundColor","borderColor","borderWidth","datasetAverageSpeed","fill","cubicInterpolationMode","pointRadius","l","j","length","push","numberVehicleAverage","numberVehicle","speedAverage","datasets","infoClose","$window","showLoadingScreen","onload","$apply","newUrl","oldUrl","historyUrl","q","isDirection","modalError","status","title","body","button","modal","clickButton","reloadApp","backdrop","keyboard","location","reload","markers","google","maps","Map","document","getElementById","center","zoom","minZoom","zoomControl","mapTypeControl","scaleControl","streetViewControl","rotateControl","fullscreenControl","mapTypeId","MapTypeId","ROADMAP","showDirection","lctn","createMarker","marker","Marker","position","infoWindow","InfoWindow","content","street","town","addListener","closeInfoWindows","open","setCenter","getPosition","setZoom","close","locations","showSearchLoading","searchLocations","address","component","template","canvas","getContext","graphLine","destroy","Chart","type","options","responsive","pointDot","legend","scales","xAxes","ticks","autoSkip","maxTicksLimit","yAxes","scaleLabel","display","labelString","beginAtZero","suggestedMax","tooltips","mode","intersect","callbacks","tooltipItems","yLabel","canvasGraphNumberVehicles","graphNumberVehicles","onResize","chart","size","height","update","stacked"],"mappings":"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","file":"app.min.js","sourcesContent":["angular.module('pvpk', ['ngResource']);","angular.module('pvpk')\r\n .constant('config', {\r\n APP_NAME: 'PVPK',\r\n APP_VERSION: '1.3.3',\r\n API_URL: API_URL,\r\n API_TOKEN: API_TOKEN,\r\n DEFAULT_POSITION: {lat: 49.53, lng: 13.3},\r\n DEFAULT_ZOOM: 10,\r\n DEFAULT_ZOOM_MIN: 7,\r\n DEFAULT_RANGE_DATE_DAY: {from: -30, to: -1},\r\n DEFAULT_RANGE_TIME_HOUR: {from: 7, to: 16}\r\n });","angular.module('pvpk')\r\n .factory('Device', ['$resource', 'config', function ($resource, config) {\r\n return $resource(config.API_URL + '/devices/:id', {id: '@id', period: '@period'}, {\r\n 'get': {\r\n url: config.API_URL + '/devices/:id/:period',\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'jwt': config.API_TOKEN\r\n }\r\n },\r\n 'query': {\r\n url: config.API_URL + '/devices',\r\n method: 'GET',\r\n isArray: true,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'jwt': config.API_TOKEN\r\n }\r\n }\r\n });\r\n }]);","angular.module('pvpk')\r\n .factory('Range', ['$resource', 'config', function ($resource, config) {\r\n return $resource(config.API_URL + '/range', null, {\r\n 'get': {\r\n url: config.API_URL + '/range',\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'jwt': config.API_TOKEN\r\n }\r\n }\r\n });\r\n }]);","angular.module('pvpk')\r\n .factory('Vehicle', ['$resource', 'config', function ($resource, config) {\r\n return $resource(config.API_URL + '/vehicles', null, {\r\n 'query': {\r\n url: config.API_URL + '/vehicles',\r\n method: 'GET',\r\n isArray: true,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'jwt': config.API_TOKEN\r\n }\r\n }\r\n });\r\n }]);","angular.module('pvpk')\r\n .controller('infoController', ['$rootScope', '$scope', '$location', 'config', 'Device', 'Vehicle', 'Range', function ($rootScope, $scope, $location, config, Device, Vehicle, Range) {\r\n\r\n this.$onInit = function () {\r\n $rootScope.selectDevice = null;\r\n $scope.showInfoLoading = false;\r\n $scope.vehicles = [];\r\n $scope.urlExportCsv = null;\r\n $scope.directions = [\r\n {id: undefined, name: 'po směru i proti směru'},\r\n {id: 1, name: 'po směru'},\r\n {id: 2, name: 'proti směru'}];\r\n $scope.isLoadRange = false;\r\n\r\n Vehicle.query(null, function (data) {\r\n $scope.vehicles = data;\r\n }, function (response) {\r\n $rootScope.graphShow = false;\r\n console.log('Error api all Vehicles');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n\r\n $rootScope.$emit('setRangeFromUrl', null);\r\n };\r\n\r\n $rootScope.$on('setRangeFromUrl', function (event, args) {\r\n var params = $location.search();\r\n\r\n $scope.range = {\r\n fromDate: moment(params.fromDate, 'YYYY-MM-DD').isValid() ? moment(params.fromDate).toDate() : moment().add(config.DEFAULT_RANGE_DATE_DAY.from, 'd').toDate(),\r\n toDate: moment(params.toDate, 'YYYY-MM-DD').isValid() ? moment(params.toDate).toDate() : moment().add(config.DEFAULT_RANGE_DATE_DAY.to, 'd').toDate(),\r\n fromTime: moment(params.fromTime, 'HH:mm').isValid() ? moment(params.fromTime, 'HH:mm').toDate() : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.from}).toDate(),\r\n toTime: moment(params.toTime, 'HH:mm').isValid() ? moment(params.toTime, 'HH:mm').toDate() : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.to}).toDate(),\r\n isTime: params.isTime == 0 ? false : true,\r\n maxDate: $scope.range == null ? null : $scope.range.maxDate,\r\n minDate: $scope.range == null ? null : $scope.range.minDate\r\n };\r\n\r\n if (!$scope.isLoadRange) {\r\n Range.get(null, function (data) {\r\n $scope.range.fromDate = moment.max(moment(data.last_date).add(config.DEFAULT_RANGE_DATE_DAY.from, 'd'), moment(data.first_date)).toDate();\r\n $scope.range.toDate = moment.min(moment($scope.range.toDate), moment(data.last_date)).toDate();\r\n $scope.range.maxDate = moment(data.last_date).toDate();\r\n $scope.range.minDate = moment(data.first_date).toDate();\r\n $scope.isLoadRange = true;\r\n }, function (response) {\r\n console.log('Error api get Range');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n }\r\n });\r\n\r\n $rootScope.$on('infoLocation', function (event, args) {\r\n $scope.showInfoLoading = true;\r\n\r\n var params = $location.search();\r\n params.deviceId = args.id;\r\n params.direction = args.direction;\r\n $location.search(params);\r\n\r\n var range = $scope.getRange();\r\n\r\n var query = {\r\n period: range.isTime ? 'time-period' : 'day-period',\r\n id: args.id,\r\n direction: args.direction,\r\n dateFrom: range.fromDate.format('YYYY-MM-DD'),\r\n dateTo: range.toDate.format('YYYY-MM-DD'),\r\n timeFrom: range.isTime ? range.fromTime.format('HH:mm') : null,\r\n timeTo: range.isTime ? range.toTime.format('HH:mm') : null\r\n };\r\n\r\n Device.get(query, function (data) {\r\n $rootScope.selectDevice = data;\r\n $scope.renderGraph();\r\n $scope.urlExportCsv = $scope.generateUrlExportCsv(query);\r\n\r\n $scope.showInfoLoading = false;\r\n }, function (response) {\r\n $rootScope.selectDevice = null;\r\n $scope.showInfoLoading = false;\r\n console.log('Error api get Devices');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n\r\n });\r\n\r\n $scope.generateUrlExportCsv = function (query) {\r\n var relativeUrl = '/devices/:id/:period/csv?'.replace(':id', query.id).replace(':period', query.period);\r\n delete query.id;\r\n delete query.period;\r\n\r\n var paramsUrl = jQuery.param(query);\r\n return config.API_URL + relativeUrl + paramsUrl;\r\n };\r\n\r\n $scope.changeRange = function () {\r\n if ($scope.range.fromDate >= $scope.range.toDate || ($scope.range.isTime && $scope.range.fromTime >= $scope.range.toTime)) {\r\n $rootScope.selectDevice.traffics = [];\r\n return;\r\n }\r\n\r\n var range = $scope.getRange();\r\n\r\n var params = $location.search();\r\n params.fromDate = range.fromDate.format('YYYY-MM-DD');\r\n params.toDate = range.toDate.format('YYYY-MM-DD');\r\n params.fromTime = range.isTime ? range.fromTime.format('HH:mm') : null;\r\n params.toTime = range.isTime ? range.toTime.format('HH:mm') : null;\r\n params.isTime = range.isTime ? null : 0;\r\n $location.search(params);\r\n\r\n if ($rootScope.selectDevice)\r\n $rootScope.$emit('infoLocation', {\r\n id: $rootScope.selectDevice.id,\r\n direction: $rootScope.selectDevice.direction\r\n });\r\n };\r\n\r\n $scope.changeDirection = function () {\r\n\r\n $rootScope.$emit('infoLocation', {\r\n id: $rootScope.selectDevice.id,\r\n direction: $rootScope.selectDevice.direction\r\n });\r\n };\r\n\r\n $scope.getRange = function () {\r\n return {\r\n fromDate: moment($scope.range.fromDate).isValid() ? moment($scope.range.fromDate) : moment().add(config.DEFAULT_RANGE_DATE_DAY.from, 'd'),\r\n toDate: moment($scope.range.toDate).isValid() ? moment($scope.range.toDate) : moment().add(config.DEFAULT_RANGE_DATE_DAY.to, 'd'),\r\n fromTime: moment($scope.range.fromTime).isValid() ? moment($scope.range.fromTime) : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.from}),\r\n toTime: moment($scope.range.toTime).isValid() ? moment($scope.range.toTime) : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.to}),\r\n isTime: $scope.range.isTime ? true : false\r\n };\r\n };\r\n\r\n $scope.renderGraph = function () {\r\n var color = ['rgba(158, 158, 158, #alpha)', 'rgba(213, 0, 0, #alpha)', 'rgba(0, 123, 255, #alpha)', 'rgba(170, 0, 255, #alpha)',\r\n 'rgba(0, 200, 83, #alpha)', 'rgba(255, 214, 0, #alpha)', 'rgba(255, 109, 0, #alpha)',\r\n 'rgba(174, 234, 0, #alpha)', 'rgba(98, 0, 234, #alpha)', 'rgba(255, 171, 0, #alpha)', 'rgba(100, 221, 23, #alpha)', 'rgba(0, 184, 212, #alpha)'];\r\n\r\n var labels = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {\r\n return $scope.range.isTime ? d.timeFrom : moment(d.date, 'YYYY-MM-DD').format('D.M.YYYY');\r\n }));\r\n\r\n var useVehiclesIds = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {\r\n return d.typeVehicleId;\r\n }));\r\n\r\n var filterVehicles = jQuery.grep($scope.vehicles, function (n) {\r\n return useVehiclesIds.indexOf(n.id) >= 0;\r\n });\r\n\r\n var datasetsNumberVehicles = [];\r\n var datasetsAverageSpeed = [];\r\n\r\n for (var i = 0, vehicle; vehicle = filterVehicles[i]; i++) {\r\n var datasetNumberVehicles = {\r\n label: vehicle.name,\r\n backgroundColor: color[vehicle.id].replace(\"#alpha\", \"0.3\"),\r\n borderColor: color[vehicle.id].replace(\"#alpha\", \"1\"),\r\n borderWidth: 2,\r\n data: []\r\n };\r\n\r\n var datasetAverageSpeed = {\r\n data: [],\r\n borderWidth: 2,\r\n label: vehicle.name,\r\n fill: false,\r\n backgroundColor: color[vehicle.id].replace(\"#alpha\", \"0.3\"),\r\n borderColor: color[vehicle.id].replace(\"#alpha\", \"1\"),\r\n cubicInterpolationMode: 'monotone',\r\n pointRadius: 0\r\n };\r\n\r\n var l = 0;\r\n for (var j = 0, traffic; traffic = $rootScope.selectDevice.traffics[j]; j++) {\r\n if (($scope.range.isTime && labels[l] !== traffic.timeFrom) || (!$scope.range.isTime && labels[l] !== moment(traffic.date, 'YYYY-MM-DD').format('D.M.YYYY'))) {\r\n l++;\r\n if (datasetNumberVehicles.data.length < l) {\r\n datasetNumberVehicles.data.push(0);\r\n datasetAverageSpeed.data.push(0);\r\n }\r\n }\r\n if (traffic.typeVehicleId === vehicle.id) {\r\n datasetNumberVehicles.data.push($scope.range.isTime ? traffic.numberVehicleAverage : traffic.numberVehicle);\r\n datasetAverageSpeed.data.push(traffic.speedAverage <= 0 ? 0 : traffic.speedAverage);\r\n }\r\n }\r\n datasetsNumberVehicles.push(datasetNumberVehicles);\r\n datasetsAverageSpeed.push(datasetAverageSpeed);\r\n }\r\n\r\n $rootScope.$emit('renderGraphNumberVehicles', {\r\n data: {\r\n labels: labels,\r\n datasets: datasetsNumberVehicles\r\n }\r\n });\r\n\r\n $rootScope.$emit('renderGraphAverageSpeed', {\r\n data: {\r\n labels: labels,\r\n datasets: datasetsAverageSpeed\r\n }\r\n });\r\n };\r\n\r\n $scope.infoClose = function () {\r\n $rootScope.selectDevice = null;\r\n\r\n var params = $location.search();\r\n params.deviceId = null;\r\n params.direction = null;\r\n $location.search(params);\r\n\r\n $rootScope.$emit('setDefaultMap', null);\r\n };\r\n }]);\r\n","angular.module('pvpk')\r\n .controller('mainController', ['$rootScope', '$scope', '$location', '$window', function ($rootScope, $scope, $location, $window) {\r\n\r\n this.$onInit = function () {\r\n $scope.showLoadingScreen = true;\r\n };\r\n\r\n $window.onload = function () {\r\n var params = $location.search();\r\n if (params.deviceId) {\r\n $rootScope.$emit('activeMarker', {id: params.deviceId});\r\n }\r\n\r\n $scope.$apply(function () {\r\n $scope.showLoadingScreen = false;\r\n });\r\n };\r\n\r\n $rootScope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) {\r\n var params = $location.search();\r\n\r\n if (newUrl !== oldUrl && $scope.historyUrl) {\r\n if ($scope.historyUrl.q !== $scope.historyUrl.q || $scope.historyUrl.isDirection != params.isDirection) {\r\n $rootScope.$emit('setSearchFromUrl', null);\r\n }\r\n\r\n if ($scope.historyUrl.fromDate !== params.fromDate || $scope.historyUrl.toDate !== params.toDate ||\r\n $scope.historyUrl.fromTime !== params.fromTime || $scope.historyUrl.toTime !== params.toTime) {\r\n $rootScope.$emit('setRangeFromUrl', null);\r\n if (params.deviceId) {\r\n $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});\r\n }\r\n } else if (params.deviceId && ($scope.historyUrl.deviceId !== params.deviceId || $scope.historyUrl.direction !== params.direction)) {\r\n $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});\r\n $rootScope.$emit('activeMarker', {id: params.deviceId});\r\n } else if (!params.deviceId && $scope.historyUrl.deviceId) {\r\n $rootScope.selectDevice = null;\r\n $rootScope.$emit('setDefaultMap', null);\r\n }\r\n } else if (params.deviceId) {\r\n $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});\r\n }\r\n\r\n $scope.historyUrl = $location.search();\r\n });\r\n\r\n $rootScope.handleErrorResponse = function (response) {\r\n\r\n var modalError = jQuery('#modalError');\r\n switch (response.status) {\r\n case 400:\r\n console.log('API ERROR 400');\r\n $scope.modalError = {\r\n title: 'Neplatný požadavek',\r\n body: 'Požadavek nemůže být vyřízen, poněvadž byl syntakticky nesprávně zapsán.',\r\n button: 'OK'\r\n };\r\n modalError.modal('show');\r\n break;\r\n case 401:\r\n $scope.modalError = {\r\n title: 'Platnost webové aplikace vypršela',\r\n body: 'Pro obnovení platnosti stačí stisknout tlačítko Obnovit.',\r\n button: 'Obnovit',\r\n clickButton: $scope.reloadApp\r\n };\r\n modalError.modal({backdrop: 'static', keyboard: false});\r\n break;\r\n case 404:\r\n console.log('API ERROR 404');\r\n $scope.modalError = {title: 'Nenalezen', body: 'Záznam nebyl nalezen.', button: 'OK'};\r\n modalError.modal('show');\r\n break;\r\n case 500:\r\n console.log('API ERROR 500');\r\n $scope.modalError = {title: 'Chyba', body: 'Chyba serveru. Zopakujte akci později.', button: 'OK'};\r\n modalError.modal('show');\r\n break;\r\n case -1:\r\n console.log('API NOT CONNECTED');\r\n $scope.modalError = {\r\n title: 'Připojení k internetu',\r\n body: 'Nejste připojeni k internetu. Zkontrolujte připojení.',\r\n button: 'OK'\r\n };\r\n modalError.modal('show');\r\n break;\r\n default:\r\n console.log('API UNKNOWN ERROR');\r\n $scope.modalError = {title: 'Neočekávaná chyba', body: 'Nastala neočekávaná chyba.', button: 'OK'};\r\n modalError.modal('show');\r\n break;\r\n }\r\n };\r\n\r\n $scope.reloadApp = function () {\r\n $window.location.reload();\r\n }\r\n }]);","angular.module('pvpk')\r\n .controller('mapController', ['$rootScope', '$scope', 'config', 'Device', function ($rootScope, $scope, config, Device) {\r\n\r\n this.$onInit = function () {\r\n $scope.markers = [];\r\n\r\n $scope.map = new google.maps.Map(document.getElementById('map'), {\r\n center: config.DEFAULT_POSITION,\r\n zoom: config.DEFAULT_ZOOM,\r\n minZoom: config.DEFAULT_ZOOM_MIN,\r\n zoomControl: true,\r\n mapTypeControl: false,\r\n scaleControl: false,\r\n streetViewControl: false,\r\n rotateControl: false,\r\n fullscreenControl: false,\r\n mapTypeId: google.maps.MapTypeId.ROADMAP\r\n });\r\n\r\n Device.query({showDirection: 0}, function (data) {\r\n for (var i = 0, lctn; lctn = data[i]; i++) {\r\n $scope.createMarker(lctn);\r\n }\r\n }, function (response) {\r\n console.log('Error api all Devices');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n };\r\n\r\n $scope.createMarker = function (lctn) {\r\n if (lctn.lat && lctn.lng) {\r\n var marker = new google.maps.Marker({\r\n map: $scope.map,\r\n position: {lat: lctn.lat, lng: lctn.lng},\r\n title: lctn.name,\r\n infoWindow: new google.maps.InfoWindow({\r\n content: '<h6 class=\"mb-1\">' + lctn.name + '</h6>'\r\n + '<address>' + lctn.street + ', ' + lctn.town + '</address>'\r\n }),\r\n id: lctn.id\r\n });\r\n\r\n marker.addListener('click', function () {\r\n $scope.closeInfoWindows();\r\n marker.infoWindow.open($scope.map, marker);\r\n $rootScope.$emit('infoLocation', {id: lctn.id});\r\n });\r\n\r\n $scope.markers.push(marker);\r\n }\r\n };\r\n\r\n $rootScope.$on('activeMarker', function (event, args) {\r\n for (var i = 0, marker; marker = $scope.markers[i]; i++) {\r\n if (marker.id && marker.id === args.id && marker.infoWindow) {\r\n $scope.map.setCenter(marker.getPosition());\r\n $scope.map.setZoom(12);\r\n marker.infoWindow.open($scope.map, marker);\r\n } else {\r\n marker.infoWindow.close();\r\n }\r\n }\r\n });\r\n\r\n $rootScope.$on('setDefaultMap', function (event, args) {\r\n $scope.map.setCenter(config.DEFAULT_POSITION);\r\n $scope.map.setZoom(config.DEFAULT_ZOOM);\r\n $scope.closeInfoWindows();\r\n });\r\n\r\n $scope.closeInfoWindows = function () {\r\n for (var i = 0, marker; marker = $scope.markers[i]; i++) {\r\n marker.infoWindow.close();\r\n }\r\n };\r\n }]);","angular.module('pvpk')\r\n .controller('searchController', ['$rootScope', '$scope', '$location', 'config', 'Device', function ($rootScope, $scope, $location, config, Device) {\r\n\r\n this.$onInit = function () {\r\n $scope.config = config;\r\n $scope.locations = [];\r\n $scope.showSearchLoading = false;\r\n\r\n $rootScope.$emit('setSearchFromUrl', null);\r\n };\r\n\r\n $scope.searchLocations = function () {\r\n var params = $location.search();\r\n params.q = $scope.search.q;\r\n params.isDirection = $scope.search.isDirection ? 1 : null;\r\n $location.search(params);\r\n\r\n if (!$scope.search.q || $scope.search.q.length <= 1) {\r\n $scope.locations = [];\r\n return;\r\n }\r\n\r\n $scope.showSearchLoading = true;\r\n\r\n Device.query({\r\n address: $scope.search.q,\r\n showDirection: $scope.search.isDirection ? 1 : 0\r\n }, function (data) {\r\n $scope.locations = data;\r\n $scope.showSearchLoading = false;\r\n }, function (response) {\r\n $scope.showSearchLoading = false;\r\n console.log('Error api all Devices');\r\n $rootScope.handleErrorResponse(response);\r\n });\r\n };\r\n\r\n $rootScope.$on('setSearchFromUrl', function (event, args) {\r\n var params = $location.search();\r\n $scope.search = {\r\n q: params.q,\r\n isDirection: params.isDirection ? !!+params.isDirection : false\r\n };\r\n $scope.searchLocations();\r\n });\r\n\r\n $scope.selectDevice = function (id, direction) {\r\n $rootScope.$emit('activeMarker', {id: id});\r\n $rootScope.$emit('infoLocation', {id: id, direction: direction});\r\n };\r\n\r\n }]);","angular.module('pvpk')\r\n .component('graphAverageSpeed', {\r\n template: '<div><canvas id=\"graphAverageSpeed\" class=\"graph-size mb-5\"></canvas></div>',\r\n controller: ['$rootScope', '$scope', function ($rootScope, $scope) {\r\n\r\n $rootScope.$on('renderGraphAverageSpeed', function (event, args) {\r\n var canvas = document.getElementById('graphAverageSpeed').getContext('2d');\r\n\r\n if ($scope.graphLine)\r\n $scope.graphLine.destroy();\r\n\r\n $scope.graphLine = new Chart(canvas, {\r\n type: 'line',\r\n data: args.data,\r\n options: {\r\n responsive: true,\r\n pointDot: false,\r\n legend: {\r\n position: 'bottom'\r\n },\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 15\r\n }\r\n }],\r\n yAxes: [{\r\n scaleLabel: {\r\n display: true,\r\n labelString: 'km/h'\r\n },\r\n ticks: {\r\n beginAtZero: true,\r\n suggestedMax: 70\r\n }\r\n }]\r\n },\r\n tooltips: {\r\n mode: 'index',\r\n intersect: false,\r\n callbacks: {\r\n label: function (tooltipItems) {\r\n return tooltipItems.yLabel + ' km/h';\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n });\r\n\r\n }]\r\n });","angular.module('pvpk')\r\n .component('graphNumberVehicles', {\r\n template: '<div><canvas id=\"graphNumberVehicles\" class=\"graph-size mb-5\"></canvas></div>',\r\n controller: ['$rootScope', '$scope', function ($rootScope, $scope) {\r\n\r\n $rootScope.$on('renderGraphNumberVehicles', function (event, args) {\r\n var canvasGraphNumberVehicles = document.getElementById('graphNumberVehicles').getContext('2d');\r\n\r\n if ($scope.graphNumberVehicles)\r\n $scope.graphNumberVehicles.destroy();\r\n\r\n $scope.graphNumberVehicles = new Chart(canvasGraphNumberVehicles, {\r\n type: 'bar',\r\n data: args.data,\r\n options: {\r\n responsive: true,\r\n onResize: function (chart, size) {\r\n chart.options.legend.display = size.height > 240;\r\n chart.update();\r\n },\r\n legend: {\r\n position: 'bottom'\r\n },\r\n scales: {\r\n xAxes: [{\r\n stacked: true,\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 15\r\n }\r\n }],\r\n yAxes: [{\r\n scaleLabel: {\r\n display: true,\r\n labelString: \"počet vozidel\"\r\n },\r\n stacked: true\r\n }]\r\n },\r\n tooltips: {\r\n mode: 'index',\r\n intersect: false\r\n }\r\n }\r\n });\r\n\r\n });\r\n\r\n }]\r\n });"]}
|
Closes #8 období nemusí být v rosahu min a max