src/pyams_content/component/paragraph/zmi/pictogram.py
changeset 936 2b31cde8c028
parent 935 8a7ec586dce1
child 1002 ab7787b3faf1
equal deleted inserted replaced
930:814f7c5e04d1 936:2b31cde8c028
    14 
    14 
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 import json
    17 import json
    18 
    18 
       
    19 from pyramid.decorator import reify
       
    20 from pyramid.events import subscriber
       
    21 from pyramid.view import view_config
       
    22 from z3c.form import field, button
       
    23 from z3c.form.interfaces import INPUT_MODE, IDataExtractedEvent
       
    24 from z3c.table.column import GetAttrColumn
       
    25 from z3c.table.interfaces import IValues, IColumn
       
    26 from zope.interface import implementer, Interface, Invalid
       
    27 
       
    28 from pyams_content import _
       
    29 # import packages
       
    30 from pyams_content.component.paragraph import BaseParagraph
    19 # import interfaces
    31 # import interfaces
    20 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
    32 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
    21     PARAGRAPH_HIDDEN_FIELDS
    33     PARAGRAPH_HIDDEN_FIELDS
    22 from pyams_content.component.paragraph.interfaces.pictogram import PICTOGRAM_PARAGRAPH_TYPE, IPictogramParagraph, \
    34 from pyams_content.component.paragraph.interfaces.pictogram import PICTOGRAM_PARAGRAPH_TYPE, IPictogramParagraph, \
    23     IPictogramContainer, IPictogramContainerTarget, IPictogramItem
    35     IPictogramContainer, IPictogramContainerTarget, IPictogramItem
    24 from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
       
    25 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
       
    26 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
       
    27 from pyams_content.shared.common import IWfSharedContent
       
    28 from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
       
    29 from pyams_i18n.interfaces import II18n
       
    30 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
       
    31 from pyams_skin.layer import IPyAMSLayer
       
    32 from pyams_zmi.interfaces import IPropertiesEditForm
       
    33 from z3c.form.interfaces import INPUT_MODE, IDataExtractedEvent
       
    34 from z3c.table.interfaces import IValues, IColumn
       
    35 
       
    36 # import packages
       
    37 from pyams_content.component.paragraph import BaseParagraph
       
    38 from pyams_content.component.paragraph.pictogram import PictogramParagraph, PictogramItem
    36 from pyams_content.component.paragraph.pictogram import PictogramParagraph, PictogramItem
    39 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    37 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    40     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
    38     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
       
    39 from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
       
    40 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
    41 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    41 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
       
    42 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    42 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
    43 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
       
    44 from pyams_content.shared.common import IWfSharedContent
    43 from pyams_file.zmi.image import render_image
    45 from pyams_file.zmi.image import render_image
    44 from pyams_form.form import AJAXAddForm, ajax_config
    46 from pyams_form.form import AJAXAddForm, ajax_config
       
    47 from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
    45 from pyams_form.security import ProtectedFormObjectMixin
    48 from pyams_form.security import ProtectedFormObjectMixin
    46 from pyams_i18n.column import I18nAttrColumn
    49 from pyams_i18n.column import I18nAttrColumn
       
    50 from pyams_i18n.interfaces import II18n
    47 from pyams_pagelet.pagelet import pagelet_config
    51 from pyams_pagelet.pagelet import pagelet_config
    48 from pyams_skin.container import switch_element_visibility
    52 from pyams_skin.container import switch_element_visibility
    49 from pyams_skin.event import get_json_widget_refresh_event, get_json_switched_table_refresh_event, \
    53 from pyams_skin.event import get_json_widget_refresh_event, get_json_switched_table_refresh_event, \
    50     get_json_table_row_refresh_event
    54     get_json_table_row_refresh_event
       
    55 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
       
    56 from pyams_skin.layer import IPyAMSLayer
    51 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
    57 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
    52 from pyams_skin.viewlet.toolbar import ToolbarAction
    58 from pyams_skin.viewlet.toolbar import ToolbarAction
    53 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    59 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    54 from pyams_utils.text import get_text_start
    60 from pyams_utils.text import get_text_start
    55 from pyams_utils.traversing import get_parent
    61 from pyams_utils.traversing import get_parent
    56 from pyams_utils.url import absolute_url
    62 from pyams_utils.url import absolute_url
    57 from pyams_viewlet.viewlet import viewlet_config
    63 from pyams_viewlet.viewlet import viewlet_config
    58 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
    64 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
       
    65 from pyams_zmi.interfaces import IPropertiesEditForm
    59 from pyams_zmi.zmi.table import InnerTableView
    66 from pyams_zmi.zmi.table import InnerTableView
    60 from pyramid.decorator import reify
       
    61 from pyramid.events import subscriber
       
    62 from pyramid.view import view_config
       
    63 from z3c.form import field, button
       
    64 from z3c.table.column import GetAttrColumn
       
    65 from zope.interface import implementer, alsoProvides, Interface, Invalid
       
    66 
       
    67 from pyams_content import _
       
    68 
    67 
    69 
    68 
    70 class IPictogramsView(Interface):
    69 class IPictogramsView(Interface):
    71     """Pictograms view marker interface"""
    70     """Pictograms view marker interface"""
    72 
    71 
    77 
    76 
    78 @viewlet_config(name='add-pictogram-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
    77 @viewlet_config(name='add-pictogram-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
    79                 layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=600)
    78                 layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=600)
    80 class PictogramParagraphAddMenu(BaseParagraphAddMenu):
    79 class PictogramParagraphAddMenu(BaseParagraphAddMenu):
    81     """Pictogram paragraph add menu"""
    80     """Pictogram paragraph add menu"""
    82     
    81 
    83     label = _("Pictograms...")
    82     label = _("Pictograms...")
    84     label_css_class = 'fa fa-fw fa-linode'
    83     label_css_class = 'fa fa-fw fa-linode'
    85     url = 'add-pictogram-paragraph.html'
    84     url = 'add-pictogram-paragraph.html'
    86     paragraph_type = PICTOGRAM_PARAGRAPH_TYPE
    85     paragraph_type = PICTOGRAM_PARAGRAPH_TYPE
    87     
    86 
    88     
    87 
    89 @pagelet_config(name='add-pictogram-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    88 @pagelet_config(name='add-pictogram-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    90                 permission=MANAGE_CONTENT_PERMISSION)
    89                 permission=MANAGE_CONTENT_PERMISSION)
    91 @ajax_config(name='add-pictogram-paragraph.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    90 @ajax_config(name='add-pictogram-paragraph.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    92              base=BaseParagraphAJAXAddForm)
    91              base=BaseParagraphAJAXAddForm)
    93 class PictogramParagraphAddForm(AdminDialogAddForm):
    92 class PictogramParagraphAddForm(AdminDialogAddForm):
    94     """Pictogram paragraph add form"""
    93     """Pictogram paragraph add form"""
    95     
    94 
    96     legend = _("Add new pictogram paragraph")
    95     legend = _("Add new pictogram paragraph")
    97     icon_css_class = 'fa fa-fw fa-linode'
    96     icon_css_class = 'fa fa-fw fa-linode'
    98     
    97 
    99     fields = field.Fields(IPictogramParagraph).select('title', 'renderer')
    98     fields = field.Fields(IPictogramParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
   100     edit_permission = MANAGE_CONTENT_PERMISSION
    99     edit_permission = MANAGE_CONTENT_PERMISSION
   101     
   100 
   102     def create(self, data):
   101     def create(self, data):
   103         return PictogramParagraph()
   102         return PictogramParagraph()
   104     
   103 
   105     def add(self, object):
   104     def add(self, object):
   106         IParagraphContainer(self.context).append(object)
   105         IParagraphContainer(self.context).append(object)
   107 
   106 
   108 
   107 
   109 @pagelet_config(name='properties.html', context=IPictogramParagraph, layer=IPyAMSLayer,
   108 @pagelet_config(name='properties.html', context=IPictogramParagraph, layer=IPyAMSLayer,
   121         return II18n(content).query_attribute('title', request=self.request)
   120         return II18n(content).query_attribute('title', request=self.request)
   122 
   121 
   123     legend = _("Edit pictogram paragraph properties")
   122     legend = _("Edit pictogram paragraph properties")
   124     icon_css_class = 'fa fa-fw fa-linode'
   123     icon_css_class = 'fa fa-fw fa-linode'
   125 
   124 
   126     fields = field.Fields(IPictogramParagraph).select('title', 'renderer')
   125     fields = field.Fields(IPictogramParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
   127     fields['renderer'].widgetFactory = RendererFieldWidget
   126     fields['renderer'].widgetFactory = RendererFieldWidget
   128 
   127 
   129     edit_permission = MANAGE_CONTENT_PERMISSION
   128     edit_permission = MANAGE_CONTENT_PERMISSION
   130 
   129 
   131 
   130 
   325     """Pictogram add form"""
   324     """Pictogram add form"""
   326 
   325 
   327     legend = _("Add new pictogram")
   326     legend = _("Add new pictogram")
   328     icon_css_class = 'fa fa-fw fa-arrow-h'
   327     icon_css_class = 'fa fa-fw fa-arrow-h'
   329 
   328 
   330     fields = field.Fields(IPictogramItem).omit(*PARAGRAPH_HIDDEN_FIELDS)
   329     fields = field.Fields(IPictogramItem).omit('__parent__', '__name__', 'visible')
   331     fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
   330     fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
   332 
   331 
   333     edit_permission = MANAGE_CONTENT_PERMISSION
   332     edit_permission = MANAGE_CONTENT_PERMISSION
   334 
   333 
   335     def updateWidgets(self, prefix=None):
   334     def updateWidgets(self, prefix=None):
   367     prefix = 'pictogram_properties.'
   366     prefix = 'pictogram_properties.'
   368 
   367 
   369     legend = _("Edit pictogram properties")
   368     legend = _("Edit pictogram properties")
   370     icon_css_class = 'fa fa-fw fa-linode'
   369     icon_css_class = 'fa fa-fw fa-linode'
   371 
   370 
   372     fields = field.Fields(IPictogramItem).omit(*PARAGRAPH_HIDDEN_FIELDS)
   371     fields = field.Fields(IPictogramItem).omit('__parent__', '__name__', 'visible')
   373     fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
   372     fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
   374 
   373 
   375     edit_permission = MANAGE_CONTENT_PERMISSION
   374     edit_permission = MANAGE_CONTENT_PERMISSION
   376 
   375 
   377     def updateWidgets(self, prefix=None):
   376     def updateWidgets(self, prefix=None):