misc: use native templates for form pages (#73956) #75

Merged
fpeters merged 1 commits from wip/73956-native-form-rendering into main 2023-02-10 14:59:28 +01:00
15 changed files with 96 additions and 76 deletions

View File

@ -1,34 +0,0 @@
<!DOCTYPE html>
<html lang="{{ site_lang }}">
<head>
<title>{% block page-title %}{{ page_title }}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{{ css }}"/>
{{ script|safe }}
{% block extrascripts %}
{% endblock %}
</head>
<body>
<div {% if onload %}onload="{{ onload }}"{% endif %}>
<div id="page">
<div id="top">
{% block header %}
<h1>{% if title %}{{ title }}{% else %}{{ site_name }}{% endif %}</h1>
{% endblock %}
</div>
<div id="main-content">
{% block content %}
{{ prelude }}
{% if breadcrumb %}
<p id="breadcrumb">{{ breadcrumb|safe }}</p>
{% endif %}
{% block body %}
{{ body|safe }}
{% endblock %}
{% endblock %}
</div>
<div id="footer">{{ footer }}</div>
</body>
</html>

View File

@ -1,20 +0,0 @@
{% extends "base.html"%}
{% block body %}
<div>
<h2>HELLO WORLD</h2>
{% regroup forms by category as category_list %}
{% for category in category_list %}
{% if category.grouper %}<h3>{{ category.grouper }}</h3>{% endif %}
<ul>
{% for form in category.list %}
<li><a href="{{ form.url }}">{{ form.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}
</div>
{% endblock %}

View File

@ -104,9 +104,9 @@ class FormFillPage(PublicFormFillPage):
('go-to-backoffice', 'go_to_backoffice'),
]
filling_templates = ['wcs/formdata_filling.html']
filling_templates = ['wcs/backoffice/formdata_filling.html']
popup_filling_templates = ['wcs/formdata_popup_filling.html']
validation_templates = ['wcs/formdata_validation.html']
validation_templates = ['wcs/backoffice/formdata_validation.html']
steps_templates = ['wcs/formdata_steps.html']
has_channel_support = True
has_user_support = True
@ -211,6 +211,7 @@ class FormFillPage(PublicFormFillPage):
return None
def modify_filling_context(self, context, page, data):
context['sidebar'] = self.get_sidebar(data)
if not self.formdef.only_allow_one:
return
try:
@ -223,6 +224,9 @@ class FormFillPage(PublicFormFillPage):
data_class.count([StrictNotEqual('status', 'draft'), Equal('user_id', formdata.user_id)])
)
def modify_validation_context(self, context, data):
context['sidebar'] = self.get_sidebar(data)
def get_sidebar(self, data):
r = TemplateIO(html=True)
@ -329,8 +333,6 @@ class FormFillPage(PublicFormFillPage):
def form_side(self, data=None, magictoken=None):
r = TemplateIO(html=True)
get_response().filter['sidebar'] = self.get_sidebar(data)
r += htmltext('<div id="appbar">')
r += htmltext('<h2>%s</h2>') % self.formdef.name
if not self.edit_mode and not getattr(self, 'is_popup', False):
draft_formdata_id = data.get('draft_formdata_id')
if draft_formdata_id:
@ -338,10 +340,6 @@ class FormFillPage(PublicFormFillPage):
draft_formdata_id,
_('Discard this form'),
)
r += htmltext('</div>')
r += htmltext('<div id="side">')
r += self.step()
r += htmltext('</div> <!-- #side -->')
return mark_safe(str(r.getvalue()))
def submitted(self, form, *args):

View File

@ -28,7 +28,10 @@ def get_global_context():
def publisher(request):
template_base = 'wcs/base.html'
if request.path.startswith('/backoffice/'):
template_base = 'wcs/blank.html'
if getattr(request, 'is_django_native', False):
template_base = 'wcs/backoffice.html'
else:
template_base = 'wcs/blank.html'
from wcs.qommon.admin.menu import get_vc_version

View File

@ -697,7 +697,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
'view': self,
'page_no': self.get_current_page_no,
'formdef': LazyFormDef(self.formdef),
'form_side': lambda: self.form_side(data=data, magictoken=magictoken),
'form_side': self.form_side(data=data, magictoken=magictoken),
'steps': self.step,
# legacy, used in some themes
'tracking_code_box': lambda: self.tracking_code_box(data, magictoken),
@ -716,7 +716,9 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
context['form'] = form
return template.QommonTemplateResponse(
templates=list(self.get_formdef_template_variants(self.filling_templates)), context=context
templates=list(self.get_formdef_template_variants(self.filling_templates)),
context=context,
is_django_native=True,
)
def tracking_code_box(self, data, magictoken):
@ -1787,17 +1789,23 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
context = {
'view': self,
'html_form': form,
'form_side': lambda: self.form_side(data=data, magictoken=magictoken),
'form_side': self.form_side(data=data, magictoken=magictoken),
'steps': self.step,
# legacy, used in some themes
'tracking_code_box': lambda: self.tracking_code_box(data, magictoken),
}
context['form'] = form # legacy
self.modify_validation_context(context, data)
return template.QommonTemplateResponse(
templates=list(self.get_formdef_template_variants(self.validation_templates)), context=context
templates=list(self.get_formdef_template_variants(self.validation_templates)),
context=context,
is_django_native=True,
)
def modify_validation_context(self, context, data):
pass
def get_url_with_query(self):
query = get_request().get_query()
url = self.formdef.get_url()

