]> git.pond.sub.org Git - eow/blob - static/dojo-release-1.1.1/dojox/av/_base/flash.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / av / _base / flash.js
1 if(!dojo._hasResource["dojox.av._base.flash"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2 dojo._hasResource["dojox.av._base.flash"] = true;
3 dojo.provide("dojox.av._base.flash");
4
5 (function(){
6         /*******************************************************
7                 dojox.av.flash
8
9                 Base functionality to insert a flash movie into
10                 a document on the fly.
11
12                 Support for Flash 6 is dropped in favor of Flash 8;
13                 multiple movies are supported.
14          ******************************************************/
15
16         //      TODO: solve the Eolas problem, the function that actually pushes
17         //              Flash movie into the doc must be loaded from an external script.
18
19         //      TODO: add Brad's ExpressInstall for automated installation.
20
21         var fMarkup, fVersion, __def__={
22                 expressInstall: false,
23                 width: 320,
24                 height: 240,
25                 style: null,
26                 redirect: null,
27                 params: []
28         };
29         var keyBase="dojox-av-flash-", keyCount=0;
30         function prep(kwArgs){
31                 kwArgs=dojo.mixin(dojo.clone(__def__), kwArgs || {});
32                 if(!("path" in kwArgs)){
33                         console.error("dojox.av._base.flash(ctor):: no path reference to a Flash movie was provided.");
34                         return null;
35                 }
36                 if(!("id" in kwArgs)){
37                         kwArgs.id=(keyBase + keyCount++);
38                 }
39                 return kwArgs;
40         }
41
42         if(dojo.isIE){
43                 //      *** Internet Explorer branch ******************************************************************
44                 fMarkup=function(kwArgs){
45                         kwArgs=prep(kwArgs);
46                         if(!kwArgs){ return null; }
47                         var s='<object id="' + kwArgs.id + '" '
48                                 + 'classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '
49                                 + 'width="' + kwArgs.width + '" '
50                                 + 'height="' + kwArgs.height + '"'
51                                 + ((kwArgs.style)?' style="' + kwArgs.style + '"':'')
52                                 + '>'
53                                 + '<param name="movie" value="' + kwArgs.path + '" />';
54                         for(var i=0, l=kwArgs.params.length; i<l; i++){
55                                 s += '<param name="' + kwArgs.params[i].key + '" value="' + kwArgs.params[i].value + '" />';
56                         }
57                         s += '</object>';
58                         return { id: kwArgs.id, markup: s };
59                 };
60
61                 fVersion=(function(){
62                         var testVersion=10, testObj=null;
63                         while(!testObj && testVersion > 7){
64                                 try {
65                                         testObj = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + testVersion--);
66                                 } catch(e){ }
67                         }
68                         if(testObj){
69                                 var v = testObj.GetVariable("$version").split(" ")[1].split(",");
70                                 return {
71                                         major: (v[0]!=null)?parseInt(v[0]):0, 
72                                         minor: (v[1]!=null)?parseInt(v[1]):0, 
73                                         rev: (v[2]!=null)?parseInt(v[2]):0 
74                                 };
75                         }
76                         return { major: 0, minor: 0, rev: 0 };
77                 })();
78
79                 //      attach some cleanup for IE, thanks to deconcept :)
80                 dojo.addOnUnload(function(){
81                         var objs=dojo.query("object");
82                         for(var i=objs.length-1; i>=0; i--){
83                                 objs[i].style.display="none";
84                                 for(var p in objs[i]){
85                                         if(p!="FlashVars" && dojo.isFunction(objs[i][p])){
86                                                 objs[i][p]=function(){ };
87                                         }
88                                 }
89                         }
90                 });
91
92                 //      TODO: ...and double check this fix; is IE really firing onbeforeunload with any kind of href="#" link?
93                 var beforeUnloadHandle = dojo.connect(dojo.global, "onbeforeunload", function(){
94                         try{
95                                 if(__flash_unloadHandler){ __flash_unloadHandler=function(){ }; }
96                                 if(__flash_savedUnloadHandler){ __flash_savedUnloadHandler=function(){ }; }
97                         } catch(e){ }
98                         dojo.disconnect(beforeUnloadHandle);
99                 });
100         } else {
101                 //      *** Sane browsers branch ******************************************************************
102                 fMarkup=function(kwArgs){
103                         kwArgs=prep(kwArgs);
104                         if(!kwArgs){ return null; }
105                         var s = '<embed type="application/x-shockwave-flash" '
106                                 + 'src="' + kwArgs.path + '" '
107                                 + 'id="' + kwArgs.id + '" '
108                                 + 'name="' + kwArgs.id + '" '
109                                 + 'width="' + kwArgs.width + '" '
110                                 + 'height="' + kwArgs.height + '"'
111                                 + (("style" in kwArgs)?' style="' + kwArgs.style + '"':'')
112                                 + 'swLiveConnect="true" '
113                                 + 'allowScriptAccess="sameDomain" '
114                                 + 'pluginspage="' + window.location.protocol + '//www.adobe.com/go/getflashplayer" ';
115                         for(var i=0, l=kwArgs.params.length; i<l; i++){
116                                 s += ' ' + kwArgs.params[i].key + '="' + kwArgs.params[i].value + '"';
117                         }
118                         s += ' />'
119                         return { id: kwArgs.id, markup: s };
120                 };
121
122                 fVersion=(function(){
123                         var plugin = navigator.plugins["Shockwave Flash"];
124                         if(plugin && plugin.description){
125                                 var v = plugin.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".");
126                                 return { 
127                                         major: (v[0]!=null)?parseInt(v[0]):0, 
128                                         minor: (v[1]!=null)?parseInt(v[1]):0, 
129                                         rev: (v[2]!=null)?parseInt(v[2]):0 
130                                 };
131                         }
132                         return { major: 0, minor: 0, rev: 0 };
133                 })();
134         }
135
136         //      *** the static object for inserting Flash movies ******************************************************
137         dojox.av.flash = {
138                 minSupported : 8,
139                 available: fVersion.major,
140                 supported: (fVersion.major >= 8),
141                 version: fVersion,
142                 initialized: false,
143                 onInitialize: function(){
144                         dojox.av.flash.initialized=true;
145                 },
146                 __ie_markup__: function(kwArgs){
147                         return fMarkup(kwArgs);
148                 }
149         };
150
151         if(dojo.isIE){
152                 //      Ugh!
153                 if(dojo._initFired){
154                         var e=document.createElement("script");
155                         e.type="text/javascript";
156                         e.src=dojo.moduleUrl("dojox", "av/_base/_ieFlash.js");
157                         e.defer=true;
158                         document.getElementsByTagName("head")[0].appendChild(e);
159                 } else {
160                         //      we can use document.write.  What a kludge.
161                         document.write('<scr'+'ipt defer type="text/javascript" src="' + dojo.moduleUrl("dojox", "av/_base/_ieFlash.js") + '">'
162                                 + '</scr'+'ipt>');
163                 }
164         } else {
165                 dojox.av.flash.place = function(node, kwArgs){
166                         node=dojo.byId(node);
167                         var o = fMarkup(kwArgs);
168                         if(o){
169                                 node.innerHTML = o.markup;
170                                 return document[o.id];
171                         }
172                         return null;
173                 }
174
175                 if(dojo._initFired){
176                         dojox.av.flash.onInitialize();
177                 } else {
178                         dojo.addOnLoad(function(){
179                                 console.log("firing off dojox.av.flash.onInitialize() for sane browsers.");
180                                 dojox.av.flash.onInitialize();
181                         });
182                 }
183         }
184 })();
185
186 }