--- a/src/pyams_content/component/paragraph/zmi/pictogram.py Wed Apr 11 16:44:46 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/pictogram.py Wed Apr 11 16:46:31 2018 +0200
@@ -29,7 +29,6 @@
from pyams_i18n.interfaces import II18n
from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces import MANAGE_PERMISSION
from pyams_zmi.interfaces import IPropertiesEditForm
from z3c.form.interfaces import INPUT_MODE
from z3c.table.interfaces import IValues, IColumn
@@ -41,23 +40,23 @@
BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
from pyams_content.features.renderer.zmi import BaseRenderedContentRenderer
from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
-from pyams_content.skin import pyams_content
from pyams_form.form import AJAXAddForm, AJAXEditForm
from pyams_form.security import ProtectedFormObjectMixin
from pyams_i18n.column import I18nAttrColumn
from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.table import BaseTable, SorterColumn, JsActionColumn, I18nColumn, TrashColumn
+from pyams_skin.container import switch_element_visibility
+from pyams_skin.event import get_json_widget_refresh_event, get_json_switched_table_refresh_event, \
+ get_json_table_row_refresh_event
+from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
from pyams_skin.viewlet.toolbar import ToolbarAction
-from pyams_template.template import template_config
from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
-from pyams_utils.fanstatic import get_resource_path
from pyams_utils.text import get_text_start
from pyams_utils.traversing import get_parent
from pyams_utils.url import absolute_url
from pyams_viewlet.viewlet import viewlet_config
-from pyams_zmi.form import AdminDialogAddForm, InnerAdminDisplayForm, AdminDialogEditForm
+from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
+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, button
from z3c.table.column import GetAttrColumn
@@ -115,6 +114,8 @@
class PictogramParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
"""Pictogram paragraph properties edit form"""
+ prefix = 'pictograms_properties.'
+
@property
def title(self):
content = get_parent(self.context, IWfSharedContent)
@@ -161,20 +162,8 @@
output = super(PictogramParagraphInnerAJAXEditForm, self).get_ajax_output(changes)
updated = changes.get(IPictogramParagraph, ())
if 'renderer' in updated:
- form = PictogramParagraphInnerEditForm(self.context, self.request)
- form.update()
- output.setdefault('events', []).append({
- 'event': 'myams.refresh',
- 'options': {
- 'handler': 'MyAMS.skin.refreshWidget',
- 'parent_id': '{0}_{1}_{2}'.format(
- self.context.__class__.__name__,
- getattr(form.getContent(), '__name__', 'noname').replace('++', ''),
- form.id),
- 'widget_name': form.widgets['renderer'].name,
- 'content': form.widgets['renderer'].render()
- }
- })
+ output.setdefault('events', []).append(
+ get_json_widget_refresh_event(self.context, self.request, PictogramParagraphInnerEditForm, 'renderer'))
return output
@@ -194,9 +183,7 @@
class PictogramsTable(ProtectedFormObjectMixin, BaseTable):
"""Pictograms view inner table"""
- @property
- def id(self):
- return 'pictograms_{0}_list'.format(self.context.__name__)
+ prefix = 'pictograms'
hide_header = True
sortOn = None
@@ -214,17 +201,11 @@
attributes = super(PictogramsTable, self).data_attributes
attributes['table'] = {
'id': self.id,
- 'data-ams-plugins': 'pyams_content',
- 'data-ams-plugin-pyams_content-src': get_resource_path(pyams_content),
'data-ams-location': absolute_url(IPictogramContainer(self.context), self.request),
'data-ams-tablednd-drag-handle': 'td.sorter',
- 'data-ams-tablednd-drop-target': 'set-pictograms-order.json'
+ 'data-ams-tablednd-drop-target': 'set-pictograms-order.json',
+ 'data-ams-visibility-switcher': 'switch-pictogram-visibility.json'
}
- attributes.setdefault('tr', {}).update({
- 'id': lambda x, col: 'pictogram_{0}::{1}'.format(get_parent(x, IPictogramContainerTarget).__name__,
- x.__name__),
- 'data-ams-delete-target': 'delete-pictogram.json'
- })
return attributes
@reify
@@ -276,43 +257,15 @@
@adapter_config(name='show-hide', context=(IPictogramContainerTarget, IPyAMSLayer, PictogramsTable),
provides=IColumn)
-class PictogramsTableShowHideColumn(ProtectedFormObjectMixin, JsActionColumn):
+class PictogramsTableShowHideColumn(ProtectedFormObjectMixin, VisibilitySwitcherColumn):
"""Pictograms container visibility switcher column"""
- cssClasses = {'th': 'action',
- 'td': 'action switcher'}
- icon_class = 'fa fa-fw fa-eye'
- icon_hint = _("Switch pictogram visibility")
-
- url = 'PyAMS_content.pictograms.switchVisibility'
-
- weight = 5
-
- def get_icon(self, item):
- if item.visible:
- icon_class = 'fa fa-fw fa-eye'
- else:
- icon_class = 'fa fa-fw fa-eye-slash text-danger'
- return '<i class="{icon_class}"></i>'.format(icon_class=icon_class)
-
- 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(PictogramsTableShowHideColumn, self).renderCell(item)
-
-
-@view_config(name='set-pictogram-visibility.json', context=IPictogramContainer, request_type=IPyAMSLayer,
+@view_config(name='switch-pictogram-visibility.json', context=IPictogramContainer, request_type=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-def set_pictogram_visibility(request):
+def switch_pictogram_visibility(request):
"""Set pictogram visibility"""
- container = IPictogramContainer(request.context)
- pictogram = container.get(str(request.params.get('object_name')))
- if pictogram is None:
- raise NotFound()
- pictogram.visible = not pictogram.visible
- return {'visible': pictogram.visible}
+ return switch_element_visibility(request, IPictogramContainer)
@adapter_config(name='name', context=(IPictogramContainerTarget, IPyAMSLayer, PictogramsTable), provides=IColumn)
@@ -350,50 +303,16 @@
"""Pictograms table trash column"""
-@view_config(name='delete-pictogram.json', context=IPictogramContainer, request_type=IPyAMSLayer,
- permission=MANAGE_PERMISSION, renderer='json', xhr=True)
-def delete_pictogram(request):
- """Delete pictogram"""
- translate = request.localizer.translate
- name = request.params.get('object_name')
- if not name:
- return {
- 'status': 'message',
- 'messagebox': {
- 'status': 'error',
- 'content': translate(_("No provided object_name argument!"))
- }
- }
- if name not in request.context:
- return {
- 'status': 'message',
- 'messagebox': {
- 'status': 'error',
- 'content': translate(_("Given pictogram name doesn't exist!"))
- }
- }
- del request.context[name]
- return {'status': 'success'}
-
-
@adapter_config(name='pictograms', context=(IPictogramContainerTarget, IPyAMSLayer, IPictogramsParentForm),
provides=IInnerSubForm)
-@template_config(template='templates/pictograms.pt', layer=IPyAMSLayer)
@implementer(IPictogramsView)
-class PictogramsView(InnerAdminDisplayForm):
+class PictogramsView(InnerTableView):
"""Pictograms view"""
- fields = field.Fields(Interface)
- weight = 100
+ title = _("Pictograms")
- def __init__(self, context, request, view):
- super(PictogramsView, self).__init__(context, request, view)
- self.table = PictogramsTable(context, request)
- self.table.view = self
-
- def update(self):
- super(PictogramsView, self).update()
- self.table.update()
+ table_class = PictogramsTable
+ weight = 100
#
@@ -441,19 +360,10 @@
"""Pictogram add form, JSON renderer"""
def get_ajax_output(self, changes):
- table = PictogramsTable(self.context, self.request)
- table.update()
return {
'status': 'success',
'message': self.request.localizer.translate(_("Pictogram was correctly added")),
- 'events': [{
- 'event': 'myams.refresh',
- 'options': {
- 'handler': 'PyAMS_content.pictograms.refreshPictograms',
- 'object_id': table.id,
- 'table': table.render()
- }
- }]
+ 'events': [get_json_switched_table_refresh_event(self.context, self.request, PictogramsTable), ]
}
@@ -461,6 +371,8 @@
class PictogramPropertiesEditForm(AdminDialogEditForm):
"""Pictogram properties edit form"""
+ prefix = 'pictogram_properties.'
+
legend = _("Edit pictogram properties")
icon_css_class = 'fa fa-fw fa-linode'
@@ -484,16 +396,6 @@
updated = changes.get(IPictogramItem, ())
if updated:
target = get_parent(self.context, IPictogramContainerTarget)
- table = PictogramsTable(target, self.request)
- table.update()
- row = table.setUpRow(self.context)
- output.setdefault('events', []).append({
- 'event': 'myams.refresh',
- 'options': {
- 'handler': 'MyAMS.skin.refreshRow',
- 'object_id': 'pictogram_{0}::{1}'.format(target.__name__,
- self.context.__name__),
- 'row': table.renderRow(row)
- }
- })
+ output.setdefault('events', []).append(
+ get_json_table_row_refresh_event(target, self.request, PictogramsTable, self.context))
return output