[483] | 1 | define([ |
---|
| 2 | "dojo/_base/kernel", |
---|
| 3 | "dojo/_base/lang", |
---|
| 4 | "dojo/_base/sniff", |
---|
| 5 | "dojo/_base/window", |
---|
| 6 | "dojo/dom", |
---|
| 7 | "dojo/dom-construct", |
---|
| 8 | "dojo/domReady!" // fixes doc.readyState in Fx<=3.5 |
---|
| 9 | ], function (dojo, lang, has, windowUtil, domUtil, domConstruct) { |
---|
| 10 | // module: |
---|
| 11 | // dojox/embed/Quicktime |
---|
| 12 | // summary: |
---|
| 13 | // Base functionality to insert a QuickTime movie |
---|
| 14 | // into a document on the fly. |
---|
| 15 | |
---|
| 16 | var qtMarkup, |
---|
| 17 | qtVersion = { major: 0, minor: 0, rev: 0 }, |
---|
| 18 | installed, |
---|
| 19 | __def__ = { |
---|
| 20 | width: 320, |
---|
| 21 | height: 240, |
---|
| 22 | redirect: null |
---|
| 23 | }, |
---|
| 24 | keyBase = "dojox-embed-quicktime-", |
---|
| 25 | keyCount = 0, |
---|
| 26 | getQTMarkup = 'This content requires the <a href="http://www.apple.com/quicktime/download/" title="Download and install QuickTime.">QuickTime plugin</a>.', |
---|
| 27 | embed = dojo.getObject("dojox.embed", true); |
---|
| 28 | |
---|
| 29 | // *** private methods ********************************************************* |
---|
| 30 | function prep(kwArgs){ |
---|
| 31 | kwArgs = dojo.mixin(lang.clone(__def__), kwArgs || {}); |
---|
| 32 | if(!("path" in kwArgs) && !kwArgs.testing){ |
---|
| 33 | console.error("dojox.embed.Quicktime(ctor):: no path reference to a QuickTime movie was provided."); |
---|
| 34 | return null; |
---|
| 35 | } |
---|
| 36 | if(kwArgs.testing){ |
---|
| 37 | kwArgs.path = ""; |
---|
| 38 | } |
---|
| 39 | if(!("id" in kwArgs)){ |
---|
| 40 | kwArgs.id = keyBase + keyCount++; |
---|
| 41 | } |
---|
| 42 | return kwArgs; |
---|
| 43 | } |
---|
| 44 | |
---|
| 45 | if(has("ie")){ |
---|
| 46 | installed = (function(){ |
---|
| 47 | try{ |
---|
| 48 | var o = new ActiveXObject("QuickTimeCheckObject.QuickTimeCheck.1"); |
---|
| 49 | if(o!==undefined){ |
---|
| 50 | // pull the qt version too |
---|
| 51 | var v = o.QuickTimeVersion.toString(16); |
---|
| 52 | function p(i){ return (v.substring(i, i+1)-0) || 0; } |
---|
| 53 | qtVersion = { |
---|
| 54 | major: p(0), |
---|
| 55 | minor: p(1), |
---|
| 56 | rev: p(2) |
---|
| 57 | }; |
---|
| 58 | return o.IsQuickTimeAvailable(0); |
---|
| 59 | } |
---|
| 60 | } catch(e){ } |
---|
| 61 | return false; |
---|
| 62 | })(); |
---|
| 63 | |
---|
| 64 | qtMarkup = function(kwArgs){ |
---|
| 65 | if(!installed){ return { id: null, markup: getQTMarkup }; } |
---|
| 66 | |
---|
| 67 | kwArgs = prep(kwArgs); |
---|
| 68 | if(!kwArgs){ return null; } |
---|
| 69 | var s = '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" ' |
---|
| 70 | + 'codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0" ' |
---|
| 71 | + 'id="' + kwArgs.id + '" ' |
---|
| 72 | + 'width="' + kwArgs.width + '" ' |
---|
| 73 | + 'height="' + kwArgs.height + '">' |
---|
| 74 | + '<param name="src" value="' + kwArgs.path + '"/>'; |
---|
| 75 | for(var p in kwArgs.params||{}){ |
---|
| 76 | s += '<param name="' + p + '" value="' + kwArgs.params[p] + '"/>'; |
---|
| 77 | } |
---|
| 78 | s += '</object>'; |
---|
| 79 | return { id: kwArgs.id, markup: s }; |
---|
| 80 | } |
---|
| 81 | } else { |
---|
| 82 | installed = (function(){ |
---|
| 83 | for(var i=0, p=navigator.plugins, l=p.length; i<l; i++){ |
---|
| 84 | if(p[i].name.indexOf("QuickTime")>-1){ |
---|
| 85 | return true; |
---|
| 86 | } |
---|
| 87 | } |
---|
| 88 | return false; |
---|
| 89 | })(); |
---|
| 90 | |
---|
| 91 | qtMarkup = function(kwArgs){ |
---|
| 92 | if(!installed){ return { id: null, markup: getQTMarkup }; } |
---|
| 93 | |
---|
| 94 | kwArgs = prep(kwArgs); |
---|
| 95 | if(!kwArgs){ return null; } |
---|
| 96 | var s = '<embed type="video/quicktime" src="' + kwArgs.path + '" ' |
---|
| 97 | + 'id="' + kwArgs.id + '" ' |
---|
| 98 | + 'name="' + kwArgs.id + '" ' |
---|
| 99 | + 'pluginspage="www.apple.com/quicktime/download" ' |
---|
| 100 | + 'enablejavascript="true" ' |
---|
| 101 | + 'width="' + kwArgs.width + '" ' |
---|
| 102 | + 'height="' + kwArgs.height + '"'; |
---|
| 103 | for(var p in kwArgs.params||{}){ |
---|
| 104 | s += ' ' + p + '="' + kwArgs.params[p] + '"'; |
---|
| 105 | } |
---|
| 106 | s += '></embed>'; |
---|
| 107 | return { id: kwArgs.id, markup: s }; |
---|
| 108 | } |
---|
| 109 | } |
---|
| 110 | |
---|
| 111 | /*===== |
---|
| 112 | var __QTArgs = { |
---|
| 113 | // path: String |
---|
| 114 | // The URL of the movie to embed. |
---|
| 115 | // id: String? |
---|
| 116 | // A unique key that will be used as the id of the created markup. If you don't |
---|
| 117 | // provide this, a unique key will be generated. |
---|
| 118 | // width: Number? |
---|
| 119 | // The width of the embedded movie; the default value is 320px. |
---|
| 120 | // height: Number? |
---|
| 121 | // The height of the embedded movie; the default value is 240px |
---|
| 122 | // params: Object? |
---|
| 123 | // A set of key/value pairs that you want to define in the resultant markup. |
---|
| 124 | // redirect: String? |
---|
| 125 | // A url to redirect the browser to if the current QuickTime version is not supported. |
---|
| 126 | }; |
---|
| 127 | =====*/ |
---|
| 128 | |
---|
| 129 | var Quicktime=function(/* __QTArgs */kwArgs, /* DOMNode */node){ |
---|
| 130 | // summary: |
---|
| 131 | // Returns a reference to the HTMLObject/HTMLEmbed that is created to |
---|
| 132 | // place the movie in the document. You can use this either with or |
---|
| 133 | // without the new operator. Note that with any other DOM manipulation, |
---|
| 134 | // you must wait until the document is finished loading before trying |
---|
| 135 | // to use this. |
---|
| 136 | // |
---|
| 137 | // example: |
---|
| 138 | // Embed a QuickTime movie in a document using the new operator, and get a reference to it. |
---|
| 139 | // | var movie = new dojox.embed.Quicktime({ |
---|
| 140 | // | path: "path/to/my/movie.mov", |
---|
| 141 | // | width: 400, |
---|
| 142 | // | height: 300 |
---|
| 143 | // | }, myWrapperNode); |
---|
| 144 | // |
---|
| 145 | // example: |
---|
| 146 | // Embed a movie in a document without using the new operator. |
---|
| 147 | // | var movie = dojox.embed.Quicktime({ |
---|
| 148 | // | path: "path/to/my/movie.mov", |
---|
| 149 | // | width: 400, |
---|
| 150 | // | height: 300 |
---|
| 151 | // | }, myWrapperNode); |
---|
| 152 | |
---|
| 153 | return Quicktime.place(kwArgs, node); // HTMLObject |
---|
| 154 | }; |
---|
| 155 | |
---|
| 156 | dojo.mixin(Quicktime, { |
---|
| 157 | // summary: |
---|
| 158 | // A singleton object used internally to get information |
---|
| 159 | // about the QuickTime player available in a browser, and |
---|
| 160 | // as the factory for generating and placing markup in a |
---|
| 161 | // document. |
---|
| 162 | // |
---|
| 163 | // minSupported: Number |
---|
| 164 | // The minimum supported version of the QuickTime Player, defaults to |
---|
| 165 | // 6. |
---|
| 166 | // available: Boolean |
---|
| 167 | // Whether or not QuickTime is available. |
---|
| 168 | // supported: Boolean |
---|
| 169 | // Whether or not the QuickTime Player installed is supported by |
---|
| 170 | // dojox.embed. |
---|
| 171 | // version: Object |
---|
| 172 | // The version of the installed QuickTime Player; takes the form of |
---|
| 173 | // { major, minor, rev }. To get the major version, you'd do this: |
---|
| 174 | // var v=dojox.embed.Quicktime.version.major; |
---|
| 175 | // initialized: Boolean |
---|
| 176 | // Whether or not the QuickTime engine is available for use. |
---|
| 177 | // onInitialize: Function |
---|
| 178 | // A stub you can connect to if you are looking to fire code when the |
---|
| 179 | // engine becomes available. A note: do NOT use this stub to embed |
---|
| 180 | // a movie in your document; this WILL be fired before DOMContentLoaded |
---|
| 181 | // is fired, and you will get an error. You should use dojo.addOnLoad |
---|
| 182 | // to place your movie instead. |
---|
| 183 | |
---|
| 184 | minSupported: 6, |
---|
| 185 | available: installed, |
---|
| 186 | supported: installed, |
---|
| 187 | version: qtVersion, |
---|
| 188 | initialized: false, |
---|
| 189 | onInitialize: function(){ |
---|
| 190 | Quicktime.initialized = true; |
---|
| 191 | }, // stub function to let you know when this is ready |
---|
| 192 | |
---|
| 193 | place: function(kwArgs, node){ |
---|
| 194 | var o = qtMarkup(kwArgs); |
---|
| 195 | |
---|
| 196 | if(!(node = domUtil.byId(node))){ |
---|
| 197 | node=domConstruct.create("div", { id:o.id+"-container" }, windowUtil.body()); |
---|
| 198 | } |
---|
| 199 | |
---|
| 200 | if(o){ |
---|
| 201 | node.innerHTML = o.markup; |
---|
| 202 | if(o.id){ |
---|
| 203 | return has("ie") ? dom.byId(o.id) : document[o.id]; // QuickTimeObject |
---|
| 204 | } |
---|
| 205 | } |
---|
| 206 | return null; // QuickTimeObject |
---|
| 207 | } |
---|
| 208 | }); |
---|
| 209 | |
---|
| 210 | // go get the info |
---|
| 211 | if(!has("ie")){ |
---|
| 212 | var id = "-qt-version-test", |
---|
| 213 | o = qtMarkup({ testing:true , width:4, height:4 }), |
---|
| 214 | c = 10, // counter to prevent infinite looping |
---|
| 215 | top = "-1000px", |
---|
| 216 | widthHeight = "1px"; |
---|
| 217 | |
---|
| 218 | function getVer(){ |
---|
| 219 | setTimeout(function(){ |
---|
| 220 | var qt = document[o.id], |
---|
| 221 | n = domUtil.byId(id); |
---|
| 222 | |
---|
| 223 | if(qt){ |
---|
| 224 | try{ |
---|
| 225 | var v = qt.GetQuickTimeVersion().split("."); |
---|
| 226 | Quicktime.version = { major: parseInt(v[0]||0), minor: parseInt(v[1]||0), rev: parseInt(v[2]||0) }; |
---|
| 227 | if((Quicktime.supported = v[0])){ |
---|
| 228 | Quicktime.onInitialize(); |
---|
| 229 | } |
---|
| 230 | c = 0; |
---|
| 231 | } catch(e){ |
---|
| 232 | if(c--){ |
---|
| 233 | getVer(); |
---|
| 234 | } |
---|
| 235 | } |
---|
| 236 | } |
---|
| 237 | |
---|
| 238 | if(!c && n){ domConstruct.destroy(n); } |
---|
| 239 | }, 20); |
---|
| 240 | } |
---|
| 241 | |
---|
| 242 | domConstruct.create("div", { |
---|
| 243 | innerHTML: o.markup, |
---|
| 244 | id: id, |
---|
| 245 | style: { top:top, left:0, width:widthHeight, height:widthHeight, overflow:"hidden", position:"absolute" } |
---|
| 246 | }, windowUtil.body()); |
---|
| 247 | getVer(); |
---|
| 248 | }else if(has("ie") && installed){ |
---|
| 249 | // we already know if IE has QuickTime installed, but we need this to seem like a callback. |
---|
| 250 | setTimeout(function(){ |
---|
| 251 | Quicktime.onInitialize(); |
---|
| 252 | }, 10); |
---|
| 253 | } |
---|
| 254 | |
---|
| 255 | lang.setObject("dojox.embed.Quicktime", Quicktime); |
---|
| 256 | |
---|
| 257 | return Quicktime; |
---|
| 258 | }); |
---|