mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-03 09:14:48 +09:00
XE 기본 파일 업로더인 SWF Upload 2.2.0.1 로 업데이트 및 업로드 버튼이 가려지는 문제 수정
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6200 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
fb55fedd9f
commit
1bc5754cbc
3 changed files with 203 additions and 111 deletions
Binary file not shown.
|
|
@ -15,10 +15,13 @@
|
||||||
/* ******************* */
|
/* ******************* */
|
||||||
/* Constructor & Init */
|
/* Constructor & Init */
|
||||||
/* ******************* */
|
/* ******************* */
|
||||||
|
var SWFUpload;
|
||||||
|
|
||||||
var SWFUpload = function (settings) {
|
if (SWFUpload == undefined) {
|
||||||
this.initSWFUpload(settings);
|
SWFUpload = function (settings) {
|
||||||
};
|
this.initSWFUpload(settings);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
SWFUpload.prototype.initSWFUpload = function (settings) {
|
SWFUpload.prototype.initSWFUpload = function (settings) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -28,6 +31,7 @@ SWFUpload.prototype.initSWFUpload = function (settings) {
|
||||||
this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
|
this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
|
||||||
this.movieElement = null;
|
this.movieElement = null;
|
||||||
|
|
||||||
|
|
||||||
// Setup global control tracking
|
// Setup global control tracking
|
||||||
SWFUpload.instances[this.movieName] = this;
|
SWFUpload.instances[this.movieName] = this;
|
||||||
|
|
||||||
|
|
@ -46,7 +50,7 @@ SWFUpload.prototype.initSWFUpload = function (settings) {
|
||||||
/* *************** */
|
/* *************** */
|
||||||
SWFUpload.instances = {};
|
SWFUpload.instances = {};
|
||||||
SWFUpload.movieCount = 0;
|
SWFUpload.movieCount = 0;
|
||||||
SWFUpload.version = "2.2.0 Alpha";
|
SWFUpload.version = "2.2.0 2009-03-25";
|
||||||
SWFUpload.QUEUE_ERROR = {
|
SWFUpload.QUEUE_ERROR = {
|
||||||
QUEUE_LIMIT_EXCEEDED : -100,
|
QUEUE_LIMIT_EXCEEDED : -100,
|
||||||
FILE_EXCEEDS_SIZE_LIMIT : -110,
|
FILE_EXCEEDS_SIZE_LIMIT : -110,
|
||||||
|
|
@ -77,6 +81,36 @@ SWFUpload.BUTTON_ACTION = {
|
||||||
SELECT_FILES : -110,
|
SELECT_FILES : -110,
|
||||||
START_UPLOAD : -120
|
START_UPLOAD : -120
|
||||||
};
|
};
|
||||||
|
SWFUpload.CURSOR = {
|
||||||
|
ARROW : -1,
|
||||||
|
HAND : -2
|
||||||
|
};
|
||||||
|
SWFUpload.WINDOW_MODE = {
|
||||||
|
WINDOW : "window",
|
||||||
|
TRANSPARENT : "transparent",
|
||||||
|
OPAQUE : "opaque"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Private: takes a URL, determines if it is relative and converts to an absolute URL
|
||||||
|
// using the current site. Only processes the URL if it can, otherwise returns the URL untouched
|
||||||
|
SWFUpload.completeURL = function(url) {
|
||||||
|
if (typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//)) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentURL = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : "");
|
||||||
|
|
||||||
|
var indexSlash = window.location.pathname.lastIndexOf("/");
|
||||||
|
if (indexSlash <= 0) {
|
||||||
|
path = "/";
|
||||||
|
} else {
|
||||||
|
path = window.location.pathname.substr(0, indexSlash) + "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
return /*currentURL +*/ path + url;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* ******************** */
|
/* ******************** */
|
||||||
/* Instance Members */
|
/* Instance Members */
|
||||||
|
|
@ -91,10 +125,13 @@ SWFUpload.prototype.initSettings = function () {
|
||||||
|
|
||||||
// Upload backend settings
|
// Upload backend settings
|
||||||
this.ensureDefault("upload_url", "");
|
this.ensureDefault("upload_url", "");
|
||||||
|
this.ensureDefault("preserve_relative_urls", false);
|
||||||
this.ensureDefault("file_post_name", "Filedata");
|
this.ensureDefault("file_post_name", "Filedata");
|
||||||
this.ensureDefault("post_params", {});
|
this.ensureDefault("post_params", {});
|
||||||
this.ensureDefault("use_query_string", false);
|
this.ensureDefault("use_query_string", false);
|
||||||
this.ensureDefault("requeue_on_error", false);
|
this.ensureDefault("requeue_on_error", false);
|
||||||
|
this.ensureDefault("http_success", []);
|
||||||
|
this.ensureDefault("assume_success_timeout", 0);
|
||||||
|
|
||||||
// File Settings
|
// File Settings
|
||||||
this.ensureDefault("file_types", "*.*");
|
this.ensureDefault("file_types", "*.*");
|
||||||
|
|
@ -117,7 +154,10 @@ SWFUpload.prototype.initSettings = function () {
|
||||||
this.ensureDefault("button_text_left_padding", 0);
|
this.ensureDefault("button_text_left_padding", 0);
|
||||||
this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES);
|
this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES);
|
||||||
this.ensureDefault("button_disabled", false);
|
this.ensureDefault("button_disabled", false);
|
||||||
this.ensureDefault("button_placeholder_id", null);
|
this.ensureDefault("button_placeholder_id", "");
|
||||||
|
this.ensureDefault("button_placeholder", null);
|
||||||
|
this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW);
|
||||||
|
this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW);
|
||||||
|
|
||||||
// Debug Settings
|
// Debug Settings
|
||||||
this.ensureDefault("debug", false);
|
this.ensureDefault("debug", false);
|
||||||
|
|
@ -145,50 +185,21 @@ SWFUpload.prototype.initSettings = function () {
|
||||||
this.customSettings = this.settings.custom_settings;
|
this.customSettings = this.settings.custom_settings;
|
||||||
|
|
||||||
// Update the flash url if needed
|
// Update the flash url if needed
|
||||||
if (this.settings.prevent_swf_caching) {
|
if (!!this.settings.prevent_swf_caching) {
|
||||||
this.settings.flash_url = this.settings.flash_url + "?swfuploadrnd=" + Math.floor(Math.random() * 999999999);
|
this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.settings.preserve_relative_urls) {
|
||||||
|
//this.settings.flash_url = SWFUpload.completeURL(this.settings.flash_url); // Don't need to do this one since flash doesn't look at it
|
||||||
|
this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);
|
||||||
|
this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete this.ensureDefault;
|
delete this.ensureDefault;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Private: loadFlash replaces the button_placeholder element with the flash movie.
|
||||||
SWFUpload.prototype.loadFlash = function () {
|
SWFUpload.prototype.loadFlash = function () {
|
||||||
if (this.settings.button_placeholder_id !== "") {
|
|
||||||
this.replaceWithFlash();
|
|
||||||
} else {
|
|
||||||
this.appendFlash();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Private: appendFlash gets the HTML tag for the Flash
|
|
||||||
// It then appends the flash to the body
|
|
||||||
SWFUpload.prototype.appendFlash = function () {
|
|
||||||
var targetElement, container;
|
|
||||||
|
|
||||||
// Make sure an element with the ID we are going to use doesn't already exist
|
|
||||||
if (document.getElementById(this.movieName) !== null) {
|
|
||||||
throw "ID " + this.movieName + " is already in use. The Flash Object could not be added";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the body tag where we will be adding the flash movie
|
|
||||||
targetElement = document.getElementsByTagName("body")[0];
|
|
||||||
|
|
||||||
if (targetElement == undefined) {
|
|
||||||
throw "Could not find the 'body' element.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append the container and load the flash
|
|
||||||
container = document.createElement("div");
|
|
||||||
container.style.width = "1px";
|
|
||||||
container.style.height = "1px";
|
|
||||||
container.style.overflow = "hidden";
|
|
||||||
|
|
||||||
targetElement.appendChild(container);
|
|
||||||
container.innerHTML = this.getFlashHTML(); // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Private: replaceWithFlash replaces the button_placeholder element with the flash movie.
|
|
||||||
SWFUpload.prototype.replaceWithFlash = function () {
|
|
||||||
var targetElement, tempParent;
|
var targetElement, tempParent;
|
||||||
|
|
||||||
// Make sure an element with the ID we are going to use doesn't already exist
|
// Make sure an element with the ID we are going to use doesn't already exist
|
||||||
|
|
@ -197,10 +208,10 @@ SWFUpload.prototype.replaceWithFlash = function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the element where we will be placing the flash movie
|
// Get the element where we will be placing the flash movie
|
||||||
targetElement = document.getElementById(this.settings.button_placeholder_id);
|
targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder;
|
||||||
|
|
||||||
if (targetElement == undefined) {
|
if (targetElement == undefined) {
|
||||||
throw "Could not find the placeholder element.";
|
throw "Could not find the placeholder element: " + this.settings.button_placeholder_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append the container and load the flash
|
// Append the container and load the flash
|
||||||
|
|
@ -208,15 +219,18 @@ SWFUpload.prototype.replaceWithFlash = function () {
|
||||||
tempParent.innerHTML = this.getFlashHTML(); // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
|
tempParent.innerHTML = this.getFlashHTML(); // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
|
||||||
targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement);
|
targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement);
|
||||||
|
|
||||||
|
// Fix IE Flash/Form bug
|
||||||
|
if (window[this.movieName] == undefined) {
|
||||||
|
window[this.movieName] = this.getMovieElement();
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Private: getFlashHTML generates the object tag needed to embed the flash in to the document
|
// Private: getFlashHTML generates the object tag needed to embed the flash in to the document
|
||||||
SWFUpload.prototype.getFlashHTML = function () {
|
SWFUpload.prototype.getFlashHTML = function () {
|
||||||
var transparent = this.settings.button_image_url === "" ? true : false;
|
|
||||||
|
|
||||||
// Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
|
// Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
|
||||||
return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
|
return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
|
||||||
'<param name="wmode" value="', transparent ? "transparent" : "window", '" />',
|
'<param name="wmode" value="', this.settings.button_window_mode, '" />',
|
||||||
'<param name="movie" value="', this.settings.flash_url, '" />',
|
'<param name="movie" value="', this.settings.flash_url, '" />',
|
||||||
'<param name="quality" value="high" />',
|
'<param name="quality" value="high" />',
|
||||||
'<param name="menu" value="false" />',
|
'<param name="menu" value="false" />',
|
||||||
|
|
@ -230,12 +244,15 @@ SWFUpload.prototype.getFlashHTML = function () {
|
||||||
SWFUpload.prototype.getFlashVars = function () {
|
SWFUpload.prototype.getFlashVars = function () {
|
||||||
// Build a string from the post param object
|
// Build a string from the post param object
|
||||||
var paramString = this.buildParamString();
|
var paramString = this.buildParamString();
|
||||||
|
var httpSuccessString = this.settings.http_success.join(",");
|
||||||
|
|
||||||
// Build the parameter string
|
// Build the parameter string
|
||||||
return ["movieName=", encodeURIComponent(this.movieName),
|
return ["movieName=", encodeURIComponent(this.movieName),
|
||||||
"&uploadURL=", encodeURIComponent(this.settings.upload_url),
|
"&uploadURL=", encodeURIComponent(this.settings.upload_url),
|
||||||
"&useQueryString=", encodeURIComponent(this.settings.use_query_string),
|
"&useQueryString=", encodeURIComponent(this.settings.use_query_string),
|
||||||
"&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error),
|
"&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error),
|
||||||
|
"&httpSuccess=", encodeURIComponent(httpSuccessString),
|
||||||
|
"&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout),
|
||||||
"&params=", encodeURIComponent(paramString),
|
"&params=", encodeURIComponent(paramString),
|
||||||
"&filePostName=", encodeURIComponent(this.settings.file_post_name),
|
"&filePostName=", encodeURIComponent(this.settings.file_post_name),
|
||||||
"&fileTypes=", encodeURIComponent(this.settings.file_types),
|
"&fileTypes=", encodeURIComponent(this.settings.file_types),
|
||||||
|
|
@ -252,7 +269,8 @@ SWFUpload.prototype.getFlashVars = function () {
|
||||||
"&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding),
|
"&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding),
|
||||||
"&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style),
|
"&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style),
|
||||||
"&buttonAction=", encodeURIComponent(this.settings.button_action),
|
"&buttonAction=", encodeURIComponent(this.settings.button_action),
|
||||||
"&buttonDisabled=", encodeURIComponent(this.settings.button_disabled)
|
"&buttonDisabled=", encodeURIComponent(this.settings.button_disabled),
|
||||||
|
"&buttonCursor=", encodeURIComponent(this.settings.button_cursor)
|
||||||
].join("");
|
].join("");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -290,46 +308,54 @@ SWFUpload.prototype.buildParamString = function () {
|
||||||
// Public: Used to remove a SWFUpload instance from the page. This method strives to remove
|
// Public: Used to remove a SWFUpload instance from the page. This method strives to remove
|
||||||
// all references to the SWF, and other objects so memory is properly freed.
|
// all references to the SWF, and other objects so memory is properly freed.
|
||||||
// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state.
|
// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state.
|
||||||
|
// Credits: Major improvements provided by steffen
|
||||||
SWFUpload.prototype.destroy = function () {
|
SWFUpload.prototype.destroy = function () {
|
||||||
try {
|
try {
|
||||||
// Make sure Flash is done before we try to remove it
|
// Make sure Flash is done before we try to remove it
|
||||||
this.stopUpload();
|
this.cancelUpload(null, false);
|
||||||
|
|
||||||
|
|
||||||
// Remove the SWFUpload DOM nodes
|
// Remove the SWFUpload DOM nodes
|
||||||
var movieElement = null;
|
var movieElement = null;
|
||||||
try {
|
movieElement = this.getMovieElement();
|
||||||
movieElement = this.getMovieElement();
|
|
||||||
} catch (ex) {
|
|
||||||
}
|
|
||||||
|
|
||||||
if (movieElement != undefined && movieElement.parentNode != undefined && typeof movieElement.parentNode.removeChild === "function") {
|
if (movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE
|
||||||
var container = movieElement.parentNode;
|
// Loop through all the movie's properties and remove all function references (DOM/JS IE 6/7 memory leak workaround)
|
||||||
if (container != undefined) {
|
for (var i in movieElement) {
|
||||||
container.removeChild(movieElement);
|
try {
|
||||||
if (container.parentNode != undefined && typeof container.parentNode.removeChild === "function") {
|
if (typeof(movieElement[i]) === "function") {
|
||||||
container.parentNode.removeChild(container);
|
movieElement[i] = null;
|
||||||
}
|
}
|
||||||
|
} catch (ex1) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove the Movie Element from the page
|
||||||
|
try {
|
||||||
|
movieElement.parentNode.removeChild(movieElement);
|
||||||
|
} catch (ex) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destroy references
|
// Remove IE form fix reference
|
||||||
|
window[this.movieName] = null;
|
||||||
|
|
||||||
|
// Destroy other references
|
||||||
SWFUpload.instances[this.movieName] = null;
|
SWFUpload.instances[this.movieName] = null;
|
||||||
delete SWFUpload.instances[this.movieName];
|
delete SWFUpload.instances[this.movieName];
|
||||||
|
|
||||||
delete this.movieElement;
|
this.movieElement = null;
|
||||||
delete this.settings;
|
this.settings = null;
|
||||||
delete this.customSettings;
|
this.customSettings = null;
|
||||||
delete this.eventQueue;
|
this.eventQueue = null;
|
||||||
delete this.movieName;
|
this.movieName = null;
|
||||||
|
|
||||||
delete window[this.movieName];
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (ex1) {
|
} catch (ex2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Public: displayDebugInfo prints out settings and configuration
|
// Public: displayDebugInfo prints out settings and configuration
|
||||||
// information about this SWFUpload instance.
|
// information about this SWFUpload instance.
|
||||||
// This function (and any references to it) can be deleted when placing
|
// This function (and any references to it) can be deleted when placing
|
||||||
|
|
@ -344,6 +370,9 @@ SWFUpload.prototype.displayDebugInfo = function () {
|
||||||
"\t", "upload_url: ", this.settings.upload_url, "\n",
|
"\t", "upload_url: ", this.settings.upload_url, "\n",
|
||||||
"\t", "flash_url: ", this.settings.flash_url, "\n",
|
"\t", "flash_url: ", this.settings.flash_url, "\n",
|
||||||
"\t", "use_query_string: ", this.settings.use_query_string.toString(), "\n",
|
"\t", "use_query_string: ", this.settings.use_query_string.toString(), "\n",
|
||||||
|
"\t", "requeue_on_error: ", this.settings.requeue_on_error.toString(), "\n",
|
||||||
|
"\t", "http_success: ", this.settings.http_success.join(", "), "\n",
|
||||||
|
"\t", "assume_success_timeout: ", this.settings.assume_success_timeout, "\n",
|
||||||
"\t", "file_post_name: ", this.settings.file_post_name, "\n",
|
"\t", "file_post_name: ", this.settings.file_post_name, "\n",
|
||||||
"\t", "post_params: ", this.settings.post_params.toString(), "\n",
|
"\t", "post_params: ", this.settings.post_params.toString(), "\n",
|
||||||
"\t", "file_types: ", this.settings.file_types, "\n",
|
"\t", "file_types: ", this.settings.file_types, "\n",
|
||||||
|
|
@ -356,6 +385,7 @@ SWFUpload.prototype.displayDebugInfo = function () {
|
||||||
"\t", "prevent_swf_caching: ", this.settings.prevent_swf_caching.toString(), "\n",
|
"\t", "prevent_swf_caching: ", this.settings.prevent_swf_caching.toString(), "\n",
|
||||||
|
|
||||||
"\t", "button_placeholder_id: ", this.settings.button_placeholder_id.toString(), "\n",
|
"\t", "button_placeholder_id: ", this.settings.button_placeholder_id.toString(), "\n",
|
||||||
|
"\t", "button_placeholder: ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n",
|
||||||
"\t", "button_image_url: ", this.settings.button_image_url.toString(), "\n",
|
"\t", "button_image_url: ", this.settings.button_image_url.toString(), "\n",
|
||||||
"\t", "button_width: ", this.settings.button_width.toString(), "\n",
|
"\t", "button_width: ", this.settings.button_width.toString(), "\n",
|
||||||
"\t", "button_height: ", this.settings.button_height.toString(), "\n",
|
"\t", "button_height: ", this.settings.button_height.toString(), "\n",
|
||||||
|
|
@ -412,33 +442,23 @@ SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
|
||||||
argumentArray = argumentArray || [];
|
argumentArray = argumentArray || [];
|
||||||
|
|
||||||
var movieElement = this.getMovieElement();
|
var movieElement = this.getMovieElement();
|
||||||
var returnValue;
|
var returnValue, returnString;
|
||||||
|
|
||||||
if (typeof movieElement[functionName] === "function") {
|
// Flash's method if calling ExternalInterface methods (code adapted from MooTools).
|
||||||
// We have to go through all this if/else stuff because the Flash functions don't have apply() and only accept the exact number of arguments.
|
try {
|
||||||
if (argumentArray.length === 0) {
|
returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>');
|
||||||
returnValue = movieElement[functionName]();
|
returnValue = eval(returnString);
|
||||||
} else if (argumentArray.length === 1) {
|
} catch (ex) {
|
||||||
returnValue = movieElement[functionName](argumentArray[0]);
|
throw "Call to " + functionName + " failed";
|
||||||
} else if (argumentArray.length === 2) {
|
}
|
||||||
returnValue = movieElement[functionName](argumentArray[0], argumentArray[1]);
|
|
||||||
} else if (argumentArray.length === 3) {
|
// Unescape file post param values
|
||||||
returnValue = movieElement[functionName](argumentArray[0], argumentArray[1], argumentArray[2]);
|
if (returnValue != undefined && typeof returnValue.post === "object") {
|
||||||
} else {
|
returnValue = this.unescapeFilePostParams(returnValue);
|
||||||
throw "Too many arguments";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unescape file post param values
|
|
||||||
if (returnValue != undefined && typeof returnValue.post === "object") {
|
|
||||||
returnValue = this.unescapeFilePostParams(returnValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
} else {
|
|
||||||
throw "Invalid function name: " + functionName;
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
};
|
||||||
|
|
||||||
/* *****************************
|
/* *****************************
|
||||||
-- Flash control methods --
|
-- Flash control methods --
|
||||||
|
|
@ -446,17 +466,19 @@ SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
|
||||||
to operate SWFUpload
|
to operate SWFUpload
|
||||||
***************************** */
|
***************************** */
|
||||||
|
|
||||||
|
// WARNING: this function does not work in Flash Player 10
|
||||||
// Public: selectFile causes a File Selection Dialog window to appear. This
|
// Public: selectFile causes a File Selection Dialog window to appear. This
|
||||||
// dialog only allows 1 file to be selected. WARNING: this function does not work in Flash Player 10
|
// dialog only allows 1 file to be selected.
|
||||||
SWFUpload.prototype.selectFile = function () {
|
SWFUpload.prototype.selectFile = function () {
|
||||||
this.callFlash("SelectFile");
|
this.callFlash("SelectFile");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// WARNING: this function does not work in Flash Player 10
|
||||||
// Public: selectFiles causes a File Selection Dialog window to appear/ This
|
// Public: selectFiles causes a File Selection Dialog window to appear/ This
|
||||||
// dialog allows the user to select any number of files
|
// dialog allows the user to select any number of files
|
||||||
// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names.
|
// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names.
|
||||||
// If the selection name length is too long the dialog will fail in an unpredictable manner. There is no work-around
|
// If the selection name length is too long the dialog will fail in an unpredictable manner. There is no work-around
|
||||||
// for this bug. WARNING: this function does not work in Flash Player 10
|
// for this bug.
|
||||||
SWFUpload.prototype.selectFiles = function () {
|
SWFUpload.prototype.selectFiles = function () {
|
||||||
this.callFlash("SelectFiles");
|
this.callFlash("SelectFiles");
|
||||||
};
|
};
|
||||||
|
|
@ -468,11 +490,14 @@ SWFUpload.prototype.startUpload = function (fileID) {
|
||||||
this.callFlash("StartUpload", [fileID]);
|
this.callFlash("StartUpload", [fileID]);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Cancels a the file upload. You must specify a file_id */
|
// Public: cancelUpload cancels any queued file. The fileID parameter may be the file ID or index.
|
||||||
// Public: cancelUpload cancels any queued file. The fileID parameter
|
// If you do not specify a fileID the current uploading file or first file in the queue is cancelled.
|
||||||
// must be specified.
|
// If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter.
|
||||||
SWFUpload.prototype.cancelUpload = function (fileID) {
|
SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) {
|
||||||
this.callFlash("CancelUpload", [fileID]);
|
if (triggerErrorEvent !== false) {
|
||||||
|
triggerErrorEvent = true;
|
||||||
|
}
|
||||||
|
this.callFlash("CancelUpload", [fileID, triggerErrorEvent]);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue.
|
// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue.
|
||||||
|
|
@ -592,6 +617,22 @@ SWFUpload.prototype.setRequeueOnError = function (requeueOnError) {
|
||||||
this.callFlash("SetRequeueOnError", [requeueOnError]);
|
this.callFlash("SetRequeueOnError", [requeueOnError]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Public: setHTTPSuccess changes the http_success setting
|
||||||
|
SWFUpload.prototype.setHTTPSuccess = function (http_status_codes) {
|
||||||
|
if (typeof http_status_codes === "string") {
|
||||||
|
http_status_codes = http_status_codes.replace(" ", "").split(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.settings.http_success = http_status_codes;
|
||||||
|
this.callFlash("SetHTTPSuccess", [http_status_codes]);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Public: setHTTPSuccess changes the http_success setting
|
||||||
|
SWFUpload.prototype.setAssumeSuccessTimeout = function (timeout_seconds) {
|
||||||
|
this.settings.assume_success_timeout = timeout_seconds;
|
||||||
|
this.callFlash("SetAssumeSuccessTimeout", [timeout_seconds]);
|
||||||
|
};
|
||||||
|
|
||||||
// Public: setDebugEnabled changes the debug_enabled setting
|
// Public: setDebugEnabled changes the debug_enabled setting
|
||||||
SWFUpload.prototype.setDebugEnabled = function (debugEnabled) {
|
SWFUpload.prototype.setDebugEnabled = function (debugEnabled) {
|
||||||
this.settings.debug_enabled = debugEnabled;
|
this.settings.debug_enabled = debugEnabled;
|
||||||
|
|
@ -649,6 +690,12 @@ SWFUpload.prototype.setButtonAction = function (buttonAction) {
|
||||||
this.callFlash("SetButtonAction", [buttonAction]);
|
this.callFlash("SetButtonAction", [buttonAction]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Public: setButtonCursor changes the mouse cursor displayed when hovering over the button
|
||||||
|
SWFUpload.prototype.setButtonCursor = function (cursor) {
|
||||||
|
this.settings.button_cursor = cursor;
|
||||||
|
this.callFlash("SetButtonCursor", [cursor]);
|
||||||
|
};
|
||||||
|
|
||||||
/* *******************************
|
/* *******************************
|
||||||
Flash Event Interfaces
|
Flash Event Interfaces
|
||||||
These functions are used by Flash to trigger the various
|
These functions are used by Flash to trigger the various
|
||||||
|
|
@ -725,21 +772,65 @@ SWFUpload.prototype.unescapeFilePostParams = function (file) {
|
||||||
return file;
|
return file;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Private: Called by Flash to see if JS can call in to Flash (test if External Interface is working)
|
||||||
|
SWFUpload.prototype.testExternalInterface = function () {
|
||||||
|
try {
|
||||||
|
return this.callFlash("TestExternalInterface");
|
||||||
|
} catch (ex) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Private: This event is called by Flash when it has finished loading. Don't modify this.
|
||||||
|
// Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded.
|
||||||
SWFUpload.prototype.flashReady = function () {
|
SWFUpload.prototype.flashReady = function () {
|
||||||
// Check that the movie element is loaded correctly with its ExternalInterface methods defined
|
// Check that the movie element is loaded correctly with its ExternalInterface methods defined
|
||||||
var movieElement = this.getMovieElement();
|
var movieElement = this.getMovieElement();
|
||||||
if (typeof movieElement.StartUpload !== "function") {
|
|
||||||
throw "ExternalInterface methods failed to initialize.";
|
if (!movieElement) {
|
||||||
|
this.debug("Flash called back ready but the flash movie can't be found.");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fix IE Flash/Form bug
|
this.cleanUp(movieElement);
|
||||||
if (window[this.movieName] == undefined) {
|
|
||||||
window[this.movieName] = movieElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.queueEvent("swfupload_loaded_handler");
|
this.queueEvent("swfupload_loaded_handler");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE.
|
||||||
|
// This function is called by Flash each time the ExternalInterface functions are created.
|
||||||
|
SWFUpload.prototype.cleanUp = function (movieElement) {
|
||||||
|
// Pro-actively unhook all the Flash functions
|
||||||
|
try {
|
||||||
|
if (this.movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE
|
||||||
|
this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");
|
||||||
|
for (var key in movieElement) {
|
||||||
|
try {
|
||||||
|
if (typeof(movieElement[key]) === "function") {
|
||||||
|
movieElement[key] = null;
|
||||||
|
}
|
||||||
|
} catch (ex) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (ex1) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix Flashes own cleanup code so if the SWFMovie was removed from the page
|
||||||
|
// it doesn't display errors.
|
||||||
|
window["__flash__removeCallback"] = function (instance, name) {
|
||||||
|
try {
|
||||||
|
if (instance) {
|
||||||
|
instance[name] = null;
|
||||||
|
}
|
||||||
|
} catch (flashEx) {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* This is a chance to do something before the browse window opens */
|
/* This is a chance to do something before the browse window opens */
|
||||||
SWFUpload.prototype.fileDialogStart = function () {
|
SWFUpload.prototype.fileDialogStart = function () {
|
||||||
|
|
@ -762,8 +853,8 @@ SWFUpload.prototype.fileQueueError = function (file, errorCode, message) {
|
||||||
|
|
||||||
/* Called after the file dialog has closed and the selected files have been queued.
|
/* Called after the file dialog has closed and the selected files have been queued.
|
||||||
You could call startUpload here if you want the queued files to begin uploading immediately. */
|
You could call startUpload here if you want the queued files to begin uploading immediately. */
|
||||||
SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued) {
|
SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) {
|
||||||
this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued]);
|
this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]);
|
||||||
};
|
};
|
||||||
|
|
||||||
SWFUpload.prototype.uploadStart = function (file) {
|
SWFUpload.prototype.uploadStart = function (file) {
|
||||||
|
|
@ -803,9 +894,9 @@ SWFUpload.prototype.uploadError = function (file, errorCode, message) {
|
||||||
this.queueEvent("upload_error_handler", [file, errorCode, message]);
|
this.queueEvent("upload_error_handler", [file, errorCode, message]);
|
||||||
};
|
};
|
||||||
|
|
||||||
SWFUpload.prototype.uploadSuccess = function (file, serverData) {
|
SWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) {
|
||||||
file = this.unescapeFilePostParams(file);
|
file = this.unescapeFilePostParams(file);
|
||||||
this.queueEvent("upload_success_handler", [file, serverData]);
|
this.queueEvent("upload_success_handler", [file, serverData, responseReceived]);
|
||||||
};
|
};
|
||||||
|
|
||||||
SWFUpload.prototype.uploadComplete = function (file) {
|
SWFUpload.prototype.uploadComplete = function (file) {
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ function XEUploaderStart(obj) {
|
||||||
debug: false,
|
debug: false,
|
||||||
|
|
||||||
// Button settings
|
// Button settings
|
||||||
|
button_window_mode: 'transparent',
|
||||||
button_placeholder_id: dummy.id,
|
button_placeholder_id: dummy.id,
|
||||||
button_text: null,
|
button_text: null,
|
||||||
button_image_url: "",
|
button_image_url: "",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue