Changeset 5961
- Timestamp:
- 12/02/08 23:34:17 (1 month ago)
- Files:
-
- 1 modified
-
trunk/plugins/media/jquery.media.js (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/plugins/media/jquery.media.js
r4795 r5961 3 3 * 4 4 * Examples and documentation at: http://malsup.com/jquery/media/ 5 * Copyright (c) 2007 M. Alsup5 * Copyright (c) 2007-2008 M. Alsup 6 6 * Dual licensed under the MIT and GPL licenses: 7 7 * http://www.opensource.org/licenses/mit-license.php … … 9 9 * 10 10 * @author: M. Alsup 11 * @version: 0. 75 (02/20/2008)11 * @version: 0.84 (12/01/2008) 12 12 * @requires jQuery v1.1.2 or later 13 13 * $Id$ … … 30 30 * Thanks to Dan Rossi for numerous bug reports and code bits! 31 31 */ 32 (function($) {32 ;(function($) { 33 33 34 34 /** 35 35 * Chainable method for converting elements into rich media. 36 36 * 37 * @name media 38 * @param Object options Options object 39 * @param Function callback fn invoked for each matched element before conversion 40 * @param Function callback fn invoked for each matched element after conversion 41 * @cat Plugins/media 37 * @param options 38 * @param callback fn invoked for each matched element before conversion 39 * @param callback fn invoked for each matched element after conversion 42 40 */ 43 41 $.fn.media = function(options, f1, f2) { … … 70 68 71 69 $div.css('backgroundColor', o.bgColor).width(o.width); 72 73 70 // post-conversion callback, passes original element, new div element and fully populated options 74 71 if (typeof f2 == 'function') f2(this, $div[0], o, player.name); … … 78 75 }; 79 76 80 /**81 * Chainable method for preparing elements to display rich media with82 * a page overlay.83 *84 * @name mediabox85 * @param Object options Options object86 * @param Object css values for the media div87 * @cat Plugins/media88 */89 $.fn.mediabox = function(options, css) {90 return this.click(function() {91 if (typeof $.blockUI == 'undefined' || typeof $.blockUI.version == 'undefined' || $.blockUI.version < 1.26) {92 if (typeof $.fn.mediabox.warning != 'undefined') return this; // one warning is enough93 $.fn.mediabox.warning = 1;94 alert('The mediabox method requires blockUI v1.26 or later.');95 return false;96 }97 var o, p, div=0, $e = $(this).clone();98 $e.appendTo('body').hide().css({margin: 0});99 options = $.extend({}, options, { autoplay: 1 }); // force autoplay in box mode100 $e.media(options, function(){}, function(origEl, newEl, opts, player) {101 div = newEl;102 o = opts;103 p = player;104 });105 if (!div) return false;106 // don't pull element from the dom on Safari107 var $div = $.browser.safari ? $(div).hide() : $(div).remove();108 109 if (o.loadingImage)110 $div.css({111 backgroundImage: 'url('+o.loadingImage+')',112 backgroundPosition: 'center center',113 backgroundRepeat: 'no-repeat'114 });115 if (o.boxTitle)116 $div.prepend('<div style="margin:0;padding:0">' + o.boxTitle + '</div>');117 118 if (css) $div.css(css);119 120 $div.displayBox( { width: o.width, height: o.height }, function(el) {121 // quirkiness; sometimes media doesn't stop when removed from the DOM (especially in IE)122 $('object,embed', el).each(function() {123 try { this.Stop(); } catch(e) {} // quicktime124 try { this.DoStop(); } catch(e) {} // real125 try { this.controls.stop(); } catch(e) {} // windows media player126 $(this).remove();127 });128 }, p == 'flash'); // <-- mac/ff workaround129 return false;130 });131 };132 133 134 77 /** 135 78 * Non-chainable method for adding or changing file format / player mapping … … 150 93 width: 400, 151 94 height: 400, 152 preferMeta: 1, // true if markup metadata takes precedence over options object153 95 autoplay: 0, // normalized cross-player setting 154 96 bgColor: '#ffffff', // background color 155 params: { },// added to object element as param elements; added to embed element as attrs97 params: { wmode: 'transparent'}, // added to object element as param elements; added to embed element as attrs 156 98 attrs: {}, // added to object and embed elements as attrs 99 flvKeyName: 'file', // key used for object src param (thanks to Andrea Ercolino) 157 100 flashvars: {}, // added to flash content as flashvars param/attr 158 101 flashVersion: '7', // required flash version 159 expressInstaller: null, 160 161 // MediaBox options 162 boxTitle: null, // MediaBox titlebar 163 loadingImage: null, // MediaBox loading indicator 102 expressInstaller: null, // src for express installer 164 103 165 104 // default flash video and mp3 player (@see: http://jeroenwijering.com/?item=Flash_Media_Player) … … 277 216 types += $.fn.media.defaults.players[player].types; 278 217 }; 279 return new RegExp('\\.(' + types.replace(/,/g,'|') + ') \\b');218 return new RegExp('\\.(' + types.replace(/,/g,'|') + ')$\\b'); 280 219 }; 281 220 … … 297 236 // support metadata plugin (v1.0 and v2.0) 298 237 var meta = $.metadata ? $el.metadata() : $.meta ? $el.data() : {}; 238 meta = meta || {}; 299 239 var w = meta.width || parseInt(((cls.match(/w:(\d+)/)||[])[1]||0)); 300 240 var h = meta.height || parseInt(((cls.match(/h:(\d+)/)||[])[1]||0)); 241 301 242 if (w) meta.width = w; 302 243 if (h) meta.height = h; … … 304 245 305 246 var a = $.fn.media.defaults; 306 var b = (($.meta || $.metadata) && $.fn.media.defaults.preferMeta) ? options : meta;307 var c = b == options ? meta : options;247 var b = options; 248 var c = meta; 308 249 309 250 var p = { params: { bgColor: options.bgColor || $.fn.media.defaults.bgColor } }; … … 324 265 // 325 266 326 // generate flash using SWFObject if possible267 // generate flash using SWFObject library if possible 327 268 $.fn.media.swf = function(el, opts) { 328 if ( typeof SWFObject == 'undefined') {269 if (!window.SWFObject && !window.swfobject) { 329 270 // roll our own 330 271 if (opts.flashvars) { … … 341 282 var cls = opts.cls ? (' class="' + opts.cls + '"') : ''; 342 283 var $div = $('<div' + id + cls + '>'); 343 $(el).after($div).remove(); 344 345 var so = new SWFObject(opts.src, 'movie_player_' + counter++, opts.width, opts.height, opts.flashVersion, opts.bgColor); 346 if (opts.expressInstaller) so.useExpressInstall(opts.expressInstaller); 347 348 for (var p in opts.params) 349 if (p != 'bgColor') so.addParam(p, opts.params[p]); 350 for (var f in opts.flashvars) 351 so.addVariable(f, opts.flashvars[f]); 352 so.write($div[0]); 284 285 // swfobject v2+ 286 if (window.swfobject) { 287 $(el).after($div).appendTo($div); 288 if (!el.id) el.id = 'movie_player_' + counter++; 289 290 // replace el with swfobject content 291 swfobject.embedSWF(opts.src, el.id, opts.width, opts.height, opts.flashVersion, 292 opts.expressInstaller, opts.flashvars, opts.params, opts.attrs); 293 } 294 // swfobject < v2 295 else { 296 $(el).after($div).remove(); 297 var so = new SWFObject(opts.src, 'movie_player_' + counter++, opts.width, opts.height, opts.flashVersion, opts.bgColor); 298 if (opts.expressInstaller) so.useExpressInstall(opts.expressInstaller); 299 300 for (var p in opts.params) 301 if (p != 'bgColor') so.addParam(p, opts.params[p]); 302 for (var f in opts.flashvars) 303 so.addVariable(f, opts.flashvars[f]); 304 so.write($div[0]); 305 } 353 306 354 307 if (opts.caption) $('<div>').appendTo($div).html(opts.caption); … … 360 313 var src = opts.src; 361 314 var player = /\.mp3\b/i.test(src) ? $.fn.media.defaults.mp3Player : $.fn.media.defaults.flvPlayer; 315 var key = opts.flvKeyName; 316 src = encodeURIComponent(src); 362 317 opts.src = player; 363 opts.src = opts.src + '?file=' + src; 364 opts.flashvars = $.extend({}, { file: src }, opts.flashvars ); 318 opts.src = opts.src + '?'+key+'=' + (src); 319 var srcObj = {}; 320 srcObj[key] = src; 321 opts.flashvars = $.extend({}, srcObj, opts.flashvars ); 365 322 return $.fn.media.swf(el, opts); 366 323 }; … … 428 385 for (var key in opts.attrs) 429 386 a.push(key + '="'+opts.attrs[key]+'" '); 430 for (var key in o.oAttrs || {}) 431 a.push(key + '="'+o.oAttrs[key]+'" '); 387 for (var key in o.oAttrs || {}) { 388 var v = o.oAttrs[key]; 389 if (key == 'codebase' && window.location.protocol == 'https') 390 v = v.replace('http','https'); 391 a.push(key + '="'+v+'" '); 392 } 432 393 a.push('></ob'+'ject'+'>'); 433 394 var p = ['<param name="' + (o.oUrl || 'src') +'" value="' + opts.src + '">']; … … 446 407 a.push(key + '="'+o.eAttrs[key]+'" '); 447 408 for (var key in opts.params) 448 a.push(key + '="'+opts.params[key]+'" '); 409 if (key != 'wmode') // FF3/Quicktime borks on wmode 410 a.push(key + '="'+opts.params[key]+'" '); 449 411 a.push('></em'+'bed'+'>'); 450 412 }
