7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 from pyams_form.interfaces.form import IWidgetsPrefixViewletsManager |
|
13 from pyams_skin.help import ContentHelp |
|
14 from pyams_skin.interfaces import IContentHelp |
|
15 from pyams_template.template import template_config |
|
16 from pyams_utils.adapter import adapter_config |
|
17 from pyams_zmi.layer import IAdminLayer |
|
18 |
12 |
19 __docformat__ = 'restructuredtext' |
13 __docformat__ = 'restructuredtext' |
20 |
14 |
21 |
15 |
22 # import standard library |
16 # import standard library |
23 from decimal import Decimal |
17 from decimal import Decimal |
24 |
18 |
25 # import interfaces |
19 # import interfaces |
26 from pyams_file.interfaces import IVideo, IThumbnail |
20 from pyams_file.interfaces import IVideo, IThumbnail |
|
21 from pyams_form.interfaces.form import IWidgetsPrefixViewletsManager, IFormHelp |
27 from pyams_skin.interfaces.viewlet import IContextActions |
22 from pyams_skin.interfaces.viewlet import IContextActions |
|
23 from pyams_utils.interfaces import MANAGE_PERMISSION |
|
24 from pyams_zmi.layer import IAdminLayer |
28 from z3c.form.interfaces import HIDDEN_MODE |
25 from z3c.form.interfaces import HIDDEN_MODE |
29 |
26 |
30 # import packages |
27 # import packages |
31 from pyams_form.form import AJAXAddForm |
28 from pyams_form.form import AJAXAddForm |
|
29 from pyams_form.help import FormHelp |
32 from pyams_form.schema import CloseButton |
30 from pyams_form.schema import CloseButton |
33 from pyams_pagelet.pagelet import pagelet_config |
31 from pyams_pagelet.pagelet import pagelet_config |
34 from pyams_skin.layer import IPyAMSLayer |
32 from pyams_skin.layer import IPyAMSLayer |
35 from pyams_skin.viewlet.toolbar import ToolbarMenuDivider, ToolbarMenuItem |
33 from pyams_skin.viewlet.toolbar import ToolbarMenuDivider, ToolbarMenuItem |
|
34 from pyams_template.template import template_config |
|
35 from pyams_utils.adapter import adapter_config |
36 from pyams_utils.schema import DottedDecimalField |
36 from pyams_utils.schema import DottedDecimalField |
37 from pyams_viewlet.viewlet import viewlet_config, Viewlet |
37 from pyams_viewlet.viewlet import viewlet_config, Viewlet |
38 from pyams_zmi.form import AdminDialogAddForm |
38 from pyams_zmi.form import AdminDialogAddForm |
39 from pyramid.view import view_config |
39 from pyramid.view import view_config |
40 from z3c.form import field, button |
40 from z3c.form import field, button |
42 |
42 |
43 from pyams_media import _ |
43 from pyams_media import _ |
44 |
44 |
45 |
45 |
46 @viewlet_config(name='video.thumbnail.divider', context=IVideo, layer=IPyAMSLayer, view=Interface, |
46 @viewlet_config(name='video.thumbnail.divider', context=IVideo, layer=IPyAMSLayer, view=Interface, |
47 manager=IContextActions, permission='manage', weight=19) |
47 manager=IContextActions, permission=MANAGE_PERMISSION, weight=19) |
48 class VideoDividerAction(ToolbarMenuDivider): |
48 class VideoDividerAction(ToolbarMenuDivider): |
49 """Video divider action""" |
49 """Video divider action""" |
50 |
50 |
51 |
51 |
52 # |
52 # |
53 # Video thumbnail |
53 # Video thumbnail |
54 # |
54 # |
55 |
55 |
56 @viewlet_config(name='video.thumbnail.action', context=IVideo, layer=IPyAMSLayer, view=Interface, |
56 @viewlet_config(name='video.thumbnail.action', context=IVideo, layer=IPyAMSLayer, view=Interface, |
57 manager=IContextActions, permission='manage', weight=20) |
57 manager=IContextActions, permission=MANAGE_PERMISSION, weight=20) |
58 class VideoThumbnailAction(ToolbarMenuItem): |
58 class VideoThumbnailAction(ToolbarMenuItem): |
59 """Video thumbnail selection action""" |
59 """Video thumbnail selection action""" |
60 |
60 |
61 label = _("Select thumbnail...") |
61 label = _("Select thumbnail...") |
62 label_css_class = 'fa fa-fw fa-film' |
62 label_css_class = 'fa fa-fw fa-film' |
78 time = DottedDecimalField(title=_("Thumbnail timestamp"), |
78 time = DottedDecimalField(title=_("Thumbnail timestamp"), |
79 required=True, |
79 required=True, |
80 default=Decimal(5)) |
80 default=Decimal(5)) |
81 |
81 |
82 |
82 |
83 @pagelet_config(name='video-thumbnail.html', context=IVideo, layer=IPyAMSLayer, permission='manage') |
83 @pagelet_config(name='video-thumbnail.html', context=IVideo, layer=IPyAMSLayer, permission=MANAGE_PERMISSION) |
84 class VideoThumbnailEditForm(AdminDialogAddForm): |
84 class VideoThumbnailEditForm(AdminDialogAddForm): |
85 """Video thumbnail selection form""" |
85 """Video thumbnail selection form""" |
86 |
86 |
87 legend = _("Select video thumbnail") |
87 legend = _("Select video thumbnail") |
88 icon_css_class = 'fa fa-fw fa-film' |
88 icon_css_class = 'fa fa-fw fa-film' |
114 thumbnailer.clear_thumbnails() |
114 thumbnailer.clear_thumbnails() |
115 return thumbnailer.get_thumbnail('{0[0]}x{0[1]}'.format(size), 'png', time) |
115 return thumbnailer.get_thumbnail('{0[0]}x{0[1]}'.format(size), 'png', time) |
116 |
116 |
117 |
117 |
118 @view_config(name='video-thumbnail.json', context=IVideo, request_type=IPyAMSLayer, |
118 @view_config(name='video-thumbnail.json', context=IVideo, request_type=IPyAMSLayer, |
119 permission='manage', renderer='json', xhr=True) |
119 permission=MANAGE_PERMISSION, renderer='json', xhr=True) |
120 class VideoThumbnailAJAXEditForm(AJAXAddForm, VideoThumbnailEditForm): |
120 class VideoThumbnailAJAXEditForm(AJAXAddForm, VideoThumbnailEditForm): |
121 """Video thumbnail selection form, JSON renderer""" |
121 """Video thumbnail selection form, JSON renderer""" |
122 |
122 |
123 def get_ajax_output(self, changes): |
123 def get_ajax_output(self, changes): |
124 translate = self.request.localizer.translate |
124 translate = self.request.localizer.translate |
135 @template_config(template='templates/video-thumbnail.pt') |
135 @template_config(template='templates/video-thumbnail.pt') |
136 class VideoThumbnailViewletsPrefix(Viewlet): |
136 class VideoThumbnailViewletsPrefix(Viewlet): |
137 """Video thumbnail edit form viewlets prefix""" |
137 """Video thumbnail edit form viewlets prefix""" |
138 |
138 |
139 |
139 |
140 @adapter_config(context=(IVideo, IAdminLayer, VideoThumbnailEditForm), provides=IContentHelp) |
140 @adapter_config(context=(IVideo, IAdminLayer, VideoThumbnailEditForm), provides=IFormHelp) |
141 class VideoThumbnailEditFormHelpAdapter(ContentHelp): |
141 class VideoThumbnailEditFormHelpAdapter(FormHelp): |
142 """Video thumbnail selection form help adapter""" |
142 """Video thumbnail selection form help adapter""" |
143 |
143 |
144 message = _("""You can play the video until you display the image you want. |
144 message = _("""You can play the video until you display the image you want. |
145 |
145 |
146 By pausing the video and clicking on ''Select thumbnail'' button, the selected frame will be used as |
146 By pausing the video and clicking on ''Select thumbnail'' button, the selected frame will be used as |