backoffice: revamp block sidebar like others (#60722)

This commit is contained in:
Frédéric Péters 2024-03-02 09:39:02 +01:00
parent 977cdb0019
commit b3fb9a87cc
6 changed files with 33 additions and 25 deletions

View File

@ -453,14 +453,14 @@ def test_block_edit_field_warnings(pub):
blockdef.store()
resp = app.get('/backoffice/forms/blocks/%s/' % blockdef.id)
assert 'more than 30 fields' not in resp.text
assert '<div id="new-field"><h3>New Field</h3>' in resp.text
assert resp.pyquery('#new-field')
assert resp.pyquery('#fields-list a[title="Duplicate"]').length
blockdef.fields.extend([fields.StringField(id='%d' % i, label='field %d' % i) for i in range(21, 51)])
blockdef.store()
resp = app.get('/backoffice/forms/blocks/%s/' % blockdef.id)
assert 'This block of fields contains 60 fields.' in resp.text
assert '<div id="new-field"><h3>New Field</h3>' not in resp.text
assert not resp.pyquery('#new-field')
assert not resp.pyquery('#fields-list a[title="Duplicate"]').length

View File

@ -1035,7 +1035,7 @@ def test_card_edit_field_warnings(pub):
resp = app.get('/backoffice/cards/%s/fields/' % carddef.id)
assert 'more than 200 fields' not in resp.text
assert 'first field should be of type "page"' in resp.text
assert '<div id="new-field"><h3>New Field</h3>' in resp.text
assert resp.pyquery('#new-field')
carddef.fields.extend([fields.StringField(id='%d' % i, label='field %d' % i) for i in range(10, 210)])
carddef.store()
@ -1049,7 +1049,7 @@ def test_card_edit_field_warnings(pub):
resp = app.get('/backoffice/cards/%s/fields/' % carddef.id)
assert 'This card model contains 410 fields.' in resp.text
assert 'first field should be of type "page"' in resp.text
assert '<div id="new-field"><h3>New Field</h3>' not in resp.text
assert not resp.pyquery('#new-field')
assert '>Duplicate<' not in resp.text

View File

@ -3602,7 +3602,7 @@ def test_form_edit_field_warnings(pub):
resp = app.get('/backoffice/forms/%s/fields/' % formdef.id)
assert 'more than 200 fields' not in resp.text
assert 'first field should be of type "page"' in resp.text
assert '<div id="new-field"><h3>New Field</h3>' in resp.text
assert resp.pyquery('#new-field')
formdef.fields.extend([fields.StringField(id='%d' % i, label='field %d' % i) for i in range(10, 210)])
formdef.store()
@ -3617,7 +3617,7 @@ def test_form_edit_field_warnings(pub):
assert 'This form contains 410 fields.' in resp.text
assert 'no new fields can be added.' in resp.text
assert 'first field should be of type "page"' in resp.text
assert '<div id="new-field"><h3>New Field</h3>' not in resp.text
assert not resp.pyquery('#new-field')
assert '>Duplicate<' not in resp.text
assert resp.pyquery('aside .errornotice')
assert not resp.pyquery('aside form[action=new]')
@ -3630,7 +3630,7 @@ def test_form_edit_field_warnings(pub):
resp = app.get('/backoffice/forms/%s/fields/' % formdef.id)
assert 'no new fields should be added.' in resp.text
assert '<div id="new-field"><h3>New Field</h3>' in resp.text
assert resp.pyquery('#new-field')
assert '>Duplicate<' in resp.text
assert not resp.pyquery('aside .errornotice')
assert resp.pyquery('aside form[action=new]')

View File

@ -106,6 +106,14 @@ class BlockDirectory(FieldsDirectory):
r = TemplateIO(html=True)
r += htmltext('<div id="appbar">')
r += htmltext('<h2>%s</h2>') % self.objectdef.name
r += htmltext('<span class="actions">')
r += htmltext('<a class="extra-actions-menu-opener"></a>')
r += htmltext('<ul class="extra-actions-menu">')
r += htmltext('<li><a href="export">%s</a></li>') % _('Export')
r += htmltext('<li><a href="delete" rel="popup">%s</a></li>') % _('Delete')
r += htmltext('</ul>')
r += htmltext('<a href="settings" rel="popup" role="button">%s</a>') % _('Settings')
r += htmltext('</span>')
r += htmltext('</div>')
r += utils.last_modification_block(obj=self.objectdef)
r += get_session().display_message()
@ -132,17 +140,22 @@ class BlockDirectory(FieldsDirectory):
def get_new_field_form_sidebar(self, page_id):
r = TemplateIO(html=True)
r += htmltext('<ul id="sidebar-actions">')
r += htmltext('<li><a href="delete" rel="popup">%s</a></li>') % _('Delete')
r += htmltext('<li><a href="duplicate" rel="popup">%s</a></li>') % _('Duplicate')
r += htmltext('<li><a href="export">%s</a></li>') % _('Export')
if get_publisher().snapshot_class:
r += htmltext('<li><a rel="popup" href="history/save">%s</a></li>') % _('Save snapshot')
r += htmltext('<li><a href="history/">%s</a></li>') % _('History')
r += htmltext('<li><a href="inspect">%s</a></li>') % _('Inspector')
r += htmltext('<li><a href="settings" rel="popup">%s</a></li>') % _('Settings')
r += htmltext('</ul>')
r += super().get_new_field_form_sidebar(page_id=page_id)
r += htmltext('<h3>%s</h3>') % _('Actions')
r += htmltext('<ul class="sidebar--buttons">')
r += htmltext('<li><a class="button button-paragraph" href="duplicate" rel="popup">%s</a>') % _(
'Duplicate'
)
if get_publisher().snapshot_class:
r += htmltext('<li><a class="button button-paragraph" href="history/save">%s</a>') % _(
'Save snapshot'
)
r += htmltext('</ul>')
r += htmltext('<h3>%s</h3>') % _('Navigation')
r += htmltext('<ul class="sidebar--buttons">')
r += htmltext('<li><a class="button button-paragraph" href="history/">%s</a></li>') % _('History')
r += htmltext('<li><a class="button button-paragraph" href="inspect">%s</a></li>') % _('Inspector')
r += htmltext('</ul>')
return r.getvalue()
def delete(self):

View File

@ -527,8 +527,8 @@ class FieldsDirectory(Directory):
)
return r.getvalue()
r += htmltext('<div id="new-field">')
r += htmltext('<h3>%s</h3>') % _('New Field')
r += htmltext('<div id="new-field">')
get_request().form = None # ignore the eventual ?page=x
form = self.get_new_field_form(page_id)
r += form.render()

View File

@ -222,13 +222,8 @@ div#new-action, div#new-trigger, div#new-field {
}
}
div#new-field {
margin: 2em 0 4px 0;
padding: 5px 5px;
}
div#new-field form {
margin-bottom: 2em;
form#import-fields {
margin-top: 1em;
}
aside#sidebar div.news h3,