/** * jquery.youtubin.js * Copyright (c) 2009 Jon Raasch (http://jonraasch.com/) * Licensed under the Free BSD License (see http://dev.jonraasch.com/youtubin/docs#licensing) * * @author Jon Raasch * * @projectDescription jQuery plugin to allow simple and unobtrusive embedding of youtube videos with a variety of options * * @documentation http://dev.jonraasch.com/youtubin/docs * * @version 1.2 * * @requires jquery.js (tested with v 1.3.2) * * @optional SwfObject 2 * * NOT AFFILIATED WITH YOUTUBE */ ( function( $ ) { var youtubinCount = 0; var youtubinMode = 0; $.youtubin = function(options, box) { var options = options || {}; // if iphone and iphoneBoot not set or true, just die so youtube link can stay if ( (typeof options.iphoneBoot == 'undefined' || options.iphoneBoot ) && ( (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) ) ) return false; // if first time if ( !youtubinMode ) { if ( typeof( swfobject ) == 'undefined' ) youtubinMode = 'noScript'; else youtubinMode = '2'; } if ( typeof( box ) == 'undefined' || !box ) { options.scope = options.scope || $('body'); $('a[href^=https://www.youtube.com/watch?v=]', options.scope).youtubin(options); return false; } // define options options.swfWidth = options.swfWidth || "425"; options.swfHeight = options.swfHeight || "344"; options.flashVersion = options.flashVersion || "8"; options.expressInstall = options.expressInstall || ""; options.flashvars = options.flashvars || {}; options.params = options.params || { menu : "false", loop : "false", wmode : "opaque" }; options.replaceTime = options.replaceTime || 'auto'; options.keepLink = options.keepLink || (options.replaceTime == 'click'); options.wrapper = options.wrapper || '
'; options.autoplay = typeof options.autoplay != 'undefined' ? options.autoplay : ( options.replaceTime == 'click' ); options.srcOptions = options.srcOptions || '?hl=en&fs=1' + ( options.autoplay ? '&autoplay=1' : '' ); options.method = options.method || 'href'; options.target = options.target || false; var $box = $(box); // depending on replaceTime trigger replacement or attach click event if (options.replaceTime == 'auto') replaceIt(); else if (options.replaceTime == 'click') $box.click( function(ev) { ev.preventDefault(); replaceIt(); }); function replaceIt() { function checkId($tgt) { var boxId = $tgt.attr('id'); if ( !boxId.length ) { boxId = getNewId(); $tgt.attr('id', boxId); } return boxId; } function getNewId() { var boxId = 'youtubin-' + youtubinCount; youtubinCount++; return boxId; } var src = $box.attr(options.method); // build swf url from youtube link if ( src.substr(0,31) == 'https://www.youtube.com/watch?v=' ) src = 'https://www.youtube.com/v/' + src.substr(31) + options.srcOptions; // set the target if ( options.target ) { var $tgt = options.target; var boxId = checkId($tgt); } else if ( options.keepLink ) { var boxId = getNewId(); $box.after($('')); var $tgt = $('#'+boxId); $tgt.css('clear', 'both'); } else { var $tgt = $box; var boxId = checkId($tgt); } // embed the swf according to youtubinMode switch(youtubinMode) { case '2' : swfobject.embedSWF(src, boxId, options.swfWidth, options.swfHeight, options.flashVersion, options.expressInstall, options.flashvars, options.params); break; default : $tgt.html(''); break; } // (hack) must redefine boxId here or it will cause error in IE //if (options.wrapper) $('#'+boxId).wrap(options.wrapper); } }; $.fn.youtubin = function(options) { this.each( function() {new $.youtubin( options, this );}); return this; }; })( jQuery );