1 /** 2 * Flash (http://jquery.lukelutman.com/plugins/flash) 3 * A jQuery plugin for embedding Flash movies. 4 * 5 * Version 1.0 6 * November 9th, 2006 7 * 8 * Copyright (c) 2006 Luke Lutman (http://www.lukelutman.com) 9 * Dual licensed under the MIT and GPL licenses. 10 * http://www.opensource.org/licenses/mit-license.php 11 * http://www.opensource.org/licenses/gpl-license.php 12 * 13 * Inspired by: 14 * SWFObject (http://blog.deconcept.com/swfobject/) 15 * UFO (http://www.bobbyvandersluis.com/ufo/) 16 * sIFR (http://www.mikeindustries.com/sifr/) 17 * 18 * IMPORTANT: 19 * The packed version of jQuery breaks ActiveX control 20 * activation in Internet Explorer. Use JSMin to minifiy 21 * jQuery (see: http://jquery.lukelutman.com/plugins/flash#activex). 22 * 23 **/ 24 ; (function () { 25 26 var $$; 27 28 /** 29 * 30 * @desc Replace matching elements with a flash movie. 31 * @author Luke Lutman 32 * @version 1.0.1 33 * 34 * @name flash 35 * @param Hash htmlOptions Options for the embed/object tag. 36 * @param Hash pluginOptions Options for detecting/updating the Flash plugin (optional). 37 * @param Function replace Custom block called for each matched element if flash is installed (optional). 38 * @param Function update Custom block called for each matched if flash isn't installed (optional). 39 * @type jQuery 40 * 41 * @cat plugins/flash 42 * 43 * @example $('#hello').flash({ src: 'hello.swf' }); 44 * @desc Embed a Flash movie. 45 * 46 * @example $('#hello').flash({ src: 'hello.swf' }, { version: 8 }); 47 * @desc Embed a Flash 8 movie. 48 * 49 * @example $('#hello').flash({ src: 'hello.swf' }, { expressInstall: true }); 50 * @desc Embed a Flash movie using Express Install if flash isn't installed. 51 * 52 * @example $('#hello').flash({ src: 'hello.swf' }, { update: false }); 53 * @desc Embed a Flash movie, don't show an update message if Flash isn't installed. 54 * 55 **/ 56 $$ = jQuery.fn.flash = function (htmlOptions, pluginOptions, replace, update) { 57 58 // Set the default block. 59 var block = replace || $$.replace; 60 61 // Merge the default and passed plugin options. 62 pluginOptions = $$.copy($$.pluginOptions, pluginOptions); 63 64 // Detect Flash. 65 if (!$$.hasFlash(pluginOptions.version)) { 66 // Use Express Install (if specified and Flash plugin 6,0,65 or higher is installed). 67 if (pluginOptions.expressInstall && $$.hasFlash(6, 0, 65)) { 68 // Add the necessary flashvars (merged later). 69 var expressInstallOptions = { 70 flashvars: { 71 MMredirectURL: location, 72 MMplayerType: 'PlugIn', 73 MMdoctitle: jQuery('title').text() 74 } 75 }; 76 // Ask the user to update (if specified). 77 } else if (pluginOptions.update) { 78 // Change the block to insert the update message instead of the flash movie. 79 block = update || $$.update; 80 // Fail 81 } else { 82 // The required version of flash isn't installed. 83 // Express Install is turned off, or flash 6,0,65 isn't installed. 84 // Update is turned off. 85 // Return without doing anything. 86 return this; 87 } 88 } 89 90 // Merge the default, express install and passed html options. 91 htmlOptions = $$.copy($$.htmlOptions, expressInstallOptions, htmlOptions); 92 93 // Invoke $block (with a copy of the merged html options) for each element. 94 return this.each(function () { 95 block.call(this, $$.copy(htmlOptions)); 96 }); 97 98 }; 99 /** 100 * 101 * @name flash.copy
102 * @desc Copy an arbitrary number of objects into a new object. 103 * @type Object 104 * 105 * @example $$.copy({ foo: 1 }, { bar: 2 }); 106 * @result { foo: 1, bar: 2 }; 107 * 108 **/ 109 $$.copy = function () { 110 var options = {}, flashvars = {}; 111 for (var i = 0; i < arguments.length; i++) { 112 var arg = arguments[i]; 113 if (arg == undefined) continue; 114 jQuery.extend(options, arg); 115 // don't clobber one flash vars object with another 116 // merge them instead 117 if (arg.flashvars == undefined) continue; 118 jQuery.extend(flashvars, arg.flashvars); 119 } 120 options.flashvars = flashvars; 121 return options; 122 }; 123 /* 124 * @name flash.hasFlash 125 * @desc Check if a specific version of the Flash plugin is installed 126 * @type Boolean 127 * 128 **/ 129 $$.hasFlash = function () { 130 // look for a flag in the query string to bypass flash detection 131 if (/hasFlash\=true/.test(location)) return true; 132 if (/hasFlash\=false/.test(location)) return false; 133 var pv = $$.hasFlash.playerVersion().match(/\d+/g); 134 var rv = String([arguments[0], arguments[1], arguments[2]]).match(/\d+/g) || String($$.pluginOptions.version).match(/\d+/g); 135 for (var i = 0; i < 3; i++) { 136 pv[i] = parseInt(pv[i] || 0); 137 rv[i] = parseInt(rv[i] || 0); 138 // player is less than required 139 if (pv[i] < rv[i]) return false; 140 // player is greater than required 141 if (pv[i] > rv[i]) return true; 142 } 143 // major version, minor version and revision match exactly 144 return true; 145 }; 146 /** 147 * 148 * @name flash.hasFlash.playerVersion 149 * @desc Get the version of the installed Flash plugin.
150 * @type String 151 * 152 **/ 153 $$.hasFlash.playerVersion = function () { 154 // ie 155 try { 156 try { 157 // avoid fp6 minor version lookup issues 158 // see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ 159 var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6'); 160 try { axo.AllowScriptAccess = 'always'; } 161 catch (e) { return '6,0,0'; } 162 } catch (e) { } 163 return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1]; 164 // other browsers 165 } catch (e) { 166 try { 167 if (navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin) { 168 return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1]; 169 } 170 } catch (e) { } 171 } 172 return '0,0,0'; 173 }; 174 /** 175 * 176 * @name flash.htmlOptions 177 * @desc The default set of options for the object or embed tag. 178 * 179 **/ 180 $$.htmlOptions = { 181 height: 240, 182 flashvars: {}, 183 pluginspage: 'http://www.adobe.com/go/getflashplayer', 184 src: '#', 185 type: 'application/x-shockwave-flash', 186 width: 320 187 }; 188 /** 189 * 190 * @name flash.pluginOptions 191 * @desc The default set of options for checking/updating the flash Plugin. 192 * 193 **/ 194 $$.pluginOptions = { 195 expressInstall: false, 196 update: true, 197 version: '6.0.65' 198 }; 199 /** 200 * 201 * @name flash.replace 202 * @desc The default method for replacing an element with a Flash movie. 203 * 204 **/ 205 $$.replace = function (htmlOptions) { 206 this.innerHTML = '<div class="alt">
206' + this.innerHTML + '</div>'; 207 jQuery(this) 208 .addClass('flash-replaced') 209 .prepend($$.transform(htmlOptions)); 210 }; 211 /** 212 * 213 * @name flash.update 214 * @desc The default method for replacing an element with an update message. 215 * 216 **/ 217 $$.update = function (htmlOptions) { 218 var url = String(location).split('?'); 219 url.splice(1, 0, '?hasFlash=true&'); 220 url = url.join(''); 221 var msg = '<p>This content requires the Flash Player. <a href="http://www.adobe.com/go/getflashplayer">Download Flash Player</a>. Already have Flash Player? <a href="' + url + '">Click here.</a></p>'; 222 this.innerHTML = '<span class="alt">' + this.innerHTML + '</span>'; 223 jQuery(this) 224 .addClass('flash-update') 225 .prepend(msg); 226 }; 227 /** 228 * 229 * @desc Convert a hash of html options to a string of attributes, using Function.apply(). 230 * @example toAttributeString.apply(htmlOptions) 231 * @result foo="bar" foo="bar" 232 * 233 **/ 234 function toAttributeString() { 235 var s = ''; 236 for (var key in this) 237 if (typeof this[key] != 'function') 238 s += key + '="' + this[key] + '" '; 239 return s; 240 }; 241 /** 242 * 243 * @desc Convert a hash of flashvars to a url-encoded string, using Function.apply(). 244 * @example toFlashvarsString.apply(flashvarsObject) 245 * @result foo=bar&foo=bar 246 * 247 **/ 248 function toFlashvarsString() { 249 var s = ''; 250 for (var key in this) 251 if (typeof this[key] != 'function') 252 s += key + '=' + encodeURIComponent(this[key]) + '&'; 253 return s.replace(/&$/, ''); 254 }; 255 /** 256 * 257 * @name flash.transform 258 * @desc Transform a set of html options into an embed tag.
259 * @type String 260 * 261 * @example $$.transform(htmlOptions) 262 * @result <embed src="foo.swf" ... /> 263 * 264 * Note: The embed tag is NOT standards-compliant, but it 265 * works in all current browsers. flash.transform can be 266 * overwritten with a custom function to generate more 267 * standards-compliant markup. 268 * 269 **/ 270 $$.transform = function (htmlOptions) { 271 htmlOptions.toString = toAttributeString; 272 if (htmlOptions.flashvars) htmlOptions.flashvars.toString = toFlashvarsString; 273 return '<embed ' + String(htmlOptions) + '/>'; 274 }; 275 276 /** 277 * 278 * Flash Player 9 Fix (http://blog.deconcept.com/2006/07/28/swfobject-143-released/) 279 * 280 **/ 281 if (window.attachEvent) { 282 window.attachEvent("onbeforeunload", function () { 283 __flash_unloadHandler = function () { }; 284 __flash_savedUnloadHandler = function () { }; 285 }); 286 } 287 288 })();
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.