diff --git a/runbot/__manifest__.py b/runbot/__manifest__.py
index 7ec2f1b5..c1603c7a 100644
--- a/runbot/__manifest__.py
+++ b/runbot/__manifest__.py
@@ -36,6 +36,8 @@
'templates/nginx.xml',
'templates/build_error.xml',
+ 'views/assets.xml',
+
'views/branch_views.xml',
'views/build_error_views.xml',
'views/build_views.xml',
diff --git a/runbot/models/custom_trigger.py b/runbot/models/custom_trigger.py
index 6cca1c19..7c8b8eae 100644
--- a/runbot/models/custom_trigger.py
+++ b/runbot/models/custom_trigger.py
@@ -30,7 +30,7 @@ class CustomTriggerWizard(models.TransientModel):
trigger_id = fields.Many2one('runbot.trigger', domain="[('project_id', '=', project_id)]")
config_id = fields.Many2one('runbot.build.config', string="Config id", default=lambda self: self.env.ref('runbot.runbot_build_config_custom_multi'))
- config_data = fields.Text("Config data") # Text, hack to make it editable waiting for json widget
+ config_data = JsonDictField("Config data")
number_build = fields.Integer('Number builds for config multi', default=10)
@@ -65,8 +65,7 @@ class CustomTriggerWizard(models.TransientModel):
@api.onchange('number_build', 'child_extra_params', 'child_dump_url', 'child_config_id')
def _onchange_config_data(self):
for wizard in self:
- config_data = self._get_config_data()
- wizard.config_data = json.dumps(config_data, indent=True)
+ wizard.config_data = self._get_config_data()
def _get_config_data(self):
config_data = {}
@@ -93,5 +92,5 @@ class CustomTriggerWizard(models.TransientModel):
'bundle_id': self.bundle_id.id,
'trigger_id': self.trigger_id.id,
'config_id': self.config_id.id,
- 'config_data': json.loads(self.config_data),
+ 'config_data': self.config_data,
})
diff --git a/runbot/static/src/js/json_field.js b/runbot/static/src/js/json_field.js
new file mode 100644
index 00000000..8d1d1af5
--- /dev/null
+++ b/runbot/static/src/js/json_field.js
@@ -0,0 +1,44 @@
+odoo.define('runbot.json_field', function (require) {
+"use strict";
+
+var basic_fields = require('web.basic_fields');
+var registry = require('web.field_registry');
+var field_utils = require('web.field_utils');
+var dom = require('web.dom');
+
+
+var FieldJson = basic_fields.FieldChar.extend({
+ init: function () {
+ this._super.apply(this, arguments);
+
+ if (this.mode === 'edit') {
+ this.tagName = 'textarea';
+ }
+ this.autoResizeOptions = {parent: this};
+ },
+
+ start: function () {
+ if (this.mode === 'edit') {
+ dom.autoresize(this.$el, this.autoResizeOptions);
+ }
+ return this._super();
+ },
+ _onKeydown: function (ev) {
+ if (ev.which === $.ui.keyCode.ENTER) {
+ ev.stopPropagation();
+ return;
+ }
+ this._super.apply(this, arguments);
+ },
+
+});
+
+registry.add('jsonb', FieldJson)
+console.log(field_utils);
+
+function stringify(obj) {
+ return JSON.stringify(obj, null, '\t')
+}
+field_utils.format.jsonb = stringify;
+field_utils.parse.jsonb = JSON.parse;
+});
\ No newline at end of file
diff --git a/runbot/views/assets.xml b/runbot/views/assets.xml
new file mode 100644
index 00000000..f300b028
--- /dev/null
+++ b/runbot/views/assets.xml
@@ -0,0 +1,7 @@
+