diff options
Diffstat (limited to 'AC_QuickTime.js')
-rw-r--r-- | AC_QuickTime.js | 263 |
1 files changed, 263 insertions, 0 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)); +} |