Commit c9c78dbe authored by Rafael Monnerat's avatar Rafael Monnerat

Small improvements, still experimental and requires erp5_dms_media for now.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@43330 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 7ba08b4b
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
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment