Skip to content

Commit c67c2b3

Browse files
authored
Wagtail 7.0 maintenance (#155)
* Update for package maintenance * Update changelog * Remove backwards compatibility for Wagtail < 6.0 * Merge the MarkdownTextareaBase and MarkdownTextarea classes into one class
1 parent bb86ac2 commit c67c2b3

File tree

5 files changed

+47
-107
lines changed

5 files changed

+47
-107
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
- Add tox testing for wagtail 6.2 and 6.3 and include Django 5.1
66
- Update the ruff github action which fixes the error seen in CI
7+
- Add tox testing for Django 5.2 and Wagtail 6.4, 7.0
8+
- Support only Wagtail >= 6.3
9+
10+
- Adds support/testing for Wagtail 6.4 and 7.0, and Django 5.2. It also drops support for Wagtail 5.x and 6.2.
711

812
## [0.12.1] - 2024-03-09
913

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ classifiers = [
2121
"Programming Language :: Python :: 3.13",
2222
"Framework :: Django",
2323
"Framework :: Django :: 4.2",
24-
"Framework :: Django :: 5.0",
2524
"Framework :: Django :: 5.1",
25+
"Framework :: Django :: 5.2",
2626
"Framework :: Wagtail",
27-
"Framework :: Wagtail :: 5",
2827
"Framework :: Wagtail :: 6",
28+
"Framework :: Wagtail :: 7",
2929
]
3030

3131
dynamic = ["version"]
3232
requires-python = ">=3.9"
3333
dependencies = [
34-
"Wagtail>=5.2",
34+
"Wagtail>=6.3",
3535
"Markdown>=3.3,<4",
3636
# note: bleach5 requires bleach[css]. Will make one of the next versions require >= 5
3737
"bleach>=3.3,<5",

src/wagtailmarkdown/widgets.py

Lines changed: 23 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,35 @@
11
from django import forms
22
from django.conf import settings
3-
from wagtail import VERSION as WAGTAIL_VERSION
43
from wagtail.admin.staticfiles import versioned_static
54

65

7-
class MarkdownTextareaBase(forms.Textarea):
8-
def _get_media_js(self):
9-
return (
10-
versioned_static("wagtailmarkdown/js/easymde.min.js"),
11-
versioned_static("wagtailmarkdown/js/easymde.attach.js"),
12-
)
13-
14-
@property
15-
def media(self):
16-
css = (
17-
versioned_static("wagtailmarkdown/css/easymde.min.css"),
18-
versioned_static("wagtailmarkdown/css/easymde.tweaks.css"),
19-
)
20-
21-
return forms.Media(css={"all": css}, js=self._get_media_js())
6+
class MarkdownTextarea(forms.Textarea):
7+
def build_attrs(self, *args, **kwargs):
8+
attrs = super().build_attrs(*args, **kwargs)
9+
attrs["data-controller"] = "easymde"
2210

11+
if "autodownload_fontawesome" in getattr(settings, "WAGTAILMARKDOWN", {}):
12+
autodownload = (
13+
"true"
14+
if settings.WAGTAILMARKDOWN["autodownload_fontawesome"]
15+
else "false"
16+
)
17+
attrs["data-easymde-autodownload-value"] = autodownload
2318

24-
if WAGTAIL_VERSION >= (6, 0):
25-
26-
class MarkdownTextarea(MarkdownTextareaBase):
27-
def build_attrs(self, *args, **kwargs):
28-
attrs = super().build_attrs(*args, **kwargs)
29-
attrs["data-controller"] = "easymde"
19+
return attrs
3020

31-
if "autodownload_fontawesome" in getattr(settings, "WAGTAILMARKDOWN", {}):
32-
autodownload = (
33-
"true"
34-
if settings.WAGTAILMARKDOWN["autodownload_fontawesome"]
35-
else "false"
21+
@property
22+
def media(self):
23+
return forms.Media(
24+
css={
25+
"all": (
26+
versioned_static("wagtailmarkdown/css/easymde.min.css"),
27+
versioned_static("wagtailmarkdown/css/easymde.tweaks.css"),
3628
)
37-
attrs["data-easymde-autodownload-value"] = autodownload
38-
39-
return attrs
40-
41-
def _get_media_js(self):
42-
return (
29+
},
30+
js=(
4331
versioned_static("wagtailmarkdown/js/easymde.min.js"),
4432
versioned_static("wagtailmarkdown/js/easymde.attach.js"),
4533
versioned_static("wagtailmarkdown/js/easymde-controller.js"),
46-
)
47-
48-
else:
49-
from wagtail.telepath import register
50-
from wagtail.utils.widgets import WidgetWithScript
51-
from wagtail.widget_adapters import WidgetAdapter
52-
53-
class MarkdownTextarea(WidgetWithScript, MarkdownTextareaBase):
54-
def render_js_init(self, id_, name, value):
55-
if "autodownload_fontawesome" in getattr(settings, "WAGTAILMARKDOWN", {}):
56-
autodownload = (
57-
"true"
58-
if settings.WAGTAILMARKDOWN["autodownload_fontawesome"]
59-
else "false"
60-
)
61-
return f'easymdeAttach("{id_}", {autodownload});'
62-
63-
return f'easymdeAttach("{id_}");'
64-
65-
class MarkdownTextareaAdapter(WidgetAdapter):
66-
js_constructor = "wagtailmarkdown.widgets.MarkdownTextarea"
67-
68-
class Media:
69-
# TODO: remove the adapter when dropping support for Wagtail 5.2
70-
js = ["wagtailmarkdown/js/markdown-textarea-adapter.js"]
71-
72-
register(MarkdownTextareaAdapter(), MarkdownTextarea)
34+
),
35+
)

tests/testapp/tests/test_admin.py

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from django.test import TestCase, override_settings
22
from django.urls import reverse
3-
from wagtail import VERSION as WAGTAIL_VERSION
43
from wagtail.models import Page
54
from wagtail.test.utils import WagtailTestUtils
65

@@ -23,13 +22,10 @@ def test_markdown_field_in_admin(self):
2322
)
2423
self.assertContains(response, "easymde.attach.js")
2524

26-
if WAGTAIL_VERSION >= (6, 0):
27-
self.assertContains(
28-
response,
29-
'<textarea name="body" cols="40" rows="10" id="id_body" data-controller="easymde">',
30-
)
31-
else:
32-
self.assertContains(response, '<script>easymdeAttach("id_body");</script>')
25+
self.assertContains(
26+
response,
27+
'<textarea name="body" cols="40" rows="10" id="id_body" data-controller="easymde">',
28+
)
3329

3430
def test_markdown_block(self):
3531
block = MarkdownBlock()
@@ -43,18 +39,6 @@ def test_markdown_block_in_admin(self):
4339
)
4440
)
4541
self.assertContains(response, "easymde.attach.js")
46-
if WAGTAIL_VERSION < (6, 0):
47-
self.assertContains(
48-
response,
49-
"[&quot;markdown&quot;, {&quot;_type&quot;: "
50-
"&quot;wagtailmarkdown.widgets.MarkdownTextarea&quot;, "
51-
"&quot;_args&quot;: [&quot;&lt;textarea name=\\&quot;__NAME__\\"
52-
"&quot; cols=\\&quot;40\\&quot; "
53-
"rows=\\&quot;1\\&quot; id=\\&quot;__ID__\\&quot;&gt;\\n&lt;/textarea&gt;"
54-
"&lt;script&gt;easymdeAttach(\\&quot;__ID__\\&quot;);"
55-
"&lt;/script&gt;&quot;, &quot;__ID__&quot;]}",
56-
)
57-
self.assertContains(response, "markdown-textarea-adapter.js")
5842

