diff --git a/pywb/static/flowplayer/flowplayer-3.2.18.swf b/pywb/static/flowplayer/flowplayer-3.2.18.swf new file mode 100644 index 00000000..aed1fcb1 Binary files /dev/null and b/pywb/static/flowplayer/flowplayer-3.2.18.swf differ diff --git a/pywb/static/flowplayer/flowplayer.audio-3.2.11.swf b/pywb/static/flowplayer/flowplayer.audio-3.2.11.swf new file mode 100644 index 00000000..6c11d551 Binary files /dev/null and b/pywb/static/flowplayer/flowplayer.audio-3.2.11.swf differ diff --git a/pywb/static/flowplayer/flowplayer.controls-3.2.16.swf b/pywb/static/flowplayer/flowplayer.controls-3.2.16.swf new file mode 100644 index 00000000..7887f964 Binary files /dev/null and b/pywb/static/flowplayer/flowplayer.controls-3.2.16.swf differ diff --git a/pywb/static/flowplayer/flowplayer.pseudostreaming-3.2.13.swf b/pywb/static/flowplayer/flowplayer.pseudostreaming-3.2.13.swf new file mode 100644 index 00000000..2a570ba9 Binary files /dev/null and b/pywb/static/flowplayer/flowplayer.pseudostreaming-3.2.13.swf differ diff --git a/pywb/static/flowplayer/toolbox.flashembed.js b/pywb/static/flowplayer/toolbox.flashembed.js new file mode 100644 index 00000000..cb96948e --- /dev/null +++ b/pywb/static/flowplayer/toolbox.flashembed.js @@ -0,0 +1,301 @@ +/** + * @license + * jQuery Tools @VERSION / Flashembed - New wave Flash embedding + * + * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE. + * + * http://flowplayer.org/tools/toolbox/flashembed.html + * + * Since : March 2008 + * Date : @DATE + */ +(function() { + + var IE = document.all, + URL = 'http://www.adobe.com/go/getflashplayer', + JQUERY = typeof jQuery == 'function', + RE = /(\d+)[^\d]+(\d+)[^\d]*(\d*)/, + GLOBAL_OPTS = { + // very common opts + width: '100%', + height: '100%', + id: "_" + ("" + Math.random()).slice(9), + + // flashembed defaults + allowfullscreen: true, + allowscriptaccess: 'always', + quality: 'high', + + // flashembed specific options + version: [3, 0], + onFail: null, + expressInstall: null, + w3c: false, + cachebusting: false + }; + + // version 9 bugfix: (http://blog.deconcept.com/2006/07/28/swfobject-143-released/) + if (window.attachEvent) { + window.attachEvent("onbeforeunload", function() { + __flash_unloadHandler = function() {}; + __flash_savedUnloadHandler = function() {}; + }); + } + + // simple extend + function extend(to, from) { + if (from) { + for (var key in from) { + if (from.hasOwnProperty(key)) { + to[key] = from[key]; + } + } + } + return to; + } + + // used by asString method + function map(arr, func) { + var newArr = []; + for (var i in arr) { + if (arr.hasOwnProperty(i)) { + newArr[i] = func(arr[i]); + } + } + return newArr; + } + + window.flashembed = function(root, opts, conf) { + + // root must be found / loaded + if (typeof root == 'string') { + root = document.getElementById(root.replace("#", "")); + } + + // not found + if (!root) { return; } + + if (typeof opts == 'string') { + opts = {src: opts}; + } + + return new Flash(root, extend(extend({}, GLOBAL_OPTS), opts), conf); + }; + + // flashembed "static" API + var f = extend(window.flashembed, { + + conf: GLOBAL_OPTS, + + getVersion: function() { + var fo, ver; + + try { + ver = navigator.plugins["Shockwave Flash"].description.slice(16); + } catch(e) { + + try { + fo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); + ver = fo && fo.GetVariable("$version"); + + } catch(err) { + try { + fo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); + ver = fo && fo.GetVariable("$version"); + } catch(err2) { } + } + } + + ver = RE.exec(ver); + return ver ? [ver[1], ver[3]] : [0, 0]; + }, + + asString: function(obj) { + + if (obj === null || obj === undefined) { return null; } + var type = typeof obj; + if (type == 'object' && obj.push) { type = 'array'; } + + switch (type){ + + case 'string': + obj = obj.replace(new RegExp('(["\\\\])', 'g'), '\\$1'); + + // flash does not handle %- characters well. transforms "50%" to "50pct" (a dirty hack, I admit) + obj = obj.replace(/^\s?(\d+\.?\d*)%/, "$1pct"); + return '"' +obj+ '"'; + + case 'array': + return '['+ map(obj, function(el) { + return f.asString(el); + }).join(',') +']'; + + case 'function': + return '"function()"'; + + case 'object': + var str = []; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + str.push('"'+prop+'":'+ f.asString(obj[prop])); + } + } + return '{'+str.join(',')+'}'; + } + + // replace ' --> " and remove spaces + return String(obj).replace(/\s/g, " ").replace(/\'/g, "\""); + }, + + getHTML: function(opts, conf) { + + opts = extend({}, opts); + + /******* OBJECT tag and it's attributes *******/ + var html = '"; + + return html; + }, + + isSupported: function(ver) { + return VERSION[0] > ver[0] || VERSION[0] == ver[0] && VERSION[1] >= ver[1]; + } + + }); + + var VERSION = f.getVersion(); + + function Flash(root, opts, conf) { + + // version is ok + if (f.isSupported(opts.version)) { + root.innerHTML = f.getHTML(opts, conf); + + // express install + } else if (opts.expressInstall && f.isSupported([6, 65])) { + root.innerHTML = f.getHTML(extend(opts, {src: opts.expressInstall}), { + MMredirectURL: location.href, + MMplayerType: 'PlugIn', + MMdoctitle: document.title + }); + + } else { + + // fail #2.1 custom content inside container + if (!root.innerHTML.replace(/\s/g, '')) { + root.innerHTML = + "
Click here to download latest version
" : + "Download latest version from here
"); + + if (root.tagName == 'A') { + root.onclick = function() { + location.href = URL; + }; + } + } + + // onFail + if (opts.onFail) { + var ret = opts.onFail.call(this); + if (typeof ret == 'string') { root.innerHTML = ret; } + } + } + + // http://flowplayer.org/forum/8/18186#post-18593 + if (IE) { + window[opts.id] = document.getElementById(opts.id); + } + + // API methods for callback + extend(this, { + + getRoot: function() { + return root; + }, + + getOptions: function() { + return opts; + }, + + + getConf: function() { + return conf; + }, + + getApi: function() { + return root.firstChild; + } + + }); + } + + // setup jquery support + if (JQUERY) { + + // tools version number + jQuery.tools = jQuery.tools || {version: '@VERSION'}; + + jQuery.tools.flashembed = { + conf: GLOBAL_OPTS + }; + + jQuery.fn.flashembed = function(opts, conf) { + return this.each(function() { + jQuery(this).data("flashembed", flashembed(this, opts, conf)); + }); + }; + } + +})(); +