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): |