|
1 | 1 | from django import forms |
2 | 2 | from django.forms.utils import flatatt |
3 | 3 | from django.utils.html import format_html |
4 | | -from wagtail import VERSION as WAGTAIL_VERSION |
5 | 4 | from wagtail.admin.staticfiles import versioned_static |
6 | 5 |
|
7 | 6 | from .settings import wagtail_polymath_settings |
@@ -44,59 +43,31 @@ def __hash__(self): |
44 | 43 | return hash((self.src, tuple(sorted(self.attributes.items())))) |
45 | 44 |
|
46 | 45 |
|
47 | | -class MathJaxWidgetBase(forms.Textarea): |
| 46 | +class MathJaxWidget(forms.Textarea): |
48 | 47 | template_name = "wagtailmath/mathjaxwidget.html" |
49 | 48 |
|
50 | | - def _get_media_js(self): |
| 49 | + def build_attrs(self, *args, **kwargs): |
| 50 | + attrs = super().build_attrs(*args, **kwargs) |
| 51 | + attrs["data-controller"] = "wagtailmathjax" |
| 52 | + |
| 53 | + return attrs |
| 54 | + |
| 55 | + @property |
| 56 | + def media(self): |
51 | 57 | # PORT NOTE: 2.x also passes defer=True here. We can't: wagtailmath.js |
52 | 58 | # and the Stimulus controller are not deferred, and |
53 | 59 | # initMathJaxPreview() calls MathJax.Callback() as soon as it runs, so |
54 | 60 | # deferring only the CDN script would leave MathJax undefined at that |
55 | 61 | # point and break the live preview. |
56 | 62 | attributes = {} |
57 | | - integrity = wagtail_polymath_settings.mathjax_sri |
58 | | - if integrity: |
| 63 | + if integrity := wagtail_polymath_settings.mathjax_sri: |
59 | 64 | attributes["crossorigin"] = "anonymous" |
60 | 65 | attributes["integrity"] = integrity |
61 | 66 |
|
62 | | - return ( |
63 | | - Script(wagtail_polymath_settings.mathjax_url, **attributes), |
64 | | - versioned_static("wagtailmath/js/wagtailmath.js"), |
65 | | - ) |
66 | | - |
67 | | - @property |
68 | | - def media(self): |
69 | | - return forms.Media(js=self._get_media_js()) |
70 | | - |
71 | | - |
72 | | -if WAGTAIL_VERSION >= (6, 0): |
73 | | - |
74 | | - class MathJaxWidget(MathJaxWidgetBase): |
75 | | - def build_attrs(self, *args, **kwargs): |
76 | | - attrs = super().build_attrs(*args, **kwargs) |
77 | | - attrs["data-controller"] = "wagtailmathjax" |
78 | | - |
79 | | - return attrs |
80 | | - |
81 | | - def _get_media_js(self): |
82 | | - return ( |
83 | | - *super()._get_media_js(), |
| 67 | + return forms.Media( |
| 68 | + js=( |
| 69 | + Script(wagtail_polymath_settings.mathjax_url, **attributes), |
| 70 | + versioned_static("wagtailmath/js/wagtailmath.js"), |
84 | 71 | versioned_static("wagtailmath/js/wagtailmath-mathjax-controller.js"), |
85 | 72 | ) |
86 | | -else: |
87 | | - from wagtail.telepath import register |
88 | | - from wagtail.utils.widgets import WidgetWithScript |
89 | | - from wagtail.widget_adapters import WidgetAdapter |
90 | | - |
91 | | - class MathJaxWidget(WidgetWithScript, MathJaxWidgetBase): |
92 | | - def render_js_init(self, id_, name, value): |
93 | | - return f'initMathJaxPreview("{id_}");' |
94 | | - |
95 | | - class MathJaxAdapter(WidgetAdapter): |
96 | | - js_constructor = "wagtailmath.widgets.MathJaxWidget" |
97 | | - |
98 | | - class Media: |
99 | | - # TODO: remove the adapter when dropping support for Wagtail 5.2 |
100 | | - js = ["wagtailmath/js/mathjax-textarea-adapter.js"] |
101 | | - |
102 | | - register(MathJaxAdapter(), MathJaxWidget) |
| 73 | + ) |
0 commit comments