81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
from django import forms
|
|
from django.utils.safestring import mark_safe
|
|
|
|
from .models import ContactFormSubmission, NewsletterTemplate
|
|
|
|
|
|
class NewsletterSubscribeForm(forms.Form):
|
|
email = forms.EmailField(max_length=254)
|
|
|
|
|
|
class NewsletterUnsubscribeForm(forms.Form):
|
|
email = forms.EmailField(
|
|
max_length=254,
|
|
required=False,
|
|
widget=forms.EmailInput(
|
|
attrs={
|
|
"readonly": "readonly",
|
|
"aria-readonly": "true",
|
|
}
|
|
),
|
|
)
|
|
token = forms.CharField(max_length=1024, widget=forms.HiddenInput())
|
|
|
|
|
|
class ContactForm(forms.ModelForm):
|
|
class Meta:
|
|
model = ContactFormSubmission
|
|
fields = ["name", "contact", "email", "category", "message", "source_page"]
|
|
widgets = {
|
|
"source_page": forms.HiddenInput(),
|
|
}
|
|
|
|
|
|
class GrapesJSEditorWidget(forms.Textarea):
|
|
class Media:
|
|
js = (
|
|
"js/newsletter_template_editor.js",
|
|
)
|
|
css = {
|
|
"all": (
|
|
"css/newsletter_template_editor.css",
|
|
)
|
|
}
|
|
|
|
def render(self, name, value, attrs=None, renderer=None):
|
|
attrs = attrs or {}
|
|
attrs["data-newsletter-html-input"] = "1"
|
|
textarea = super().render(name, value, attrs, renderer)
|
|
editor_shell = """
|
|
<div class="newsletter-editor-shell">
|
|
<div class="help warning">
|
|
GrapesJS editor will load from local static assets:
|
|
<code>/static/vendor/grapesjs/grapes.min.js</code> and
|
|
<code>/static/vendor/grapesjs-preset-newsletter/grapesjs-preset-newsletter.min.js</code>.
|
|
If missing, fallback textarea remains available.
|
|
</div>
|
|
<div class="newsletter-editor-toolbar">
|
|
<button type="button" class="button button-small button-secondary" data-newsletter-load-editor>
|
|
Load visual editor
|
|
</button>
|
|
</div>
|
|
<div id="newsletter-grapesjs-editor" class="newsletter-grapesjs-editor" hidden></div>
|
|
</div>
|
|
"""
|
|
return mark_safe(f"{editor_shell}{textarea}")
|
|
|
|
|
|
class NewsletterTemplateAdminForm(forms.ModelForm):
|
|
class Meta:
|
|
model = NewsletterTemplate
|
|
fields = ["name", "subject", "template_json", "template_html"]
|
|
widgets = {
|
|
"template_json": forms.HiddenInput(attrs={"data-newsletter-json-input": "1"}),
|
|
"template_html": GrapesJSEditorWidget(
|
|
attrs={
|
|
"rows": 18,
|
|
"placeholder": "Use {{email_body}} as the content placeholder.",
|
|
}
|
|
),
|
|
}
|