src/pyams_content/component/paragraph/zmi/preview.py
changeset 487 093f201e3168
parent 431 a162e9f348f7
child 550 9658debb49a3
--- a/src/pyams_content/component/paragraph/zmi/preview.py	Thu Mar 15 12:06:23 2018 +0100
+++ b/src/pyams_content/component/paragraph/zmi/preview.py	Fri Mar 16 08:17:54 2018 +0100
@@ -17,47 +17,39 @@
 
 # import interfaces
 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
-    IParagraphPreview
-from pyams_content.features.preview.zmi.interfaces import IPreviewForm
-from pyams_form.interfaces.form import IWidgetsSuffixViewletsManager
-from pyams_i18n.interfaces import II18nManager
-from pyams_skin.interfaces import IUserSkinnable
+    IParagraphRenderer
+from pyams_content.features.renderer.interfaces import IContentRenderer
 from pyams_skin.layer import IPyAMSLayer
-from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
 
 # import packages
-from pyams_skin.skin import apply_skin
-from pyams_template.template import template_config
-from pyams_utils.request import copy_request
-from pyams_viewlet.viewlet import viewlet_config, Viewlet
-from pyramid.decorator import reify
+from pyams_content.features.renderer.zmi import BaseContentRenderer
+from pyams_utils.adapter import adapter_config
 
 
-@viewlet_config(name='paragraphs-preview', context=IParagraphContainerTarget, layer=IPyAMSLayer,
-                view=IPreviewForm, manager=IWidgetsSuffixViewletsManager,
-                permission=VIEW_SYSTEM_PERMISSION, weight=100)
-@template_config(template='templates/preview.pt', layer=IPyAMSLayer)
-class ParagraphsContainerPreview(Viewlet):
-    """Paragraphs container preview"""
+@adapter_config(name='paragraphs-render', context=(IParagraphContainerTarget, IPyAMSLayer),
+                provides=IContentRenderer)
+class ParagraphsContainerRenderer(BaseContentRenderer):
+    """Paragraphs container renderer"""
+
+    weight = 10
 
-    def __init__(self, context, request, view, manager):
-        super(ParagraphsContainerPreview, self).__init__(context, request, view, manager)
-        self.paragraphs = [para for para in IParagraphContainer(self.context).values()
-                           if para.visible]
-        self.languages = II18nManager(self.context).get_languages()
+    def __init__(self, context, request):
+        super(ParagraphsContainerRenderer, self).__init__(context, request)
+        paragraphs = [para for para in IParagraphContainer(self.context).values()
+                      if para.visible]
+        self.renderers = [self.request.registry.queryMultiAdapter((paragraph, self.request), IParagraphRenderer)
+                          for paragraph in paragraphs]
 
-    @reify
-    def render_request(self):
-        request = copy_request(self.request)
-        root = self.request.root
-        skin = IUserSkinnable(root).get_skin()
-        if skin is not None:
-            apply_skin(request, skin)
-        return request
+    def update(self):
+        super(ParagraphsContainerRenderer, self).update()
+        for renderer in self.renderers:
+            if renderer is not None:
+                renderer.language = self.language
+                renderer.update()
 
-    def render_paragraph(self, paragraph, language=None):
-        preview = self.request.registry.queryMultiAdapter((paragraph, self.render_request), IParagraphPreview)
-        if preview is not None:
-            preview.language = language
-            preview.update()
-            return preview.render()
+    def render(self):
+        result = ''
+        for renderer in self.renderers:
+            if renderer is not None:
+                result += renderer.render()
+        return result