5943
def test_markdown_field(self):
6044
field = MarkdownField()
@@ -63,25 +47,16 @@ def test_markdown_field(self):
6347
def test_widget(self):
6448
widget = MarkdownTextarea()
6549

66-
if WAGTAIL_VERSION >= (6, 0):
67-
init = widget.render("name", "value", attrs={"id": "the_id"})
50+
init = widget.render("name", "value", attrs={"id": "the_id"})
51+
52+
self.assertEqual(
53+
init,
54+
'<textarea name="name" cols="40" rows="10" id="the_id" data-controller="easymde">\nvalue</textarea>',
55+
)
6856

57+
with override_settings(WAGTAILMARKDOWN={"autodownload_fontawesome": False}):
58+
init = widget.render("name", "value", attrs={"id": "the_id"})
6959
self.assertEqual(
7060
init,
71-
'<textarea name="name" cols="40" rows="10" id="the_id" data-controller="easymde">\nvalue</textarea>',
61+
'<textarea name="name" cols="40" rows="10" id="the_id" data-controller="easymde" data-easymde-autodownload-value="false">\nvalue</textarea>',
7262
)
73-
74-
with override_settings(WAGTAILMARKDOWN={"autodownload_fontawesome": False}):
75-
init = widget.render("name", "value", attrs={"id": "the_id"})
76-
self.assertEqual(
77-
init,
78-
'<textarea name="name" cols="40" rows="10" id="the_id" data-controller="easymde" data-easymde-autodownload-value="false">\nvalue</textarea>',
79-
)
80-
else:
81-
init = widget.render_js_init("the_id", "name", "value")
82-
83-
self.assertEqual(init, 'easymdeAttach("the_id");')
84-
85-
with override_settings(WAGTAILMARKDOWN={"autodownload_fontawesome": False}):
86-
init = widget.render_js_init("the_id", "name", "value")
87-
self.assertEqual(init, 'easymdeAttach("the_id", false);')

tox.ini

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
min_version = 4.22
33

44
envlist =
5-
py{39,310,311}-dj42-wagtail{52,63,64}
6-
py{310,311}-dj50-wagtail{52,62,63,64}
7-
py{312,313}-dj51-wagtail{63,64}
5+
py{39,310,311,312}-django42-wagtail{63,64,70}
6+
py{310,311,312,313}-django{51,52}-wagtail{63,64,70}
87

98
[gh-actions]
109
python =
@@ -32,13 +31,12 @@ extras = testing
3231

3332
deps =
3433
django4.2: Django>=4.2,<5.0
35-
django5.0: Django>=5.0,<5.1
3634
django5.1: Django>=5.1,<5.2
35+
django5.2: Django>=5.2,<5.3
3736

38-
wagtail5.2: wagtail>=5.2,<5.3
39-
wagtail6.2: wagtail>=6.2,<6.3
4037
wagtail6.3: wagtail>=6.3,<6.4
4138
wagtail6.4: wagtail>=6.4,<6.5
39+
wagtail7.0: wagtail>=7.0,<7.1
4240

4341
install_command = python -m pip install -U {opts} {packages}
4442
commands =

0 commit comments

Comments
 (0)