src/pyams_content/features/renderer/zmi/__init__.py
changeset 545 ae803782cc37
parent 527 5dd1aa8bedd9
child 591 b694d5667d17
equal deleted inserted replaced
544:6928ddfc1c0f 545:ae803782cc37
    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 ''