I created a new swfobject html helper class to manage embedded flash
media. I want to share it both for a review and to motivate contribute
great tips and content to this framework. I also have some questions
like: how to create static links right way? Im using my own Script
(and Style) helpers here, take it for a review too, if you like:
SWFOBJECT_JS_URL = '/own/static/swfobject.js'
SWFOBJECT_PLAYER_URL = '/own/static/mediaplayer.swf'
SWFOBJECT_DEFAULT_NO_CONTENT = SPAN(A("Get Flash -player",
_href="http://www.macromedia.com/go/getflashplayer",
_target="_blank"), " to see the Flash content.")
SWFOBJECT_DEFAULT_WIDTH = 785
SWFOBJECT_DEFAULT_HEIGHT = 380
SWFOBJECT_REQUIRED_FLASH_VERSION = 8
SWFOBJECT_DEFAULT_ID = 'flash-player'
SWFOBJECT_DEFAULT_PLAYER_CLASS = 'flash-players'
SWFOBJECT_CONTAINER_CLASS = 'flash-content'
class SWFObject(object):
"""
Flash media player
Note: 1) copy swfobject.js, mediaplayer.swf, crossdomain.xml
and playlist.xml to /static/ directory
2) see parameter and variable setters from:
http://blog.deconcept.com/swfobject/
Example usage:
so = SWFObject(player_id = "my-player")
so.addParams(allowfullscreen = "true", allowscriptaccess =
"always", seamlesstabbing = "true")
so.addVariables(file = '/own/static/playlist.xml', width = 785,
height = 380, displaywidth = 560, backcolor = '0xFFFFFF', frontcolor =
'0x6666FF', bufferlength = 5, overstretch = 'fit', autoscroll =
'true', thumbsinplaylist = 'false', autostart = 'false')
print so
"""
def __init__(self, sqlobject_url = None, no_flash_content = None,
player_id = None, player_url = None, width = None, height = None,
required_flash_version = None):
self.sqlobject_url = sqlobject_url or
SWFOBJECT_JS_URL
self.player_id = player_id or
SWFOBJECT_DEFAULT_ID
self.player_url = player_url or
SWFOBJECT_PLAYER_URL
self.no_flash_content = no_flash_content or
SWFOBJECT_DEFAULT_NO_CONTENT
self.width = width or SWFOBJECT_DEFAULT_WIDTH
self.height = height or
SWFOBJECT_DEFAULT_HEIGHT
self.required_flash_version = required_flash_version or
SWFOBJECT_REQUIRED_FLASH_VERSION
self.params = list()
self.variables = list()
def addParams(self, **kwargs):
for key, value in kwargs.items():
self.params.append((key, value))
def addVariables(self, **kwargs):
for key, value in kwargs.items():
self.variables.append((key, value))
def _getParams(self):
content = ''
for key, value in self.params:
content += "so.addParam('%s', '%s');%s" % (key, value,
NEWLINE)
return content
def _getVariables(self):
content = ''
for key, value in self.variables:
content += "so.addVariable('%s', '%s');%s" % (key, value,
NEWLINE)
return content
def xml(self):
contents = list()
contents.append(Script(_src = self.sqlobject_url))
if self.no_flash_content:
contents.append(DIV(self.no_flash_content, _id =
self.player_id, _class = SWFOBJECT_DEFAULT_PLAYER_CLASS))
script_content = """
var so = new SWFObject('%s', 'mpl', '%s', '%s', '8');
%s%sso.write('%s');
""" % (self.player_url,
self.width,
self.height,
self._getParams(),
self._getVariables(),
self.player_id)
contents.append(Script(script_content))
return DIV(_class = SWFOBJECT_CONTAINER_CLASS, *contents).xml
()
def __str__(self):
return self.xml()
class Script(SCRIPT):
""" ... """
def xml(self):
"""
Handle both external and internal script elements
>>> print Script('function _alert() { alert("hi!"); }',
_language='javascript').xml()
<script language="javascript" type="text/javascript">
/* <![CDATA[ */
function _alert() { alert("hi!"); }
/* ]]> */
</script>
>>> print Script(_language='javascript', _src="/script.js").xml
()
<script language="javascript" src="/script.js" type="text/
javascript"></script>
"""
# if there is content, we presume, that this is an internal
script element
if self.contents:
# http://javascript.about.com/library/blxhtml.htm
content = '%s/* <![CDATA[ */%s%s%s/* ]]> */%s' % (NEWLINE,
NEWLINE, self._getContent(), NEWLINE, NEWLINE)
return '<%s%s>%s</%s>' % (self.tag_name,
self._getAttributes(), content, self.tag_name)
# call parent xml method
return SCRIPT.xml(self)
class Style(STYLE):
""" ... """
def xml(self):
"""
Handle both external and internal style elements
>>> print Style(_href="/style.css", _media="screen").xml()
<link href="/style.css" media="screen" type="text/css" />
>>> print Style('body {background: #333 url("/bg.gif") no-
repeat}').xml()
<style type="text/css">
<!--
body {background: #333 url("/bg.gif") no-repeat}
-->
</style>
"""
# if there is content, we presume, that this is an internal
style element
if self.contents:
# http://javascript.about.com/library/blxhtml.htm
content = '%s<!--%s%s%s-->%s' % (NEWLINE, NEWLINE,
self._getContent(), NEWLINE, NEWLINE)
return '<%s%s>%s</%s>' % (self.tag_name,
self._getAttributes(), content, self.tag_name)
# call parent xml method
return LINK(**self.attributes).xml()
SWFObject example creates html like:
<div class="flash-content"><script src="/own/static/swfobject.js"
type="text/javascript"></script><div class="flash-players" id="my-
player"><span><a href="http://www.macromedia.com/go/getflashplayer"
target="_blank">Get Flash -player</a> to see the Flash content.</
span></div><script type="text/javascript">
/* <![CDATA[ */
var so = new SWFObject('/own/static/mediaplayer.swf', 'mpl', '785',
'380', '8');
so.addParam('allowscriptaccess', 'always');
so.addParam('allowfullscreen', 'true');
so.addParam('seamlesstabbing', 'true');
so.addVariable('overstretch', 'fit');
so.addVariable('bufferlength', '5');
so.addVariable('frontcolor', '0x6666FF');
so.addVariable('height', '380');
so.addVariable('width', '785');
so.addVariable('displaywidth', '560');
so.addVariable('thumbsinplaylist', 'false');
so.addVariable('file', '/own/static/playlist.xml');
so.addVariable('backcolor', '0xFFFFFF');
so.addVariable('autoscroll', 'true');
so.addVariable('autostart', 'false');
so.write('my-player');
/* ]]> */
</script></div>
Please note 1) Style class creates both external and internal style 2)
embedded javascript start and end notes, that are fully explained and
argued here: http://javascript.about.com/library/blxhtml.htm
-Marko
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---