Upgrade pagedown

This commit is contained in:
cuom1999 2022-07-15 13:00:34 +07:00
parent ab64ab6134
commit 1ef68e0fdb
8 changed files with 61 additions and 25 deletions

View file

@ -14,13 +14,14 @@ from django.shortcuts import get_object_or_404
from django.utils.translation import gettext as _
from django.views.decorators.http import require_POST
from django.views.generic import DetailView, UpdateView
from django.urls import reverse_lazy
from reversion import revisions
from reversion.models import Version
from judge.dblock import LockModel
from judge.models import Comment, CommentVote, Notification
from judge.utils.views import TitleMixin
from judge.widgets import MathJaxPagedownWidget
from judge.widgets import MathJaxPagedownWidget, HeavyPreviewPageDownWidget
from judge.comments import add_mention_notifications, del_mention_notifications
__all__ = [
@ -133,10 +134,11 @@ class CommentEditForm(ModelForm):
class Meta:
model = Comment
fields = ["body"]
if MathJaxPagedownWidget is not None:
widgets = {
"body": MathJaxPagedownWidget(attrs={"id": "id-edit-comment-body"})
}
widgets = {
"body": HeavyPreviewPageDownWidget(
id="id-edit-comment-body", preview=reverse_lazy("comment_preview")
),
}
class CommentEditAjax(LoginRequiredMixin, CommentMixin, UpdateView):

View file

@ -3,6 +3,7 @@ from django.forms.utils import flatatt
from django.template.loader import get_template
from django.utils.encoding import force_text
from django.utils.html import conditional_escape
from django.conf import settings
from judge.widgets.mixins import CompressorWidgetMixin
@ -34,9 +35,15 @@ else:
compress_js = True
def __init__(self, *args, **kwargs):
kwargs.setdefault("css", ("pagedown_widget.css",))
super(PagedownWidget, self).__init__(*args, **kwargs)
class Media:
css = {
"all": [
"pagedown_widget.css",
]
}
class AdminPagedownWidget(PagedownWidget, admin_widgets.AdminTextareaWidget):
class Media:
css = {
@ -60,7 +67,8 @@ else:
class HeavyPreviewPageDownWidget(PagedownWidget):
def __init__(self, *args, **kwargs):
kwargs.setdefault("template", "pagedown.html")
self.template = "pagedown.html"
self.id = kwargs.pop("id", None)
self.preview_url = kwargs.pop("preview")
self.preview_timeout = kwargs.pop("preview_timeout", None)
self.hide_preview_button = kwargs.pop("hide_preview_button", False)
@ -73,16 +81,21 @@ else:
if "class" not in final_attrs:
final_attrs["class"] = ""
final_attrs["class"] += " wmd-input"
if self.id:
final_attrs["id"] = self.id
return get_template(self.template).render(
self.get_template_context(final_attrs, value)
)
def get_template_context(self, attrs, value):
return {
"image_upload_enabled": getattr(
settings, "PAGEDOWN_IMAGE_UPLOAD_ENABLED", False
),
"attrs": flatatt(attrs),
"body": conditional_escape(force_text(value)),
"id": attrs["id"],
"show_preview": self.show_preview,
"postfix": attrs["id"],
"show_preview": True,
"preview_url": self.preview_url,
"preview_timeout": self.preview_timeout,
"extra_classes": "dmmd-no-button" if self.hide_preview_button else None,