Move markdown input and select widgets to a widget folder

This commit is contained in:
Antoine Bartuccio 2024-10-20 01:05:34 +02:00
parent e3dcad62cc
commit f78b968075
8 changed files with 70 additions and 68 deletions

View File

@ -51,7 +51,8 @@ from core.views import (
QuickNotifMixin, QuickNotifMixin,
TabedViewMixin, TabedViewMixin,
) )
from core.views.forms import MarkdownInput, SelectDateTime from core.views.forms import SelectDateTime
from core.views.widgets.markdown import MarkdownInput
# Sith object # Sith object

View File

@ -29,18 +29,14 @@ from captcha.fields import CaptchaField
from django import forms from django import forms
from django.conf import settings from django.conf import settings
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.contrib.staticfiles.storage import staticfiles_storage
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import transaction from django.db import transaction
from django.forms import ( from django.forms import (
CheckboxSelectMultiple, CheckboxSelectMultiple,
DateInput, DateInput,
DateTimeInput, DateTimeInput,
SelectMultiple,
Textarea,
TextInput, TextInput,
) )
from django.forms.widgets import Select
from django.utils.translation import gettext from django.utils.translation import gettext
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from phonenumber_field.widgets import RegionalPhoneNumberWidget from phonenumber_field.widgets import RegionalPhoneNumberWidget
@ -67,63 +63,6 @@ class SelectDate(DateInput):
super().__init__(attrs=attrs, format=format or "%Y-%m-%d") super().__init__(attrs=attrs, format=format or "%Y-%m-%d")
class MarkdownInput(Textarea):
template_name = "core/widgets/markdown_textarea.jinja"
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["statics"] = {
"js": staticfiles_storage.url("webpack/core/components/easymde-index.ts"),
"css": staticfiles_storage.url("webpack/core/components/easymde-index.css"),
}
return context
class AutoCompleteSelectMixin:
component_name = "autocomplete-select"
template_name = "core/widgets/autocomplete_select.jinja"
is_ajax = False
def optgroups(self, name, value, attrs=None):
"""Don't create option groups when doing ajax"""
if self.is_ajax:
return []
return super().optgroups(name, value, attrs=attrs)
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["component"] = self.component_name
context["statics"] = {
"js": staticfiles_storage.url(
"webpack/core/components/ajax-select-index.ts"
),
"csss": [
staticfiles_storage.url(
"webpack/core/components/ajax-select-index.css"
),
staticfiles_storage.url("core/components/ajax-select.scss"),
],
}
return context
class AutoCompleteSelect(AutoCompleteSelectMixin, Select): ...
class AutoCompleteSelectMultiple(AutoCompleteSelectMixin, SelectMultiple): ...
class AutoCompleteSelectUser(AutoCompleteSelectMixin, Select):
component_name = "user-ajax-select"
is_ajax = True
class AutoCompleteSelectMultipleUser(AutoCompleteSelectMixin, SelectMultiple):
component_name = "user-ajax-select"
is_ajax = True
class NFCTextInput(TextInput): class NFCTextInput(TextInput):
template_name = "core/widgets/nfc.jinja" template_name = "core/widgets/nfc.jinja"

View File

@ -23,7 +23,8 @@ from django.views.generic.edit import CreateView, DeleteView, UpdateView
from core.models import LockError, Page, PageRev from core.models import LockError, Page, PageRev
from core.views import CanCreateMixin, CanEditMixin, CanEditPropMixin, CanViewMixin from core.views import CanCreateMixin, CanEditMixin, CanEditPropMixin, CanViewMixin
from core.views.forms import MarkdownInput, PageForm, PagePropForm from core.views.forms import PageForm, PagePropForm
from core.views.widgets.markdown import MarkdownInput
class CanEditPagePropMixin(CanEditPropMixin): class CanEditPagePropMixin(CanEditPropMixin):

View File

@ -0,0 +1,15 @@
from django.contrib.staticfiles.storage import staticfiles_storage
from django.forms import Textarea
class MarkdownInput(Textarea):
template_name = "core/widgets/markdown_textarea.jinja"
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["statics"] = {
"js": staticfiles_storage.url("webpack/core/components/easymde-index.ts"),
"css": staticfiles_storage.url("webpack/core/components/easymde-index.css"),
}
return context

View File

@ -0,0 +1,46 @@
from django.contrib.staticfiles.storage import staticfiles_storage
from django.forms import Select, SelectMultiple
class AutoCompleteSelectMixin:
component_name = "autocomplete-select"
template_name = "core/widgets/autocomplete_select.jinja"
is_ajax = False
def optgroups(self, name, value, attrs=None):
"""Don't create option groups when doing ajax"""
if self.is_ajax:
return []
return super().optgroups(name, value, attrs=attrs)
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["component"] = self.component_name
context["statics"] = {
"js": staticfiles_storage.url(
"webpack/core/components/ajax-select-index.ts"
),
"csss": [
staticfiles_storage.url(
"webpack/core/components/ajax-select-index.css"
),
staticfiles_storage.url("core/components/ajax-select.scss"),
],
}
return context
class AutoCompleteSelect(AutoCompleteSelectMixin, Select): ...
class AutoCompleteSelectMultiple(AutoCompleteSelectMixin, SelectMultiple): ...
class AutoCompleteSelectUser(AutoCompleteSelectMixin, Select):
component_name = "user-ajax-select"
is_ajax = True
class AutoCompleteSelectMultipleUser(AutoCompleteSelectMixin, SelectMultiple):
component_name = "user-ajax-select"
is_ajax = True

View File

@ -11,12 +11,12 @@ from django.views.generic import DetailView, ListView
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
from core.views import CanCreateMixin, CanEditMixin, CanViewMixin from core.views import CanCreateMixin, CanEditMixin, CanViewMixin
from core.views.forms import ( from core.views.forms import SelectDateTime
from core.views.widgets.markdown import MarkdownInput
from core.views.widgets.select import (
AutoCompleteSelect, AutoCompleteSelect,
AutoCompleteSelectMultiple, AutoCompleteSelectMultiple,
AutoCompleteSelectUser, AutoCompleteSelectUser,
MarkdownInput,
SelectDateTime,
) )
from election.models import Candidature, Election, ElectionList, Role, Vote from election.models import Candidature, Election, ElectionList, Role, Vote

View File

@ -50,7 +50,7 @@ from core.views import (
CanViewMixin, CanViewMixin,
can_view, can_view,
) )
from core.views.forms import MarkdownInput from core.views.widgets.markdown import MarkdownInput
from forum.models import Forum, ForumMessage, ForumMessageMeta, ForumTopic from forum.models import Forum, ForumMessage, ForumMessageMeta, ForumTopic

View File

@ -25,7 +25,7 @@ from django import forms
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from core.models import User from core.models import User
from core.views.forms import MarkdownInput from core.views.widgets.markdown import MarkdownInput
from pedagogy.models import UV, UVComment, UVCommentReport from pedagogy.models import UV, UVComment, UVCommentReport