Skip to content

Commit 88fa608

Browse files
committed
Introduce the concept of presets where each preset has its own initialization script
1 parent ba13447 commit 88fa608

File tree

4 files changed

+44
-21
lines changed

4 files changed

+44
-21
lines changed

django_prose_editor/fields.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class ProseEditorField(models.TextField):
2525
def __init__(self, *args, **kwargs):
2626
self.sanitize = kwargs.pop("sanitize", _actually_empty)
2727
self.config = kwargs.pop("config", {})
28+
self.preset = kwargs.pop("preset", "default")
2829
super().__init__(*args, **kwargs)
2930

3031
def clean(self, value, instance):
@@ -47,7 +48,11 @@ def deconstruct(self):
4748
return (name, "django.db.models.TextField", args, kwargs)
4849

4950
def formfield(self, **kwargs):
50-
defaults = {"config": self.config, "form_class": ProseEditorFormField} | kwargs
51+
defaults = {
52+
"config": self.config,
53+
"form_class": ProseEditorFormField,
54+
"preset": self.preset,
55+
} | kwargs
5156
return super().formfield(**defaults)
5257

5358

@@ -56,6 +61,7 @@ class ProseEditorFormField(forms.CharField):
5661

5762
def __init__(self, *args, **kwargs):
5863
config = kwargs.pop("config", {})
64+
preset = kwargs.pop("preset", "default")
5965
widget = kwargs.get("widget")
6066

6167
# We don't know if widget is set, and if it is, we do not know if it is
@@ -74,3 +80,4 @@ def __init__(self, *args, **kwargs):
7480

7581
super().__init__(*args, **kwargs)
7682
self.widget.config = config
83+
self.widget.preset = preset

django_prose_editor/static/django_prose_editor/init.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

django_prose_editor/widgets.py

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
import json
22

33
from django import forms
4+
from django.conf import settings
45
from django.utils.translation import gettext
56
from js_asset.js import JS
67

78

9+
def _get_presets():
10+
presets = {
11+
"default": {
12+
"script": "django_prose_editor/init.js",
13+
},
14+
}
15+
return presets | getattr(settings, "DJANGO_PROSE_EDITOR_PRESETS", {})
16+
17+
818
class ProseEditorWidget(forms.Textarea):
919
def __init__(self, *args, **kwargs):
1020
self.config = kwargs.pop("config", {})
21+
self.preset = kwargs.pop("preset", "default")
1122
super().__init__(*args, **kwargs)
1223

1324
@property
@@ -24,21 +35,24 @@ def media(self):
2435
"django_prose_editor/editor.js",
2536
{"defer": True},
2637
),
27-
JS(
28-
"django_prose_editor/init.js",
29-
{
30-
"defer": True,
31-
"data-config": json.dumps(
32-
{
33-
"messages": {
34-
"url": gettext("URL"),
35-
"title": gettext("Title"),
36-
"update": gettext("Update"),
37-
"cancel": gettext("Cancel"),
38-
},
39-
}
40-
),
41-
},
38+
*(
39+
JS(
40+
preset["script"],
41+
{
42+
"defer": True,
43+
"data-config": json.dumps(
44+
{
45+
"messages": {
46+
"url": gettext("URL"),
47+
"title": gettext("Title"),
48+
"update": gettext("Update"),
49+
"cancel": gettext("Cancel"),
50+
},
51+
}
52+
),
53+
},
54+
)
55+
for key, preset in _get_presets().items()
4256
),
4357
],
4458
)
@@ -53,9 +67,11 @@ def get_config(self):
5367

5468
def get_context(self, name, value, attrs):
5569
context = super().get_context(name, value, attrs)
56-
context["widget"]["attrs"]["data-django-prose-editor"] = json.dumps(
57-
self.get_config(),
58-
separators=(",", ":"),
70+
context["widget"]["attrs"][f"data-django-prose-editor-{self.preset}"] = (
71+
json.dumps(
72+
self.get_config(),
73+
separators=(",", ":"),
74+
)
5975
)
6076
return context
6177

src/init.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
window.__proseEditor = JSON.parse(document.currentScript.dataset.config)
22

3-
const marker = "data-django-prose-editor"
3+
const marker = "data-django-prose-editor-default"
44

55
function createEditor(textarea) {
66
if (textarea.closest(".prose-editor")) return

0 commit comments

Comments
 (0)