diff --git a/product/ERP5Form/AudioField.py b/product/ERP5Form/AudioField.py index 353dbfee960984fc8e05e56a926bfba3db327557..3c828d08e54d02ccc1d1eb8f84e47afab66b3854 100644 --- a/product/ERP5Form/AudioField.py +++ b/product/ERP5Form/AudioField.py @@ -1,75 +1,78 @@ from Products.Formulator.Field import ZMIField -from Products.Formulator import Widget, Validator +from Products.Formulator import Widget from Products.Formulator.DummyField import fields from Products.Formulator import Validator +from Products.ERP5Form.ListBox import lazyMethod class AudioWidget(Widget.TextWidget): - """ - A widget that displays a Audio HTML element. - This widget is intended to be used in - conjunction with WebSite. - """ - property_names = Widget.TextWidget.property_names + \ - ['audio_controls', 'audio_error_message', 'audio_loop', \ - 'audio_preload', 'audio_autoplay', 'js_enabled', 'audio_player'] - - audio_controls = fields.StringField('audio_controls', - title='Audio Controls', - description=("Controls to be used in Audio Player."), - default='controls', - required=0) - - audio_error_message = fields.StringField('audio_error_message', - title='Audio Error Message', - description=("Error message to be showed when \ - user's browser does not support the audio tag."), - default='Your browser does not support audio tag.', - required=0) - - audio_loop = fields.StringField('audio_loop', - title='Audio Loop', - description=("Specifies that the audio file \ - will start over again, every time it is finished."), - default='none', - required=0) - - audio_preload = fields.StringField('audio_preload', - title='Audio Preload', - description=("Configure that you would like to \ - start downloading the audio file as soon as possible."), - default='preload', - required=0) - - audio_autoplay = fields.StringField('audio_autoplay', - title='Audio Autoplay', - description=("Configure that you would like to \ - start downloading and playing the audio file as soon as possible."), - default='', - required=0) - - js_enabled = fields.CheckBoxField('js_enabled', - title='Enable on the fly video player change (based on java script)', - description='Define if javascript is enabled or not on the current Video', - default=1, - required=1) - - audio_player = fields.ListField('audio_player', - title='Audio Player', - description=( - "The video player to be used to show video."), - default="html5_audio", - required=1, - size=1, - items=[('HTML5 Audio', 'html5_audio'), - ('Flowplayer', 'flowplayer'),]) - - def render(self, field, key, value, REQUEST, render_prefix=None): - return self.render_view(field, value, REQUEST, render_prefix) - - def render_view(self, field, value, REQUEST=None, render_prefix=None): - if value is None: - return '' - return Widget.render_element("audio", + """ + A widget that displays a Audio HTML element. + This widget is intended to be used in + conjunction with WebSite. + """ + property_names = Widget.TextWidget.property_names + \ + ['audio_controls', 'audio_error_message', 'audio_loop', \ + 'audio_preload', 'audio_autoplay', 'js_enabled', 'audio_player'] + + audio_controls = fields.StringField('audio_controls', + title='Audio Controls', + description=("Controls to be used in Audio Player."), + default='controls', + required=0) + + audio_error_message = fields.StringField('audio_error_message', + title='Audio Error Message', + description=("Error message to be showed when \ + user's browser does not support the audio tag."), + default='Your browser does not support audio tag.', + required=0) + + audio_loop = fields.StringField('audio_loop', + title='Audio Loop', + description=("Specifies that the audio file \ + will start over again, every time it is finished."), + default='none', + required=0) + + audio_preload = fields.StringField('audio_preload', + title='Audio Preload', + description=("Configure that you would like to \ + start downloading the audio file as soon as possible."), + default='preload', + required=0) + + audio_autoplay = fields.StringField('audio_autoplay', + title='Audio Autoplay', + description=("Configure that you would like to \ + start downloading and playing the audio file as soon as possible."), + default='', + required=0) + + js_enabled = fields.CheckBoxField('js_enabled', + title='Enable on the fly video player change (based on java script)', + description='Define if javascript is enabled or not on the current Video', + default=1, + required=1) + + audio_player = fields.ListField('audio_player', + title='Audio Player', + description=( + "The video player to be used to show video."), + default="html5_audio", + required=1, + size=1, + items=[('HTML5 Audio', 'html5_audio'), + ('Flowplayer', 'flowplayer'),]) + + def render(self, field, key, value, REQUEST, render_prefix=None): + return self.render_view(field, value, REQUEST, render_prefix) + + def render_view(self, field, value, REQUEST=None, render_prefix=None): + if value is None: + return '' + audio_player = field.get_value('audio_player') + if audio_player == 'html5_audio': + return Widget.render_element("audio", src=value, extra=field.get_value('extra'), controls=field.get_value('audio_controls'), @@ -77,39 +80,60 @@ class AudioWidget(Widget.TextWidget): preload=field.get_value('audio_preload'), autoplay=field.get_value('audio_autoplay'), contents=field.get_value('audio_error_message')) + elif audio_player == 'flowplayer': + a_element = Widget.render_element("a", + href="%s" % value, + style="display:block;width:%spx;height:%spx;" % \ + (field.get_value('video_width'), + field.get_value('video_height'),), + id="player") + + script_element = """<script language="JavaScript"> + flowplayer("player", "%s/flowplayer.swf"); + </script>""" % self.getContext(field, REQUEST).getPortalObject().portal_url() + return ' '.join(a_element,script_element) - def get_javascript_list(self, field, REQUEST=None): - """ - Returns list of javascript needed by the widget - """ - if field.get_value('js_enabled'): - audio_player = field.get_value('audio_player') - context = getContext(field, REQUEST) - if audio_player == 'html5_audio': - # XXX Instead of harcoding library name - # it should be better to call a python script, as - # it is done on type base method. - return ['%s/html5media.min.js' % context.portal_url()] - elif audio_player == 'flowplayer': - return ['%s/flowplayer.min.js' % context.portal_url()] - else: - return [] - -def getContext(field, REQUEST): - """Return the context of rendering this VideoField. + + def get_javascript_list(self, field, REQUEST=None): + """ + Returns list of javascript needed by the widget + """ + if field.get_value('js_enabled'): + audio_player = field.get_value('audio_player') + context = self.getContext(field, REQUEST) + if audio_player == 'html5_audio': + # XXX Instead of harcoding library name + # it should be better to call a python script, as + # it is done on type base method. + return ['%s/html5media.min.js' % context.portal_url()] + elif audio_player == 'flowplayer': + return ['%s/flowplayer.min.js' % context.portal_url()] + else: + return [] + + def getContext(self): + """Return the context of rendering this Field.. """ - value = REQUEST.get('here') + value = self.request.get('here') if value is None: - value = getForm(field).aq_parent + value = self.getForm().aq_parent return value -AudioWidgetInstance = AudioWidget() + getContext = lazyMethod(getContext) -class AudioField(ZMIField): - """ Audio field + def getForm(self): + """Return the form which contains the Field. """ - meta_type = "AudioField" + return self.field.aq_parent + + getForm = lazyMethod(getForm) - widget = AudioWidgetInstance - validator = Validator.SuppressValidatorInstance +AudioWidgetInstance = AudioWidget() + +class AudioField(ZMIField): + """ Audio field + """ + meta_type = "AudioField" + widget = AudioWidgetInstance + validator = Validator.SuppressValidatorInstance diff --git a/product/ERP5Form/VideoField.py b/product/ERP5Form/VideoField.py index 240a76f58f1d89a05660fd06cc0c805a597b3dc2..acab135879fc2dcafd9e6886386b0c8f05eb6ace 100644 --- a/product/ERP5Form/VideoField.py +++ b/product/ERP5Form/VideoField.py @@ -1,126 +1,149 @@ from Products.Formulator.Field import ZMIField -from Products.Formulator import Widget, Validator +from Products.Formulator import Widget from Products.Formulator.DummyField import fields from Products.Formulator import Validator +from Products.ERP5Form.ListBox import lazyMethod class VideoWidget(Widget.TextWidget): + """ + A widget that displays a Video HTML element. + This widget is intended to be used in + conjunction with WebSite. + """ + property_names = Widget.TextWidget.property_names + \ + ['video_controls', 'video_error_message', 'video_loop', \ + 'video_width', 'video_height', 'video_preload', \ + 'video_autoplay', 'js_enabled', 'video_player'] + + video_controls = fields.StringField('video_controls', + title='Video Controls', + description=("Controls to be used in Video Player."), + default='controls', + required=0) + + video_error_message = fields.StringField('video_error_message', + title='Video Error Message', + description=("Error message to be showed when \ + user's browser does not support the video tag."), + default='Your browser does not support video tag.', + required=0) + + video_loop = fields.StringField('video_loop', + title='Video Loop', + description=("Specifies that the video file \ + will start over again, every time it is finished."), + default='none', + required=0) + + video_width = fields.IntegerField('video_width', + title='Video Width', + description=( + "The width to be used when playing the video."), + default=160, + required=0) + + video_height = fields.IntegerField('video_height', + title='Video Height', + description=( + "The height to be used when playing the video."), + default=85, + required=0) + + video_preload = fields.StringField('video_preload', + title='Video Preload', + description=("Configure that you would like to \ + start downloading the video file as soon as possible."), + default='preload', + required=0) + + video_autoplay = fields.StringField('video_autoplay', + title='Video Autoplay', + description=("Configure that you would like to \ + start downloading and playing the video file as soon as possible."), + default='', + required=0) + + js_enabled = fields.CheckBoxField('js_enabled', + title='Enable on the fly video player change (based on java script)', + description='Define if javascript is enabled or not on the current Video', + default=1, + required=1) + + video_player = fields.ListField('video_player', + title='Video Player', + description=( + "The video player to be used to show video."), + default="html5_video", + required=1, + size=1, + items=[('HTML5 Video', 'html5_video'), + ('Flowplayer', 'flowplayer'),]) + + def render(self, field, key, value, REQUEST, render_prefix=None): + return self.render_view(field, value, REQUEST, render_prefix) + + def render_view(self, field, value, REQUEST=None, render_prefix=None): + if value is None: + return '' + video_player = field.get_value('video_player') + if video_player == 'html5_video': + return Widget.render_element("video", + src=value, + extra=field.get_value('extra'), + controls=field.get_value('video_controls'), + loop=field.get_value('video_loop'), + width=field.get_value('video_width'), + height=field.get_value('video_height'), + preload=field.get_value('video_preload'), + autoplay=field.get_value('video_autoplay'), + contents=field.get_value('video_error_message')) + elif video_player == 'flowplayer': + a_element = Widget.render_element("a", + href="%s" % value, + style="display:block;width:%spx;height:%spx;" % \ + (field.get_value('video_width'), + field.get_value('video_height'),), + id="player") + + script_element = """<script language="JavaScript"> + flowplayer("player", "%s/flowplayer.swf"); + </script>""" % self.getContext(field, REQUEST).getPortalObject().portal_url() + return ' '.join(a_element,script_element) + + def get_javascript_list(self, field, REQUEST=None): """ - A widget that displays a Video HTML element. - This widget is intended to be used in - conjunction with WebSite. + Returns list of javascript needed by the widget """ - property_names = Widget.TextWidget.property_names + \ - ['video_controls', 'video_error_message', 'video_loop', \ - 'video_width', 'video_height', 'video_preload', \ - 'video_autoplay', 'js_enabled', 'video_player'] - - video_controls = fields.StringField('video_controls', - title='Video Controls', - description=("Controls to be used in Video Player."), - default='controls', - required=0) - - video_error_message = fields.StringField('video_error_message', - title='Video Error Message', - description=("Error message to be showed when \ - user's browser does not support the video tag."), - default='Your browser does not support video tag.', - required=0) - - video_loop = fields.StringField('video_loop', - title='Video Loop', - description=("Specifies that the video file \ - will start over again, every time it is finished."), - default='none', - required=0) - - video_width = fields.IntegerField('video_width', - title='Video Width', - description=( - "The width to be used when playing the video."), - default=160, - required=0) - - video_height = fields.IntegerField('video_height', - title='Video Height', - description=( - "The height to be used when playing the video."), - default=85, - required=0) - - video_preload = fields.StringField('video_preload', - title='Video Preload', - description=("Configure that you would like to \ - start downloading the video file as soon as possible."), - default='preload', - required=0) - - video_autoplay = fields.StringField('video_autoplay', - title='Video Autoplay', - description=("Configure that you would like to \ - start downloading and playing the video file as soon as possible."), - default='', - required=0) - - js_enabled = fields.CheckBoxField('js_enabled', - title='Enable on the fly video player change (based on java script)', - description='Define if javascript is enabled or not on the current Video', - default=1, - required=1) - - video_player = fields.ListField('video_player', - title='Video Player', - description=( - "The video player to be used to show video."), - default="html5_video", - required=1, - size=1, - items=[('HTML5 Video', 'html5_video'), - ('Flowplayer', 'flowplayer'),]) - - def render(self, field, key, value, REQUEST, render_prefix=None): - return self.render_view(field, value, REQUEST, render_prefix) - - def render_view(self, field, value, REQUEST=None, render_prefix=None): - if value is None: - return '' - return Widget.render_element("video", - src=value, - extra=field.get_value('extra'), - controls=field.get_value('video_controls'), - loop=field.get_value('video_loop'), - width=field.get_value('video_width'), - height=field.get_value('video_height'), - preload=field.get_value('video_preload'), - autoplay=field.get_value('video_autoplay'), - contents=field.get_value('video_error_message')) - - def get_javascript_list(self, field, REQUEST=None): - """ - Returns list of javascript needed by the widget - """ - if field.get_value('js_enabled'): - video_player = field.get_value('video_player') - context = getContext(field, REQUEST) - if video_player == 'html5_video': - # XXX Instead of harcoding library name - # it should be better to call a python script, as - # it is done on type base method. - return [] -# return ['%s/html5media.min.js' % context.portal_url()] - elif video_player == 'flowplayer': - return ['%s/flowplayer.min.js' % context.portal_url()] - else: - return [] - -def getContext(field, REQUEST): - """Return the context of rendering this VideoField. + if field.get_value('js_enabled'): + video_player = field.get_value('video_player') + context = self.getContext(field, REQUEST) + if video_player == 'html5_video': + # XXX Instead of harcoding library name + # it should be better to call a python script, as + # it is done on type base method. + return ['%s/html5media.min.js' % context.portal_url()] + elif video_player == 'flowplayer': + return ['%s/flowplayer.min.js' % context.portal_url()] + else: + return [] + + def getContext(self): + """Return the context of rendering this Field.. """ - value = REQUEST.get('here') + value = self.request.get('here') if value is None: - value = getForm(field).aq_parent + value = self.getForm().aq_parent return value + getContext = lazyMethod(getContext) + + def getForm(self): + """Return the form which contains the Field. + """ + return self.field.aq_parent + + getForm = lazyMethod(getForm) + VideoWidgetInstance = VideoWidget() class VideoField(ZMIField):