From a9aaa8939c2bc15ff59f82d547ae4daa45234561 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 10 Aug 2022 16:08:52 -0400 Subject: [PATCH] Closes #9161: Pretty print JSON custom field data when editing --- docs/release-notes/version-3.2.md | 2 ++ netbox/extras/models/customfields.py | 4 ++-- netbox/project-static/dist/netbox-dark.css | Bin 374410 -> 374221 bytes netbox/project-static/dist/netbox-light.css | Bin 232175 -> 232088 bytes netbox/project-static/dist/netbox-print.css | Bin 727867 -> 727384 bytes netbox/project-static/styles/netbox.scss | 5 +---- netbox/utilities/forms/fields/fields.py | 1 + netbox/utilities/forms/forms.py | 2 +- 8 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/release-notes/version-3.2.md b/docs/release-notes/version-3.2.md index 56a35cc02..a5bd05cde 100644 --- a/docs/release-notes/version-3.2.md +++ b/docs/release-notes/version-3.2.md @@ -2,6 +2,8 @@ ## v3.2.9 (FUTURE) +* [#9161](https://github.com/netbox-community/netbox/issues/9161) - Pretty print JSON custom field data when editing + --- ## v3.2.8 (2022-08-08) diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index b7d77e550..55b7a9f03 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -18,7 +18,7 @@ from netbox.models.features import ExportTemplatesMixin, WebhooksMixin from utilities import filters from utilities.forms import ( CSVChoiceField, CSVMultipleChoiceField, DatePicker, DynamicModelChoiceField, DynamicModelMultipleChoiceField, - LaxURLField, StaticSelectMultiple, StaticSelect, add_blank_choice, + JSONField, LaxURLField, StaticSelectMultiple, StaticSelect, add_blank_choice, ) from utilities.querysets import RestrictedQuerySet from utilities.validators import validate_regex @@ -343,7 +343,7 @@ class CustomField(ExportTemplatesMixin, WebhooksMixin, ChangeLoggedModel): # JSON elif self.type == CustomFieldTypeChoices.TYPE_JSON: - field = forms.JSONField(required=required, initial=initial) + field = JSONField(required=required, initial=initial) # Object elif self.type == CustomFieldTypeChoices.TYPE_OBJECT: diff --git a/netbox/project-static/dist/netbox-dark.css b/netbox/project-static/dist/netbox-dark.css index b929f176a6c67c2067c4f29044f724d50ccbd60b..c6e69db89fe9d6f02b4d9600fc1d70b2ca3c7bab 100644 GIT binary patch delta 44 zcmeBrD|Ys^SVIeA3sVbo3(FQ(>*>>Lrn8z%zQ2i=GdeFZH`O+|xNN)A3|0?00G8Pi A9{>OV delta 108 zcmX^6TCD4>SVIeA3sVbo3(FQ(>*-?3nJMu(`N@en@yYplC8-r9@hOQViIWdXs!Yy* z#xdPyI;$}+NKHX$Qch-ae0J*e##Ba?$$8I2r`Jqp<$@{{;fl^n%uTfg>D}Hsoz+7Q E0PR&NdH?_b diff --git a/netbox/project-static/dist/netbox-light.css b/netbox/project-static/dist/netbox-light.css index 341369adff9033ea697bf89ab50ae0c592c00e73..c3f8b80a69ea3e2cd756bc65c9a32709a7af0d4f 100644 GIT binary patch delta 40 wcmaDqm2bvWzJ?aY7N#xCyGuFsaubWPQ}WC6CKq;!O&2I*=Gtyu#=J!Y07M%O+5i9m delta 109 zcmbO+mGAvjzJ?aY7N#xCyG!krGgIPo@{<#D;*<09N>VFI;!_e!5_LeV#G=$hz1+m2 y?3DcSJh%u*LqTa$PG)j^c53D1!cMX2w@R70Kn$+vyu{p8TaW?UAD1$36#)QFI4eQ` diff --git a/netbox/project-static/dist/netbox-print.css b/netbox/project-static/dist/netbox-print.css index 61bcedf9c0ec303c353a88390cdb00e18b3f5aaf..3b10f5c27c1c4d3fea800feadc6b56b2fb229115 100644 GIT binary patch delta 101 zcmV-r0Gj{1wk+7PEP#XogaU*Egam{Iga(8Mgb0KQvuC6iz(2b1tR2bb{M3N(|@EeMw&-3kbox!ejgm#F7M2#)7Pc1l7LFFqEnLmF#FaBs;&bwo6LaE|^YcnlD@x*1 z5=#%n@fJW`fV=V=^FwWdAOqCj@~}+HrFm&09QI|KL7v# diff --git a/netbox/project-static/styles/netbox.scss b/netbox/project-static/styles/netbox.scss index a54b6c324..8ef280397 100644 --- a/netbox/project-static/styles/netbox.scss +++ b/netbox/project-static/styles/netbox.scss @@ -714,11 +714,8 @@ textarea.form-control[rows='10'] { height: 18rem; } -textarea#id_local_context_data, textarea.markdown, -textarea#id_public_key, -textarea.form-control[name='csv'], -textarea.form-control[name='data'] { +textarea.form-control[name='csv'] { font-family: $font-family-monospace; } diff --git a/netbox/utilities/forms/fields/fields.py b/netbox/utilities/forms/fields/fields.py index 9168189a1..df69339e5 100644 --- a/netbox/utilities/forms/fields/fields.py +++ b/netbox/utilities/forms/fields/fields.py @@ -99,6 +99,7 @@ class JSONField(_JSONField): if not self.help_text: self.help_text = 'Enter context data in JSON format.' self.widget.attrs['placeholder'] = '' + self.widget.attrs['class'] = 'font-monospace' def prepare_value(self, value): if isinstance(value, InvalidJSONInput): diff --git a/netbox/utilities/forms/forms.py b/netbox/utilities/forms/forms.py index 3b5cd8308..8ad6f103b 100644 --- a/netbox/utilities/forms/forms.py +++ b/netbox/utilities/forms/forms.py @@ -136,7 +136,7 @@ class ImportForm(BootstrapMixin, forms.Form): Generic form for creating an object from JSON/YAML data """ data = forms.CharField( - widget=forms.Textarea, + widget=forms.Textarea(attrs={'class': 'font-monospace'}), help_text="Enter object data in JSON or YAML format. Note: Only a single object/document is supported." ) format = forms.ChoiceField(