src/pyams_content/component/paragraph/zmi/preview.py
changeset 487 093f201e3168
parent 431 a162e9f348f7
child 550 9658debb49a3
equal deleted inserted replaced
486:cb67e71dafff 487:093f201e3168
    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