Skip to content

Wagtail 7.0 maintenance #155

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

- Add tox testing for wagtail 6.2 and 6.3 and include Django 5.1
- Update the ruff github action which fixes the error seen in CI
- Add tox testing for Django 5.2 and Wagtail 6.4, 7.0
- Support only Wagtail >= 6.3

- 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.

## [0.12.1] - 2024-03-09

Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,17 @@ classifiers = [
"Programming Language :: Python :: 3.13",
"Framework :: Django",
"Framework :: Django :: 4.2",
"Framework :: Django :: 5.0",
"Framework :: Django :: 5.1",
"Framework :: Django :: 5.2",
"Framework :: Wagtail",
"Framework :: Wagtail :: 5",
"Framework :: Wagtail :: 6",
"Framework :: Wagtail :: 7",
]

dynamic = ["version"]
requires-python = ">=3.9"
dependencies = [
"Wagtail>=5.2",
"Wagtail>=6.3",
"Markdown>=3.3,<4",
# note: bleach5 requires bleach[css]. Will make one of the next versions require >= 5
"bleach>=3.3,<5",
Expand Down
83 changes: 23 additions & 60 deletions src/wagtailmarkdown/widgets.py
Original file line number Diff line number Diff line change
@@ -1,72 +1,35 @@
from django import forms
from django.conf import settings
from wagtail import VERSION as WAGTAIL_VERSION
from wagtail.admin.staticfiles import versioned_static


class MarkdownTextareaBase(forms.Textarea):
def _get_media_js(self):
return (
versioned_static("wagtailmarkdown/js/easymde.min.js"),
versioned_static("wagtailmarkdown/js/easymde.attach.js"),
)

@property
def media(self):
css = (
versioned_static("wagtailmarkdown/css/easymde.min.css"),
versioned_static("wagtailmarkdown/css/easymde.tweaks.css"),
)

return forms.Media(css={"all": css}, js=self._get_media_js())
class MarkdownTextarea(forms.Textarea):
def build_attrs(self, *args, **kwargs):
attrs = super().build_attrs(*args, **kwargs)
attrs["data-controller"] = "easymde"

if "autodownload_fontawesome" in getattr(settings, "WAGTAILMARKDOWN", {}):
autodownload = (
"true"
if settings.WAGTAILMARKDOWN["autodownload_fontawesome"]
else "false"
)
attrs["data-easymde-autodownload-value"] = autodownload

if WAGTAIL_VERSION >= (6, 0):

class MarkdownTextarea(MarkdownTextareaBase):
def build_attrs(self, *args, **kwargs):
attrs = super().build_attrs(*args, **kwargs)
attrs["data-controller"] = "easymde"
return attrs

if "autodownload_fontawesome" in getattr(settings, "WAGTAILMARKDOWN", {}):
autodownload = (
"true"
if settings.WAGTAILMARKDOWN["autodownload_fontawesome"]
else "false"
@property
def media(self):
return forms.Media(
css={
"all": (
versioned_static("wagtailmarkdown/css/easymde.min.css"),
versioned_static("wagtailmarkdown/css/easymde.tweaks.css"),
)
attrs["data-easymde-autodownload-value"] = autodownload

return attrs

def _get_media_js(self):
return (
},
js=(
versioned_static("wagtailmarkdown/js/easymde.min.js"),
versioned_static("wagtailmarkdown/js/easymde.attach.js"),
versioned_static("wagtailmarkdown/js/easymde-controller.js"),
)

else:
from wagtail.telepath import register
from wagtail.utils.widgets import WidgetWithScript
from wagtail.widget_adapters import WidgetAdapter

class MarkdownTextarea(WidgetWithScript, MarkdownTextareaBase):
def render_js_init(self, id_, name, value):
if "autodownload_fontawesome" in getattr(settings, "WAGTAILMARKDOWN", {}):
autodownload = (
"true"
if settings.WAGTAILMARKDOWN["autodownload_fontawesome"]
else "false"
)
return f'easymdeAttach("{id_}", {autodownload});'

return f'easymdeAttach("{id_}");'

class MarkdownTextareaAdapter(WidgetAdapter):
js_constructor = "wagtailmarkdown.widgets.MarkdownTextarea"

class Media:
# TODO: remove the adapter when dropping support for Wagtail 5.2
js = ["wagtailmarkdown/js/markdown-textarea-adapter.js"]

register(MarkdownTextareaAdapter(), MarkdownTextarea)
),
)
51 changes: 13 additions & 38 deletions tests/testapp/tests/test_admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from django.test import TestCase, override_settings
from django.urls import reverse
from wagtail import VERSION as WAGTAIL_VERSION
from wagtail.models import Page
from wagtail.test.utils import WagtailTestUtils

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

if WAGTAIL_VERSION >= (6, 0):
self.assertContains(
response,
'<textarea name="body" cols="40" rows="10" id="id_body" data-controller="easymde">',
)
else:
self.assertContains(response, '<script>easymdeAttach("id_body");</script>')
self.assertContains(
response,
'<textarea name="body" cols="40" rows="10" id="id_body" data-controller="easymde">',
)

def test_markdown_block(self):
block = MarkdownBlock()
Expand All @@ -43,18 +39,6 @@ def test_markdown_block_in_admin(self):
)
)
self.assertContains(response, "easymde.attach.js")
if WAGTAIL_VERSION < (6, 0):
self.assertContains(
response,
"[&quot;markdown&quot;, {&quot;_type&quot;: "
"&quot;wagtailmarkdown.widgets.MarkdownTextarea&quot;, "
"&quot;_args&quot;: [&quot;&lt;textarea name=\\&quot;__NAME__\\"
"&quot; cols=\\&quot;40\\&quot; "
"rows=\\&quot;1\\&quot; id=\\&quot;__ID__\\&quot;&gt;\\n&lt;/textarea&gt;"
"&lt;script&gt;easymdeAttach(\\&quot;__ID__\\&quot;);"
"&lt;/script&gt;&quot;, &quot;__ID__&quot;]}",
)
self.assertContains(response, "markdown-textarea-adapter.js")

