From 4a8c0892cc90f8e9caf4071324c21d570460f39d Mon Sep 17 00:00:00 2001 From: Henrikas Elsbergas Date: Sat, 6 May 2017 02:43:33 +0300 Subject: [PATCH 1/2] Fixing checkbox settings' values --- src/webui/client/modules/settings/views/settings.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/webui/client/modules/settings/views/settings.js b/src/webui/client/modules/settings/views/settings.js index d1560b897..99bc54758 100644 --- a/src/webui/client/modules/settings/views/settings.js +++ b/src/webui/client/modules/settings/views/settings.js @@ -33,8 +33,13 @@ define(['application', 'marionette', './templates/settings.tpl', 'json-editor', }) this.setConfig() - this.editor.on('change', function() { - self.update() + let init = true + self.editor.on('change', function() { + // skip the first update since it is tiggered before values are properly set + if (init) + init = false + else + self.update() }) if (this.options.refresh) From 3e596d3bd5fdfb6ebaad5f62290336c7550e02d7 Mon Sep 17 00:00:00 2001 From: Henrikas Elsbergas Date: Mon, 8 May 2017 19:51:21 +0300 Subject: [PATCH 2/2] Fixing node schema saving and loading --- .../modules/performances/views/node_select.js | 31 +++++++++++----- .../client/modules/settings/controller.js | 2 +- .../settings/entities/node_config_schema.js | 37 +++++++++++++------ 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/src/webui/client/modules/performances/views/node_select.js b/src/webui/client/modules/performances/views/node_select.js index f2df55580..829c619c5 100644 --- a/src/webui/client/modules/performances/views/node_select.js +++ b/src/webui/client/modules/performances/views/node_select.js @@ -182,6 +182,8 @@ define(['application', 'marionette', './templates/node_select.tpl', '../entities if (this.model.hasProperty('rosnode')) { this.changeRosNode() this.listenTo(this.model, 'change:rosnode', function() { + self.model.unset('schema') + self.model.unset('values') self.changeRosNode(true) }) } @@ -294,18 +296,25 @@ define(['application', 'marionette', './templates/node_select.tpl', '../entities changeRosNode: function(reset) { let self = this, rosnode = this.model.get('rosnode'), - schema = new NodeConfigSchema(rosnode) + schemaModel = new NodeConfigSchema({}, {node_name: rosnode}), + schema = this.model.get('schema') if (reset) this.model.set('values', {}) - schema.fetch({ - success: function(model) { - self.showNodeSettings(model) - }, - error: function() { - self.model.set('schema', {}) - } - }) + if (schema) { + schemaModel.set(schema) + self.showNodeSettings(schemaModel) + } else + schemaModel.fetch({ + success: function() { + let json = schemaModel.toJSON() + self.model.set('schema', json) + self.showNodeSettings(schemaModel) + }, + error: function() { + self.model.set('schema', {}) + } + }) }, showNodeSettings: function(schemaModel) { let self = this, @@ -323,8 +332,10 @@ define(['application', 'marionette', './templates/node_select.tpl', '../entities let updateValues = function() { let currentView = self.getRegion('settingsEditor').currentView - if (currentView && currentView.model === nodeConfig) + if (currentView && currentView.model === nodeConfig) { self.model.set('values', nodeConfig.toJSON()) + self.model.set('node_schema', nodeConfig.toJSON()) + } else nodeConfig.off('change', updateValues) } diff --git a/src/webui/client/modules/settings/controller.js b/src/webui/client/modules/settings/controller.js index 041ce937c..7d2828673 100644 --- a/src/webui/client/modules/settings/controller.js +++ b/src/webui/client/modules/settings/controller.js @@ -29,7 +29,7 @@ define(['application', './views/layout', './views/settings', './entities/robot_c node = decodeURIComponent(node) let nodeConfig = new NodeConfig({}, {node_name: node}), - nodeConfigSchema = new NodeConfigSchema(node) + nodeConfigSchema = new NodeConfigSchema({}, {node_name: node}) nodeConfig.fetch() nodeConfigSchema.fetch({ diff --git a/src/webui/client/modules/settings/entities/node_config_schema.js b/src/webui/client/modules/settings/entities/node_config_schema.js index 48b890318..c6dc7855a 100644 --- a/src/webui/client/modules/settings/entities/node_config_schema.js +++ b/src/webui/client/modules/settings/entities/node_config_schema.js @@ -1,7 +1,9 @@ define(['backbone', 'lib/api', './node_config'], function(Backbone, api, NodeConfig) { return Backbone.Model.extend({ - initialize: function(node_name) { - this.node_name = node_name + initialize: function(attributes, options) { + options = options || {} + this.node_name = options['node_name'] || null + this.on('change', this.updateGroupNames) }, sync: function(method, self, options) { if (method === 'read') { @@ -47,25 +49,22 @@ define(['backbone', 'lib/api', './node_config'], function(Backbone, api, NodeCon } } }, - getSchemaFromDescription: function(description, prefix) { - prefix = prefix || 'root.' - + getSchemaFromDescription: function(description) { let self = this, - properties = this.getSchemaFromParams(description.parameters, prefix) + properties = this.getSchemaFromParams(description.parameters) _.each(description.groups, function(group, name) { properties[name] = { type: 'object', title: group.name, - properties: self.getSchemaFromDescription(group, prefix + name + '.') + properties: self.getSchemaFromDescription(group) } }) return properties }, - getSchemaFromParams(params, prefix) { - let self = this, - schema = {} + getSchemaFromParams(params) { + let schema = {} $.each(params, function(i, param) { // hide node schema field @@ -112,17 +111,31 @@ define(['backbone', 'lib/api', './node_config'], function(Backbone, api, NodeCon if ($.isNumeric(param.max)) property.maximum = param.max schema[param.name] = property - self.groupNames[param.name] = prefix + param.name }) return schema }, - groupNames: {}, getGroupName: function(name) { return name in this.groupNames ? this.groupNames[name] : name }, getAllKeys: function() { return _.keys(this.groupNames) + }, + updateGroupNames: function() { + this.groupNames = {} + this.crawlProperties('', 'root', this.attributes) + // remove root + delete this.groupNames['root'] + }, + crawlProperties: function(prefix, name, value) { + this.groupNames[name] = prefix + name + + if (value['type'] === 'object') { + let properties = value['properties'] + for (let key in properties) + if (properties.hasOwnProperty(key)) + this.crawlProperties(prefix + name + '.', key, properties[key]) + } } }) })