aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AC_QuickTime.js263
-rw-r--r--video.module71
2 files changed, 297 insertions, 37 deletions
diff --git a/AC_QuickTime.js b/AC_QuickTime.js
new file mode 100644
index 0000000..998d42c
--- /dev/null
+++ b/AC_QuickTime.js
@@ -0,0 +1,263 @@
+/*
+
+File: AC_QuickTime.js
+
+Abstract: This file contains functions to generate OBJECT and EMBED tags for QuickTime content.
+
+Version: <1.1>
+
+Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
+Computer, Inc. ("Apple") in consideration of your agreement to the
+following terms, and your use, installation, modification or
+redistribution of this Apple software constitutes acceptance of these
+terms. If you do not agree with these terms, please do not use,
+install, modify or redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and
+subject to these terms, Apple grants you a personal, non-exclusive
+license, under Apple's copyrights in this original Apple software (the
+"Apple Software"), to use, reproduce, modify and redistribute the Apple
+Software, with or without modifications, in source and/or binary forms;
+provided that if you redistribute the Apple Software in its entirety and
+without modifications, you must retain this notice and the following
+text and disclaimers in all such redistributions of the Apple Software.
+Neither the name, trademarks, service marks or logos of Apple Computer,
+Inc. may be used to endorse or promote products derived from the Apple
+Software without specific prior written permission from Apple. Except
+as expressly stated in this notice, no other rights or licenses, express
+or implied, are granted by Apple herein, including but not limited to
+any patent rights that may be infringed by your derivative works or by
+other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis. APPLE
+MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
+THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
+OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
+MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
+AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
+STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Copyright © 2006 Apple Computer, Inc., All Rights Reserved
+
+*/
+
+/*
+ * This file contains functions to generate OBJECT and EMBED tags for QuickTime content.
+ */
+
+/************** LOCALIZABLE GLOBAL VARIABLES ****************/
+
+var gArgCountErr = 'The "%%" function requires an even number of arguments.'
+ + '\nArguments should be in the form "atttributeName", "attributeValue", ...';
+
+/******************** END LOCALIZABLE **********************/
+
+var gTagAttrs = null;
+var gQTGeneratorVersion = 1.0;
+
+function AC_QuickTimeVersion() { return gQTGeneratorVersion; }
+
+function _QTComplain(callingFcnName, errMsg)
+{
+ errMsg = errMsg.replace("%%", callingFcnName);
+ alert(errMsg);
+}
+
+function _QTAddAttribute(prefix, slotName, tagName)
+{
+ var value;
+
+ value = gTagAttrs[prefix + slotName];
+ if ( null == value )
+ value = gTagAttrs[slotName];
+
+ if ( null != value )
+ {
+ if ( 0 == slotName.indexOf(prefix) && (null == tagName) )
+ tagName = slotName.substring(prefix.length);
+ if ( null == tagName )
+ tagName = slotName;
+ return tagName + '="' + value + '" ';
+ }
+ else
+ return "";
+}
+
+function _QTAddObjectAttr(slotName, tagName)
+{
+ // don't bother if it is only for the embed tag
+ if ( 0 == slotName.indexOf("emb#") )
+ return "";
+
+ if ( 0 == slotName.indexOf("obj#") && (null == tagName) )
+ tagName = slotName.substring(4);
+
+ return _QTAddAttribute("obj#", slotName, tagName);
+}
+
+function _QTAddEmbedAttr(slotName, tagName)
+{
+ // don't bother if it is only for the object tag
+ if ( 0 == slotName.indexOf("obj#") )
+ return "";
+
+ if ( 0 == slotName.indexOf("emb#") && (null == tagName) )
+ tagName = slotName.substring(4);
+
+ return _QTAddAttribute("emb#", slotName, tagName);
+}
+
+
+function _QTAddObjectParam(slotName, generateXHTML)
+{
+ var paramValue;
+ var paramStr = "";
+ var endTagChar = (generateXHTML) ? ' />' : '>';
+
+ if ( -1 == slotName.indexOf("emb#") )
+ {
+ // look for the OBJECT-only param first. if there is none, look for a generic one
+ paramValue = gTagAttrs["obj#" + slotName];
+ if ( null == paramValue )
+ paramValue = gTagAttrs[slotName];
+
+ if ( 0 == slotName.indexOf("obj#") )
+ slotName = slotName.substring(4);
+
+ if ( null != paramValue )
+ paramStr = ' <param name="' + slotName + '" value="' + paramValue + '"' + endTagChar + '\n';
+ }
+
+ return paramStr;
+}
+
+function _QTDeleteTagAttrs()
+{
+ for ( var ndx = 0; ndx < arguments.length; ndx++ )
+ {
+ var attrName = arguments[ndx];
+ delete gTagAttrs[attrName];
+ delete gTagAttrs["emb#" + attrName];
+ delete gTagAttrs["obj#" + attrName];
+ }
+}
+
+
+
+// generate an embed and object tag, return as a string
+function _QTGenerate(callingFcnName, generateXHTML, args)
+{
+ // is the number of optional arguments even?
+ if ( args.length < 4 || (0 != (args.length % 2)) )
+ {
+ _QTComplain(callingFcnName, gArgCountErr);
+ return "";
+ }
+
+ // allocate an array, fill in the required attributes with fixed place params and defaults
+ gTagAttrs = new Array();
+ gTagAttrs["src"] = args[0];
+ gTagAttrs["width"] = args[1];
+ gTagAttrs["height"] = args[2];
+ gTagAttrs["classid"] = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";
+ //Impportant note: It is recommended that you use this exact classid in order to ensure a seamless experience for all viewers
+ gTagAttrs["pluginspage"] = "http://www.apple.com/quicktime/download/";
+
+ // set up codebase attribute with specified or default version before parsing args so
+ // anything passed in will override
+ var activexVers = args[3]
+ if ( (null == activexVers) || ("" == activexVers) )
+ activexVers = "6,0,2,0";
+ gTagAttrs["codebase"] = "http://www.apple.com/qtactivex/qtplugin.cab#version=" + activexVers;
+
+ var attrName,
+ attrValue;
+
+ // add all of the optional attributes to the array
+ for ( var ndx = 4; ndx < args.length; ndx += 2)
+ {
+ attrName = args[ndx].toLowerCase();
+ attrValue = args[ndx + 1];
+
+ // "name" and "id" should have the same value, the former goes in the embed and the later goes in
+ // the object. use one array slot
+ if ( "name" == attrName || "id" == attrName )
+ gTagAttrs["name"] = attrValue;
+
+ else
+ gTagAttrs[attrName] = attrValue;
+ }
+
+ // init both tags with the required and "special" attributes
+ var objTag = '<object '
+ + _QTAddObjectAttr("classid")
+ + _QTAddObjectAttr("width")
+ + _QTAddObjectAttr("height")
+ + _QTAddObjectAttr("codebase")
+ + _QTAddObjectAttr("name", "id")
+ + _QTAddObjectAttr("tabindex")
+ + _QTAddObjectAttr("hspace")
+ + _QTAddObjectAttr("vspace")
+ + _QTAddObjectAttr("border")
+ + _QTAddObjectAttr("align")
+ + _QTAddObjectAttr("class")
+ + _QTAddObjectAttr("title")
+ + _QTAddObjectAttr("accesskey")
+ + _QTAddObjectAttr("noexternaldata")
+ + '>\n'
+ + _QTAddObjectParam("src", generateXHTML);
+ var embedTag = ' <embed '
+ + _QTAddEmbedAttr("src")
+ + _QTAddEmbedAttr("width")
+ + _QTAddEmbedAttr("height")
+ + _QTAddEmbedAttr("pluginspage")
+ + _QTAddEmbedAttr("name")
+ + _QTAddEmbedAttr("align")
+ + _QTAddEmbedAttr("tabindex");
+
+ // delete the attributes/params we have already added
+ _QTDeleteTagAttrs("src","width","height","pluginspage","classid","codebase","name","tabindex",
+ "hspace","vspace","border","align","noexternaldata","class","title","accesskey");
+
+ // and finally, add all of the remaining attributes to the embed and object
+ for ( var attrName in gTagAttrs )
+ {
+ attrValue = gTagAttrs[attrName];
+ if ( null != attrValue )
+ {
+ embedTag += _QTAddEmbedAttr(attrName);
+ objTag += _QTAddObjectParam(attrName, generateXHTML);
+ }
+ }
+
+ // end both tags, we're done
+ return objTag + embedTag + '> </em' + 'bed>\n</ob' + 'ject' + '>';
+}
+
+// return the object/embed as a string
+function QT_GenerateOBJECTText()
+{
+ return _QTGenerate("QT_GenerateOBJECTText", false, arguments);
+}
+
+function QT_GenerateOBJECTText_XHTML()
+{
+ return _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments);
+}
+
+function QT_WriteOBJECT()
+{
+ document.writeln(_QTGenerate("QT_WriteOBJECT", false, arguments));
+}
+
+function QT_WriteOBJECT_XHTML()
+{
+ document.writeln(_QTGenerate("QT_WriteOBJECT_XHTML", true, arguments));
+}
diff --git a/video.module b/video.module
index f3e46a8..c49ae98 100644
--- a/video.module
+++ b/video.module
@@ -1169,7 +1169,7 @@ function theme_video_play_flash($node) {
<param name="movie" value="'.$loader_location.'" />
<param name="quality" value="high" />
<param name="FlashVars" value="baseURL='. $url .'&videoFile='. $file .'&autoPlay=true&bufferLength=5" />
- <embed src="'.$loader_location.'" flashvars="baseURL='. $url .'&videoFile='. $file .'&autoPlay=true&bufferLength=5" width="'.$node->videox.'" height="'.$node->videoy.'" name="Player" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
+ <embed src="'.$loader_location.'" flashvars="baseURL='. $url .'&videoFile='. $file .'&autoPlay=true&bufferLength=5" width="'.$node->videox.'" height="'.$node->videoy.'" name="Player" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</object>';
$output = _theme_video_format_play($output, t('http://www.macromedia.com/go/getflashplayer'),
t('Link to Macromedia Flash Player Download Page'),
@@ -1190,7 +1190,7 @@ function theme_video_play_swf($node) {
$output = "<object width=\"$node->videox\" height=\"$node->videoy\">
<param name=\"movie\" value=\"$node->vidfile\" />"
. _video_get_parameters($node->serialized_data) .
- "<embed src=\"$node->vidfile\" width=\"$node->videox\" height=\"$node->videoy\"></embed>
+ "<embed src=\"$node->vidfile\" width=\"$node->videox\" height=\"$node->videoy\" />
</object>";
$output = _theme_video_format_play($output, t('http://www.macromedia.com/go/getflashplayer'), t('Link to Flash player download'), t('Download the latest Flash player'));
return theme('page', $output);
@@ -1199,6 +1199,7 @@ function theme_video_play_swf($node) {
/**
* Play videos from in Quicktime format
*
+ * @see http://developer.apple.com/internet/ieembedprep.html
* @param $node
* object with node information
*
@@ -1206,14 +1207,11 @@ function theme_video_play_swf($node) {
* string of content to display
*/
function theme_video_play_quicktime($node) {
+ drupal_set_html_head('<script src="'. drupal_get_path('module', 'video') .'/AC_QuickTime.js" language="JavaScript" type="text/javascript"></script>');
$height = $node->videoy + 16; //Increase the height to accommodate the player controls on the bottom.
- $output = '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="'.$node->videox.'" height="'.$height.'" scale="tofit" codebase="http://www.apple.com/qtactivex/qtplugin.cab">
- <param name="SRC" value="'.$node->vidfile.'" />
- <param name="AUTOPLAY" value="true" />
- <param name="KIOSKMODE" value="false" />
- <embed src="'.$node->vidfile.'" width="'.$node->videox.'" height="'.$height.'" scale="tofit" autoplay="true" kioskmode="false" pluginspage="http://www.apple.com/quicktime/download/">
- </embed>
- </object>';
+ $output = '<script language="JavaScript" type="text/javascript">';
+ $output .= "QT_WriteOBJECT_XHTML('$node->vidfile','{$node->videox}','$height','','autoplay','true','kioskmode','false');";
+ $output .= '</script>';
$output = _theme_video_format_play($output, t('http://www.apple.com/quicktime/download'),
t('Link to QuickTime Download Page'),
t('Download latest Quicktime Player'));
@@ -1233,22 +1231,22 @@ function theme_video_play_realmedia($node) {
// Real's embeded player includes the controls
// in the height
$node->videoy += 40;
- $output = '<object id="video1" CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" height="'.$node->videoy.'" width="'.$node->videox.'">
- <param name="_ExtentX" value="7276">
- <param name="_ExtentY" value="3307">
- <param name="AUTOSTART" value="1">
- <param name="SHUFFLE" value="0">
- <param name="PREFETCH" value="0">
- <param name="NOLABELS" value="0">
- <param name="SRC" value="'.$node->vidfile.'" ref>
- <param name="CONTROLS" value="All">
- <param name="CONSOLE" value="Clip1">
- <param name="LOOP" value="0">
- <param name="NUMLOOP" value="0">
- <param name="CENTER" value="0">
- <param name="MAINTAINASPECT" value="0">
- <param name="BACKGROUNDCOLOR" value="#000000">
- <embed src="'.$node->vidfile.'" type="audio/x-pn-realaudio-plugin" console="Clip1" controls="All" height="'.$node->videoy.'" width="'.$node->videox.'" autostart="true">
+ $output = '<object id="video1" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" height="'.$node->videoy.'" width="'.$node->videox.'">
+ <param name="_ExtentX" value="7276" />
+ <param name="_ExtentY" value="3307" />
+ <param name="AUTOSTART" value="1" />
+ <param name="SHUFFLE" value="0" />
+ <param name="PREFETCH" value="0" />
+ <param name="NOLABELS" value="0" />
+ <param name="SRC" value="'.$node->vidfile.'" ref />
+ <param name="CONTROLS" value="All" />
+ <param name="CONSOLE" value="Clip1" />
+ <param name="LOOP" value="0" />
+ <param name="NUMLOOP" value="0" />
+ <param name="CENTER" value="0" />
+ <param name="MAINTAINASPECT" value="0" />
+ <param name="BACKGROUNDCOLOR" value="#000000" />
+ <embed src="'.$node->vidfile.'" type="audio/x-pn-realaudio-plugin" console="Clip1" controls="All" height="'.$node->videoy.'" width="'.$node->videox.'" autostart="true"></embed>
</object>';
$output = _theme_video_format_play($output, t('http://www.real.com/'),
t('Link to Real'),
@@ -1269,24 +1267,23 @@ function theme_video_play_windowsmedia($node) {
// Windows Media's embeded player includes the controls in the height
$node->videoy += 68;
$vidfile = _video_get_fileurl($node->vidfile) . basename($node->vidfile);
- $output = '<OBJECT id="video1" width="'.$node->videox.'" height="'.$node->videoy.'"
+ $output = '<object id="video1" width="'.$node->videox.'" height="'.$node->videoy.'"
classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"
codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"
standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject">
- <param name="fileName" value="'.$vidfile.'">
- <param name="animationatStart" value="true">
- <param name="transparentatStart" value="true">
- <param name="autoStart" value="true">
- <param name="showControls" value="true">
- <param name="loop" value="true">
- <EMBED type="application/x-mplayer2"
+ <param name="fileName" value="'.$vidfile.'" />
+ <param name="animationatStart" value="true" />
+ <param name="transparentatStart" value="true" />
+ <param name="autoStart" value="true" />
+ <param name="showControls" value="true" />
+ <param name="loop" value="true" />
+ <embed type="application/x-mplayer2"
pluginspage="http://microsoft.com/windows/mediaplayer/en/download/"
id="mediaPlayer" name="mediaPlayer" displaysize="4" autosize="-1"
showcontrols="true" showtracker="-1"
showdisplay="0" showstatusbar="-1" videoborder3d="-1" width="'.$node->videox.'" height="'.$node->videoy.'"
- src="'.$vidfile.'" autostart="true" loop="true">
- </EMBED>
- </OBJECT>';
+ src="'.$vidfile.'" autostart="true" loop="true"></embed>
+ </object>';
$output = _theme_video_format_play($output, t('http://windowsupdate.microsoft.com/'),
t('Link to Windows Update'),
@@ -1309,7 +1306,7 @@ function theme_video_play_youtube($node) {
$width = ($node->videox ? $node->videox : '425');
$height = ($node->videoy ? $node->videoy : '350');
$output = '<object width="'.$width.'" height="'.$height.'">
- <param name="movie" value="http://www.youtube.com/v/' . $node->vidfile . '"></param>
+ <param name="movie" value="http://www.youtube.com/v/' . $node->vidfile . '" />
<embed src="http://www.youtube.com/v/' . $node->vidfile . '" type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'"></embed>
</object>';
$output = _theme_video_format_play($output, t('http://www.youtube.com/help.php'), t('Link to youtube.com'), t('youtube.com'));