15 |
15 |
16 # import standard library |
16 # import standard library |
17 |
17 |
18 # import interfaces |
18 # import interfaces |
19 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \ |
19 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \ |
20 IParagraphPreview |
20 IParagraphRenderer |
21 from pyams_content.features.preview.zmi.interfaces import IPreviewForm |
21 from pyams_content.features.renderer.interfaces import IContentRenderer |
22 from pyams_form.interfaces.form import IWidgetsSuffixViewletsManager |
|
23 from pyams_i18n.interfaces import II18nManager |
|
24 from pyams_skin.interfaces import IUserSkinnable |
|
25 from pyams_skin.layer import IPyAMSLayer |
22 from pyams_skin.layer import IPyAMSLayer |
26 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
|
27 |
23 |
28 # import packages |
24 # import packages |
29 from pyams_skin.skin import apply_skin |
25 from pyams_content.features.renderer.zmi import BaseContentRenderer |
30 from pyams_template.template import template_config |
26 from pyams_utils.adapter import adapter_config |
31 from pyams_utils.request import copy_request |
|
32 from pyams_viewlet.viewlet import viewlet_config, Viewlet |
|
33 from pyramid.decorator import reify |
|
34 |
27 |
35 |
28 |
36 @viewlet_config(name='paragraphs-preview', context=IParagraphContainerTarget, layer=IPyAMSLayer, |
29 @adapter_config(name='paragraphs-render', context=(IParagraphContainerTarget, IPyAMSLayer), |
37 view=IPreviewForm, manager=IWidgetsSuffixViewletsManager, |
30 provides=IContentRenderer) |
38 permission=VIEW_SYSTEM_PERMISSION, weight=100) |
31 class ParagraphsContainerRenderer(BaseContentRenderer): |
39 @template_config(template='templates/preview.pt', layer=IPyAMSLayer) |
32 """Paragraphs container renderer""" |
40 class ParagraphsContainerPreview(Viewlet): |
|
41 """Paragraphs container preview""" |
|
42 |
33 |
43 def __init__(self, context, request, view, manager): |
34 weight = 10 |
44 super(ParagraphsContainerPreview, self).__init__(context, request, view, manager) |
|
45 self.paragraphs = [para for para in IParagraphContainer(self.context).values() |
|
46 if para.visible] |
|
47 self.languages = II18nManager(self.context).get_languages() |
|
48 |
35 |
49 @reify |
36 def __init__(self, context, request): |
50 def render_request(self): |
37 super(ParagraphsContainerRenderer, self).__init__(context, request) |
51 request = copy_request(self.request) |
38 paragraphs = [para for para in IParagraphContainer(self.context).values() |
52 root = self.request.root |
39 if para.visible] |
53 skin = IUserSkinnable(root).get_skin() |
40 self.renderers = [self.request.registry.queryMultiAdapter((paragraph, self.request), IParagraphRenderer) |
54 if skin is not None: |
41 for paragraph in paragraphs] |
55 apply_skin(request, skin) |
|
56 return request |
|
57 |
42 |
58 def render_paragraph(self, paragraph, language=None): |
43 def update(self): |
59 preview = self.request.registry.queryMultiAdapter((paragraph, self.render_request), IParagraphPreview) |
44 super(ParagraphsContainerRenderer, self).update() |
60 if preview is not None: |
45 for renderer in self.renderers: |
61 preview.language = language |
46 if renderer is not None: |
62 preview.update() |
47 renderer.language = self.language |
63 return preview.render() |
48 renderer.update() |
|
49 |
|
50 def render(self): |
|
51 result = '' |
|
52 for renderer in self.renderers: |
|
53 if renderer is not None: |
|
54 result += renderer.render() |
|
55 return result |