# HG changeset patch # User Thierry Florac # Date 1523010478 -7200 # Node ID 6de7d0a3a77df47f2937e8fe298a1be08770eb97 # Parent 193ad9281a1c015cc7e87621892c47a87fef861b Use new PyAMS helpers and classes diff -r 193ad9281a1c -r 6de7d0a3a77d src/pyams_content/component/paragraph/zmi/__init__.py --- a/src/pyams_content/component/paragraph/zmi/__init__.py Fri Apr 06 12:07:45 2018 +0200 +++ b/src/pyams_content/component/paragraph/zmi/__init__.py Fri Apr 06 12:27:58 2018 +0200 @@ -133,16 +133,16 @@ table_factory = ParagraphContainerTable else: table_factory = ParagraphContainerBaseTable - paragraphs_table = table_factory(self.context, self.request) - paragraphs_table.update() + table = table_factory(self.context, self.request) + table.update() return {'status': 'success', 'message': self.request.localizer.translate(_("Paragraph was correctly added.")), 'events': [{ 'event': 'myams.refresh', 'options': { - 'handler': 'PyAMS_content.paragraphs.refreshParagraphs', - 'object_id': paragraphs_table.id, - 'table': paragraphs_table.render() + 'handler': 'MyAMS.skin.refreshSwitchedTable', + 'object_id': table.id, + 'table': table.render() } }]} diff -r 193ad9281a1c -r 6de7d0a3a77d src/pyams_content/component/paragraph/zmi/container.py --- a/src/pyams_content/component/paragraph/zmi/container.py Fri Apr 06 12:07:45 2018 +0200 +++ b/src/pyams_content/component/paragraph/zmi/container.py Fri Apr 06 12:27:58 2018 +0200 @@ -40,9 +40,11 @@ from pyams_content.shared.common.zmi import WfModifiedContentColumnMixin from pyams_content.skin import pyams_content from pyams_form.security import ProtectedFormObjectMixin -from pyams_pagelet.pagelet import pagelet_config, Pagelet +from pyams_pagelet.pagelet import pagelet_config +from pyams_skin.container import switch_element_visibility from pyams_skin.page import DefaultPageHeaderAdapter -from pyams_skin.table import BaseTable, I18nColumn, TrashColumn, JsActionColumn, SorterColumn, ImageColumn +from pyams_skin.table import BaseTable, I18nColumn, TrashColumn, SorterColumn, ImageColumn, \ + VisibilitySwitcherColumn from pyams_skin.viewlet.menu import MenuItem from pyams_template.template import template_config from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, NullAdapter @@ -50,12 +52,13 @@ from pyams_utils.traversing import get_parent from pyams_utils.url import absolute_url from pyams_viewlet.manager import viewletmanager_config, WeightOrderedViewletManager, TemplateBasedViewletManager -from pyramid.exceptions import NotFound -from pyramid.view import view_config from pyams_viewlet.viewlet import viewlet_config, Viewlet from pyams_zmi.form import AdminDialogDisplayForm from pyams_zmi.view import AdminView, ContainerAdminView +from pyams_zmi.zmi.table import InnerTableView from pyramid.decorator import reify +from pyramid.exceptions import NotFound +from pyramid.view import view_config from z3c.form import field from z3c.table.column import GetAttrColumn from zope.interface import implementer, Interface @@ -104,7 +107,8 @@ 'data-ams-pre-reload': 'PyAMS_content.paragraphs.preReload', 'data-ams-post-reload': 'PyAMS_content.paragraphs.postReload', 'data-ams-tablednd-drag-handle': 'td.sorter', - 'data-ams-tablednd-drop-target': 'set-paragraphs-order.json' + 'data-ams-tablednd-drop-target': 'set-paragraphs-order.json', + 'data-ams-visibility-target': 'switch-paragraph-visibility.json' }) return attributes @@ -151,32 +155,26 @@ """Paragraphs container sorter column""" +@view_config(name='set-paragraphs-order.json', context=IParagraphContainer, request_type=IPyAMSLayer, + permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) +def set_paragraphs_order(request): + """Update paragraphs order""" + order = list(map(str, json.loads(request.params.get('names')))) + request.context.updateOrder(order) + return {'status': 'success'} + + @adapter_config(name='show-hide', context=(IParagraphContainerTarget, IPyAMSLayer, ParagraphContainerBaseTable), provides=IColumn) -class ParagraphContainerShowHideColumn(ProtectedFormObjectMixin, JsActionColumn): +class ParagraphContainerShowHideColumn(ProtectedFormObjectMixin, VisibilitySwitcherColumn): """Paragraphs container visibility switcher column""" - cssClasses = {'th': 'action', - 'td': 'action switcher'} - icon_class = 'fa fa-fw fa-eye' - icon_hint = _("Switch paragraph visibility") - - url = 'PyAMS_content.paragraphs.switchVisibility' - - weight = 5 - - def get_icon_class(self, item): - if item.visible: - return self.icon_class - else: - return 'fa fa-fw fa-eye-slash text-danger' - - def renderCell(self, item): - if self.permission and not self.request.has_permission(self.permission, context=item): - return self.get_icon(item) - else: - return super(ParagraphContainerShowHideColumn, self).renderCell(item) +@view_config(name='switch-paragraph-visibility.json', context=IParagraphContainer, request_type=IPyAMSLayer, + permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) +def switch_paragraph_visibility(request): + """Switch paragraph visibility""" + return switch_element_visibility(request, IParagraphContainer) @adapter_config(context=ParagraphContainerShowHideColumn, provides=IFormSecurityContext) @@ -302,21 +300,14 @@ @adapter_config(name='paragraphs', context=(IParagraphContainerTarget, IPyAMSLayer, ParagraphContainerDialogView), provides=IInnerSubForm) -@template_config(template='templates/paragraphs.pt', layer=IPyAMSLayer) @implementer(IParagraphContainerView) -class ParagraphsView(Pagelet): +class ParagraphsView(InnerTableView): """Paragraphs view""" - weight = 90 + title = _("Paragraphs") - def __init__(self, context, request, view): - super(ParagraphsView, self).__init__(context, request) - self.table = ParagraphContainerBaseTable(context, request) - self.table.view = self - - def update(self): - super(ParagraphsView, self).update() - self.table.update() + table_class = ParagraphContainerBaseTable + weight = 90 @adapter_config(context=(IParagraphContainerTarget, IPyAMSLayer, ParagraphContainerView), provides=IPageHeader) @@ -327,32 +318,10 @@ icon_class = 'fa fa-fw fa-paragraph' -@view_config(name='set-paragraphs-order.json', context=IParagraphContainer, request_type=IPyAMSLayer, - permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) -def set_paragraphs_order(request): - """Update paragraphs order""" - order = list(map(str, json.loads(request.params.get('names')))) - request.context.updateOrder(order) - return {'status': 'success'} - - -@view_config(name='set-paragraph-visibility.json', context=IParagraphContainer, request_type=IPyAMSLayer, - permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) -def set_paragraph_visibility(request): - """Set paragraph visibility""" - container = IParagraphContainer(request.context) - paragraph = container.get(str(request.params.get('object_name'))) - if paragraph is None: - raise NotFound() - paragraph = IBaseParagraph(paragraph) - paragraph.visible = not paragraph.visible - return {'visible': paragraph.visible} - - @view_config(name='get-paragraph-editor.json', context=IParagraphContainer, request_type=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION, renderer='json', xhr=True) def get_paragraph_editor(request): - """Get paragraph editor""" + """Get inner editor for a given paragraph""" container = IParagraphContainer(request.context) paragraph = container.get(str(request.params.get('object_name'))) if paragraph is None: