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() |
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() |
|