16 # import standard library |
16 # import standard library |
17 |
17 |
18 # import interfaces |
18 # import interfaces |
19 from pyams_content.features.renderer.interfaces import IRenderedContent, IContentRenderer, IRendererSettings |
19 from pyams_content.features.renderer.interfaces import IRenderedContent, IContentRenderer, IRendererSettings |
20 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
20 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
21 from pyams_i18n.interfaces import II18n |
|
22 from pyams_skin.layer import IPyAMSLayer |
21 from pyams_skin.layer import IPyAMSLayer |
23 |
22 |
24 # import packages |
23 # import packages |
25 from pyams_form.form import AJAXEditForm |
24 from pyams_form.form import AJAXEditForm |
26 from pyams_pagelet.pagelet import pagelet_config |
25 from pyams_pagelet.pagelet import pagelet_config |
27 from pyams_template.template import get_view_template |
|
28 from pyams_utils.adapter import ContextRequestAdapter, adapter_config |
|
29 from pyams_viewlet.viewlet import BaseContentProvider |
26 from pyams_viewlet.viewlet import BaseContentProvider |
30 from pyams_zmi.form import AdminDialogEditForm |
27 from pyams_zmi.form import AdminDialogEditForm |
31 from pyramid.decorator import reify |
|
32 from pyramid.view import view_config |
28 from pyramid.view import view_config |
33 from z3c.form import field |
29 from z3c.form import field |
34 from zope.interface import implementer, Interface |
30 from zope.interface import Interface |
35 |
31 |
36 from pyams_content import _ |
32 from pyams_content import _ |
37 |
33 |
38 |
34 |
39 # |
35 # |
63 |
59 |
64 # |
60 # |
65 # Base content renderer |
61 # Base content renderer |
66 # |
62 # |
67 |
63 |
68 @implementer(IContentRenderer) |
|
69 class BaseContentRenderer(ContextRequestAdapter): |
|
70 """Base content renderer""" |
|
71 |
|
72 label = None |
|
73 weight = 0 |
|
74 settings_interface = None |
|
75 |
|
76 language = None |
|
77 context_attrs = () |
|
78 i18n_context_attrs = () |
|
79 |
|
80 @reify |
|
81 def settings(self): |
|
82 if self.settings_interface is None: |
|
83 return None |
|
84 return IRendererSettings(self.context) |
|
85 |
|
86 def update(self): |
|
87 for attr in self.context_attrs: |
|
88 setattr(self, attr, getattr(self.context, attr, None)) |
|
89 if self.i18n_context_attrs: |
|
90 i18n = II18n(self.context, None) |
|
91 if i18n is not None: |
|
92 for attr in self.i18n_context_attrs: |
|
93 setattr(self, attr, i18n.get_attribute(attr, lang=self.language, request=self.request)) |
|
94 |
|
95 render = get_view_template() |
|
96 |
|
97 |
64 |
98 @pagelet_config(name='renderer-properties.html', context=IRenderedContent, layer=IPyAMSLayer, |
65 @pagelet_config(name='renderer-properties.html', context=IRenderedContent, layer=IPyAMSLayer, |
99 permission=MANAGE_CONTENT_PERMISSION) |
66 permission=MANAGE_CONTENT_PERMISSION) |
100 class RendererPropertiesEditForm(AdminDialogEditForm): |
67 class RendererPropertiesEditForm(AdminDialogEditForm): |
101 """Renderer properties edit form""" |
68 """Renderer properties edit form""" |
119 |
86 |
120 @view_config(name='renderer-properties.json', context=IRenderedContent, request_type=IPyAMSLayer, |
87 @view_config(name='renderer-properties.json', context=IRenderedContent, request_type=IPyAMSLayer, |
121 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
88 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
122 class RendererPropertiesAJAXEditForm(AJAXEditForm, RendererPropertiesEditForm): |
89 class RendererPropertiesAJAXEditForm(AJAXEditForm, RendererPropertiesEditForm): |
123 """Renderer properties edit form, JSON renderer""" |
90 """Renderer properties edit form, JSON renderer""" |
124 |
|
125 |
|
126 # |
|
127 # Default common renderers |
|
128 # |
|
129 |
|
130 @adapter_config(name='hidden', context=(IRenderedContent, IPyAMSLayer), provides=IContentRenderer) |
|
131 class HiddenContentRenderer(BaseContentRenderer): |
|
132 """Hidden content renderer""" |
|
133 |
|
134 label = _("Hidden content") |
|
135 weight = -999 |
|
136 |
|
137 def render(self): |
|
138 return '' |
|