From 03c135bb1b38c20ce3c0fb5d643599d7ba337b1e Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 19 Dec 2018 14:32:17 +0100 Subject: [PATCH 3/3] environment: add js validation of variable values --- hobo/environment/forms.py | 3 +++ hobo/static/js/hobo.js | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/hobo/environment/forms.py b/hobo/environment/forms.py index 237b946..9e8842e 100644 --- a/hobo/environment/forms.py +++ b/hobo/environment/forms.py @@ -157,6 +157,9 @@ class VariableForm(forms.ModelForm): class Meta: model = Variable exclude = ('service_type', 'service_pk', 'auto') + widgets = { + 'value': forms.Textarea(attrs={'data-json-validation': '#id_interpret_as_json'}), + } def __init__(self, service=None, **kwargs): self.service = service diff --git a/hobo/static/js/hobo.js b/hobo/static/js/hobo.js index 426e96d..b7b16b1 100644 --- a/hobo/static/js/hobo.js +++ b/hobo/static/js/hobo.js @@ -39,4 +39,28 @@ $(function() { if ($id_name.data('_changed')) return; $id_name.val(URLify($(this).val()).replace(/-/g, '_')); }); + $('body').delegate("[data-json-validation]", 'change input keyup keypress', function() { + console.log(Date(), 'validation1'); + var boolean_id = $(this).data('json-validation'); + var $field = $(boolean_id); + var validate = true; + + if ($field.length) { + validate = $field.is(':checked'); + } + console.log(Date(), 'validation2', validate); + if (validate) { + try { + JSON.parse($(this).val()) + this.setCustomValidity(''); + console.log('ok'); + } catch (e) { + this.setCustomValidity('invalid JSON'); + console.log('not ok'); + } + } else { + console.log('dont care'); + } + }) + }); -- 2.18.0