diff --git a/beat/web/reports/static/reports/app/controllers/groupsController.js b/beat/web/reports/static/reports/app/controllers/groupsController.js index ced3af8c9e840e8e681ba67a80907a2340f98184..4038f203252d664933527fd7a434565a94e96da1 100644 --- a/beat/web/reports/static/reports/app/controllers/groupsController.js +++ b/beat/web/reports/static/reports/app/controllers/groupsController.js @@ -27,6 +27,7 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer ReportService.createGroup('great'); ReportService.addExperimentToGroup('exp1', 'great'); vm.test = 'test'; + vm.report = $scope.report; // ReportService stuff to be used directly in ui vm.groups = ReportService.groups; @@ -35,7 +36,7 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer vm.createGroup = function(name) { ReportService.createGroup(name); vm.newGroupName = ''; - } + }; vm.deleteGroup = ReportService.deleteGroup; // createGroup input val diff --git a/beat/web/reports/static/reports/app/controllers/reportController.js b/beat/web/reports/static/reports/app/controllers/reportController.js index 9b2d12c9fa232efa6d5b40f9c82cca1720a7eda9..25df17675382ca60abf2470ad9381f46034037d2 100644 --- a/beat/web/reports/static/reports/app/controllers/reportController.js +++ b/beat/web/reports/static/reports/app/controllers/reportController.js @@ -27,7 +27,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact $scope.report_id; $scope.url_prefix; $scope.reportFactory = reportFactory; - $scope.report; + $scope.report = {}; $scope.report_experiments = {}; $scope.num_report_items = 0; $scope.max_num = 0; @@ -70,23 +70,47 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact $scope.table_item_content = dataFactory.getData(data_table_itemcontent_file); }; + // saves a data object to an different object by iterating through + // the data obj's entries and assigning them one-by-one. + // Why? JS is pass-by-value, but complex datatypes (Objects, arrays, funcs) are pointers. + // Angular depends on these pointers in two-way bindings of complex datatypes. + // If one assigns a different obj, the two-way binding is lost! + function mutateSave(saveObj, dataObj){ + let t = typeof(dataObj); + + if (t === 'object' && saveObj) { + Object.entries(dataObj) + .forEach(([key, val]) => { + saveObj[key] = val; + }); + } else if (t === 'array' && typeof(saveObj) === 'array') { + saveObj.length = 0; + dataObj.forEach(e => saveObj.push(e)); + } + } + + // saves the report data from the API to the $scope + function saveReportData(reportData){ + mutateSave($scope.report, reportData); + + $scope.report.url_prefix = $scope.url_prefix; + + if($scope.report.content.alias_experiments != undefined){ + mutateSave($scope.report_experiments_alias, $scope.report.content.alias_experiments); + } + } + function getReportData(user, report_id){ reportFactory.getReportInformation(user, report_id, $scope.url_prefix) .success(function (reportData){ - $scope.report = reportData; - $scope.report.url_prefix = $scope.url_prefix; - - var experiments = $scope.report.experiments; - if($scope.report.content.alias_experiments != undefined){ - $scope.report_experiments_alias = $scope.report.content.alias_experiments; - } - - var promises = []; + saveReportData(reportData); + let promises = []; function lastTask(){ getPlotters(); } + let experiments = $scope.report.experiments; if(experiments != undefined){ promises.push(getExperimentDataForAuthor(experiments)); $scope.q.all(promises).then(lastTask); @@ -102,15 +126,8 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact function getReportDataFromNumber(report_number, $q){ reportFactory.getReportInformationFromNumber(report_number, $scope.url_prefix) .success(function (reportData){ - $scope.report = reportData; - $scope.report.url_prefix = $scope.url_prefix; - - var experiments = $scope.report.experiments; - if($scope.report.content.alias_experiments != undefined){ - $scope.report_experiments_alias = $scope.report.content.alias_experiments; - } - - var promises = []; + saveReportData(reportData); + let promises = []; function lastTask(){ getPlotters(); @@ -130,13 +147,12 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact function getExperimentDataReportNumber(report_number){ experimentFactory.getAllExperimentResults($scope.url_prefix, report_number) .then(function (experiments){ - Object.entries(experiments).forEach(([name, exp]) => { - $scope.report_experiments[name] = exp; - }); + mutateSave($scope.report_experiments, experiments); + $scope.report.all_experiments = experiments; - var experiment_aliases = Object.keys(experiments); - for(var i = 0; i < experiment_aliases.length; i++){ - var experiment_alias = experiment_aliases[i]; + let experiment_aliases = Object.keys(experiments); + for(let i = 0; i < experiment_aliases.length; i++){ + let experiment_alias = experiment_aliases[i]; if($scope.report.content.alias_experiments != undefined){ if($scope.report.content.alias_experiments[experiment_alias] != undefined){ @@ -166,7 +182,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact $scope.sorted_experiments_keys_reverse = $scope.report.content.sorted_tables_keys_reverse; $scope.sorted_experiments_keys_tables_sortkey = $scope.report.content.sorted_tables_sortkey; } - for(var i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){ + for(let i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){ $scope.sorted_tables.push(Object.keys($scope.sorted_experiments_keys_tables_sortkey)[i]); } }); @@ -175,13 +191,12 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact function getExperimentDataForAuthor(all_experiments){ experimentFactory.getAllExperimentResultsForAuthor($scope.user, $scope.report_id, $scope.url_prefix) .then(function (experiments){ - Object.entries(experiments).forEach(([name, exp]) => { - $scope.report_experiments[name] = exp; - }); + mutateSave($scope.report_experiments, experiments); + $scope.report.all_experiments = experiments; - var experiment_aliases = Object.keys(experiments); - for(var i = 0; i < experiment_aliases.length; i++){ - var experiment_alias = experiment_aliases[i]; + let experiment_aliases = Object.keys(experiments); + for(let i = 0; i < experiment_aliases.length; i++){ + let experiment_alias = experiment_aliases[i]; if($scope.report.content.alias_experiments != undefined){ if($scope.report.content.alias_experiments[experiment_alias] != undefined){ @@ -212,7 +227,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact $scope.sorted_experiments_keys_reverse = $scope.report.content.sorted_tables_keys_reverse; $scope.sorted_experiments_keys_tables_sortkey = $scope.report.content.sorted_tables_sortkey; } - for(var i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){ + for(let i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){ $scope.sorted_tables.push(Object.keys($scope.sorted_experiments_keys_tables_sortkey)[i]); } @@ -222,9 +237,9 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact function getExperimentData(experiment_id){ experimentFactory.getExperimentInformation($scope.url_prefix, experiment_id) .then(function (experimentData){ - var experiments = $scope.report_experiments; + let experiments = $scope.report_experiments; experiments[experiment_id] = experimentData; - $scope.report_experiments = experiments; + mutateSave($scope.report_experiments, experiments); $scope.report.all_experiments = experiments; if($scope.report.content.alias_experiments != undefined){ @@ -281,7 +296,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact function checkContent(){ if($scope.report.content != undefined){ - var orderkeys = []; + let orderkeys = []; angular.forEach($scope.report.content, function(value, key){ orderkeys.push(key); }); @@ -300,21 +315,21 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact $scope.floating_point_precision.selected = $scope.report.content.floating_point_precision; } - for(var i = 0; i < $scope.report.orderedcontent.length; i++){ - var id_content = $scope.report.orderedcontent[i]; + for(let i = 0; i < $scope.report.orderedcontent.length; i++){ + let id_content = $scope.report.orderedcontent[i]; addElementToReport(id_content); } } } function addElementToReport(id_content){ - var type = id_content.split("_")[0]; + let type = id_content.split("_")[0]; $scope.$broadcast("addSavedElement", id_content, type); } function intersectBlocks(experiment_id){ $scope.report_experiments_blocks[experiment_id] = Object.keys($scope.report_experiments[experiment_id].blocks_status); - var values = $.map($scope.report_experiments_blocks[experiment_id], function(value, key) { return value; }); + let values = $.map($scope.report_experiments_blocks[experiment_id], function(value, key) { return value; }); $scope.report_experiments_blocks_merged_blocks.push(values); } @@ -324,7 +339,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact //only get algorithms if(key_algorithm.indexOf("/") != -1){ $scope.report_algorithm_parameters[key_algorithm] = value_algorithm; - var experiment_algorithm_parameter = {}; + let experiment_algorithm_parameter = {}; if($scope.report_algorithm_parameters_experiment[experiment_id] == undefined){ $scope.report_algorithm_parameters_experiment[experiment_id] = {}; @@ -376,7 +391,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact } function unique(list){ - var result = []; + let result = []; $.each(list, function(i, e) { if ($.inArray(e, result) == -1) result.push(e); });