misc: add more infos to <title> in form pages (#40924) #122
|
@ -10370,3 +10370,55 @@ def test_form_edit_single_page(pub):
|
|||
resp = resp.form.submit('submit')
|
||||
formdata.refresh_from_storage()
|
||||
assert formdata.data == {'2': 'a', '4': 'other change', '6': 'last change'}
|
||||
|
||||
|
||||
def test_form_html_titles(pub):
|
||||
formdef = create_formdef()
|
||||
formdef.fields = [
|
||||
fields.StringField(id='1', label='string', required=False),
|
||||
]
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert resp.pyquery('title').text() == 'test - 1/2 - Filling'
|
||||
resp = resp.forms[0].submit('submit') # -> validation
|
||||
assert resp.pyquery('title').text() == 'test - 2/2 - Validating'
|
||||
resp = resp.forms[0].submit('submit').follow() # -> submit
|
||||
assert resp.pyquery('title').text() == 'test #1-1'
|
||||
|
||||
# without confirmation page, single page, no counter
|
||||
formdef.confirmation = False
|
||||
formdef.store()
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert resp.pyquery('title').text() == 'test - Filling'
|
||||
|
||||
# naming first page
|
||||
formdef.fields = [
|
||||
fields.PageField(id='0', label='1st page', type='page'),
|
||||
fields.StringField(id='1', label='string'),
|
||||
]
|
||||
formdef.store()
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert resp.pyquery('title').text() == 'test - 1st page'
|
||||
|
||||
# multi pages
|
||||
formdef.fields = [
|
||||
fields.PageField(id='0', label='1st page', type='page'),
|
||||
fields.StringField(id='1', label='string', required=False),
|
||||
fields.PageField(id='2', label='2nd page', type='page'),
|
||||
]
|
||||
formdef.store()
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert resp.pyquery('title').text() == 'test - 1/2 - 1st page'
|
||||
resp = resp.forms[0].submit('submit') # -> 2nd page
|
||||
assert resp.pyquery('title').text() == 'test - 2/2 - 2nd page'
|
||||
|
||||
# multi pages and confirmation page
|
||||
formdef.confirmation = True
|
||||
formdef.store()
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert resp.pyquery('title').text() == 'test - 1/3 - 1st page'
|
||||
resp = resp.forms[0].submit('submit') # -> 2nd page
|
||||
assert resp.pyquery('title').text() == 'test - 2/3 - 2nd page'
|
||||
resp = resp.forms[0].submit('submit') # -> validation
|
||||
assert resp.pyquery('title').text() == 'test - 3/3 - Validating'
|
||||
|
|
|
@ -356,3 +356,37 @@ def test_translated_datetime(pub, user):
|
|||
resp = app.get('/fr/test-form/')
|
||||
# check date end with /year
|
||||
assert ('/%s ' % datetime.date.today().year) in resp.pyquery('.drafts-recall li:first-child a').text()
|
||||
|
||||
|
||||
def test_form_titles(pub):
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test form'
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
TranslatableMessage.wipe()
|
||||
msg = TranslatableMessage()
|
||||
msg.string = 'test form'
|
||||
msg.string_fr = 'formulaire de test'
|
||||
msg.store()
|
||||
|
||||
resp = get_app(pub).get(formdef.get_url(language='en'))
|
||||
assert resp.pyquery('title').text() == 'test form - 1/2 - Filling'
|
||||
assert resp.pyquery('h1').text() == 'test form'
|
||||
resp = resp.form.submit('submit') # -> validation
|
||||
assert resp.pyquery('title').text() == 'test form - 2/2 - Validating'
|
||||
assert resp.pyquery('h1').text() == 'test form'
|
||||
resp = resp.form.submit('submit').follow()
|
||||
assert resp.pyquery('title').text() == 'test form #1-1'
|
||||
assert resp.pyquery('h1').text() == 'test form'
|
||||
|
||||
resp = get_app(pub).get(formdef.get_url(language='fr'))
|
||||
assert resp.pyquery('title').text().startswith('formulaire de test - 1/2')
|
||||
assert resp.pyquery('h1').text() == 'formulaire de test'
|
||||
resp = resp.form.submit('submit') # -> validation
|
||||
assert resp.pyquery('title').text().startswith('formulaire de test - 2/2')
|
||||
assert resp.pyquery('h1').text() == 'formulaire de test'
|
||||
resp = resp.form.submit('submit').follow()
|
||||
assert resp.pyquery('title').text().startswith('formulaire de test')
|
||||
assert resp.pyquery('h1').text() == 'formulaire de test'
|
||||
|
|
|
@ -425,7 +425,7 @@ def test_field_live_select_content_on_workflow_form(pub, http_requests):
|
|||
|
||||
app = get_app(pub)
|
||||
resp = login(app, username='foo', password='foo').get('/test/')
|
||||
assert resp.pyquery('title').text() == 'test'
|
||||
assert resp.pyquery('title').text() == 'test - Filling'
|
||||
|
||||
resp = resp.form.submit('submit').follow()
|
||||
assert 'The form has been recorded' in resp.text
|
||||
|
|
|
@ -1326,7 +1326,10 @@ class FormData(StorableObject):
|
|||
self.store()
|
||||
|
||||
def get_display_name(self):
|
||||
return _('%(name)s #%(id)s') % {'name': self.formdef.name, 'id': self.get_display_id()}
|
||||
return _('%(name)s #%(id)s') % {
|
||||
'name': get_publisher().translate(self.formdef.name),
|
||||
'id': self.get_display_id(),
|
||||
}
|
||||
|
||||
@property
|
||||
def default_digest(self):
|
||||
|
|
|
@ -340,7 +340,8 @@ class FormStatusPage(Directory, FormTemplateMixin):
|
|||
form.add_media()
|
||||
|
||||
get_response().add_javascript(['jquery.js', 'qommon.forms.js', 'qommon.map.js'])
|
||||
self.html_top(self.formdef.name)
|
||||
self.html_top(get_publisher().translate(self.formdef.name))
|
||||
get_response().filter['page_title'] = self.filled.get_display_label()
|
||||
context = {
|
||||
'view': self,
|
||||
'mine': mine,
|
||||
|
|
|
@ -56,8 +56,8 @@ class SubmittedDraftException(Exception):
|
|||
pass
|
||||
|
||||
|
||||
def html_top(title=None):
|
||||
template.html_top(title=title, default_org=_('Forms'))
|
||||
def html_top(title=None, page_title=None):
|
||||
template.html_top(title=title, default_org=_('Forms'), page_title=page_title)
|
||||
|
||||
|
||||
def get_user_forms(formdef):
|
||||
|
@ -363,7 +363,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
|
|||
return i + 1
|
||||
return 0
|
||||
|
||||
def step(self):
|
||||
def step_context(self):
|
||||
page_labels = []
|
||||
current_position = 1
|
||||
|
||||
|
@ -380,16 +380,13 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
|
|||
if self.on_validation_page:
|
||||
current_position = len(page_labels)
|
||||
|
||||
if not self.on_validation_page:
|
||||
self.substvars['current_page_no'] = current_position
|
||||
return {'current_page_no': current_position, 'page_labels': page_labels}
|
||||
|
||||
return template.render(
|
||||
list(self.get_formdef_template_variants(self.steps_templates)),
|
||||
{
|
||||
'page_labels': page_labels,
|
||||
'current_page_no': current_position,
|
||||
},
|
||||
)
|
||||
def step(self):
|
||||
context = self.step_context()
|
||||
if not self.on_validation_page:
|
||||
self.substvars['current_page_no'] = context.get('current_page_no')
|
||||
return template.render(list(self.get_formdef_template_variants(self.steps_templates)), context)
|
||||
|
||||
@classmethod
|
||||
def iter_with_block_fields(cls, form, fields):
|
||||
|
@ -532,6 +529,29 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
|
|||
had_prefill = True
|
||||
return had_prefill
|
||||
|
||||
def set_page_title(self):
|
||||
step_context = self.step_context()
|
||||
if len(step_context.get('page_labels')) > 1:
|
||||
self.html_top(
|
||||
title=get_publisher().translate(self.formdef.name),
|
||||
page_title='%s - %s/%s - %s'
|
||||
% (
|
||||
get_publisher().translate(self.formdef.name),
|
||||
step_context['current_page_no'],
|
||||
len(step_context['page_labels']),
|
||||
step_context['page_labels'][step_context['current_page_no'] - 1],
|
||||
),
|
||||
)
|
||||
else:
|
||||
self.html_top(
|
||||
title=get_publisher().translate(self.formdef.name),
|
||||
page_title='%s - %s'
|
||||
% (
|
||||
get_publisher().translate(self.formdef.name),
|
||||
step_context['page_labels'][step_context['current_page_no'] - 1],
|
||||
),
|
||||
)
|
||||
|
||||
def page(
|
||||
self, page, page_change=True, page_error_messages=None, submit_button=None, transient_formdata=None
|
||||
):
|
||||
|
@ -669,7 +689,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
|
|||
widget.options = kwargs['options']
|
||||
widget.options_with_attributes = kwargs['options_with_attributes']
|
||||
|
||||
self.html_top(get_publisher().translate(self.formdef.name))
|
||||
self.set_page_title()
|
||||
|
||||
form.add_hidden('step', '0')
|
||||
form.add_hidden('page', self.pages.index(page))
|
||||
|
@ -1756,7 +1776,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
|
|||
def validating(self, data, page_error_messages=None):
|
||||
self.on_validation_page = True
|
||||
get_request().view_name = 'validation'
|
||||
self.html_top(get_publisher().translate(self.formdef.name))
|
||||
self.set_page_title()
|
||||
# fake a GET request to avoid previous page POST data being carried
|
||||
# over in rendering.
|
||||
get_request().environ['REQUEST_METHOD'] = 'GET'
|
||||
|
|
|
@ -23,7 +23,7 @@ def generate_header_menu(selected=None):
|
|||
return get_publisher().get_backoffice_root().generate_header_menu(selected=selected)
|
||||
|
||||
|
||||
def html_top(section, title=None, scripts=None):
|
||||
def html_top(section, title=None, scripts=None, page_title=None):
|
||||
header_menu = generate_header_menu(section)
|
||||
if not scripts:
|
||||
script = ''
|
||||
|
|
|
@ -49,11 +49,12 @@ def get_theme_directory(theme_id):
|
|||
return location
|
||||
|
||||
|
||||
def html_top(title=None, default_org=None):
|
||||
def html_top(title=None, default_org=None, page_title=None):
|
||||
if not hasattr(get_response(), 'filter'):
|
||||
get_response().filter = {}
|
||||
get_response().filter['title'] = title
|
||||
get_response().filter['default_org'] = default_org
|
||||
get_response().filter['page_title'] = page_title
|
||||
|
||||
|
||||
def error_page(error_message, error_title=None, location_hint=None):
|
||||
|
@ -115,7 +116,8 @@ def get_decorate_vars(body, response, generate_breadcrumb=True, **kwargs):
|
|||
current_theme = get_cfg('branding', {}).get('theme', get_publisher().default_theme)
|
||||
|
||||
if kwargs.get('title'):
|
||||
page_title = title = kwargs.get('title')
|
||||
title = kwargs.get('title')
|
||||
page_title = kwargs.get('page_title') or title
|
||||
title_or_orgname = title
|
||||
else:
|
||||
page_title = site_name
|
||||
|
|
Loading…
Reference in New Issue