src/pyams_default_theme/component/paragraph/html.py
changeset 268 d525a81cc2e9
parent 204 713edde7dbf1
child 295 e13fba68f363
equal deleted inserted replaced
267:cf4776387bfd 268:d525a81cc2e9
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
       
    15 from fanstatic import ConfigurationError
       
    16 
    15 from pyams_content.component.illustration import IIllustration
    17 from pyams_content.component.illustration import IIllustration
    16 from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph, IRawParagraph
    18 from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph, IRawParagraph
    17 from pyams_content.features.renderer.interfaces import IContentRenderer
    19 from pyams_content.features.renderer.interfaces import IContentRenderer
       
    20 from pyams_default_theme import library
    18 from pyams_default_theme.features.renderer import BaseContentRenderer
    21 from pyams_default_theme.features.renderer import BaseContentRenderer
    19 from pyams_skin.layer import IPyAMSLayer
    22 from pyams_skin.layer import IPyAMSLayer
    20 from pyams_template.template import template_config
    23 from pyams_template.template import template_config
    21 from pyams_utils.adapter import adapter_config
    24 from pyams_utils.adapter import adapter_config, get_annotation_adapter
       
    25 from pyams_utils.fanstatic import ExternalResource
       
    26 from pyams_utils.pygments import IPygmentsCodeConfiguration, PygmentsCodeRendererSettings, render_source
    22 
    27 
    23 from pyams_default_theme import _
    28 from pyams_default_theme import _
    24 
    29 
    25 
    30 
    26 #
    31 #
    31 @template_config(template='templates/raw-default.pt', layer=IPyAMSLayer)
    36 @template_config(template='templates/raw-default.pt', layer=IPyAMSLayer)
    32 class RawParagraphDefaultRenderer(BaseContentRenderer):
    37 class RawParagraphDefaultRenderer(BaseContentRenderer):
    33     """Raw paragraph default renderer"""
    38     """Raw paragraph default renderer"""
    34 
    39 
    35     label = _("Default raw HTML renderer")
    40     label = _("Default raw HTML renderer")
       
    41     weight = 1
    36 
    42 
    37     i18n_context_attrs = ('title', 'body',)
    43     i18n_context_attrs = ('title', 'body')
       
    44 
       
    45 
       
    46 #
       
    47 # Raw paragraph source code renderer
       
    48 #
       
    49 
       
    50 RAW_PARAGRAPH_SOURCE_CODE_RENDERER_SETTINGS_KEY = 'pyams_content.raw.renderer:source-code'
       
    51 
       
    52 
       
    53 @adapter_config(context=IRawParagraph, provides=IPygmentsCodeConfiguration)
       
    54 def raw_paragraph_source_code_renderer_settings_factory(context):
       
    55     """Raw paragraph source code renderer settings factory"""
       
    56     return get_annotation_adapter(context, RAW_PARAGRAPH_SOURCE_CODE_RENDERER_SETTINGS_KEY,
       
    57                                   PygmentsCodeRendererSettings)
       
    58 
       
    59 
       
    60 @adapter_config(name='source-code', context=(IRawParagraph, IPyAMSLayer), provides=IContentRenderer)
       
    61 @template_config(template='templates/raw-source-code.pt', layer=IPyAMSLayer)
       
    62 class RawParagraphSourceCodeRenderer(BaseContentRenderer):
       
    63     """Raw paragraph source code renderer"""
       
    64 
       
    65     label = _("Formatted source code renderer")
       
    66     weight = 10
       
    67 
       
    68     settings_interface = IPygmentsCodeConfiguration
       
    69 
       
    70     i18n_context_attrs = ('title', 'body')
       
    71 
       
    72     @property
       
    73     def resources(self):
       
    74         path = 'get-pygments-style.css?style={}'.format(self.settings.style)
       
    75         try:
       
    76             yield ExternalResource(library, path, resource_type='css')
       
    77         except ConfigurationError:
       
    78             yield library.known_resources[path]
       
    79 
       
    80     @property
       
    81     def source(self):
       
    82         code = self.body
       
    83         if code:
       
    84             return render_source(code, self.settings)
       
    85         return ''
    38 
    86 
    39 
    87 
    40 #
    88 #
    41 # HTML paragraph default renderer
    89 # HTML paragraph default renderer
    42 #
    90 #