diff --git a/tests/test_widgets.py b/tests/test_widgets.py index 9cb68843..35d4c540 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -124,6 +124,25 @@ def test_tinymce_widget_media(self): ], ) + def test_widget_media_applied_cache_suffix(self): + tinymce_version = "6.8" + + orig_config = tinymce.settings.DEFAULT_CONFIG + with patch.dict( + tinymce.settings.DEFAULT_CONFIG, + {**orig_config, "cache_suffix": f"?ver={tinymce_version}"}, + ): + widget = TinyMCE() + + self.assertEqual(list(widget.media.render_css()), []) + self.assertEqual( + widget.media.render_js(), + [ + f'', + f'', + ], + ) + def test_tinymce_widget_required(self): """ The TinyMCE widget should never output the required HTML attribute, even diff --git a/tinymce/widgets.py b/tinymce/widgets.py index 65f91e0d..27809067 100644 --- a/tinymce/widgets.py +++ b/tinymce/widgets.py @@ -16,7 +16,7 @@ from django.core.serializers.json import DjangoJSONEncoder from django.forms.utils import flatatt from django.urls import reverse -from django.utils.html import escape +from django.utils.html import escape, format_html from django.utils.safestring import mark_safe from django.utils.translation import get_language, gettext as _, to_locale @@ -114,6 +114,18 @@ def _media(self): media = property(_media) + def _render_js(self): + revision_parameter = tinymce.settings.DEFAULT_CONFIG.get("cache_suffix", "") + + return [ + format_html( + '', (self.absolute_path(path)), revision_parameter + ) + for path in self._js + ] + + forms.widgets.Media.render_js = _render_js + class AdminTinyMCE(TinyMCE, admin_widgets.AdminTextareaWidget): pass