uploader.js
1069 lines
| 30.3 KiB
| application/javascript
|
JavascriptLexer
r547 | /* | |||
Copyright (c) 2009, Yahoo! Inc. All rights reserved. | ||||
Code licensed under the BSD License: | ||||
http://developer.yahoo.net/yui/license.txt | ||||
version: 2.8.0r4 | ||||
*/ | ||||
/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */ | ||||
/*! | ||||
* SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ | ||||
* | ||||
* SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: | ||||
* http://www.opensource.org/licenses/mit-license.php | ||||
* @namespace YAHOO | ||||
*/ | ||||
YAHOO.namespace("deconcept"); | ||||
YAHOO.deconcept = YAHOO.deconcept || {}; | ||||
if(typeof YAHOO.deconcept.util == "undefined" || !YAHOO.deconcept.util) | ||||
{ | ||||
YAHOO.deconcept.util = {}; | ||||
} | ||||
if(typeof YAHOO.deconcept.SWFObjectUtil == "undefined" || !YAHOO.deconcept.SWFObjectUtil) | ||||
{ | ||||
YAHOO.deconcept.SWFObjectUtil = {}; | ||||
} | ||||
YAHOO.deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) | ||||
{ | ||||
if(!document.getElementById) { return; } | ||||
this.DETECT_KEY = detectKey ? detectKey : 'detectflash'; | ||||
this.skipDetect = YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY); | ||||
this.params = {}; | ||||
this.variables = {}; | ||||
this.attributes = []; | ||||
if(swf) { this.setAttribute('swf', swf); } | ||||
if(id) { this.setAttribute('id', id); } | ||||
if(w) { this.setAttribute('width', w); } | ||||
if(h) { this.setAttribute('height', h); } | ||||
if(ver) { this.setAttribute('version', new YAHOO.deconcept.PlayerVersion(ver.toString().split("."))); } | ||||
this.installedVer = YAHOO.deconcept.SWFObjectUtil.getPlayerVersion(); | ||||
if (!window.opera && document.all && this.installedVer.major > 7) | ||||
{ | ||||
// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE | ||||
YAHOO.deconcept.SWFObject.doPrepUnload = true; | ||||
} | ||||
if(c) | ||||
{ | ||||
this.addParam('bgcolor', c); | ||||
} | ||||
var q = quality ? quality : 'high'; | ||||
this.addParam('quality', q); | ||||
this.setAttribute('useExpressInstall', false); | ||||
this.setAttribute('doExpressInstall', false); | ||||
var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location; | ||||
this.setAttribute('xiRedirectUrl', xir); | ||||
this.setAttribute('redirectUrl', ''); | ||||
if(redirectUrl) | ||||
{ | ||||
this.setAttribute('redirectUrl', redirectUrl); | ||||
} | ||||
}; | ||||
YAHOO.deconcept.SWFObject.prototype = | ||||
{ | ||||
useExpressInstall: function(path) | ||||
{ | ||||
this.xiSWFPath = !path ? "expressinstall.swf" : path; | ||||
this.setAttribute('useExpressInstall', true); | ||||
}, | ||||
setAttribute: function(name, value){ | ||||
this.attributes[name] = value; | ||||
}, | ||||
getAttribute: function(name){ | ||||
return this.attributes[name]; | ||||
}, | ||||
addParam: function(name, value){ | ||||
this.params[name] = value; | ||||
}, | ||||
getParams: function(){ | ||||
return this.params; | ||||
}, | ||||
addVariable: function(name, value){ | ||||
this.variables[name] = value; | ||||
}, | ||||
getVariable: function(name){ | ||||
return this.variables[name]; | ||||
}, | ||||
getVariables: function(){ | ||||
return this.variables; | ||||
}, | ||||
getVariablePairs: function(){ | ||||
var variablePairs = []; | ||||
var key; | ||||
var variables = this.getVariables(); | ||||
for(key in variables) | ||||
{ | ||||
if(variables.hasOwnProperty(key)) | ||||
{ | ||||
variablePairs[variablePairs.length] = key +"="+ variables[key]; | ||||
} | ||||
} | ||||
return variablePairs; | ||||
}, | ||||
getSWFHTML: function() { | ||||
var swfNode = ""; | ||||
var params = {}; | ||||
var key = ""; | ||||
var pairs = ""; | ||||
if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture | ||||
if (this.getAttribute("doExpressInstall")) { | ||||
this.addVariable("MMplayerType", "PlugIn"); | ||||
this.setAttribute('swf', this.xiSWFPath); | ||||
} | ||||
swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"'; | ||||
swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" '; | ||||
params = this.getParams(); | ||||
for(key in params) | ||||
{ | ||||
if(params.hasOwnProperty(key)) | ||||
{ | ||||
swfNode += [key] +'="'+ params[key] +'" '; | ||||
} | ||||
} | ||||
pairs = this.getVariablePairs().join("&"); | ||||
if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; } | ||||
swfNode += '/>'; | ||||
} else { // PC IE | ||||
if (this.getAttribute("doExpressInstall")) { | ||||
this.addVariable("MMplayerType", "ActiveX"); | ||||
this.setAttribute('swf', this.xiSWFPath); | ||||
} | ||||
swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">'; | ||||
swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />'; | ||||
params = this.getParams(); | ||||
for(key in params) | ||||
{ | ||||
if(params.hasOwnProperty(key)) | ||||
{ | ||||
swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />'; | ||||
} | ||||
} | ||||
pairs = this.getVariablePairs().join("&"); | ||||
if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';} | ||||
swfNode += "</object>"; | ||||
} | ||||
return swfNode; | ||||
}, | ||||
write: function(elementId) | ||||
{ | ||||
if(this.getAttribute('useExpressInstall')) { | ||||
// check to see if we need to do an express install | ||||
var expressInstallReqVer = new YAHOO.deconcept.PlayerVersion([6,0,65]); | ||||
if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) { | ||||
this.setAttribute('doExpressInstall', true); | ||||
this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl'))); | ||||
document.title = document.title.slice(0, 47) + " - Flash Player Installation"; | ||||
this.addVariable("MMdoctitle", document.title); | ||||
} | ||||
} | ||||
if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))) | ||||
{ | ||||
var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId; | ||||
n.innerHTML = this.getSWFHTML(); | ||||
return true; | ||||
} | ||||
else | ||||
{ | ||||
if(this.getAttribute('redirectUrl') !== "") | ||||
{ | ||||
document.location.replace(this.getAttribute('redirectUrl')); | ||||
} | ||||
} | ||||
return false; | ||||
} | ||||
}; | ||||
/* ---- detection functions ---- */ | ||||
YAHOO.deconcept.SWFObjectUtil.getPlayerVersion = function() | ||||
{ | ||||
var axo = null; | ||||
var PlayerVersion = new YAHOO.deconcept.PlayerVersion([0,0,0]); | ||||
if(navigator.plugins && navigator.mimeTypes.length) | ||||
{ | ||||
var x = navigator.plugins["Shockwave Flash"]; | ||||
if(x && x.description) | ||||
{ | ||||
PlayerVersion = new YAHOO.deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); | ||||
} | ||||
} | ||||
else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0) | ||||
{ // if Windows CE | ||||
var counter = 3; | ||||
while(axo) | ||||
{ | ||||
try | ||||
{ | ||||
counter++; | ||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter); | ||||
// document.write("player v: "+ counter); | ||||
PlayerVersion = new YAHOO.deconcept.PlayerVersion([counter,0,0]); | ||||
} | ||||
catch(e) | ||||
{ | ||||
axo = null; | ||||
} | ||||
} | ||||
} | ||||
else | ||||
{ // Win IE (non mobile) | ||||
// do minor version lookup in IE, but avoid fp6 crashing issues | ||||
// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ | ||||
try | ||||
{ | ||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); | ||||
} | ||||
catch(e) | ||||
{ | ||||
try | ||||
{ | ||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); | ||||
PlayerVersion = new YAHOO.deconcept.PlayerVersion([6,0,21]); | ||||
axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) | ||||
} | ||||
catch(e) | ||||
{ | ||||
if(PlayerVersion.major == 6) | ||||
{ | ||||
return PlayerVersion; | ||||
} | ||||
} | ||||
try | ||||
{ | ||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); | ||||
} | ||||
catch(e) {} | ||||
} | ||||
if(axo !== null) | ||||
{ | ||||
PlayerVersion = new YAHOO.deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); | ||||
} | ||||
} | ||||
return PlayerVersion; | ||||
}; | ||||
YAHOO.deconcept.PlayerVersion = function(arrVersion) | ||||
{ | ||||
this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0; | ||||
this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0; | ||||
this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0; | ||||
}; | ||||
YAHOO.deconcept.PlayerVersion.prototype.versionIsValid = function(fv) | ||||
{ | ||||
if(this.major < fv.major) | ||||
{ | ||||
return false; | ||||
} | ||||
if(this.major > fv.major) | ||||
{ | ||||
return true; | ||||
} | ||||
if(this.minor < fv.minor) | ||||
{ | ||||
return false; | ||||
} | ||||
if(this.minor > fv.minor) | ||||
{ | ||||
return true; | ||||
} | ||||
if(this.rev < fv.rev) | ||||
{ | ||||
return false; | ||||
} | ||||
return true; | ||||
}; | ||||
/* ---- get value of query string param ---- */ | ||||
YAHOO.deconcept.util = | ||||
{ | ||||
getRequestParameter: function(param) | ||||
{ | ||||
var q = document.location.search || document.location.hash; | ||||
if(param === null) { return q; } | ||||
if(q) | ||||
{ | ||||
var pairs = q.substring(1).split("&"); | ||||
for(var i=0; i < pairs.length; i++) | ||||
{ | ||||
if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) | ||||
{ | ||||
return pairs[i].substring((pairs[i].indexOf("=") + 1)); | ||||
} | ||||
} | ||||
} | ||||
return ""; | ||||
} | ||||
}; | ||||
/* fix for video streaming bug */ | ||||
YAHOO.deconcept.SWFObjectUtil.cleanupSWFs = function() | ||||
{ | ||||
var objects = document.getElementsByTagName("OBJECT"); | ||||
for(var i = objects.length - 1; i >= 0; i--) | ||||
{ | ||||
objects[i].style.display = 'none'; | ||||
for(var x in objects[i]) | ||||
{ | ||||
if(typeof objects[i][x] == 'function') | ||||
{ | ||||
objects[i][x] = function(){}; | ||||
} | ||||
} | ||||
} | ||||
}; | ||||
// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/ | ||||
if(YAHOO.deconcept.SWFObject.doPrepUnload) | ||||
{ | ||||
if(!YAHOO.deconcept.unloadSet) | ||||
{ | ||||
YAHOO.deconcept.SWFObjectUtil.prepUnload = function() | ||||
{ | ||||
__flash_unloadHandler = function(){}; | ||||
__flash_savedUnloadHandler = function(){}; | ||||
window.attachEvent("onunload", YAHOO.deconcept.SWFObjectUtil.cleanupSWFs); | ||||
}; | ||||
window.attachEvent("onbeforeunload", YAHOO.deconcept.SWFObjectUtil.prepUnload); | ||||
YAHOO.deconcept.unloadSet = true; | ||||
} | ||||
} | ||||
/* add document.getElementById if needed (mobile IE < 5) */ | ||||
if(!document.getElementById && document.all) | ||||
{ | ||||
document.getElementById = function(id) { return document.all[id]; }; | ||||
} | ||||
/** | ||||
* Wraps Flash embedding functionality and allows communication with SWF through | ||||
* attributes. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class FlashAdapter | ||||
* @uses YAHOO.util.AttributeProvider | ||||
*/ | ||||
YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes, buttonSkin) | ||||
{ | ||||
this._queue = this._queue || []; | ||||
this._events = this._events || {}; | ||||
this._configs = this._configs || {}; | ||||
attributes = attributes || {}; | ||||
//the Flash Player external interface code from Adobe doesn't play nicely | ||||
//with the default value, yui-gen, in IE | ||||
this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen"); | ||||
attributes.version = attributes.version || "9.0.45"; | ||||
attributes.backgroundColor = attributes.backgroundColor || "#ffffff"; | ||||
//we can't use the initial attributes right away | ||||
//so save them for once the SWF finishes loading | ||||
this._attributes = attributes; | ||||
this._swfURL = swfURL; | ||||
this._containerID = containerID; | ||||
//embed the SWF file in the page | ||||
this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version, | ||||
attributes.backgroundColor, attributes.expressInstall, attributes.wmode, buttonSkin); | ||||
/** | ||||
* Fires when the SWF is initialized and communication is possible. | ||||
* @event contentReady | ||||
*/ | ||||
//Fix for iframe cross-domain issue with FF2x | ||||
try | ||||
{ | ||||
this.createEvent("contentReady"); | ||||
} | ||||
catch(e){} | ||||
}; | ||||
YAHOO.widget.FlashAdapter.owners = YAHOO.widget.FlashAdapter.owners || {}; | ||||
YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider, | ||||
{ | ||||
/** | ||||
* The URL of the SWF file. | ||||
* @property _swfURL | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_swfURL: null, | ||||
/** | ||||
* The ID of the containing DIV. | ||||
* @property _containerID | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_containerID: null, | ||||
/** | ||||
* A reference to the embedded SWF file. | ||||
* @property _swf | ||||
* @private | ||||
*/ | ||||
_swf: null, | ||||
/** | ||||
* The id of this instance. | ||||
* @property _id | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_id: null, | ||||
/** | ||||
* Indicates whether the SWF has been initialized and is ready | ||||
* to communicate with JavaScript | ||||
* @property _initialized | ||||
* @type Boolean | ||||
* @private | ||||
*/ | ||||
_initialized: false, | ||||
/** | ||||
* The initializing attributes are stored here until the SWF is ready. | ||||
* @property _attributes | ||||
* @type Object | ||||
* @private | ||||
*/ | ||||
_attributes: null, //the intializing attributes | ||||
/** | ||||
* Public accessor to the unique name of the FlashAdapter instance. | ||||
* | ||||
* @method toString | ||||
* @return {String} Unique name of the FlashAdapter instance. | ||||
*/ | ||||
toString: function() | ||||
{ | ||||
return "FlashAdapter " + this._id; | ||||
}, | ||||
/** | ||||
* Nulls out the entire FlashAdapter instance and related objects and removes attached | ||||
* event listeners and clears out DOM elements inside the container. After calling | ||||
* this method, the instance reference should be expliclitly nulled by implementer, | ||||
* as in myChart = null. Use with caution! | ||||
* | ||||
* @method destroy | ||||
*/ | ||||
destroy: function() | ||||
{ | ||||
//kill the Flash Player instance | ||||
if(this._swf) | ||||
{ | ||||
var container = YAHOO.util.Dom.get(this._containerID); | ||||
container.removeChild(this._swf); | ||||
} | ||||
var instanceName = this._id; | ||||
//null out properties | ||||
for(var prop in this) | ||||
{ | ||||
if(YAHOO.lang.hasOwnProperty(this, prop)) | ||||
{ | ||||
this[prop] = null; | ||||
} | ||||
} | ||||
}, | ||||
/** | ||||
* Embeds the SWF in the page and associates it with this instance. | ||||
* | ||||
* @method _embedSWF | ||||
* @private | ||||
*/ | ||||
_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode, buttonSkin) | ||||
{ | ||||
//standard SWFObject embed | ||||
var swfObj = new YAHOO.deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor); | ||||
if(expressInstall) | ||||
{ | ||||
swfObj.useExpressInstall(expressInstall); | ||||
} | ||||
//make sure we can communicate with ExternalInterface | ||||
swfObj.addParam("allowScriptAccess", "always"); | ||||
if(wmode) | ||||
{ | ||||
swfObj.addParam("wmode", wmode); | ||||
} | ||||
swfObj.addParam("menu", "false"); | ||||
//again, a useful ExternalInterface trick | ||||
swfObj.addVariable("allowedDomain", document.location.hostname); | ||||
//tell the SWF which HTML element it is in | ||||
swfObj.addVariable("elementID", swfID); | ||||
// set the name of the function to call when the swf has an event | ||||
swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler"); | ||||
if (buttonSkin) { | ||||
swfObj.addVariable("buttonSkin", buttonSkin); | ||||
} | ||||
var container = YAHOO.util.Dom.get(containerID); | ||||
var result = swfObj.write(container); | ||||
if(result) | ||||
{ | ||||
this._swf = YAHOO.util.Dom.get(swfID); | ||||
YAHOO.widget.FlashAdapter.owners[swfID] = this; | ||||
} | ||||
else | ||||
{ | ||||
} | ||||
}, | ||||
/** | ||||
* Handles or re-dispatches events received from the SWF. | ||||
* | ||||
* @method _eventHandler | ||||
* @private | ||||
*/ | ||||
_eventHandler: function(event) | ||||
{ | ||||
var type = event.type; | ||||
switch(type) | ||||
{ | ||||
case "swfReady": | ||||
this._loadHandler(); | ||||
return; | ||||
case "log": | ||||
return; | ||||
} | ||||
//be sure to return after your case or the event will automatically fire! | ||||
this.fireEvent(type, event); | ||||
}, | ||||
/** | ||||
* Called when the SWF has been initialized. | ||||
* | ||||
* @method _loadHandler | ||||
* @private | ||||
*/ | ||||
_loadHandler: function() | ||||
{ | ||||
this._initialized = false; | ||||
this._initAttributes(this._attributes); | ||||
this.setAttributes(this._attributes, true); | ||||
this._initialized = true; | ||||
this.fireEvent("contentReady"); | ||||
}, | ||||
set: function(name, value) | ||||
{ | ||||
//save all the attributes in case the swf reloads | ||||
//so that we can pass them in again | ||||
this._attributes[name] = value; | ||||
YAHOO.widget.FlashAdapter.superclass.set.call(this, name, value); | ||||
}, | ||||
/** | ||||
* Initializes the attributes. | ||||
* | ||||
* @method _initAttributes | ||||
* @private | ||||
*/ | ||||
_initAttributes: function(attributes) | ||||
{ | ||||
//should be overridden if other attributes need to be set up | ||||
/** | ||||
* @attribute wmode | ||||
* @description Sets the window mode of the Flash Player control. May be | ||||
* "window", "opaque", or "transparent". Only available in the constructor | ||||
* because it may not be set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
/** | ||||
* @attribute expressInstall | ||||
* @description URL pointing to a SWF file that handles Flash Player's express | ||||
* install feature. Only available in the constructor because it may not be | ||||
* set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
/** | ||||
* @attribute version | ||||
* @description Minimum required version for the SWF file. Only available in the constructor because it may not be | ||||
* set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
/** | ||||
* @attribute backgroundColor | ||||
* @description The background color of the SWF. Only available in the constructor because it may not be | ||||
* set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
/** | ||||
* @attribute altText | ||||
* @description The alternative text to provide for screen readers and other assistive technology. | ||||
* @type String | ||||
*/ | ||||
this.getAttributeConfig("altText", | ||||
{ | ||||
method: this._getAltText | ||||
}); | ||||
this.setAttributeConfig("altText", | ||||
{ | ||||
method: this._setAltText | ||||
}); | ||||
/** | ||||
* @attribute swfURL | ||||
* @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be | ||||
* set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
this.getAttributeConfig("swfURL", | ||||
{ | ||||
method: this._getSWFURL | ||||
}); | ||||
}, | ||||
/** | ||||
* Getter for swfURL attribute. | ||||
* | ||||
* @method _getSWFURL | ||||
* @private | ||||
*/ | ||||
_getSWFURL: function() | ||||
{ | ||||
return this._swfURL; | ||||
}, | ||||
/** | ||||
* Getter for altText attribute. | ||||
* | ||||
* @method _getAltText | ||||
* @private | ||||
*/ | ||||
_getAltText: function() | ||||
{ | ||||
return this._swf.getAltText(); | ||||
}, | ||||
/** | ||||
* Setter for altText attribute. | ||||
* | ||||
* @method _setAltText | ||||
* @private | ||||
*/ | ||||
_setAltText: function(value) | ||||
{ | ||||
return this._swf.setAltText(value); | ||||
} | ||||
}); | ||||
/** | ||||
* Receives event messages from SWF and passes them to the correct instance | ||||
* of FlashAdapter. | ||||
* | ||||
* @method YAHOO.widget.FlashAdapter.eventHandler | ||||
* @static | ||||
* @private | ||||
*/ | ||||
YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event) | ||||
{ | ||||
if(!YAHOO.widget.FlashAdapter.owners[elementID]) | ||||
{ | ||||
//fix for ie: if owner doesn't exist yet, try again in a moment | ||||
setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0); | ||||
} | ||||
else | ||||
{ | ||||
YAHOO.widget.FlashAdapter.owners[elementID]._eventHandler(event); | ||||
} | ||||
}; | ||||
/** | ||||
* The number of proxy functions that have been created. | ||||
* @static | ||||
* @private | ||||
*/ | ||||
YAHOO.widget.FlashAdapter.proxyFunctionCount = 0; | ||||
/** | ||||
* Creates a globally accessible function that wraps a function reference. | ||||
* Returns the proxy function's name as a string for use by the SWF through | ||||
* ExternalInterface. | ||||
* | ||||
* @method YAHOO.widget.FlashAdapter.createProxyFunction | ||||
* @static | ||||
* @private | ||||
*/ | ||||
YAHOO.widget.FlashAdapter.createProxyFunction = function(func) | ||||
{ | ||||
var index = YAHOO.widget.FlashAdapter.proxyFunctionCount; | ||||
YAHOO.widget.FlashAdapter["proxyFunction" + index] = function() | ||||
{ | ||||
return func.apply(null, arguments); | ||||
}; | ||||
YAHOO.widget.FlashAdapter.proxyFunctionCount++; | ||||
return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString(); | ||||
}; | ||||
/** | ||||
* Removes a function created with createProxyFunction() | ||||
* | ||||
* @method YAHOO.widget.FlashAdapter.removeProxyFunction | ||||
* @static | ||||
* @private | ||||
*/ | ||||
YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName) | ||||
{ | ||||
//quick error check | ||||
if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0) | ||||
{ | ||||
return; | ||||
} | ||||
funcName = funcName.substr(26); | ||||
YAHOO.widget.FlashAdapter[funcName] = null; | ||||
}; | ||||
/** | ||||
* The YUI Uploader Control | ||||
* @module uploader | ||||
* @description <p>YUI Uploader provides file upload functionality that goes beyond the basic browser-based methods. | ||||
* Specifically, the YUI Uploader allows for: | ||||
* <ol> | ||||
* <li> Multiple file selection in a single "Open File" dialog.</li> | ||||
* <li> File extension filters to facilitate the user's selection.</li> | ||||
* <li> Progress tracking for file uploads.</li> | ||||
* <li> A range of file metadata: filename, size, date created, date modified, and author.</li> | ||||
* <li> A set of events dispatched on various aspects of the file upload process: file selection, upload progress, upload completion, etc.</li> | ||||
* <li> Inclusion of additional data in the file upload POST request.</li> | ||||
* <li> Faster file upload on broadband connections due to the modified SEND buffer size.</li> | ||||
* <li> Same-page server response upon completion of the file upload.</li> | ||||
* </ol> | ||||
* </p> | ||||
* @title Uploader | ||||
* @namespace YAHOO.widget | ||||
* @requires yahoo, dom, element, event | ||||
*/ | ||||
/** | ||||
* Uploader class for the YUI Uploader component. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class Uploader | ||||
* @uses YAHOO.widget.FlashAdapter | ||||
* @constructor | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param buttonSkin {String} [optional]. If defined, the uploader is | ||||
* rendered as a button. This parameter must provide the URL of a button | ||||
* skin sprite image. Acceptable types are: jpg, gif, png and swf. The | ||||
* sprite is divided evenly into four sections along its height (e.g., if | ||||
* the sprite is 200 px tall, it's divided into four sections 50px each). | ||||
* Each section is used as a skin for a specific state of the button: top | ||||
* section is "up", second section is "over", third section is "down", and | ||||
* fourth section is "disabled". | ||||
* If the parameter is not supplied, the uploader is rendered transparent, | ||||
* and it's the developer's responsibility to create a visible UI below it. | ||||
* @param forceTransparent {Boolean} This parameter, if true, forces the Flash | ||||
* UI to be rendered with wmode set to "transparent". This behavior is useful | ||||
* in conjunction with non-rectangular button skins with PNG transparency. | ||||
* The parameter is false by default, and ignored if no buttonSkin is defined. | ||||
*/ | ||||
YAHOO.widget.Uploader = function(containerId, buttonSkin, forceTransparent) | ||||
{ | ||||
var newWMode = "window"; | ||||
if (!(buttonSkin) || (buttonSkin && forceTransparent)) { | ||||
newWMode = "transparent"; | ||||
} | ||||
YAHOO.widget.Uploader.superclass.constructor.call(this, YAHOO.widget.Uploader.SWFURL, containerId, {wmode:newWMode}, buttonSkin); | ||||
/** | ||||
* Fires when the mouse is pressed over the Uploader. | ||||
* Only fires when the Uploader UI is enabled and | ||||
* the render type is 'transparent'. | ||||
* | ||||
* @event mouseDown | ||||
* @param event.type {String} The event type | ||||
*/ | ||||
this.createEvent("mouseDown"); | ||||
/** | ||||
* Fires when the mouse is released over the Uploader. | ||||
* Only fires when the Uploader UI is enabled and | ||||
* the render type is 'transparent'. | ||||
* | ||||
* @event mouseUp | ||||
* @param event.type {String} The event type | ||||
*/ | ||||
this.createEvent("mouseUp"); | ||||
/** | ||||
* Fires when the mouse rolls over the Uploader. | ||||
* | ||||
* @event rollOver | ||||
* @param event.type {String} The event type | ||||
*/ | ||||
this.createEvent("rollOver"); | ||||
/** | ||||
* Fires when the mouse rolls out of the Uploader. | ||||
* | ||||
* @event rollOut | ||||
* @param event.type {String} The event type | ||||
*/ | ||||
this.createEvent("rollOut"); | ||||
/** | ||||
* Fires when the uploader is clicked. | ||||
* | ||||
* @event click | ||||
* @param event.type {String} The event type | ||||
*/ | ||||
this.createEvent("click"); | ||||
/** | ||||
* Fires when the user has finished selecting files in the "Open File" dialog. | ||||
* | ||||
* @event fileSelect | ||||
* @param event.type {String} The event type | ||||
* @param event.fileList {Object} A dictionary of objects with file information | ||||
* @param event.fileList[].size {Number} File size in bytes for a specific file in fileList | ||||
* @param event.fileList[].cDate {Date} Creation date for a specific file in fileList | ||||
* @param event.fileList[].mDate {Date} Modification date for a specific file in fileList | ||||
* @param event.fileList[].name {String} File name for a specific file in fileList | ||||
* @param event.fileList[].id {String} Unique file id of a specific file in fileList | ||||
*/ | ||||
this.createEvent("fileSelect"); | ||||
/** | ||||
* Fires when an upload of a specific file has started. | ||||
* | ||||
* @event uploadStart | ||||
* @param event.type {String} The event type | ||||
* @param event.id {String} The id of the file that's started to upload | ||||
*/ | ||||
this.createEvent("uploadStart"); | ||||
/** | ||||
* Fires when new information about the upload progress for a specific file is available. | ||||
* | ||||
* @event uploadProgress | ||||
* @param event.type {String} The event type | ||||
* @param event.id {String} The id of the file with which the upload progress data is associated | ||||
* @param bytesLoaded {Number} The number of bytes of the file uploaded so far | ||||
* @param bytesTotal {Number} The total size of the file | ||||
*/ | ||||
this.createEvent("uploadProgress"); | ||||
/** | ||||
* Fires when an upload for a specific file is cancelled. | ||||
* | ||||
* @event uploadCancel | ||||
* @param event.type {String} The event type | ||||
* @param event.id {String} The id of the file with which the upload has been cancelled. | ||||
*/ | ||||
this.createEvent("uploadCancel"); | ||||
/** | ||||
* Fires when an upload for a specific file is complete. | ||||
* | ||||
* @event uploadComplete | ||||
* @param event.type {String} The event type | ||||
* @param event.id {String} The id of the file for which the upload has been completed. | ||||
*/ | ||||
this.createEvent("uploadComplete"); | ||||
/** | ||||
* Fires when the server sends data in response to a completed upload. | ||||
* | ||||
* @event uploadCompleteData | ||||
* @param event.type {String} The event type | ||||
* @param event.id {String} The id of the file for which the upload has been completed. | ||||
* @param event.data {String} The raw data returned by the server in response to the upload. | ||||
*/ | ||||
this.createEvent("uploadCompleteData"); | ||||
/** | ||||
* Fires when an upload error occurs. | ||||
* | ||||
* @event uploadError | ||||
* @param event.type {String} The event type | ||||
* @param event.id {String} The id of the file that was being uploaded when the error has occurred. | ||||
* @param event.status {String} The status message associated with the error. | ||||
*/ | ||||
this.createEvent("uploadError"); | ||||
} | ||||
/** | ||||
* Location of the Uploader SWF | ||||
* | ||||
* @property Chart.SWFURL | ||||
* @private | ||||
* @static | ||||
* @final | ||||
* @default "assets/uploader.swf" | ||||
*/ | ||||
YAHOO.widget.Uploader.SWFURL = "assets/uploader.swf"; | ||||
YAHOO.extend(YAHOO.widget.Uploader, YAHOO.widget.FlashAdapter, | ||||
{ | ||||
/** | ||||
* Starts the upload of the file specified by fileID to the location specified by uploadScriptPath. | ||||
* | ||||
* @param fileID {String} The id of the file to start uploading. | ||||
* @param uploadScriptPath {String} The URL of the upload location. | ||||
* @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default. | ||||
* @param vars {Object} The object containing variables to be sent in the same request as the file upload. | ||||
* @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default. | ||||
* </code> | ||||
*/ | ||||
upload: function(fileID, uploadScriptPath, method, vars, fieldName) | ||||
{ | ||||
this._swf.upload(fileID, uploadScriptPath, method, vars, fieldName); | ||||
}, | ||||
/** | ||||
* Starts the upload of the files specified by fileIDs, or adds them to a currently running queue. The upload queue is automatically managed. | ||||
* | ||||
* @param fileIDs {Array} The ids of the files to start uploading. | ||||
* @param uploadScriptPath {String} The URL of the upload location. | ||||
* @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default. | ||||
* @param vars {Object} The object containing variables to be sent in the same request as the file upload. | ||||
* @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default. | ||||
* </code> | ||||
*/ | ||||
uploadThese: function(fileIDs, uploadScriptPath, method, vars, fieldName) | ||||
{ | ||||
this._swf.uploadThese(fileIDs, uploadScriptPath, method, vars, fieldName); | ||||
}, | ||||
/** | ||||
* Starts uploading all files in the queue. If this function is called, the upload queue is automatically managed. | ||||
* | ||||
* @param uploadScriptPath {String} The URL of the upload location. | ||||
* @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default. | ||||
* @param vars {Object} The object containing variables to be sent in the same request as the file upload. | ||||
* @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default. | ||||
* </code> | ||||
*/ | ||||
uploadAll: function(uploadScriptPath, method, vars, fieldName) | ||||
{ | ||||
this._swf.uploadAll(uploadScriptPath, method, vars, fieldName); | ||||
}, | ||||
/** | ||||
* Cancels the upload of a specified file. If no file id is specified, all ongoing uploads are cancelled. | ||||
* | ||||
* @param fileID {String} The ID of the file whose upload should be cancelled. | ||||
*/ | ||||
cancel: function(fileID) | ||||
{ | ||||
this._swf.cancel(fileID); | ||||
}, | ||||
/** | ||||
* Clears the list of files queued for upload. | ||||
* | ||||
*/ | ||||
clearFileList: function() | ||||
{ | ||||
this._swf.clearFileList(); | ||||
}, | ||||
/** | ||||
* Removes the specified file from the upload queue. | ||||
* | ||||
* @param fileID {String} The id of the file to remove from the upload queue. | ||||
*/ | ||||
removeFile: function (fileID) | ||||
{ | ||||
this._swf.removeFile(fileID); | ||||
}, | ||||
/** | ||||
* Turns the logging functionality on. | ||||
* Uses Flash internal trace logging, as well as YUI Logger, if available. | ||||
* | ||||
* @param allowLogging {Boolean} If true, logs are output; otherwise, no logs are produced. | ||||
*/ | ||||
setAllowLogging: function (allowLogging) | ||||
{ | ||||
this._swf.setAllowLogging(allowLogging); | ||||
}, | ||||
/** | ||||
* Sets the number of simultaneous uploads when using uploadAll() | ||||
* The minimum value is 1, and maximum value is 5. The default value is 2. | ||||
* | ||||
* @param simUploadLimit {int} Number of simultaneous uploads, between 1 and 5. | ||||
*/ | ||||
setSimUploadLimit : function (simUploadLimit) | ||||
{ | ||||
this._swf.setSimUploadLimit(simUploadLimit); | ||||
}, | ||||
/** | ||||
* Sets the flag allowing users to select multiple files for the upload. | ||||
* | ||||
* @param allowMultipleFiles {Boolean} If true, multiple files can be selected. False by default. | ||||
*/ | ||||
setAllowMultipleFiles : function (allowMultipleFiles) | ||||
{ | ||||
this._swf.setAllowMultipleFiles(allowMultipleFiles); | ||||
}, | ||||
/** | ||||
* Sets the file filters for the "Browse" dialog. | ||||
* | ||||
* @param newFilterArray An array of sets of key-value pairs of the form | ||||
* {extensions: extensionString, description: descriptionString, [optional]macType: macTypeString} | ||||
* The extensions string is a semicolon-delimited list of elements of the form "*.xxx", | ||||
* e.g. "*.jpg;*.gif;*.png". | ||||
*/ | ||||
setFileFilters : function (fileFilters) | ||||
{ | ||||
this._swf.setFileFilters(fileFilters); | ||||
}, | ||||
/** | ||||
* Enables the mouse events on the Uploader. | ||||
* If the uploader is being rendered as a button, | ||||
* then the button's skin is set to "up" | ||||
* (first section of the button skin sprite). | ||||
* | ||||
*/ | ||||
enable : function () | ||||
{ | ||||
this._swf.enable(); | ||||
}, | ||||
/** | ||||
* Disables the mouse events on the Uploader. | ||||
* If the uploader is being rendered as a button, | ||||
* then the button's skin is set to "disabled" | ||||
* (fourth section of the button skin sprite). | ||||
* | ||||
*/ | ||||
disable : function () | ||||
{ | ||||
this._swf.disable(); | ||||
} | ||||
}); | ||||
YAHOO.register("uploader", YAHOO.widget.Uploader, {version: "2.8.0r4", build: "2449"}); | ||||