/source/app/NOS.Wiki/Themes/NOS/includes/flash.js
http://github.com/agross/netopenspace · JavaScript · 288 lines · 122 code · 10 blank · 156 comment · 31 complexity · f70688116016dd88e6e852de5f404f2f MD5 · raw file
- /**
- * Flash (http://jquery.lukelutman.com/plugins/flash)
- * A jQuery plugin for embedding Flash movies.
- *
- * Version 1.0
- * November 9th, 2006
- *
- * Copyright (c) 2006 Luke Lutman (http://www.lukelutman.com)
- * Dual licensed under the MIT and GPL licenses.
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.opensource.org/licenses/gpl-license.php
- *
- * Inspired by:
- * SWFObject (http://blog.deconcept.com/swfobject/)
- * UFO (http://www.bobbyvandersluis.com/ufo/)
- * sIFR (http://www.mikeindustries.com/sifr/)
- *
- * IMPORTANT:
- * The packed version of jQuery breaks ActiveX control
- * activation in Internet Explorer. Use JSMin to minifiy
- * jQuery (see: http://jquery.lukelutman.com/plugins/flash#activex).
- *
- **/
- ;(function(){
-
- var $$;
- /**
- *
- * @desc Replace matching elements with a flash movie.
- * @author Luke Lutman
- * @version 1.0.1
- *
- * @name flash
- * @param Hash htmlOptions Options for the embed/object tag.
- * @param Hash pluginOptions Options for detecting/updating the Flash plugin (optional).
- * @param Function replace Custom block called for each matched element if flash is installed (optional).
- * @param Function update Custom block called for each matched if flash isn't installed (optional).
- * @type jQuery
- *
- * @cat plugins/flash
- *
- * @example $('#hello').flash({ src: 'hello.swf' });
- * @desc Embed a Flash movie.
- *
- * @example $('#hello').flash({ src: 'hello.swf' }, { version: 8 });
- * @desc Embed a Flash 8 movie.
- *
- * @example $('#hello').flash({ src: 'hello.swf' }, { expressInstall: true });
- * @desc Embed a Flash movie using Express Install if flash isn't installed.
- *
- * @example $('#hello').flash({ src: 'hello.swf' }, { update: false });
- * @desc Embed a Flash movie, don't show an update message if Flash isn't installed.
- *
- **/
- $$ = jQuery.fn.flash = function(htmlOptions, pluginOptions, replace, update) {
-
- // Set the default block.
- var block = replace || $$.replace;
-
- // Merge the default and passed plugin options.
- pluginOptions = $$.copy($$.pluginOptions, pluginOptions);
-
- // Detect Flash.
- if(!$$.hasFlash(pluginOptions.version)) {
- // Use Express Install (if specified and Flash plugin 6,0,65 or higher is installed).
- if(pluginOptions.expressInstall && $$.hasFlash(6,0,65)) {
- // Add the necessary flashvars (merged later).
- var expressInstallOptions = {
- flashvars: {
- MMredirectURL: location,
- MMplayerType: 'PlugIn',
- MMdoctitle: jQuery('title').text()
- }
- };
- // Ask the user to update (if specified).
- } else if (pluginOptions.update) {
- // Change the block to insert the update message instead of the flash movie.
- block = update || $$.update;
- // Fail
- } else {
- // The required version of flash isn't installed.
- // Express Install is turned off, or flash 6,0,65 isn't installed.
- // Update is turned off.
- // Return without doing anything.
- return this;
- }
- }
-
- // Merge the default, express install and passed html options.
- htmlOptions = $$.copy($$.htmlOptions, expressInstallOptions, htmlOptions);
-
- // Invoke $block (with a copy of the merged html options) for each element.
- return this.each(function(){
- block.call(this, $$.copy(htmlOptions));
- });
-
- };
- /**
- *
- * @name flash.copy
- * @desc Copy an arbitrary number of objects into a new object.
- * @type Object
- *
- * @example $$.copy({ foo: 1 }, { bar: 2 });
- * @result { foo: 1, bar: 2 };
- *
- **/
- $$.copy = function() {
- var options = {}, flashvars = {};
- for(var i = 0; i < arguments.length; i++) {
- var arg = arguments[i];
- if(arg == undefined) continue;
- jQuery.extend(options, arg);
- // don't clobber one flash vars object with another
- // merge them instead
- if(arg.flashvars == undefined) continue;
- jQuery.extend(flashvars, arg.flashvars);
- }
- options.flashvars = flashvars;
- return options;
- };
- /*
- * @name flash.hasFlash
- * @desc Check if a specific version of the Flash plugin is installed
- * @type Boolean
- *
- **/
- $$.hasFlash = function() {
- // look for a flag in the query string to bypass flash detection
- if(/hasFlash\=true/.test(location)) return true;
- if(/hasFlash\=false/.test(location)) return false;
- var pv = $$.hasFlash.playerVersion().match(/\d+/g);
- var rv = String([arguments[0], arguments[1], arguments[2]]).match(/\d+/g) || String($$.pluginOptions.version).match(/\d+/g);
- for(var i = 0; i < 3; i++) {
- pv[i] = parseInt(pv[i] || 0);
- rv[i] = parseInt(rv[i] || 0);
- // player is less than required
- if(pv[i] < rv[i]) return false;
- // player is greater than required
- if(pv[i] > rv[i]) return true;
- }
- // major version, minor version and revision match exactly
- return true;
- };
- /**
- *
- * @name flash.hasFlash.playerVersion
- * @desc Get the version of the installed Flash plugin.
- * @type String
- *
- **/
- $$.hasFlash.playerVersion = function() {
- // ie
- try {
- try {
- // avoid fp6 minor version lookup issues
- // see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
- var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
- try { axo.AllowScriptAccess = 'always'; }
- catch(e) { return '6,0,0'; }
- } catch(e) {}
- return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
- // other browsers
- } catch(e) {
- try {
- if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin){
- return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
- }
- } catch(e) {}
- }
- return '0,0,0';
- };
- /**
- *
- * @name flash.htmlOptions
- * @desc The default set of options for the object or embed tag.
- *
- **/
- $$.htmlOptions = {
- height: 240,
- flashvars: {},
- pluginspage: 'http://www.adobe.com/go/getflashplayer',
- src: '#',
- type: 'application/x-shockwave-flash',
- width: 320
- };
- /**
- *
- * @name flash.pluginOptions
- * @desc The default set of options for checking/updating the flash Plugin.
- *
- **/
- $$.pluginOptions = {
- expressInstall: false,
- update: true,
- version: '6.0.65'
- };
- /**
- *
- * @name flash.replace
- * @desc The default method for replacing an element with a Flash movie.
- *
- **/
- $$.replace = function(htmlOptions) {
- this.innerHTML = '<div class="alt">'+this.innerHTML+'</div>';
- jQuery(this)
- .addClass('flash-replaced')
- .prepend($$.transform(htmlOptions));
- };
- /**
- *
- * @name flash.update
- * @desc The default method for replacing an element with an update message.
- *
- **/
- $$.update = function(htmlOptions) {
- var url = String(location).split('?');
- url.splice(1,0,'?hasFlash=true&');
- url = url.join('');
- 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>';
- this.innerHTML = '<span class="alt">'+this.innerHTML+'</span>';
- jQuery(this)
- .addClass('flash-update')
- .prepend(msg);
- };
- /**
- *
- * @desc Convert a hash of html options to a string of attributes, using Function.apply().
- * @example toAttributeString.apply(htmlOptions)
- * @result foo="bar" foo="bar"
- *
- **/
- function toAttributeString() {
- var s = '';
- for(var key in this)
- if(typeof this[key] != 'function')
- s += key+'="'+this[key]+'" ';
- return s;
- };
- /**
- *
- * @desc Convert a hash of flashvars to a url-encoded string, using Function.apply().
- * @example toFlashvarsString.apply(flashvarsObject)
- * @result foo=bar&foo=bar
- *
- **/
- function toFlashvarsString() {
- var s = '';
- for(var key in this)
- if(typeof this[key] != 'function')
- s += key+'='+encodeURIComponent(this[key])+'&';
- return s.replace(/&$/, '');
- };
- /**
- *
- * @name flash.transform
- * @desc Transform a set of html options into an embed tag.
- * @type String
- *
- * @example $$.transform(htmlOptions)
- * @result <embed src="foo.swf" ... />
- *
- * Note: The embed tag is NOT standards-compliant, but it
- * works in all current browsers. flash.transform can be
- * overwritten with a custom function to generate more
- * standards-compliant markup.
- *
- **/
- $$.transform = function(htmlOptions) {
- htmlOptions.toString = toAttributeString;
- if(htmlOptions.flashvars) htmlOptions.flashvars.toString = toFlashvarsString;
- return '<embed ' + String(htmlOptions) + '/>';
- };
- /**
- *
- * Flash Player 9 Fix (http://blog.deconcept.com/2006/07/28/swfobject-143-released/)
- *
- **/
- if (window.attachEvent) {
- window.attachEvent("onbeforeunload", function(){
- __flash_unloadHandler = function() {};
- __flash_savedUnloadHandler = function() {};
- });
- }
-
- })();