src/pyams_content/component/paragraph/zmi/pictogram.py
changeset 625 abd143a83a07
parent 609 375ab52043d6
child 710 c770464c85a3
equal deleted inserted replaced
624:f5753401062a 625:abd143a83a07
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 from pyams_content.reference.pictograms.zmi import get_pictogram_header
       
    13 
    12 
    14 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    15 
    14 
    16 
    15 
    17 # import standard library
    16 # import standard library
    22 from pyams_content.component.paragraph.interfaces.pictogram import PICTOGRAM_PARAGRAPH_TYPE, IPictogramParagraph, \
    21 from pyams_content.component.paragraph.interfaces.pictogram import PICTOGRAM_PARAGRAPH_TYPE, IPictogramParagraph, \
    23     IPictogramContainer, IPictogramContainerTarget, IPictogramItem
    22     IPictogramContainer, IPictogramContainerTarget, IPictogramItem
    24 from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
    23 from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
    25 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
    24 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
    26 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    25 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    27 from pyams_content.reference.pictograms.interfaces import IPictogramTable
       
    28 from pyams_content.shared.common import IWfSharedContent
    26 from pyams_content.shared.common import IWfSharedContent
    29 from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
    27 from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
    30 from pyams_i18n.interfaces import II18n
    28 from pyams_i18n.interfaces import II18n
    31 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
    29 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
    32 from pyams_skin.layer import IPyAMSLayer
    30 from pyams_skin.layer import IPyAMSLayer
    33 from pyams_utils.interfaces.data import IObjectData
       
    34 from pyams_zmi.interfaces import IPropertiesEditForm
    31 from pyams_zmi.interfaces import IPropertiesEditForm
    35 from z3c.form.interfaces import INPUT_MODE, IDataExtractedEvent
    32 from z3c.form.interfaces import INPUT_MODE, IDataExtractedEvent
    36 from z3c.table.interfaces import IValues, IColumn
    33 from z3c.table.interfaces import IValues, IColumn
    37 
    34 
    38 # import packages
    35 # import packages
    39 from pyams_content.component.paragraph import BaseParagraph
    36 from pyams_content.component.paragraph import BaseParagraph
    40 from pyams_content.component.paragraph.pictogram import PictogramParagraph, PictogramItem
    37 from pyams_content.component.paragraph.pictogram import PictogramParagraph, PictogramItem
    41 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    38 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    42     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
    39     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
    43 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    40 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
       
    41 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
    44 from pyams_form.form import AJAXAddForm, ajax_config
    42 from pyams_form.form import AJAXAddForm, ajax_config
    45 from pyams_form.security import ProtectedFormObjectMixin
    43 from pyams_form.security import ProtectedFormObjectMixin
    46 from pyams_i18n.column import I18nAttrColumn
    44 from pyams_i18n.column import I18nAttrColumn
    47 from pyams_pagelet.pagelet import pagelet_config
    45 from pyams_pagelet.pagelet import pagelet_config
    48 from pyams_skin.container import switch_element_visibility
    46 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, \
    47 from pyams_skin.event import get_json_widget_refresh_event, get_json_switched_table_refresh_event, \
    50     get_json_table_row_refresh_event
    48     get_json_table_row_refresh_event
    51 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
    49 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
    52 from pyams_skin.viewlet.toolbar import ToolbarAction
    50 from pyams_skin.viewlet.toolbar import ToolbarAction
    53 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    51 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    54 from pyams_utils.registry import query_utility
       
    55 from pyams_utils.text import get_text_start
    52 from pyams_utils.text import get_text_start
    56 from pyams_utils.traversing import get_parent
    53 from pyams_utils.traversing import get_parent
    57 from pyams_utils.url import absolute_url
    54 from pyams_utils.url import absolute_url
    58 from pyams_viewlet.viewlet import viewlet_config
    55 from pyams_viewlet.viewlet import viewlet_config
    59 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
    56 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
   318 
   315 
   319     legend = _("Add new pictogram")
   316     legend = _("Add new pictogram")
   320     icon_css_class = 'fa fa-fw fa-arrow-h'
   317     icon_css_class = 'fa fa-fw fa-arrow-h'
   321 
   318 
   322     fields = field.Fields(IPictogramItem).omit('__parent__', '__name__', 'visible')
   319     fields = field.Fields(IPictogramItem).omit('__parent__', '__name__', 'visible')
       
   320     fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
       
   321 
   323     edit_permission = MANAGE_CONTENT_PERMISSION
   322     edit_permission = MANAGE_CONTENT_PERMISSION
   324 
   323 
   325     def updateWidgets(self, prefix=None):
   324     def updateWidgets(self, prefix=None):
   326         super(PictogramAddForm, self).updateWidgets(prefix)
   325         super(PictogramAddForm, self).updateWidgets(prefix)
   327         if 'pictogram_name' in self.widgets:
       
   328             pictograms = query_utility(IPictogramTable)
       
   329             if pictograms is not None:
       
   330                 label_id = '{0}_pictogram_label'.format(self.id)
       
   331                 widget = self.widgets['pictogram_name']
       
   332                 widget.after_widget_notice = '<span id="{0}" class="text-info">{1}</span>'.format(
       
   333                     label_id,
       
   334                     self.request.localizer.translate(_("Default header: --")))
       
   335                 widget.object_data = {
       
   336                     'ams-change-handler': 'MyAMS.helpers.select2ChangeHelper',
       
   337                     'ams-stop-propagation': 'true',
       
   338                     'ams-select2-helper-type': 'html',
       
   339                     'ams-select2-helper-url': absolute_url(pictograms, self.request, 'get-pictogram-header.html'),
       
   340                     'ams-select2-helper-target': '#{0}'.format(label_id)
       
   341                 }
       
   342                 alsoProvides(widget, IObjectData)
       
   343         if 'body' in self.widgets:
   326         if 'body' in self.widgets:
   344             self.widgets['body'].widget_css_class = 'textarea height-100'
   327             self.widgets['body'].widget_css_class = 'textarea height-100'
   345 
   328 
   346     def create(self, data):
   329     def create(self, data):
   347         return PictogramItem()
   330         return PictogramItem()
   374 
   357 
   375     legend = _("Edit pictogram properties")
   358     legend = _("Edit pictogram properties")
   376     icon_css_class = 'fa fa-fw fa-linode'
   359     icon_css_class = 'fa fa-fw fa-linode'
   377 
   360 
   378     fields = field.Fields(IPictogramItem).omit('__parent__', '__name__', 'visible')
   361     fields = field.Fields(IPictogramItem).omit('__parent__', '__name__', 'visible')
       
   362     fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
       
   363 
   379     edit_permission = MANAGE_CONTENT_PERMISSION
   364     edit_permission = MANAGE_CONTENT_PERMISSION
   380 
   365 
   381     def updateWidgets(self, prefix=None):
   366     def updateWidgets(self, prefix=None):
   382         super(PictogramPropertiesEditForm, self).updateWidgets(prefix)
   367         super(PictogramPropertiesEditForm, self).updateWidgets(prefix)
   383         if 'pictogram_name' in self.widgets:
       
   384             pictograms = query_utility(IPictogramTable)
       
   385             if pictograms is not None:
       
   386                 pictogram = pictograms.get(self.context.pictogram_name)
       
   387                 label_id = '{0}_pictogram_label'.format(self.id)
       
   388                 widget = self.widgets['pictogram_name']
       
   389                 widget.required = True
       
   390                 if pictogram is None:
       
   391                     widget.after_widget_notice = '<span id="{0}" class="text-info">--</span>'.format(label_id)
       
   392                 else:
       
   393                     widget.after_widget_notice = '<span id="{0}" class="text-info">{1}</span>'.format(
       
   394                         label_id,
       
   395                         get_pictogram_header(pictogram, self.request))
       
   396                 widget.object_data = {
       
   397                     'ams-change-handler': 'MyAMS.helpers.select2ChangeHelper',
       
   398                     'ams-stop-propagation': 'true',
       
   399                     'ams-select2-helper-type': 'html',
       
   400                     'ams-select2-helper-url': absolute_url(pictograms, self.request, 'get-pictogram-header.html'),
       
   401                     'ams-select2-helper-target': '#{0}'.format(label_id)
       
   402                 }
       
   403                 alsoProvides(widget, IObjectData)
       
   404         if 'body' in self.widgets:
   368         if 'body' in self.widgets:
   405             self.widgets['body'].widget_css_class = 'textarea height-100'
   369             self.widgets['body'].widget_css_class = 'textarea height-100'
   406 
   370 
   407     def get_ajax_output(self, changes):
   371     def get_ajax_output(self, changes):
   408         output = super(self.__class__, self).get_ajax_output(changes)
   372         output = super(self.__class__, self).get_ajax_output(changes)