src/pyams_content/component/video/zmi/paragraph.py
changeset 555 8e8a14452567
parent 550 9658debb49a3
child 570 196121e4a6f4
equal deleted inserted replaced
554:120ce09ade94 555:8e8a14452567
    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     IBaseParagraph, IParagraphRenderer
    20     IBaseParagraph
    21 from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView, IParagraphInnerEditor
    21 from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView, IParagraphInnerEditor
    22 from pyams_content.component.video.interfaces import IExternalVideoProvider, IExternalVideoSettings, \
    22 from pyams_content.component.video.interfaces import IExternalVideoProvider, IExternalVideoSettings, \
    23     IExternalVideoParagraph, IExternalVideoRenderer, EXTERNAL_VIDEO_PARAGRAPH_TYPE
    23     IExternalVideoParagraph, EXTERNAL_VIDEO_PARAGRAPH_TYPE
    24 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    24 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    25 from pyams_form.interfaces.form import IWidgetsSuffixViewletsManager, IInnerForm
    25 from pyams_form.interfaces.form import IWidgetsSuffixViewletsManager, IInnerForm
    26 from pyams_i18n.interfaces import II18n
       
    27 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
    26 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
    28 from pyams_skin.layer import IPyAMSLayer
    27 from pyams_skin.layer import IPyAMSLayer
    29 from pyams_utils.interfaces.data import IObjectData
    28 from pyams_utils.interfaces.data import IObjectData
    30 from z3c.form.interfaces import DISPLAY_MODE, INPUT_MODE, IDataExtractedEvent
    29 from z3c.form.interfaces import DISPLAY_MODE, INPUT_MODE, IDataExtractedEvent
    31 
    30 
    32 # import packages
    31 # import packages
    33 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    32 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    34     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm, get_json_paragraph_refresh_event, \
    33     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm, get_json_paragraph_refresh_event, \
    35     IParagraphEditFormButtons
    34     IParagraphEditFormButtons
    36 from pyams_content.component.video.paragraph import ExternalVideoParagraph
    35 from pyams_content.component.video.paragraph import ExternalVideoParagraph
       
    36 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    37 from pyams_form.group import NamedWidgetsGroup
    37 from pyams_form.group import NamedWidgetsGroup
    38 from pyams_pagelet.pagelet import pagelet_config
    38 from pyams_pagelet.pagelet import pagelet_config
    39 from pyams_template.template import template_config
    39 from pyams_template.template import template_config
    40 from pyams_utils.adapter import adapter_config
    40 from pyams_utils.adapter import adapter_config
    41 from pyams_utils.registry import get_utility, get_current_registry
    41 from pyams_utils.registry import get_utility
    42 from pyams_utils.url import absolute_url
    42 from pyams_utils.url import absolute_url
    43 from pyams_viewlet.viewlet import viewlet_config, Viewlet, BaseContentProvider
    43 from pyams_viewlet.viewlet import viewlet_config, Viewlet
    44 from pyams_zmi.form import AdminDialogAddForm, InnerAdminAddForm, InnerAdminEditForm
    44 from pyams_zmi.form import AdminDialogAddForm, InnerAdminAddForm, InnerAdminEditForm
    45 from pyramid.events import subscriber
    45 from pyramid.events import subscriber
    46 from pyramid.exceptions import NotFound
    46 from pyramid.exceptions import NotFound
    47 from pyramid.response import Response
    47 from pyramid.response import Response
    48 from pyramid.view import view_config
    48 from pyramid.view import view_config
   103                                              legend=_("HTML content"),
   103                                              legend=_("HTML content"),
   104                                              css_class='inner switcher padding-right-10 no-y-padding pull-left',
   104                                              css_class='inner switcher padding-right-10 no-y-padding pull-left',
   105                                              switch=True,
   105                                              switch=True,
   106                                              hide_if_empty=True))
   106                                              hide_if_empty=True))
   107             self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
   107             self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
   108                                              ('description', 'author', 'provider_name'),
   108                                              ('description', 'author', 'renderer', 'provider_name'),
   109                                              bordered=False))
   109                                              bordered=False))
   110         super(ExternalVideoParagraphAddForm, self).updateGroups()
   110         super(ExternalVideoParagraphAddForm, self).updateGroups()
   111 
   111 
   112     def create(self, data):
   112     def create(self, data):
   113         return ExternalVideoParagraph()
   113         return ExternalVideoParagraph()
   213     edit_permission = MANAGE_CONTENT_PERMISSION
   213     edit_permission = MANAGE_CONTENT_PERMISSION
   214 
   214 
   215     @property
   215     @property
   216     def fields(self):
   216     def fields(self):
   217         fields = field.Fields(IExternalVideoParagraph).omit('__parent__', '__name__', 'visible')
   217         fields = field.Fields(IExternalVideoParagraph).omit('__parent__', '__name__', 'visible')
       
   218         fields['renderer'].widgetFactory = RendererFieldWidget
   218         provider = self.context.get_provider()
   219         provider = self.context.get_provider()
   219         if provider is not None:
   220         if provider is not None:
   220             fields += field.Fields(provider.settings_interface)
   221             fields += field.Fields(provider.settings_interface)
   221         return fields
   222         return fields
   222 
   223 
   237                                              legend=_("HTML content"),
   238                                              legend=_("HTML content"),
   238                                              css_class='inner switcher padding-right-10 no-y-padding pull-left',
   239                                              css_class='inner switcher padding-right-10 no-y-padding pull-left',
   239                                              switch=True,
   240                                              switch=True,
   240                                              hide_if_empty=True))
   241                                              hide_if_empty=True))
   241             self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
   242             self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
   242                                              ('description', 'author', 'provider_name'),
   243                                              ('description', 'author', 'renderer', 'provider_name'),
   243                                              bordered=False))
   244                                              bordered=False))
   244         if 'provider_name' in self.widgets:
   245         if 'provider_name' in self.widgets:
   245             provider = self.context.get_provider()
   246             provider = self.context.get_provider()
   246             if provider is not None:
   247             if provider is not None:
   247                 if 'integration_code' in self.widgets:  # custom video provider
   248                 if 'integration_code' in self.widgets:  # custom video provider
   293 
   294 
   294 @view_config(name='inner-properties.json', context=IExternalVideoParagraph, request_type=IPyAMSLayer,
   295 @view_config(name='inner-properties.json', context=IExternalVideoParagraph, request_type=IPyAMSLayer,
   295              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
   296              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
   296 class ExternalVideoParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, ExternalVideoParagraphInnerEditForm):
   297 class ExternalVideoParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, ExternalVideoParagraphInnerEditForm):
   297     """External video paragraph inner edit form, JSON renderer"""
   298     """External video paragraph inner edit form, JSON renderer"""
   298 
       
   299 
       
   300 #
       
   301 # Video paragraph renderer
       
   302 #
       
   303 
       
   304 @adapter_config(context=(IExternalVideoParagraph, IPyAMSLayer), provides=IParagraphRenderer)
       
   305 @template_config(template='templates/video-render.pt', layer=IPyAMSLayer)
       
   306 class ExternalVideoParagraphRenderer(BaseContentProvider):
       
   307     """External video paragraph renderer"""
       
   308 
       
   309     video_renderer = None
       
   310 
       
   311     def __init__(self, context, request):
       
   312         super(ExternalVideoParagraphRenderer, self).__init__(context, request)
       
   313         provider = context.get_provider()
       
   314         if provider is not None:
       
   315             registry = get_current_registry()
       
   316             self.video_renderer = registry.queryMultiAdapter((context.settings, request), IExternalVideoRenderer)
       
   317 
       
   318     def update(self):
       
   319         i18n = II18n(self.context)
       
   320         if self.language:
       
   321             for attr in ('title', 'body', 'description'):
       
   322                 setattr(self, attr, i18n.get_attribute(attr, self.language, request=self.request))
       
   323         else:
       
   324             for attr in ('title', 'body', 'description'):
       
   325                 setattr(self, attr, i18n.query_attribute(attr, request=self.request))
       
   326         renderer = self.video_renderer
       
   327         if renderer is not None:
       
   328             renderer.update()
       
   329 
       
   330     def render_video(self):
       
   331         renderer = self.video_renderer
       
   332         if not renderer:
       
   333             return ''
       
   334         return renderer.render()