src/pyams_content/component/paragraph/zmi/contact.py
changeset 591 b694d5667d17
parent 555 8e8a14452567
child 842 7f0d72e427b1
equal deleted inserted replaced
590:4fafaf94701d 591:b694d5667d17
    31 from pyams_content.component.paragraph.contact import ContactParagraph
    31 from pyams_content.component.paragraph.contact import ContactParagraph
    32 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    32 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    33     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm, get_json_paragraph_refresh_event, \
    33     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm, get_json_paragraph_refresh_event, \
    34     IParagraphEditFormButtons
    34     IParagraphEditFormButtons
    35 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    35 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
       
    36 from pyams_form.form import ajax_config
    36 from pyams_pagelet.pagelet import pagelet_config
    37 from pyams_pagelet.pagelet import pagelet_config
    37 from pyams_skin.event import get_json_form_refresh_event
    38 from pyams_skin.event import get_json_form_refresh_event
    38 from pyams_utils.adapter import adapter_config
    39 from pyams_utils.adapter import adapter_config
    39 from pyams_viewlet.viewlet import viewlet_config
    40 from pyams_viewlet.viewlet import viewlet_config
    40 from pyams_zmi.form import AdminDialogAddForm
    41 from pyams_zmi.form import AdminDialogAddForm
    41 from pyramid.view import view_config
       
    42 from z3c.form import field, button
    42 from z3c.form import field, button
    43 from zope.interface import implementer
    43 from zope.interface import implementer
    44 
    44 
    45 from pyams_content import _
    45 from pyams_content import _
    46 
    46 
    56     paragraph_type = CONTACT_PARAGRAPH_TYPE
    56     paragraph_type = CONTACT_PARAGRAPH_TYPE
    57 
    57 
    58 
    58 
    59 @pagelet_config(name='add-contact-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    59 @pagelet_config(name='add-contact-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    60                 permission=MANAGE_CONTENT_PERMISSION)
    60                 permission=MANAGE_CONTENT_PERMISSION)
       
    61 @ajax_config(name='add-contact-paragraph.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
       
    62              base=BaseParagraphAJAXAddForm)
    61 class ContactParagraphAddForm(AdminDialogAddForm):
    63 class ContactParagraphAddForm(AdminDialogAddForm):
    62     """Contact paragraph add form"""
    64     """Contact paragraph add form"""
    63 
    65 
    64     legend = _("Add new contact card")
    66     legend = _("Add new contact card")
    65     dialog_class = 'modal-large'
    67     dialog_class = 'modal-large'
    66     icon_css_class = 'fa fa-fw fa-id-card-o'
    68     icon_css_class = 'fa fa-fw fa-id-card-o'
    67 
    69 
    68     fields = field.Fields(IContactParagraph).omit('__parent__', '__name__', 'visible')
    70     fields = field.Fields(IContactParagraph).omit('__parent__', '__name__', 'visible')
    69     ajax_handler = 'add-contact-paragraph.json'
       
    70     edit_permission = MANAGE_CONTENT_PERMISSION
    71     edit_permission = MANAGE_CONTENT_PERMISSION
    71 
    72 
    72     def updateWidgets(self, prefix=None):
    73     def updateWidgets(self, prefix=None):
    73         super(ContactParagraphAddForm, self).updateWidgets(prefix)
    74         super(ContactParagraphAddForm, self).updateWidgets(prefix)
    74         if 'address' in self.widgets:
    75         if 'address' in self.widgets:
    79 
    80 
    80     def add(self, object):
    81     def add(self, object):
    81         IParagraphContainer(self.context).append(object)
    82         IParagraphContainer(self.context).append(object)
    82 
    83 
    83 
    84 
    84 @view_config(name='add-contact-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer,
       
    85              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
    86 class ContactParagraphAJAXAddForm(BaseParagraphAJAXAddForm, ContactParagraphAddForm):
       
    87     """Contact paragraph add form, JSON renderer"""
       
    88 
       
    89 
       
    90 @pagelet_config(name='properties.html', context=IContactParagraph, layer=IPyAMSLayer,
    85 @pagelet_config(name='properties.html', context=IContactParagraph, layer=IPyAMSLayer,
    91                 permission=MANAGE_CONTENT_PERMISSION)
    86                 permission=MANAGE_CONTENT_PERMISSION)
       
    87 @ajax_config(name='properties.json', context=IContactParagraph, request_type=IPyAMSLayer,
       
    88              base=BaseParagraphAJAXEditForm)
    92 class ContactParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
    89 class ContactParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
    93     """Contact paragraph properties edit form"""
    90     """Contact paragraph properties edit form"""
    94 
    91 
    95     prefix = 'contact_properties.'
    92     prefix = 'contact_properties.'
    96 
    93 
    98     icon_css_class = 'fa fa-fw fa-id-card-o'
    95     icon_css_class = 'fa fa-fw fa-id-card-o'
    99 
    96 
   100     fields = field.Fields(IContactParagraph).omit('__parent__', '__name__', 'visible')
    97     fields = field.Fields(IContactParagraph).omit('__parent__', '__name__', 'visible')
   101     fields['renderer'].widgetFactory = RendererFieldWidget
    98     fields['renderer'].widgetFactory = RendererFieldWidget
   102 
    99 
   103     ajax_handler = 'properties.json'
       
   104     edit_permission = MANAGE_CONTENT_PERMISSION
   100     edit_permission = MANAGE_CONTENT_PERMISSION
   105 
   101 
   106     def updateWidgets(self, prefix=None):
   102     def updateWidgets(self, prefix=None):
   107         super(ContactParagraphPropertiesEditForm, self).updateWidgets(prefix)
   103         super(ContactParagraphPropertiesEditForm, self).updateWidgets(prefix)
   108         if 'address' in self.widgets:
   104         if 'address' in self.widgets:
   109             self.widgets['address'].widget_css_class = 'textarea'
   105             self.widgets['address'].widget_css_class = 'textarea'
   110 
   106 
   111 
   107 
   112 @view_config(name='properties.json', context=IContactParagraph, request_type=IPyAMSLayer,
       
   113              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   114 class ContactParagraphPropertiesAJAXEditForm(BaseParagraphAJAXEditForm, ContactParagraphPropertiesEditForm):
       
   115     """Contact paragraph properties edit form, JSON renderer"""
       
   116 
       
   117 
       
   118 @adapter_config(context=(IContactParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
   108 @adapter_config(context=(IContactParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
       
   109 @ajax_config(name='inner-properties.json', context=IContactParagraph, layer=IPyAMSLayer,
       
   110              base=BaseParagraphAJAXEditForm)
   119 @implementer(IInnerForm)
   111 @implementer(IInnerForm)
   120 class ContactParagraphInnerEditForm(ContactParagraphPropertiesEditForm):
   112 class ContactParagraphInnerEditForm(ContactParagraphPropertiesEditForm):
   121     """Contact paragraph inner edit form"""
   113     """Contact paragraph inner edit form"""
   122 
   114 
   123     legend = None
   115     legend = None
   124     ajax_handler = 'inner-properties.json'
       
   125 
   116 
   126     @property
   117     @property
   127     def buttons(self):
   118     def buttons(self):
   128         if self.mode == INPUT_MODE:
   119         if self.mode == INPUT_MODE:
   129             return button.Buttons(IParagraphEditFormButtons)
   120             return button.Buttons(IParagraphEditFormButtons)
   130         else:
   121         else:
   131             return button.Buttons()
   122             return button.Buttons()
   132 
   123 
   133 
       
   134 @view_config(name='inner-properties.json', context=IContactParagraph, request_type=IPyAMSLayer,
       
   135              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   136 class ContactParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, ContactParagraphInnerEditForm):
       
   137     """Contact paragraph inner edit form, JSON renderer"""
       
   138 
       
   139     def get_ajax_output(self, changes):
   124     def get_ajax_output(self, changes):
   140         output = super(ContactParagraphInnerAJAXEditForm, self).get_ajax_output(changes)
   125         output = super(self.__class__, self).get_ajax_output(changes)
   141         updated = changes.get(IBaseParagraph, ())
   126         updated = changes.get(IBaseParagraph, ())
   142         if 'title' in updated:
   127         if 'title' in updated:
   143             output.setdefault('events', []).append(get_json_paragraph_refresh_event(self.context, self.request))
   128             output.setdefault('events', []).append(get_json_paragraph_refresh_event(self.context, self.request))
   144         updated = changes.get(IContactParagraph, ())
   129         updated = changes.get(IContactParagraph, ())
   145         if ('photo' in updated) or ('renderer' in updated):
   130         if ('photo' in updated) or ('renderer' in updated):