def test_markdown_field(self):
field = MarkdownField()
Expand All @@ -63,25 +47,16 @@ def test_markdown_field(self):
def test_widget(self):
widget = MarkdownTextarea()

if WAGTAIL_VERSION >= (6, 0):
init = widget.render("name", "value", attrs={"id": "the_id"})
init = widget.render("name", "value", attrs={"id": "the_id"})

self.assertEqual(
init,
'<textarea name="name" cols="40" rows="10" id="the_id" data-controller="easymde">\nvalue</textarea>',
)

with override_settings(WAGTAILMARKDOWN={"autodownload_fontawesome": False}):
init = widget.render("name", "value", attrs={"id": "the_id"})
self.assertEqual(
init,
'<textarea name="name" cols="40" rows="10" id="the_id" data-controller="easymde">\nvalue</textarea>',
'<textarea name="name" cols="40" rows="10" id="the_id" data-controller="easymde" data-easymde-autodownload-value="false">\nvalue</textarea>',
)

with override_settings(WAGTAILMARKDOWN={"autodownload_fontawesome": False}):
init = widget.render("name", "value", attrs={"id": "the_id"})
self.assertEqual(
init,
'<textarea name="name" cols="40" rows="10" id="the_id" data-controller="easymde" data-easymde-autodownload-value="false">\nvalue</textarea>',
)
else:
init = widget.render_js_init("the_id", "name", "value")

self.assertEqual(init, 'easymdeAttach("the_id");')

with override_settings(WAGTAILMARKDOWN={"autodownload_fontawesome": False}):
init = widget.render_js_init("the_id", "name", "value")
self.assertEqual(init, 'easymdeAttach("the_id", false);')
10 changes: 4 additions & 6 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
min_version = 4.22

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

[gh-actions]
python =
Expand Down Expand Up @@ -32,13 +31,12 @@ extras = testing

deps =
django4.2: Django>=4.2,<5.0
django5.0: Django>=5.0,<5.1
django5.1: Django>=5.1,<5.2
django5.2: Django>=5.2,<5.3

wagtail5.2: wagtail>=5.2,<5.3
wagtail6.2: wagtail>=6.2,<6.3
wagtail6.3: wagtail>=6.3,<6.4
wagtail6.4: wagtail>=6.4,<6.5
wagtail7.0: wagtail>=7.0,<7.1

install_command = python -m pip install -U {opts} {packages}
commands =
Expand Down