View File

@ -147,7 +147,8 @@ def get_decorate_vars(body, response, generate_breadcrumb=True, **kwargs):
user_info = kwargs.get('user_info')
page_title = kwargs.get('title', '')
subtitle = kwargs.get('subtitle')
sidebar = kwargs.get('sidebar')
if 'sidebar' in kwargs:
sidebar = kwargs.get('sidebar')
css = root_url + get_publisher().qommon_static_dir + get_publisher().qommon_admin_css
extra_head = get_publisher().get_site_option('backoffice_extra_head')
app_label = get_publisher().get_site_option('app_label') or 'Publik'

View File

@ -1,6 +1,7 @@
{% extends "wcs/backoffice.html" %}
{% block main-content %}
{{ form_side|default:"" }}
{{ body|safe }}
{% endblock %}

View File

@ -39,11 +39,14 @@
<div id="appbar">
<h2>{% block appbar-title %}{% endblock %}</h2>
<span class="actions">{% block appbar-actions %}{% endblock %}</span>
{% block appbar-bottom %}{% endblock %}
</div>
{% endblock %}
{% block session-message %}
{{session_message|safe}}
{% endblock %}
{% block form-side %}{% endblock %}
{% block body %}{% endblock %}
{% endblock %}
{% endblock %}

View File

@ -0,0 +1,9 @@
{% extends "wcs/formdata_filling.html" %}
{% block appbar-title %}{{ view.formdef.name }}{% endblock %}
{% block form-side %}{% endblock %}
{% block appbar-bottom %}
{{ form_side|default:"" }}
<div id="side">{{ view.step }}</div>
{% endblock %}

View File

@ -0,0 +1,9 @@
{% extends "wcs/formdata_validation.html" %}
{% block appbar-title %}{{ view.formdef.name }}{% endblock %}
{% block form-side %}{% endblock %}
{% block appbar-bottom %}
{{ form_side|default:"" }}
<div id="side">{{ view.step }}</div>
{% endblock %}

View File

@ -1,2 +1,39 @@
{% block body %}
{% endblock %}
<!DOCTYPE html>
<html lang="{{ site_lang }}">
<head>
<title>{% block page-title %}{{ page_title }}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{{ css }}"/>
{{ script|safe }}
{% block extrascripts %}
{% endblock %}
</head>
<body>
<div {% if onload %}onload="{{ onload }}"{% endif %}>
<div id="page">
<div id="top">
{% block header %}
<h1>{% if title %}{{ title }}{% else %}{{ site_name }}{% endif %}</h1>
{% endblock %}
</div>
<div id="main-content">
{% block content %}
{% if form_side %}
<div class="form-content--sidebox">{{ form_side|safe }}</div>
{% endif %}
{% if breadcrumb %}
<p id="breadcrumb">{{ breadcrumb|safe }}</p>
{% endif %}
{{ publisher.get_request.session.display_message|safe }}
{% block body %}
{{ body|safe }}
{% endblock %}
{% endblock %}
</div>
<div id="footer">{{ footer }}</div>
</body>
</html>

View File

@ -1,12 +1,11 @@
{% extends template_base %}
{% load i18n %}
{% block body %}
{% block form-side %}
{{ form_side|default:"" }}
{% endblock %}
{% block form-side %}
{{ form_side|default:"" }}
{{ publisher.get_request.session.display_message|safe }}
{% endblock %}
{% block body %}
{% block form-main %}

View File

@ -6,6 +6,7 @@
{% block sidepage %}{% endblock %}
{% block main-content %}
<div id="appbar"><h2>{{ view.formdef.name }}</h2></div>
{% block form-side %}
{{ form_side|default:"" }}
{{ publisher.get_request.session.display_message|safe }}
@ -14,4 +15,5 @@
{{ html_form.render|safe }}
{% endblock %}
{% block sidebar %}{% endblock %}
{% block footer %}{% endblock %}

View File

@ -1,8 +1,11 @@
{% extends template_base %}
{% block form-side %}
{{ form_side|default:"" }}
{% endblock %}
{% block body %}
<div class="form-validation">
{{ form_side|default:"" }}
<div class="infonotice">
{% standard_text "check-before-submit" %}
</div>

View File

@ -40,6 +40,7 @@ class Backoffice(compat.TemplateWithFallbackView):
if isinstance(body, template.QommonTemplateResponse):
body.add_media()
if body.is_django_native:
self.request.is_django_native = True
_request = get_request()
self.template_names = body.templates
context.update(body.context)