From a7c0db2685efbf21036d325de4d07ab2651b6b31 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 22 Jul 2026 10:44:58 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20TinyMCE=20lokal=20bereitstellen=20und=20?= =?UTF-8?q?Rich-Text-Migration=20erg=C3=A4nzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++--- netbox_documentation/__init__.py | 5 ++--- netbox_documentation/migrations/0001_initial.py | 1 - .../migrations/0002_document_body_format.py | 17 +++++++++++++++++ .../netbox_documentation/document_edit.html | 3 ++- pyproject.toml | 3 ++- 6 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 netbox_documentation/migrations/0002_document_body_format.py diff --git a/README.md b/README.md index faead6d..7011811 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Ein in NetBox integriertes Markdown-Wiki für Betriebsdokumentationen und Anleit ## Kompatibilität -Die Version `0.2.0` zielt auf NetBox 4.x (mindestens 4.0). Vor einem produktiven Rollout sollte das Plugin gegen die konkret eingesetzte NetBox-Minor-Version in einer Testinstanz geprüft werden. +Die Version `0.2.1` zielt auf NetBox 4.x (mindestens 4.0). Vor einem produktiven Rollout sollte das Plugin gegen die konkret eingesetzte NetBox-Minor-Version in einer Testinstanz geprüft werden. ## Installation @@ -64,7 +64,6 @@ PLUGINS_CONFIG = { "netbox_documentation": { "max_import_size_mb": 25, "keep_imported_file": True, - "editor_script_url": "https://cdn.jsdelivr.net/npm/tinymce@7/tinymce.min.js", "allowed_object_types": [ "dcim.region", "dcim.site", @@ -79,7 +78,7 @@ PLUGINS_CONFIG = { } ``` -Der Rich-Text-Editor wird standardmäßig über jsDelivr geladen. In abgeschotteten Netzen kann TinyMCE 7 lokal unter NetBox `STATIC_ROOT` bereitgestellt und `editor_script_url` auf die interne URL gesetzt werden. Das verwendete TinyMCE wird im GPL-Modus betrieben. Kann das Script nicht geladen werden, bleibt als Rückfall ein normales HTML-Textfeld verfügbar. +TinyMCE wird als Python-Abhängigkeit des Plugins installiert und durch `collectstatic` lokal bereitgestellt. Der Editor benötigt deshalb weder Zugriff auf ein CDN noch einen API-Key. Das verwendete TinyMCE wird im GPL-Modus betrieben. Kann das Script nicht geladen werden, bleibt als Rückfall ein normales HTML-Textfeld verfügbar. Danach die Migrationen und statischen Dateien aktualisieren und NetBox neu starten: diff --git a/netbox_documentation/__init__.py b/netbox_documentation/__init__.py index b7b73f5..7b8431d 100644 --- a/netbox_documentation/__init__.py +++ b/netbox_documentation/__init__.py @@ -5,10 +5,11 @@ class DocumentationConfig(PluginConfig): name = "netbox_documentation" verbose_name = "Dokumentation" description = "Wiki und Office-Dokumentation direkt in NetBox" - version = "0.2.0" + version = "0.2.1" author = "NetBox Documentation Contributors" base_url = "documentation" min_version = "4.0.0" + django_apps = ["tinymce"] default_settings = { "allowed_object_types": [ "dcim.region", "dcim.site", "dcim.location", "dcim.rack", @@ -17,8 +18,6 @@ class DocumentationConfig(PluginConfig): ], "max_import_size_mb": 25, "keep_imported_file": True, - # Can be replaced with a locally hosted TinyMCE bundle for offline use. - "editor_script_url": "https://cdn.jsdelivr.net/npm/tinymce@7/tinymce.min.js", } diff --git a/netbox_documentation/migrations/0001_initial.py b/netbox_documentation/migrations/0001_initial.py index 769f619..5ea8c05 100644 --- a/netbox_documentation/migrations/0001_initial.py +++ b/netbox_documentation/migrations/0001_initial.py @@ -15,7 +15,6 @@ class Migration(migrations.Migration): ("custom_field_data", models.JSONField(blank=True, default=dict, encoder=netbox.models.features.CustomFieldJSONEncoder)), ("title", models.CharField(max_length=200)), ("slug", models.SlugField(max_length=200, unique=True)), ("body", models.TextField(blank=True, help_text="Markdown")), ("summary", models.CharField(blank=True, max_length=500)), - ("body_format", models.CharField(choices=[("html", "Rich Text"), ("markdown", "Markdown")], default="html", max_length=10)), ("is_published", models.BooleanField(default=True)), ("tags", models.ManyToManyField(blank=True, related_name="netbox_documentation_document_items", to="extras.tag")), ], options={"ordering": ("title",), "permissions": (("import_document", "Can import office documents"),)}), diff --git a/netbox_documentation/migrations/0002_document_body_format.py b/netbox_documentation/migrations/0002_document_body_format.py new file mode 100644 index 0000000..63f91a2 --- /dev/null +++ b/netbox_documentation/migrations/0002_document_body_format.py @@ -0,0 +1,17 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [("netbox_documentation", "0001_initial")] + + operations = [ + migrations.AddField( + model_name="document", + name="body_format", + field=models.CharField( + choices=(("html", "Rich Text"), ("markdown", "Markdown")), + default="html", + max_length=10, + ), + ), + ] diff --git a/netbox_documentation/templates/netbox_documentation/document_edit.html b/netbox_documentation/templates/netbox_documentation/document_edit.html index 270a22e..cd9f76d 100644 --- a/netbox_documentation/templates/netbox_documentation/document_edit.html +++ b/netbox_documentation/templates/netbox_documentation/document_edit.html @@ -1,8 +1,9 @@ {% extends 'generic/object_edit.html' %} +{% load static %} {% block javascript %} {{ block.super }} - +