1/* 2 3File: AC_QuickTime.js 4 5Abstract: This file contains functions to generate OBJECT and EMBED tags for QuickTime content. 6 7Version: <1.2> 8 9Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple 10Computer, Inc. ("Apple") in consideration of your agreement to the 11following terms, and your use, installation, modification or 12redistribution of this Apple software constitutes acceptance of these 13terms. If you do not agree with these terms, please do not use, 14install, modify or redistribute this Apple software. 15 16In consideration of your agreement to abide by the following terms, and 17subject to these terms, Apple grants you a personal, non-exclusive 18license, under Apple's copyrights in this original Apple software (the 19"Apple Software"), to use, reproduce, modify and redistribute the Apple 20Software, with or without modifications, in source and/or binary forms; 21provided that if you redistribute the Apple Software in its entirety and 22without modifications, you must retain this notice and the following 23text and disclaimers in all such redistributions of the Apple Software. 24Neither the name, trademarks, service marks or logos of Apple Computer, 25Inc. may be used to endorse or promote products derived from the Apple 26Software without specific prior written permission from Apple. Except 27as expressly stated in this notice, no other rights or licenses, express 28or implied, are granted by Apple herein, including but not limited to 29any patent rights that may be infringed by your derivative works or by 30other works in which the Apple Software may be incorporated. 31 32The Apple Software is provided by Apple on an "AS IS" basis. APPLE 33MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION 34THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS 35FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND 36OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. 37 38IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL 39OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 40SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 41INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, 42MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED 43AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), 44STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE 45POSSIBILITY OF SUCH DAMAGE. 46 47Copyright © 2006-2007 Apple Computer, Inc., All Rights Reserved 48 49*/ 50 51/* 52 * This file contains functions to generate OBJECT and EMBED tags for QuickTime content. 53 */ 54 55/************** LOCALIZABLE GLOBAL VARIABLES ****************/ 56 57var gArgCountErr = 'The "%%" function requires an even number of arguments.' 58 + '\nArguments should be in the form "atttributeName", "attributeValue", ...'; 59 60/******************** END LOCALIZABLE **********************/ 61 62var gTagAttrs = null; 63var gQTGeneratorVersion = 1.2; 64var gQTBehaviorID = "qt_event_source"; 65var gQTEventsEnabled = false; 66 67function AC_QuickTimeVersion() { return gQTGeneratorVersion; } 68 69function _QTComplain(callingFcnName, errMsg) 70{ 71 errMsg = errMsg.replace("%%", callingFcnName); 72 alert(errMsg); 73} 74 75function _QTIsMSIE() 76{ 77 var ua = navigator.userAgent.toLowerCase(); 78 var msie = /msie/.test(ua) && !/opera/.test(ua); 79 80 return msie; 81} 82 83 84function _QTGenerateBehavior() 85{ 86 return objTag = '<!--[if IE]>' 87 + '<object id="' + gQTBehaviorID + '" classid="clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598"></object>' 88 + '<![endif]-->'; 89} 90 91function _QTPageHasBehaviorObject(callingFcnName, args) 92{ 93 var haveBehavior = false; 94 var objects = document.getElementsByTagName('object'); 95 96 for ( var ndx = 0, obj; obj = objects[ndx]; ndx++ ) 97 { 98 if ( obj.getAttribute('classid') == "clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598" ) 99 { 100 if ( obj.getAttribute('id') == gQTBehaviorID ) 101 haveBehavior = false; 102 break; 103 } 104 } 105 106 return haveBehavior; 107} 108 109 110function _QTShouldInsertBehavior() 111{ 112 var shouldDo = false; 113 114 if ( gQTEventsEnabled && _QTIsMSIE() && !_QTPageHasBehaviorObject() ) 115 shouldDo = true; 116 117 return shouldDo; 118} 119 120 121function _QTAddAttribute(prefix, slotName, tagName) 122{ 123 var value; 124 125 value = gTagAttrs[prefix + slotName]; 126 if ( null == value ) 127 value = gTagAttrs[slotName]; 128 129 if ( null != value ) 130 { 131 if ( 0 == slotName.indexOf(prefix) && (null == tagName) ) 132 tagName = slotName.substring(prefix.length); 133 if ( null == tagName ) 134 tagName = slotName; 135 return ' ' + tagName + '="' + value + '"'; 136 } 137 else 138 return ""; 139} 140 141function _QTAddObjectAttr(slotName, tagName) 142{ 143 // don't bother if it is only for the embed tag 144 if ( 0 == slotName.indexOf("emb#") ) 145 return ""; 146 147 if ( 0 == slotName.indexOf("obj#") && (null == tagName) ) 148 tagName = slotName.substring(4); 149 150 return _QTAddAttribute("obj#", slotName, tagName); 151} 152 153function _QTAddEmbedAttr(slotName, tagName) 154{ 155 // don't bother if it is only for the object tag 156 if ( 0 == slotName.indexOf("obj#") ) 157 return ""; 158 159 if ( 0 == slotName.indexOf("emb#") && (null == tagName) ) 160 tagName = slotName.substring(4); 161 162 return _QTAddAttribute("emb#", slotName, tagName); 163} 164 165 166function _QTAddObjectParam(slotName, generateXHTML) 167{ 168 var paramValue; 169 var paramStr = ""; 170 var endTagChar = (generateXHTML) ? ' />' : '>'; 171 172 if ( -1 == slotName.indexOf("emb#") ) 173 {
174 // look for the OBJECT-only param first. if there is none, look for a generic one 175 paramValue = gTagAttrs["obj#" + slotName]; 176 if ( null == paramValue ) 177 paramValue = gTagAttrs[slotName]; 178 179 if ( 0 == slotName.indexOf("obj#") ) 180 slotName = slotName.substring(4); 181 182 if ( null != paramValue ) 183 paramStr = '<param name="' + slotName + '" value="' + paramValue + '"' + endTagChar; 184 } 185 186 return paramStr; 187} 188 189function _QTDeleteTagAttrs() 190{ 191 for ( var ndx = 0; ndx < arguments.length; ndx++ ) 192 { 193 var attrName = arguments[ndx]; 194 delete gTagAttrs[attrName]; 195 delete gTagAttrs["emb#" + attrName]; 196 delete gTagAttrs["obj#" + attrName]; 197 } 198} 199 200 201// generate an embed and object tag, return as a string 202function _QTGenerate(callingFcnName, generateXHTML, args) 203{ 204 // is the number of optional arguments even? 205 if ( args.length < 4 || (0 != (args.length % 2)) ) 206 { 207 _QTComplain(callingFcnName, gArgCountErr); 208 return ""; 209 } 210 211 // allocate an array, fill in the required attributes with fixed place params and defaults 212 gTagAttrs = new Object(); 213 gTagAttrs["src"] = args[0]; 214 gTagAttrs["width"] = args[1]; 215 gTagAttrs["height"] = args[2]; 216 gTagAttrs["classid"] = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"; 217 //Impportant note: It is recommended that you use this exact classid in order to ensure a seamless experience for all viewers 218 gTagAttrs["pluginspage"] = "http://www.apple.com/quicktime/download/"; 219 220 // set up codebase attribute with specified or default version before parsing args so 221 // anything passed in will override 222 var activexVers = args[3] 223 if ( (null == activexVers) || ("" == activexVers) ) 224 activexVers = "7,3,0,0"; 225 gTagAttrs["codebase"] = "http://www.apple.com/qtactivex/qtplugin.cab#version=" + activexVers; 226 227 var attrName, 228 attrValue; 229 230 // add all of the optional attributes to the array 231 for ( var ndx = 4; ndx < args.length; ndx += 2) 232 { 233 attrName = args[ndx].toLowerCase(); 234 attrValue = args[ndx + 1]; 235 236 gTagAttrs[attrName] = attrValue; 237 238 if ( ("postdomevents" == attrName) && (attrValue.toLowerCase() != "false") ) 239 { 240 gQTEventsEnabled = true; 241 if ( _QTIsMSIE() ) 242 gTagAttrs["obj#style"] = "behavior:url(#" + gQTBehaviorID + ")"; 243 } 244 } 245 246 // init both tags with the required and "special" attributes 247 var objTag = '<object ' 248 + _QTAddObjectAttr("classid") 249 + _QTAddObjectAttr("width") 250 + _QTAddObjectAttr("height") 251 + _QTAddObjectAttr("codebase") 252 + _QTAddObjectAttr("name") 253 + _QTAddObjectAttr("id") 254 + _QTAddObjectAttr("tabindex") 255 + _QTAddObjectAttr("hspace") 256 + _QTAddObjectAttr("vspace") 257 + _QTAddObjectAttr("border") 258 + _QTAddObjectAttr("align") 259 + _QTAddObjectAttr("class") 260 + _QTAddObjectAttr("title") 261 + _QTAddObjectAttr("accesskey") 262 + _QTAddObjectAttr("noexternaldata") 263 + _QTAddObjectAttr("obj#style") 264 + '>' 265 + _QTAddObjectParam("src", generateXHTML); 266 var embedTag = '<embed ' 267 + _QTAddEmbedAttr("src") 268 + _QTAddEmbedAttr("width") 269 + _QTAddEmbedAttr("height") 270 + _QTAddEmbedAttr("pluginspage") 271 + _QTAddEmbedAttr("name") 272 + _QTAddEmbedAttr("id") 273 + _QTAddEmbedAttr("align") 274 + _QTAddEmbedAttr("tabindex") 275 + _QTAddEmbedAttr("title"); 276 277 // delete the attributes/params we have already added 278 _QTDeleteTagAttrs("src","width","height","pluginspage","classid","codebase","name","tabindex", 279 "hspace","vspace","border","align","noexternaldata","class","title","accesskey","id","style"); 280 281 // and finally, add all of the remaining attributes to the embed and object 282 for ( var attrName in gTagAttrs ) 283 { 284 attrValue = gTagAttrs[attrName]; 285 if ( null != attrValue ) 286 { 287 embedTag += _QTAddEmbedAttr(attrName); 288 objTag += _QTAddObjectParam(attrName, generateXHTML); 289 } 290 } 291 292 // end both tags, we're done 293 return objTag + embedTag + '></em' + 'bed></ob' + 'ject' + '>'; 294} 295 296 297// return the object/embed as a string 298function QT_GenerateOBJECTText() 299{ 300 var txt = _QTGenerate("QT_GenerateOBJECTText", false, arguments); 301 if ( _QTShouldInsertBehavior() ) 302 txt = _QTGenerateBehavior() + txt; 303 return txt; 304} 305 306function QT_GenerateOBJECTText_XHTML() 307{ 308 var txt = _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments); 309 if ( _QTShouldInsertBehavior() ) 310 txt = _QTGenerateBehavior() + txt; 311 return txt; 312} 313 314function QT_WriteOBJECT() 315{ 316 var txt = _QTGenerate("QT_WriteOBJECT", false, arguments); 317 if ( _QTShouldInsertBehavior() ) 318 document.writeln(_QTGenerateBehavior()); 319 document.writeln(txt); 320} 321 322function QT_WriteOBJECT_XHTML() 323{ 324 var txt = _QTGenerate("QT_WriteOBJECT_XHTML", true, arguments); 325 if ( _QTShouldInsertBehavior() ) 326 document.writeln(_QTGenerateBehavior()); 327 document.writeln(txt); 328} 329 330function QT_GenerateBehaviorOBJECT() 331{ 332 return _QTGenerateBehavior(); 333} 334 335function QT_ReplaceElementContents() 336{ 337 var element = arguments[0]; 338 var args = []; 339 340 // copy all other arguments we want to pass through to the fcn 341 for ( var ndx = 1; ndx < arguments.length; ndx++ ) 342 args.push(arguments[ndx]); 343 344 var txt = _QTGenerate("QT_ReplaceElementContents", false, args); 345 if ( txt.length > 0 ) 346 element.innerHTML = txt; 347} 348 349 350function QT_ReplaceElementContents_XHTML() 351{ 352 var element = arguments[0]; 353 var args = []; 354 355 // copy all other arguments we want to pass through to the fcn 356 for ( var ndx = 1; ndx < arguments.length; ndx++ ) 357 args.push(arguments[ndx]); 358 359 var txt = _QTGenerate("QT_ReplaceElementContents_XHTML", true, args
359); 360 if ( txt.length > 0 ) 361 element.innerHTML = txt; 362}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.