You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
362 lines
10 KiB
362 lines
10 KiB
/* |
|
|
|
File: AC_QuickTime.js |
|
|
|
Abstract: This file contains functions to generate OBJECT and EMBED tags for QuickTime content. |
|
|
|
Version: <1.2> |
|
|
|
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-2007 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.2; |
|
var gQTBehaviorID = "qt_event_source"; |
|
var gQTEventsEnabled = false; |
|
|
|
function AC_QuickTimeVersion() { return gQTGeneratorVersion; } |
|
|
|
function _QTComplain(callingFcnName, errMsg) |
|
{ |
|
errMsg = errMsg.replace("%%", callingFcnName); |
|
alert(errMsg); |
|
} |
|
|
|
function _QTIsMSIE() |
|
{ |
|
var ua = navigator.userAgent.toLowerCase(); |
|
var msie = /msie/.test(ua) && !/opera/.test(ua); |
|
|
|
return msie; |
|
} |
|
|
|
|
|
function _QTGenerateBehavior() |
|
{ |
|
return objTag = '<!--[if IE]>' |
|
+ '<object id="' + gQTBehaviorID + '" classid="clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598"></object>' |
|
+ '<![endif]-->'; |
|
} |
|
|
|
function _QTPageHasBehaviorObject(callingFcnName, args) |
|
{ |
|
var haveBehavior = false; |
|
var objects = document.getElementsByTagName('object'); |
|
|
|
for ( var ndx = 0, obj; obj = objects[ndx]; ndx++ ) |
|
{ |
|
if ( obj.getAttribute('classid') == "clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598" ) |
|
{ |
|
if ( obj.getAttribute('id') == gQTBehaviorID ) |
|
haveBehavior = false; |
|
break; |
|
} |
|
} |
|
|
|
return haveBehavior; |
|
} |
|
|
|
|
|
function _QTShouldInsertBehavior() |
|
{ |
|
var shouldDo = false; |
|
|
|
if ( gQTEventsEnabled && _QTIsMSIE() && !_QTPageHasBehaviorObject() ) |
|
shouldDo = true; |
|
|
|
return shouldDo; |
|
} |
|
|
|
|
|
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; |
|
} |
|
|
|
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 Object(); |
|
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 = "7,3,0,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]; |
|
|
|
gTagAttrs[attrName] = attrValue; |
|
|
|
if ( ("postdomevents" == attrName) && (attrValue.toLowerCase() != "false") ) |
|
{ |
|
gQTEventsEnabled = true; |
|
if ( _QTIsMSIE() ) |
|
gTagAttrs["obj#style"] = "behavior:url(#" + gQTBehaviorID + ")"; |
|
} |
|
} |
|
|
|
// init both tags with the required and "special" attributes |
|
var objTag = '<object ' |
|
+ _QTAddObjectAttr("classid") |
|
+ _QTAddObjectAttr("width") |
|
+ _QTAddObjectAttr("height") |
|
+ _QTAddObjectAttr("codebase") |
|
+ _QTAddObjectAttr("name") |
|
+ _QTAddObjectAttr("id") |
|
+ _QTAddObjectAttr("tabindex") |
|
+ _QTAddObjectAttr("hspace") |
|
+ _QTAddObjectAttr("vspace") |
|
+ _QTAddObjectAttr("border") |
|
+ _QTAddObjectAttr("align") |
|
+ _QTAddObjectAttr("class") |
|
+ _QTAddObjectAttr("title") |
|
+ _QTAddObjectAttr("accesskey") |
|
+ _QTAddObjectAttr("noexternaldata") |
|
+ _QTAddObjectAttr("obj#style") |
|
+ '>' |
|
+ _QTAddObjectParam("src", generateXHTML); |
|
var embedTag = '<embed ' |
|
+ _QTAddEmbedAttr("src") |
|
+ _QTAddEmbedAttr("width") |
|
+ _QTAddEmbedAttr("height") |
|
+ _QTAddEmbedAttr("pluginspage") |
|
+ _QTAddEmbedAttr("name") |
|
+ _QTAddEmbedAttr("id") |
|
+ _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","id","style"); |
|
|
|
// 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></ob' + 'ject' + '>'; |
|
} |
|
|
|
|
|
// return the object/embed as a string |
|
function QT_GenerateOBJECTText() |
|
{ |
|
var txt = _QTGenerate("QT_GenerateOBJECTText", false, arguments); |
|
if ( _QTShouldInsertBehavior() ) |
|
txt = _QTGenerateBehavior() + txt; |
|
return txt; |
|
} |
|
|
|
function QT_GenerateOBJECTText_XHTML() |
|
{ |
|
var txt = _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments); |
|
if ( _QTShouldInsertBehavior() ) |
|
txt = _QTGenerateBehavior() + txt; |
|
return txt; |
|
} |
|
|
|
function QT_WriteOBJECT() |
|
{ |
|
var txt = _QTGenerate("QT_WriteOBJECT", false, arguments); |
|
if ( _QTShouldInsertBehavior() ) |
|
document.writeln(_QTGenerateBehavior()); |
|
document.writeln(txt); |
|
} |
|
|
|
function QT_WriteOBJECT_XHTML() |
|
{ |
|
var txt = _QTGenerate("QT_WriteOBJECT_XHTML", true, arguments); |
|
if ( _QTShouldInsertBehavior() ) |
|
document.writeln(_QTGenerateBehavior()); |
|
document.writeln(txt); |
|
} |
|
|
|
function QT_GenerateBehaviorOBJECT() |
|
{ |
|
return _QTGenerateBehavior(); |
|
} |
|
|
|
function QT_ReplaceElementContents() |
|
{ |
|
var element = arguments[0]; |
|
var args = []; |
|
|
|
// copy all other arguments we want to pass through to the fcn |
|
for ( var ndx = 1; ndx < arguments.length; ndx++ ) |
|
args.push(arguments[ndx]); |
|
|
|
var txt = _QTGenerate("QT_ReplaceElementContents", false, args); |
|
if ( txt.length > 0 ) |
|
element.innerHTML = txt; |
|
} |
|
|
|
|
|
function QT_ReplaceElementContents_XHTML() |
|
{ |
|
var element = arguments[0]; |
|
var args = []; |
|
|
|
// copy all other arguments we want to pass through to the fcn |
|
for ( var ndx = 1; ndx < arguments.length; ndx++ ) |
|
args.push(arguments[ndx]); |
|
|
|
var txt = _QTGenerate("QT_ReplaceElementContents_XHTML", true, args); |
|
if ( txt.length > 0 ) |
|
element.innerHTML = txt; |
|
} |
|
|
|
|