diff options
Diffstat (limited to 'includes/js/dojox/av/_base/quicktime.js')
-rw-r--r-- | includes/js/dojox/av/_base/quicktime.js | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/includes/js/dojox/av/_base/quicktime.js b/includes/js/dojox/av/_base/quicktime.js new file mode 100644 index 0000000..0c23a9e --- /dev/null +++ b/includes/js/dojox/av/_base/quicktime.js @@ -0,0 +1,161 @@ +if(!dojo._hasResource["dojox.av._base.quicktime"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.av._base.quicktime"] = true; +dojo.provide("dojox.av._base.quicktime"); + +(function(){ + /******************************************************* + dojox.av.quicktime + + Base functionality to insert a QuickTime movie + into a document on the fly. + ******************************************************/ + + var qtMarkup, qtVersion, installed, __def__={ + width: 320, + height: 240, + redirect: null, + params: [] + }; + var keyBase="dojox-av-quicktime-", keyCount=0; + + // reference to the test movie we will use for getting QT info from the browser. + var testMovieUrl=dojo.moduleUrl("dojox", "av/resources/version.mov"); + + // *** private methods ********************************************************* + function prep(kwArgs){ + kwArgs = dojo.mixin(dojo.clone(__def__), kwArgs || {}); + if(!("path" in kwArgs)){ + console.error("dojox.av._base.quicktime(ctor):: no path reference to a QuickTime movie was provided."); + return null; + } + if(!("id" in kwArgs)){ + kwArgs.id=(keyBase + keyCount++); + } + return kwArgs; + } + + var getQTMarkup = 'This content requires the <a href="http://www.apple.com/quicktime/download/" title="Download and install QuickTime.">QuickTime plugin</a>.'; + if(dojo.isIE){ + installed = (function(){ + try{ + var o = new ActiveXObject("QuickTimeCheckObject.QuickTimeCheck.1"); + if(o!==undefined){ + return o.IsQuickTimeAvailable(0); + } + } catch(e){ } + return false; + })(); + + qtMarkup = function(kwArgs){ + if(!installed){ return { id: null, markup: getQTMarkup }; } + + kwArgs = prep(kwArgs); + if(!kwArgs){ return null; } + var s = '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" ' + + 'codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0" ' + + 'id="' + kwArgs.id + '" ' + + 'width="' + kwArgs.width + '" ' + + 'height="' + kwArgs.height + '">' + + '<param name="src" value="' + kwArgs.path + '" />'; + for(var i=0, l=kwArgs.params.length; i<l; i++){ + s += '<param name="' + kwArgs.params[i].key + '" value="' + kwArgs.params[i].value + '" />'; + } + s += '</object>'; + return { id: kwArgs.id, markup: s }; + } + } else { + installed = (function(){ + for(var i=0, l=navigator.plugins.length; i<l; i++){ + if(navigator.plugins[i].name.indexOf("QuickTime")>-1){ + return true; + } + } + return false; + })(); + + qtMarkup = function(kwArgs){ + if(!installed){ return { id: null, markup: getQTMarkup }; } + + kwArgs = prep(kwArgs); + if(!kwArgs){ return null; } + var s = '<embed type="video/quicktime" src="' + kwArgs.path + '" ' + + 'id="' + kwArgs.id + '" ' + + 'name="' + kwArgs.id + '" ' + + 'pluginspage="www.apple.com/quicktime/download" ' + + 'enablejavascript="true" ' + + 'width="' + kwArgs.width + '" ' + + 'height="' + kwArgs.height + '"'; + for(var i=0, l=kwArgs.params.length; i<l; i++){ + s += ' ' + kwArgs.params[i].key + '="' + kwArgs.params[i].value + '"'; + } + s += '></embed>'; + return { id: kwArgs.id, markup: s }; + } + } + + qtVersion = { major: 0, minor: 0, rev: 0 }; + + // *** This is an offical kludge, but it seems to work everywhere. Sigh. ************************* + dojo.addOnLoad(function(){ + var n = document.createElement("div"); + n.style.cssText = "top:0;left:0;width:1px;height:1px;overflow:hidden;position:absolute;"; + var o = qtMarkup({ path: testMovieUrl, width:4, height:4 }); + + document.body.appendChild(n); + n.innerHTML = o.markup; + var qt = (dojo.isIE) ? dojo.byId(o.id) : document[o.id]; + + // Let Safari and IE have a moment to init the QT object before trying to query it. + setTimeout(function(){ + var v = [ 0, 0, 0 ]; + if(qt){ + try { + v = qt.GetQuickTimeVersion().split("."); + qtVersion = { major: parseInt(v[0]||0), minor: parseInt(v[1]||0), rev: parseInt(v[2]||0) }; + } catch(e){ + qtVersion = { major: 0, minor: 0, rev: 0 }; + } + } + + dojox.av.quicktime.supported = v[0]; + dojox.av.quicktime.version = qtVersion; + if(dojox.av.quicktime.supported){ + dojox.av.quicktime.onInitialize(); + } + + // fricking IE. gonna end up leaving the movie in the doc, for some + // reason getting an unspecified error when trying to remove it. + if(!dojo.isIE){ + document.body.removeChild(n); + } else { + // move it out of the way. + n.style.top = "-10000px"; + n.style.visibility="hidden"; + } + }, 10); + }); + + // *** The public interface. **************************************************************** + dojox.av.quicktime={ + minSupported: 6, + available: installed, + supported: installed, + version: qtVersion, + initialized: false, + onInitialize: function(){ dojox.av.quicktime.initialized = true; }, // stub function to let you know when this is ready + + place: function(/* DOMElement */node, /* Object */kwArgs){ + node = dojo.byId(node); + var o = qtMarkup(kwArgs); + if(o){ + node.innerHTML = o.markup; + if(o.id){ + return (dojo.isIE)? dojo.byId(o.id) : document[o.id]; // QuickTimeObject + } + } + return null; // QuickTimeObject + } + }; +})(); + +} |