diff --git a/code/AssetAdmin.php b/code/AssetAdmin.php index faef5cb1..a53739ae 100755 --- a/code/AssetAdmin.php +++ b/code/AssetAdmin.php @@ -70,10 +70,6 @@ class AssetAdmin extends LeftAndMain { Requirements::css(SAPPHIRE_DIR . "/css/ComplexTableField.css"); Requirements::javascript(CMS_DIR . "/javascript/AssetAdmin.js"); - - Requirements::javascript(CMS_DIR . "/javascript/CMSMain_upload.js"); - Requirements::javascript(CMS_DIR . "/javascript/Upload.js"); - Requirements::javascript(CMS_DIR . "/thirdparty/swfupload/swfupload.js"); Requirements::javascript(THIRDPARTY_DIR . "/greybox/AmiJS.js"); Requirements::javascript(THIRDPARTY_DIR . "/greybox/greybox.js"); @@ -121,8 +117,6 @@ JS * Return the form object shown in the uploadiframe. */ function UploadForm() { - // disabled flash upload javascript (CMSMain_upload()) below, - // see r54952 (originally committed in r42014) $form = new Form($this,'UploadForm', new FieldSet( new HiddenField("ID", "", $this->currentPageID()), new HiddenField("FolderID", "", $this->currentPageID()), diff --git a/code/LeftAndMain.php b/code/LeftAndMain.php index 4f332b3a..b2b6ca1c 100644 --- a/code/LeftAndMain.php +++ b/code/LeftAndMain.php @@ -268,9 +268,6 @@ class LeftAndMain extends Controller { CMS_DIR . '/javascript/LeftAndMain_right.js', SAPPHIRE_DIR . '/javascript/tree/tree.js', THIRDPARTY_DIR . '/tabstrip/tabstrip.js', - CMS_DIR . '/thirdparty/swfupload/swfupload.js', - CMS_DIR . '/javascript/Upload.js', - CMS_DIR . '/javascript/TinyMCEImageEnhancement.js', SAPPHIRE_DIR . '/javascript/TreeSelectorField.js', CMS_DIR . '/javascript/ThumbnailStripField.js', ) diff --git a/css/TinyMCEImageEnhancement.css b/css/TinyMCEImageEnhancement.css deleted file mode 100644 index aafadef7..00000000 --- a/css/TinyMCEImageEnhancement.css +++ /dev/null @@ -1,20 +0,0 @@ -.contentPanel .group { - display: inline; - margin-left: 2px; -} -.contentPanel .middleColumn { - margin-bottom: 2px; -} -.contentPanel .link { - text-decoration: none; - margin-left: 2px; -} - - -.contentPanel .tree_holder { - display: inline; -} -.contentPanel #NewFolderName { - width: 120px; - margin-top: 0; -} diff --git a/css/cms_right.css b/css/cms_right.css index df4e431e..0ff55828 100644 --- a/css/cms_right.css +++ b/css/cms_right.css @@ -490,3 +490,29 @@ div.filterBox { .autocompleteoptions { background-color: white; } + +/** + * Upload Image (Image Toolbar) + */ +#Form_EditorToolbarImageForm .file, +#Form_EditorToolbarImageForm #UploadFormResponse { + display: none; +} + +.showUploadField { + font-size: 11px; + padding: 1px 3px; +} + .showUploadField a { + display: none; + } + + #UploadFormResponse { + padding: 6px 0; + font-size: 12px; + } + #UploadFormResponse.loading + .loading#UploadFormResponse { + background: url(../../cms/images/network-save.gif) no-repeat left center; + padding-left: 20px; + } diff --git a/javascript/CMSMain_upload.js b/javascript/CMSMain_upload.js deleted file mode 100644 index 1960ae17..00000000 --- a/javascript/CMSMain_upload.js +++ /dev/null @@ -1,166 +0,0 @@ -/** - * This class is used for upload in asset part. - * If one of methods is not commented look for comment in Upload.js - -*/ -CMSMain_upload = Class.create(); -CMSMain_upload.prototype = { - initialize: function() { - - // If those 2 checks pass, we can provide upload capabilities to the user - this.iframe = window.top.document.getElementById('AssetAdmin_upload'); - this.onLoad(); - }, - - onLoad: function() { - this.upload = new Upload({ - fileUploadLimit : '6', - securityID : $('SecurityID').value, - beginUploadOnQueue : false, - fileQueued : this.uploadFileQueuedCallback.bind(this), - fileProgress : this.uploadProgressCallback.bind(this), - fileCancelled : this.uploadFileCancelCallback.bind(this), - fileComplete : this.uploadFileCompleteCallback.bind(this), - queueComplete : this.uploadQueueCompleteCallback.bind(this), - buildUI : this.extendForm.bind(this) - }); - }, - - /** - * Builds UI, called only when Upload object will be able to create flash uploader. - */ - - extendForm: function() { - if(this.iframe.contentDocument == undefined) this.iframe.contentDocument = document.frames[0].document;//IE HACK - element = this.iframe.contentDocument.getElementById('Form_UploadForm'); - inputFile = this.iframe.contentDocument.getElementById('Form_UploadForm_Files-0'); - inputFileParent = inputFile.parentNode; - inputFileParent.removeChild(inputFile); - inputFile = this.iframe.contentDocument.createElement('input'); - inputFile.type = 'text'; - inputFile.id = 'Form_UploadForm_Files-0'; - inputFileParent.appendChild(inputFile); - inputButton = this.iframe.contentDocument.getElementById('Form_UploadForm_Files-1'); - if(inputButton != null) inputButton.parentNode.removeChild(inputButton); - inputButton = this.iframe.contentDocument.createElement('input'); - inputButton.type = 'button'; - inputButton.id = 'Form_UploadForm_Files-1'; - inputButton.value = ' Browse...'; - inputButton.style.width = '66px'; - inputButton.style.height = '19px'; - inputButton.style.position = 'relative'; - inputButton.style.top = '1px'; - inputButton.style.fontFamily = 'Arial'; - inputButton.style.fontSize = '1.06em'; - inputFileParent.appendChild(inputButton); - Event.observe(inputButton,'click',this.onBrowseClick.bind(this)); - Event.observe(this.iframe.contentDocument.getElementById('Form_UploadForm_action_upload'),'click',this.onUploadClick.bind(this)); - }, - - onBrowseClick: function(event) { - this.upload.browse(); - }, - - onUploadClick: function(event) { - Event.stop(event); - this.upload.startUpload(); - }, - - uploadFileQueuedCallback: function(file,queueLength) { - this.upload.setFolderID(this.iframe.contentDocument.getElementById('Form_UploadForm_ID').value); - this.iframe.contentDocument.getElementById('Form_UploadForm_action_upload').disabled = false; - var fileContainer = this.iframe.contentDocument.getElementById('Form_UploadForm_FilesList'); - if(fileContainer == null) { - fileContainer = this.iframe.contentDocument.createElement('div'); - fileContainer.id = 'Form_UploadForm_FilesList'; - this.iframe.contentDocument.getElementById('Form_UploadForm').appendChild(fileContainer); - } - - var fileToUpload = this.iframe.contentDocument.createElement('div'); - fileToUpload.id = 'Form_UploadForm_FilesList_' + file.id; - fileToUpload.style.marginBottom = '3px'; - fileContainer.appendChild(fileToUpload); - - var fileName = this.iframe.contentDocument.createElement('div'); - fileName.id = 'Form_UploadForm_FilesList_Name_' + file.id; - fileName.style.position = 'relative'; - fileName.style.top = '-4px'; - fileName.style.display = 'inline'; - fileName.style.padding = '2px'; - fileName.innerHTML = file.name; - fileName.style.height = Element.getDimensions(fileName).height + 1 + 'px';//IE hack - fileToUpload.appendChild(fileName); - - var fileProgress = this.iframe.contentDocument.createElement('div'); - fileProgress.id = 'Form_UploadForm_FilesList_Progress_' + file.id; - Position.clone(fileName,fileProgress); - fileProgress.style.backgroundColor = 'black'; - fileProgress.style.display = 'inline'; - fileProgress.style.position = 'absolute'; - fileProgress.style.left = '5px'; - fileProgress.style.width = '0px'; - fileProgress.finished = false; - fileProgress.style.top = parseInt(fileProgress.style.top) + 6 + 'px'; - fileProgress.style.height = Element.getDimensions(fileName).height + 1 + 'px'; - fileToUpload.appendChild(fileProgress); - - var fileDelete = this.iframe.contentDocument.createElement('input'); - fileDelete.id = file.id; - fileDelete.type = 'button'; - fileDelete.value = 'Delete'; - Element.addClassName(fileDelete,'delete'); - fileToUpload.appendChild(fileDelete); - Event.observe(fileDelete,'click',this.uploadFileCancelCallback.bind(this)); - }, - - uploadProgressCallback: function(file,bytesLoaded) { - fileName = this.iframe.contentDocument.getElementById('Form_UploadForm_FilesList_Name_' + file.id); - fileName.style.border = 'solid 1px black'; - fileProgress = this.iframe.contentDocument.getElementById('Form_UploadForm_FilesList_Progress_' + file.id); - fileProgress.style.opacity = 0.3;fileProgress.style.filter = 'alpha(opacity=30)'; - if(!fileProgress.cloned) { - Position.clone(fileName,fileProgress); - fileProgress.style.width = '0px'; - fileProgress.cloned = true; - } - fileProgress.style.width = (bytesLoaded / file.size) * Element.getDimensions(fileName).width - 1 + 'px'; - }, - - uploadFileCompleteCallback: function(file,serverData) { - this.iframe.contentDocument.getElementById('Form_UploadForm_FilesList_Progress_' + file.id).finished = true; - }, - - uploadFileCancelCallback: function(event) { - element = Event.element(event); - fileId = element.id; - fileContainer = this.iframe.contentDocument.getElementById('Form_UploadForm_FilesList'); - elementToDelete = this.iframe.contentDocument.getElementById('Form_UploadForm_FilesList_' + fileId); - elementToDelete.parentNode.removeChild(elementToDelete); - filesToUpload = fileContainer.childNodes.length; - if(filesToUpload > 0) { - this.iframe.contentDocument.getElementById('Form_UploadForm_action_upload').disabled = false; - } else { - this.iframe.contentDocument.getElementById('Form_UploadForm_action_upload').disabled = true; - } - $A(fileContainer.childNodes).each( - function(item) { - $A(item.childNodes).each( - function(item) { - if(item.id.indexOf('Name') != -1) { - fileName = item; - } - if(item.id.indexOf('Progress') != -1) { - fileProgress = item; - } - }); - Position.clone(fileName,fileProgress); - if(fileProgress.finished == false) fileProgress.style.width = '0px'; - } - ); - }, - - uploadQueueCompleteCallback: function() { - eval(this.upload.getUploadMessage().replace(/Uploaded 1 files/g,'Uploaded ' + this.upload.getFilesUploaded() + ' files')); - } -} -window.top.document.CMSMain_upload = CMSMain_upload; diff --git a/javascript/TinyMCEImageEnhancement.js b/javascript/TinyMCEImageEnhancement.js deleted file mode 100644 index d5a43cad..00000000 --- a/javascript/TinyMCEImageEnhancement.js +++ /dev/null @@ -1,221 +0,0 @@ -/** - * This class is used for upload in TinyMCE editor. - * If one of methods is not commented look for comment in Upload.js. -*/ -TinyMCEImageEnhancement = Class.create(); -TinyMCEImageEnhancement.prototype = { - initialize: function() { - this.filesUploaded = 0; - this.processInProgress = false; - - Event.observe($('AddFolder'),'click',this.onAddFolder.bind(this)); - Event.observe($('FolderOk'),'click',this.onFolderOk.bind(this)); - Event.observe($('FolderCancel'),'click',this.onFolderCancel.bind(this)); - - this.onLoad(); - }, - - onLoad: function() { - this.upload = new Upload({ - fileUploadLimit : '6', - button_image_url : 'cms/images/swf-upload-button-small.jpg', - button_width : 59, - button_height: 18, - fileQueued: this.uploadFileQueuedCallback.bind(this), - fileComplete: this.uploadFileCompleteCallback.bind(this), - queueComplete: this.uploadQueueCompleteCallback.bind(this) - }); - }, - - /** - * Method creates HTML element, only reason for this method is DRY. - */ - addElement: function(tag, className, parent, properties) { - var e = document.createElement(tag); - Element.addClassName(e,className); - parent.appendChild(e); - Object.extend(e,properties); - return e; - }, - - /** - * Called when user clicks "add folder" anchor. - */ - - onAddFolder: function(event) { - Event.stop(event); - Element.hide('AddFolder'); - Element.show('NewFolderName','FolderOk','FolderCancel'); - this.applyIE6Hack(); - }, - - /** - * The user clicks the "ok" anchor link, the click event calls up - * this function which creates a new AJAX request to add a new folder - * using the addfolder function in AssetAdmin.php (admin/assets/addfolder). - */ - onFolderOk: function(event) { - Event.stop(event); - var folderName = $('NewFolderName').value; - var options = { - method: 'post', - postBody: 'ParentID=' + this.getParentID() + '&ajax=1&returnID=1&Name=' + folderName + ($('SecurityID') ? '&SecurityID=' + $('SecurityID').value : ''), - onSuccess: this.onFolderGetSuccess.bind(this), - onFailure: function(transport) { - errorMessage('Error: Folder not added', transport); - } - }; - - new Ajax.Request('admin/assets/addfolder', options); - }, - - /** - * If the "addFolderOk" function does a successful AJAX post, call this - * function. Take the folder ID that was created in "addFolderOk" - * via ajax and send data to modify that folder record. - */ - onFolderGetSuccess: function(transport) { - var folderID = transport.responseText; - - var date = new Date(); - var year = date.getFullYear(); - var month = date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth(); - var day = date.getDay() < 10 ? '0' + date.getDay() : date.getDay(); - var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours(); - var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); - var seconds = date.getSeconds() < 10 == 1 ? '0' + date.getSeconds() : date.getSeconds(); - var currentDate = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds; - - var folderName = $('NewFolderName').value; - - this.folderID = folderID; - - statusMessage('Creating new folder'); - $('TreeDropdownField_Form_EditorToolbarImageForm_FolderID').itemTree = null; - $('TreeDropdownField_Form_EditorToolbarImageForm_FolderID').setValue(this.folderID); - $('NewFolderName').value = ''; - Element.show('AddFolder'); - Element.hide('NewFolderName','FolderOk','FolderCancel'); - this.removeIE6Hack(); - }, - - /** - * If user doesn't want to add folder return to default UI. - */ - - onFolderCancel: function(event) { - $('NewFolderName').value = ''; - Element.show('AddFolder'); - Element.hide('NewFolderName','FolderOk','FolderCancel'); - this.removeIE6Hack(); - Event.stop(event); - return false; - }, - - uploadFileQueuedCallback: function(file,queueLength) { - if(this.getParentID() == "root") { - statusMessage("Please choose folder","bad"); - } - else { - this.processInProgress = true; - this.upload.swfu.addPostParam('FolderID', this.getParentID()); - this.upload.swfu.addFileParam(file.id,'ID',this.folderID); - this.upload.swfu.addFileParam(file.id,'Files',file.name); - $('UploadFiles').innerHTML = "Uploading Files...("+ this.filesUploaded +")"; - this.upload.swfu.startUpload(file.id); - } - }, - - uploadFileCompleteCallback: function(file,serverData) { - this.filesUploaded++; - $('UploadFiles').innerHTML = 'Uploading Files..... ('+ this.filesUploaded +")"; - }, - - uploadQueueCompleteCallback: function(serverData) { - this.filesUploaded = this.upload.getFilesUploaded(); - $('UploadFiles').innerHTML = ""; - statusMessage('Uploaded Files Successfully','good'); - - $('FolderImages').ajaxGetFiles(this.getParentID(), null); - }, - - /** - * Iterates over all uploaded images and add them to TinyMCE editor - * - * @param transport object - */ - insertImages: function(transport) { - //HACK FOR STRANGE ERROR OCCURING UNDER SAFARI - if(transport.responseText == '') { - $('Image').ajaxGetFiles(this.getParentID(), null, this.insertImages.bind(this)); - return; - } - //END OF HACK - - $('Image').reapplyBehaviour(); - - this.addToTinyMCE = this.addToTinyMCE.bind(this); - this.processInProgress = false; - }, - - /** - * Adds particular image to TinyMCE. Most of code has been copied from tiny_mce_improvements.js / ImageThumbnail.onclick - * Sorry for not following DRY, I didn't want to break smth in tiny_mce_improvements. - * - * @param target object - */ - - addToTinyMCE: function(target) { - var formObj = $('Form_EditorToolbarImageForm'); - var altText = formObj.elements.AltText.value; - var cssClass = formObj.elements.CSSClass.value; - var baseURL = document.getElementsByTagName('base')[0].href; - var relativeHref = target.href.substr(baseURL.length) - if(!tinyMCE.selectedInstance) tinyMCE.selectedInstance = Toolbar.instance().editor; - if(tinyMCE.selectedInstance.contentWindow.focus) tinyMCE.selectedInstance.contentWindow.focus(); - // Extract dest width and dest height from the class name - var destWidth = null; - var destHeight = null; - try { - var imgTag = target.getElementsByTagName('img')[0]; - destWidth = imgTag.className.match(/destwidth=([0-9.\-]+)([, ]|$)/) ? RegExp.$1 : null; - destHeight = imgTag.className.match(/destheight=([0-9.\-]+)([, ]|$)/) ? RegExp.$1 : null; - } catch(er) { - } - TinyMCE_AdvancedTheme._insertImage(relativeHref, altText, 0, '', '', destWidth, destHeight, '', '', cssClass); - }, - - /** - * Under IE6 when we click on "add folder" anchor, rest of anchors loose their correct position - * - */ - - applyIE6Hack: function() { - if(/msie/i.test(navigator.userAgent)) { - elements = [$('FolderOk'),$('FolderCancel'),$('UploadFiles')]; - $A(elements).each(function(element) { - element.style.position = "relative"; - element.style.top = "-3px"; - }); - } - }, - - removeIE6Hack: function() { - if(/msie/i.test(navigator.userAgent)) { - elements = [$('FolderOk'),$('FolderCancel'),$('UploadFiles')]; - $A(elements).each(function(element) { - element.style.position = ""; - }); - } - }, - - /** - * Returns id of upload folder. - * - */ - - getParentID: function() { - return $('Form_EditorToolbarImageForm_FolderID').value == '' ? 'root' : $('Form_EditorToolbarImageForm_FolderID').value; - } -} -tinyMCEImageEnhancement = new TinyMCEImageEnhancement(); diff --git a/javascript/Upload.js b/javascript/Upload.js deleted file mode 100644 index 0805ab4c..00000000 --- a/javascript/Upload.js +++ /dev/null @@ -1,284 +0,0 @@ -/* - This class is wrapper for SWFUpload class. - If you want use SWFUpload, please use this class becuase it will take care of configuration - error handling and other things. - -*/ - -var Upload = Class.create(); -Upload.prototype = { - - /** - * Sets configuration data provided from user if smth is missing sets default value. - * - * @param params object contains all configuration data for upload. - */ - initialize: function(params) { - - this.filesUploaded = 0; - this.filesToUpload = 0; - this.folderID = 'root'; - this.uploadInProgress = false; - this.uploadMessage = ''; - this.queueComplete = this.uploadQueueCompleteCallback.bind(this); - this.fileComplete = this.uploadFileCompleteCallback.bind(this); - this.fileQueued = this.uploadFileQueuedCallback; - - if(typeof params.fileSizeLimit != 'undefined') this.setFileSizeLimit = params.fileSizeLimit; else this.fileSizeLimit = '30720'; - if(typeof params.fileTypes != 'undefined') this.fileTypes = params.fileTypes; else this.fileTypes = '*.*'; - if(typeof params.fileTypesDescription != 'undefined') this.fileTypesDescription = params.fileTypesDescription; else this.fileTypesDescription = 'All Files'; - if(typeof params.fileUploadLimit != 'undefined') this.fileUploadLimit = params.fileUploadLimit; else this.fileUploadLimit = '6'; - if(typeof params.beginUploadOnQueue != 'undefined') this.beginUploadOnQueue = params.beginUploadOnQueue; else this.beginUploadOnQueue = true; - if(typeof params.fileQueued != 'undefined') this.fileQueued = params.fileQueued; - - if(typeof params.fileProgress != 'undefined') this.fileProgress = params.fileProgress; else this.fileProgress = Prototype.emptyFunction; - if(typeof params.fileCancelled != 'undefined') this.fileCancelled = params.fileCancelled; - if(typeof params.fileComplete != 'undefined') this.fileComplete = params.fileComplete; - if(typeof params.queueComplete != 'undefined') this.queueComplete = params.queueComplete; - if(typeof params.buildUI != 'undefined') this.customBuildUI = params.buildUI; - if(typeof params.securityID != 'undefined') this.securityID = params.securityID; - if(typeof params.button_image_url != 'undefined') this.buttonImageURL = params.button_image_url; - if(typeof params.button_width != 'undefined') this.buttonWidth = params.button_width; - if(typeof params.button_height != 'undefined') this.buttonHeight = params.button_height; - - try { - this.onLoad(); - } catch (ex) { - // suppress the exception in case swfupload.js is loaded in a context that has no - // placeholder elements - if ( ex.indexOf('Could not find the placeholder element')==-1 ) - throw ex; - } - }, - - /** - * Creates SWFUpload object for uploading files. - * - */ - onLoad: function() { - - path = this.getBasePath(); - sessId = this.getSessionId();//Because flash doesn't send proper cookies, we need to set session id in URL. - this.swfu = new SWFUpload({ - upload_url: path + 'admin/assets/UploadForm?action_doUpload=1&PHPSESSID=' + sessId, // Relative to the SWF file - file_post_name: 'Files', - file_size_limit : this.fileSizeLimit, - file_types : this.fileTypes, - file_types_description : this.fileTypesDescription, - file_upload_limit : this.fileUploadLimit, - begin_upload_on_queue : this.beginUploadOnQueue, - use_server_data_event : true, - validate_files: false, - button_placeholder_id: "SWFUploadButton", - file_queued_handler : this.fileQueued, - upload_success_handler : this.queueComplete, - file_dialog_complete_handler : this.fileCompleted, - upload_progress_handler: this.uploadFileProgressCallback.bind(this), - error_handler : this.uploadErrorCallback.bind(this), - file_validation_handler : Prototype.emptyFunction, - file_cancelled_handler: Prototype.emptyFunction, - button_image_url : this.buttonImageURL, - button_window_mode : "transparent", - button_width : this.buttonWidth, - button_height : this.buttonHeight, - flash_url : 'cms/thirdparty/swfupload/swfupload.swf', // Relative to this file - swfupload_loaded_handler: this.buildUI.bind(this), - debug: false, - preserve_relative_urls: true - }); - - }, - - /** - * Retrieves base path from URL. - * TODO: Use base tag. - */ - - getBasePath: function() { - var path = 'http://' + window.location.host + window.location.pathname; - - if(path.match(/^(.*\/)admin/i)) return RegExp.$1; - else return path; - }, - - /** - * Retrieves sessionId from cookie. - * - */ - - getSessionId: function() { - var start = document.cookie.indexOf('PHPSESSID')+10; - var end = document.cookie.indexOf(';',start); - if(end == -1) end = document.cookie.length; - return document.cookie.substring(start,end); - }, - - /** - * Calls method defined by user, method should create user interface. - * - */ - - buildUI: function() { - return; - }, - - /** - * Called when new file is added to the queue - * - * @param file object - * @param queueLength int - */ - - uploadFileQueuedCallback: function(file,queueLength) { - this.filesToUpload++; -// this.swfu.fileQueued(file, queueLength); - this.addFileParam(file); - }, - - /** - * Called when uploading of particular file has finished - * - * @param file object - * @param servedData string - */ - uploadFileCompleteCallback: function(file,serverData) { - this.filesUploaded++; - if(serverData) { - var toEval = serverData.substr(serverData.indexOf('',''); - toEval = toEval.replace('',''); - this.uploadMessage = toEval; - } - - this.fileComplete(file, serverData); - - // Run the next file in the queue, if there is one - if(this.swfu.getStats().files_queued > 0) this.startUpload(); - // Otherwise indicate that the queue is finished - else { - this.queueComplete(); - this.uploadInProgress = false; - this.filesUploaded = 0; - this.filesToUpload = 0; - } - }, - - /** - * Called during uploading file. - * - * @param file object - * @param bytes_complete int - */ - - uploadFileProgressCallback: function(file, bytes_complete) { - this.uploadInProgress = true; - this.fileProgress(file, bytes_complete); - }, - - uploadQueueCompleteCallback: function(event) { - - }, - - /** - * Called on error. - * @param error_code int - * @param file object - * @param message string - */ - - uploadErrorCallback: function(error_code, file, message) { - this.swfu.cancelQueue(); - switch(error_code) { - case SWFUpload.ERROR_CODE_HTTP_ERROR: - alert('You have encountered an error. File hasn\'t been uploaded. Please hit the "Refresh" button in your web browser. Error Code: HTTP Error, File name: ' + file.name + ', Message: ' + msg); - break; - case SWFUpload.ERROR_CODE_IO_ERROR: - alert('You have encountered an error. File hasn\'t been uploaded. Please hit the "Refresh" button in your web browser. Error Code: IO Error, File name: ' + file.name + ', Message: ' + msg); - break; - case SWFUpload.ERROR_CODE_SECURITY_ERROR: - alert('You have encountered an error. File hasn\'t been uploaded. Please hit the "Refresh" button in your web browser. Error Code: Security Error, File name: ' + file.name + ', Message: ' + msg); - break; - case SWFUpload.ERROR_CODE_FILE_EXCEEDS_SIZE_LIMIT: - alert('Files cannot be bigger than ' + this.fileSizeLimit/1024 + ' MB.'); - break; - case SWFUpload.ERROR_CODE_ZERO_BYTE_FILE: - alert('Files cannot be empty'); - break; - case SWFUpload.ERROR_CODE_QUEUE_LIMIT_EXCEEDED: - alert('You can only have six files in queue'); - break; - case SWFUpload.ERROR_CODE_UPLOAD_FAILED: - alert('You have encountered an error. File hasn\'t has been uploaded. Please hit the "Refresh" button in your web browser'); - break; - case SWFUpload.ERROR_CODE_SPECIFIED_FILE_NOT_FOUND: - alert('You have encountered an error. File hasn\'t has been uploaded. Please hit the "Refresh" button in your web browser'); - break; - default: - alert('You have encountered an error. File hasn\'t has been uploaded. Please hit the "Refresh" button in your web browser'); - } - }, - - /** - * Because we are on top of standard upload we need to add some POST vars that - * normally are being sent as part of form. - * - * @param file object - */ - - addFileParam: function(file) { - this.swfu.addFileParam(file.id,'ID',this.folderID); - this.swfu.addFileParam(file.id,'action_doUpload','1'); - this.swfu.addFileParam(file.id,'Files',file.name); - this.swfu.addFileParam(file.id,'MAX_FILE_SIZE','31457280'); - }, - - /** - * Starts file explorer. - * - */ - - browse: function() { - this.swfu.selectFiles(); - }, - - /** - * Starts upload - * - */ - - startUpload: function() { - this.swfu.startUpload(); - }, - - /** - * Cancels uploading of file. - */ - - cancelUpload: function(fileId) { - this.filesToUpload--; - this.swfu.cancelUpload(fileId); - }, - - /* - * Getters and setters. - */ - setFolderID: function(id) { - this.folderID = id; - }, - - getFilesUploaded: function() { - return this.filesUploaded; - }, - - getFilesToUpload: function() { - return this.filesToUpload; - }, - - getUploadMessage: function() { - return this.uploadMessage; - }, - - isUploadInProgress: function() { - return this.uploadInProgress; - } -} diff --git a/thirdparty/swfupload/license.txt b/thirdparty/swfupload/license.txt deleted file mode 100644 index dd26171a..00000000 --- a/thirdparty/swfupload/license.txt +++ /dev/null @@ -1,11 +0,0 @@ -/** - * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/ - * - * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - * - * SWFUpload Revision 7.0 is (c) 2007 Jake Roberts and is released under the MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - */ \ No newline at end of file diff --git a/thirdparty/swfupload/swfupload.js b/thirdparty/swfupload/swfupload.js deleted file mode 100755 index e1aaa3f7..00000000 --- a/thirdparty/swfupload/swfupload.js +++ /dev/null @@ -1,1052 +0,0 @@ -/** - * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com - * - * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/ - * - * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - */ - - -/* ******************* */ -/* Constructor & Init */ -/* ******************* */ -var SWFUpload; - -if (SWFUpload == undefined) { - SWFUpload = function (settings) { - this.initSWFUpload(settings); - }; -} - -SWFUpload.prototype.initSWFUpload = function (userSettings) { - try { - this.customSettings = {}; // A container where developers can place their own settings associated with this instance. - this.settings = {}; - this.eventQueue = []; - this.movieName = "SWFUpload_" + SWFUpload.movieCount++; - this.movieElement = null; - - - // Setup global control tracking - SWFUpload.instances[this.movieName] = this; - - // Load the settings. Load the Flash movie. - this.initSettings(userSettings); - this.loadFlash(); - this.displayDebugInfo(); - } catch (ex) { - delete SWFUpload.instances[this.movieName]; - throw ex; - } -}; - -/* *************** */ -/* Static Members */ -/* *************** */ -SWFUpload.instances = {}; -SWFUpload.movieCount = 0; -SWFUpload.version = "2.5.0 2009-11-04 Alpha"; -SWFUpload.QUEUE_ERROR = { - QUEUE_LIMIT_EXCEEDED : -100, - FILE_EXCEEDS_SIZE_LIMIT : -110, - ZERO_BYTE_FILE : -120, - INVALID_FILETYPE : -130 -}; -SWFUpload.UPLOAD_ERROR = { - HTTP_ERROR : -200, - MISSING_UPLOAD_URL : -210, - IO_ERROR : -220, - SECURITY_ERROR : -230, - UPLOAD_LIMIT_EXCEEDED : -240, - UPLOAD_FAILED : -250, - SPECIFIED_FILE_ID_NOT_FOUND : -260, - FILE_VALIDATION_FAILED : -270, - FILE_CANCELLED : -280, - UPLOAD_STOPPED : -290, - RESIZE_ERROR : -300 -}; -SWFUpload.FILE_STATUS = { - QUEUED : -1, - IN_PROGRESS : -2, - ERROR : -3, - COMPLETE : -4, - CANCELLED : -5 -}; -SWFUpload.UPLOAD_TYPE = { - NORMAL : -1, - RESIZED : -2 -}; - -SWFUpload.BUTTON_ACTION = { - SELECT_FILE : -100, - SELECT_FILES : -110, - START_UPLOAD : -120, - JAVASCRIPT : -130 -}; -SWFUpload.CURSOR = { - ARROW : -1, - HAND : -2 -}; -SWFUpload.WINDOW_MODE = { - WINDOW : "window", - TRANSPARENT : "transparent", - OPAQUE : "opaque" -}; - -SWFUpload.RESIZE_ENCODING = { - JPEG : -1, - PNG : -2 -}; - -// 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) { - try { - var path = "", indexSlash = -1; - if (typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//) || url === "") { - return url; - } - - indexSlash = window.location.pathname.lastIndexOf("/"); - if (indexSlash <= 0) { - path = "/"; - } else { - path = window.location.pathname.substr(0, indexSlash) + "/"; - } - - return path + url; - } catch (ex) { - return url; - } -}; - - -/* ******************** */ -/* Instance Members */ -/* ******************** */ - -// Private: initSettings ensures that all the -// settings are set, getting a default value if one was not assigned. -SWFUpload.prototype.initSettings = function (userSettings) { - this.ensureDefault = function (settingName, defaultValue) { - var setting = userSettings[settingName]; - if (setting != undefined) { - this.settings[settingName] = setting; - } else { - this.settings[settingName] = defaultValue; - } - }; - - // Upload backend settings - this.ensureDefault("upload_url", ""); - - this.ensureDefault("preserve_relative_urls", false); - this.ensureDefault("file_post_name", "Filedata"); - this.ensureDefault("post_params", {}); - this.ensureDefault("use_query_string", false); - this.ensureDefault("requeue_on_error", false); - this.ensureDefault("http_success", []); - this.ensureDefault("assume_success_timeout", 0); - - // File Settings - this.ensureDefault("file_types", "*.*"); - this.ensureDefault("file_types_description", "All Files"); - this.ensureDefault("file_size_limit", 0); // Default zero means "unlimited" - this.ensureDefault("file_upload_limit", 0); - this.ensureDefault("file_queue_limit", 0); - - // Flash Settings - this.ensureDefault("flash_url", "swfupload.swf"); - this.ensureDefault("prevent_swf_caching", true); - - // Button Settings - this.ensureDefault("button_image_url", ""); - this.ensureDefault("button_width", 1); - this.ensureDefault("button_height", 1); - this.ensureDefault("button_text", ""); - this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;"); - this.ensureDefault("button_text_top_padding", 0); - this.ensureDefault("button_text_left_padding", 0); - this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES); - this.ensureDefault("button_disabled", false); - 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 - this.ensureDefault("debug", false); - this.settings.debug_enabled = this.settings.debug; // Here to maintain v2 API - - // Event Handlers - this.settings.return_upload_start_handler = this.returnUploadStart; - this.ensureDefault("swfupload_loaded_handler", null); - this.ensureDefault("file_dialog_start_handler", null); - this.ensureDefault("file_queued_handler", null); - this.ensureDefault("file_queue_error_handler", null); - this.ensureDefault("file_dialog_complete_handler", null); - - this.ensureDefault("upload_start_handler", null); - this.ensureDefault("upload_progress_handler", null); - this.ensureDefault("upload_error_handler", null); - this.ensureDefault("upload_success_handler", null); - this.ensureDefault("upload_complete_handler", null); - - this.ensureDefault("button_action_handler", null); - - this.ensureDefault("debug_handler", this.debugMessage); - - this.ensureDefault("custom_settings", {}); - - // Other settings - this.customSettings = this.settings.custom_settings; - - // Update the flash url if needed - if (!!this.settings.prevent_swf_caching) { - 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.upload_url = SWFUpload.completeURL(this.settings.upload_url); - this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url); - } - - delete this.ensureDefault; -}; - -// Private: loadFlash replaces the button_placeholder element with the flash movie. -SWFUpload.prototype.loadFlash = function () { - var targetElement, tempParent, wrapperType; - - // 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 element where we will be placing the flash movie - targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder; - - if (targetElement == undefined) { - throw "Could not find the placeholder element: " + this.settings.button_placeholder_id; - } - - wrapperType = (targetElement.currentStyle && targetElement.currentStyle["display"] || window.getComputedStyle && document.defaultView.getComputedStyle(targetElement, null).getPropertyValue("display")) !== "block" ? "span" : "div"; - - // Append the container and load the flash - tempParent = document.createElement(wrapperType); - tempParent.innerHTML = this.getFlashHTML(); // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers) - - // Experiment -- try to get the movie element immediately - var els = tempParent.getElementsByTagName("object"); // FIXME - JSLint if this works - if (!els || els.length > 1 || els.length === 0) { - // Oh crap...bail - } else if (els.length === 1) { - this.movieElement = els[0]; - this.debug("Got the movie. WOOT!"); - } - - 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 -SWFUpload.prototype.getFlashHTML = function () { - // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay - return ['', - '', - '', - '', - '', - '', - '', - ''].join(""); -}; - -// Private: getFlashVars builds the parameter string that will be passed -// to flash in the flashvars param. -SWFUpload.prototype.getFlashVars = function () { - // Build a string from the post param object - var httpSuccessString, paramString; - - paramString = this.buildParamString(); - httpSuccessString = this.settings.http_success.join(","); - - // Build the parameter string - return ["movieName=", encodeURIComponent(this.movieName), - "&uploadURL=", encodeURIComponent(this.settings.upload_url), - "&useQueryString=", encodeURIComponent(this.settings.use_query_string), - "&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error), - "&httpSuccess=", encodeURIComponent(httpSuccessString), - "&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout), - "&params=", encodeURIComponent(paramString), - "&filePostName=", encodeURIComponent(this.settings.file_post_name), - "&fileTypes=", encodeURIComponent(this.settings.file_types), - "&fileTypesDescription=", encodeURIComponent(this.settings.file_types_description), - "&fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit), - "&fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit), - "&fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit), - "&debugEnabled=", encodeURIComponent(this.settings.debug_enabled), - "&buttonImageURL=", encodeURIComponent(this.settings.button_image_url), - "&buttonWidth=", encodeURIComponent(this.settings.button_width), - "&buttonHeight=", encodeURIComponent(this.settings.button_height), - "&buttonText=", encodeURIComponent(this.settings.button_text), - "&buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding), - "&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding), - "&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style), - "&buttonAction=", encodeURIComponent(this.settings.button_action), - "&buttonDisabled=", encodeURIComponent(this.settings.button_disabled), - "&buttonCursor=", encodeURIComponent(this.settings.button_cursor) - ].join(""); -}; - -// Public: get retrieves the DOM reference to the Flash element added by SWFUpload -// The element is cached after the first lookup -SWFUpload.prototype.getMovieElement = function () { - if (this.movieElement == undefined) { - this.movieElement = document.getElementById(this.movieName); - } - - if (this.movieElement === null) { - throw "Could not find Flash element"; - } - - return this.movieElement; -}; - -// Private: buildParamString takes the name/value pairs in the post_params setting object -// and joins them up in to a string formatted "name=value&name=value" -SWFUpload.prototype.buildParamString = function () { - var name, postParams, paramStringPairs = []; - - postParams = this.settings.post_params; - - if (typeof(postParams) === "object") { - for (name in postParams) { - if (postParams.hasOwnProperty(name)) { - paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString())); - } - } - } - - return paramStringPairs.join("&"); -}; - -// 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. -// 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 () { - var movieElement; - - try { - // Make sure Flash is done before we try to remove it - this.cancelUpload(null, false); - - // Stop the external interface check from running - this.callFlash("StopExternalInterfaceCheck"); - - movieElement = this.cleanUp(); - - // Remove the SWFUpload DOM nodes - if (movieElement) { - // Remove the Movie Element from the page - try { - movieElement.parentNode.removeChild(movieElement); - } catch (ex) {} - } - - // Remove IE form fix reference - window[this.movieName] = null; - - // Destroy other references - SWFUpload.instances[this.movieName] = null; - delete SWFUpload.instances[this.movieName]; - - this.movieElement = null; - this.settings = null; - this.customSettings = null; - this.eventQueue = null; - this.movieName = null; - - - return true; - } catch (ex2) { - return false; - } -}; - - -// Public: displayDebugInfo prints out settings and configuration -// information about this SWFUpload instance. -// This function (and any references to it) can be deleted when placing -// SWFUpload in production. -SWFUpload.prototype.displayDebugInfo = function () { - this.debug( - [ - "---SWFUpload Instance Info---\n", - "Version: ", SWFUpload.version, "\n", - "Movie Name: ", this.movieName, "\n", - "Settings:\n", - "\t", "upload_url: ", this.settings.upload_url, "\n", - "\t", "flash_url: ", this.settings.flash_url, "\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", "post_params: ", this.settings.post_params.toString(), "\n", - "\t", "file_types: ", this.settings.file_types, "\n", - "\t", "file_types_description: ", this.settings.file_types_description, "\n", - "\t", "file_size_limit: ", this.settings.file_size_limit, "\n", - "\t", "file_upload_limit: ", this.settings.file_upload_limit, "\n", - "\t", "file_queue_limit: ", this.settings.file_queue_limit, "\n", - "\t", "debug: ", this.settings.debug.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: ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n", - "\t", "button_image_url: ", this.settings.button_image_url.toString(), "\n", - "\t", "button_width: ", this.settings.button_width.toString(), "\n", - "\t", "button_height: ", this.settings.button_height.toString(), "\n", - "\t", "button_text: ", this.settings.button_text.toString(), "\n", - "\t", "button_text_style: ", this.settings.button_text_style.toString(), "\n", - "\t", "button_text_top_padding: ", this.settings.button_text_top_padding.toString(), "\n", - "\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n", - "\t", "button_action: ", this.settings.button_action.toString(), "\n", - "\t", "button_disabled: ", this.settings.button_disabled.toString(), "\n", - - "\t", "custom_settings: ", this.settings.custom_settings.toString(), "\n", - "Event Handlers:\n", - "\t", "swfupload_loaded_handler assigned: ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n", - "\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n", - "\t", "file_queued_handler assigned: ", (typeof this.settings.file_queued_handler === "function").toString(), "\n", - "\t", "file_queue_error_handler assigned: ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n", - "\t", "upload_start_handler assigned: ", (typeof this.settings.upload_start_handler === "function").toString(), "\n", - "\t", "upload_progress_handler assigned: ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n", - "\t", "upload_error_handler assigned: ", (typeof this.settings.upload_error_handler === "function").toString(), "\n", - "\t", "upload_success_handler assigned: ", (typeof this.settings.upload_success_handler === "function").toString(), "\n", - "\t", "upload_complete_handler assigned: ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n", - "\t", "debug_handler assigned: ", (typeof this.settings.debug_handler === "function").toString(), "\n" - ].join("") - ); -}; - -/* Note: addSetting and getSetting are no longer used by SWFUpload but are included - the maintain v2 API compatibility -*/ -// Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used. -SWFUpload.prototype.addSetting = function (name, value, default_value) { - if (value == undefined) { - return (this.settings[name] = default_value); - } else { - return (this.settings[name] = value); - } -}; - -// Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found. -SWFUpload.prototype.getSetting = function (name) { - if (this.settings[name] != undefined) { - return this.settings[name]; - } - - return ""; -}; - - - -// Private: callFlash handles function calls made to the Flash element. -// Calls are made with a setTimeout for some functions to work around -// bugs in the ExternalInterface library. -SWFUpload.prototype.callFlash = function (functionName, argumentArray) { - var movieElement, returnValue, returnString; - - argumentArray = argumentArray || []; - movieElement = this.getMovieElement(); - - // Flash's method if calling ExternalInterface methods (code adapted from MooTools). - try { - if (movieElement && movieElement.CallFunction) { - returnString = movieElement.CallFunction('' + __flash__argumentsToXML(argumentArray, 0) + ''); - returnValue = eval(returnString); - } else { - this.debug("Can't call flash because the movie wasn't found."); - } - } catch (ex) { - this.debug("Exception calling flash: " + ex.message); - } - - // Unescape file post param values - if (returnValue != undefined && typeof returnValue.post === "object") { - returnValue = this.unescapeFilePostParams(returnValue); - } - - return returnValue; -}; - -/* ***************************** - -- Flash control methods -- - Your UI should use these - to operate SWFUpload - ***************************** */ - -// WARNING: this function does not work in Flash Player 10 -// Public: selectFile causes a File Selection Dialog window to appear. This -// dialog only allows 1 file to be selected. -SWFUpload.prototype.selectFile = function () { - this.callFlash("SelectFile"); -}; - -// WARNING: this function does not work in Flash Player 10 -// Public: selectFiles causes a File Selection Dialog window to appear/ This -// 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. -// If the selection name length is too long the dialog will fail in an unpredictable manner. There is no work-around -// for this bug. -SWFUpload.prototype.selectFiles = function () { - this.callFlash("SelectFiles"); -}; - - -// Public: startUpload starts uploading the first file in the queue unless -// the optional parameter 'fileID' specifies the ID -SWFUpload.prototype.startUpload = function (fileID) { - this.callFlash("StartUpload", [fileID]); -}; - -// Public: startUpload starts uploading the first file in the queue unless -// the optional parameter 'fileID' specifies the ID -SWFUpload.prototype.startResizedUpload = function (fileID, width, height, encoding, quality) { - this.callFlash("StartUpload", [fileID, { "width": width, "height" : height, "encoding" : encoding, "quality" : quality }]); -}; - -// Public: cancelUpload cancels any queued file. The fileID parameter may be the file ID or index. -// If you do not specify a fileID the current uploading file or first file in the queue is cancelled. -// If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter. -SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) { - 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. -// If nothing is currently uploading then nothing happens. -SWFUpload.prototype.stopUpload = function () { - this.callFlash("StopUpload"); -}; - - -// Public: requeueUpload requeues any file. If the file is requeued or already queued true is returned. -// If the file is not found or is currently uploading false is returned. Requeuing a file bypasses the -// file size, queue size, upload limit and other queue checks. Certain files can't be requeued (e.g, invalid or zero bytes files). -SWFUpload.prototype.requeueUpload = function (indexOrFileID) { - return this.callFlash("RequeueUpload", [indexOrFileID]); -}; - - -/* ************************ - * Settings methods - * These methods change the SWFUpload settings. - * SWFUpload settings should not be changed directly on the settings object - * since many of the settings need to be passed to Flash in order to take - * effect. - * *********************** */ - -// Public: getStats gets the file statistics object. -SWFUpload.prototype.getStats = function () { - return this.callFlash("GetStats"); -}; - -// Public: setStats changes the SWFUpload statistics. You shouldn't need to -// change the statistics but you can. Changing the statistics does not -// affect SWFUpload accept for the successful_uploads count which is used -// by the upload_limit setting to determine how many files the user may upload. -SWFUpload.prototype.setStats = function (statsObject) { - this.callFlash("SetStats", [statsObject]); -}; - -// Public: getFile retrieves a File object by ID or Index. If the file is -// not found then 'null' is returned. -SWFUpload.prototype.getFile = function (fileID) { - if (typeof(fileID) === "number") { - return this.callFlash("GetFileByIndex", [fileID]); - } else { - return this.callFlash("GetFile", [fileID]); - } -}; - -// Public: getFileFromQueue retrieves a File object by ID or Index. If the file is -// not found then 'null' is returned. -SWFUpload.prototype.getQueueFile = function (fileID) { - if (typeof(fileID) === "number") { - return this.callFlash("GetFileByQueueIndex", [fileID]); - } else { - return this.callFlash("GetFile", [fileID]); - } -}; - - -// Public: addFileParam sets a name/value pair that will be posted with the -// file specified by the Files ID. If the name already exists then the -// exiting value will be overwritten. -SWFUpload.prototype.addFileParam = function (fileID, name, value) { - return this.callFlash("AddFileParam", [fileID, name, value]); -}; - -// Public: removeFileParam removes a previously set (by addFileParam) name/value -// pair from the specified file. -SWFUpload.prototype.removeFileParam = function (fileID, name) { - this.callFlash("RemoveFileParam", [fileID, name]); -}; - -// Public: setUploadUrl changes the upload_url setting. -SWFUpload.prototype.setUploadURL = function (url) { - this.settings.upload_url = url.toString(); - this.callFlash("SetUploadURL", [url]); -}; - -// Public: setPostParams changes the post_params setting -SWFUpload.prototype.setPostParams = function (paramsObject) { - this.settings.post_params = paramsObject; - this.callFlash("SetPostParams", [paramsObject]); -}; - -// Public: addPostParam adds post name/value pair. Each name can have only one value. -SWFUpload.prototype.addPostParam = function (name, value) { - this.settings.post_params[name] = value; - this.callFlash("SetPostParams", [this.settings.post_params]); -}; - -// Public: removePostParam deletes post name/value pair. -SWFUpload.prototype.removePostParam = function (name) { - delete this.settings.post_params[name]; - this.callFlash("SetPostParams", [this.settings.post_params]); -}; - -// Public: setFileTypes changes the file_types setting and the file_types_description setting -SWFUpload.prototype.setFileTypes = function (types, description) { - this.settings.file_types = types; - this.settings.file_types_description = description; - this.callFlash("SetFileTypes", [types, description]); -}; - -// Public: setFileSizeLimit changes the file_size_limit setting -SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) { - this.settings.file_size_limit = fileSizeLimit; - this.callFlash("SetFileSizeLimit", [fileSizeLimit]); -}; - -// Public: setFileUploadLimit changes the file_upload_limit setting -SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) { - this.settings.file_upload_limit = fileUploadLimit; - this.callFlash("SetFileUploadLimit", [fileUploadLimit]); -}; - -// Public: setFileQueueLimit changes the file_queue_limit setting -SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) { - this.settings.file_queue_limit = fileQueueLimit; - this.callFlash("SetFileQueueLimit", [fileQueueLimit]); -}; - -// Public: setFilePostName changes the file_post_name setting -SWFUpload.prototype.setFilePostName = function (filePostName) { - this.settings.file_post_name = filePostName; - this.callFlash("SetFilePostName", [filePostName]); -}; - -// Public: setUseQueryString changes the use_query_string setting -SWFUpload.prototype.setUseQueryString = function (useQueryString) { - this.settings.use_query_string = useQueryString; - this.callFlash("SetUseQueryString", [useQueryString]); -}; - -// Public: setRequeueOnError changes the requeue_on_error setting -SWFUpload.prototype.setRequeueOnError = function (requeueOnError) { - this.settings.requeue_on_error = 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 -SWFUpload.prototype.setDebugEnabled = function (debugEnabled) { - this.settings.debug_enabled = debugEnabled; - this.callFlash("SetDebugEnabled", [debugEnabled]); -}; - -// Public: setButtonImageURL loads a button image sprite -SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) { - if (buttonImageURL == undefined) { - buttonImageURL = ""; - } - - this.settings.button_image_url = buttonImageURL; - this.callFlash("SetButtonImageURL", [buttonImageURL]); -}; - -// Public: setButtonDimensions resizes the Flash Movie and button -SWFUpload.prototype.setButtonDimensions = function (width, height) { - this.settings.button_width = width; - this.settings.button_height = height; - - var movie = this.getMovieElement(); - if (movie != undefined) { - movie.style.width = width + "px"; - movie.style.height = height + "px"; - } - - this.callFlash("SetButtonDimensions", [width, height]); -}; -// Public: setButtonText Changes the text overlaid on the button -SWFUpload.prototype.setButtonText = function (html) { - this.settings.button_text = html; - this.callFlash("SetButtonText", [html]); -}; -// Public: setButtonTextPadding changes the top and left padding of the text overlay -SWFUpload.prototype.setButtonTextPadding = function (left, top) { - this.settings.button_text_top_padding = top; - this.settings.button_text_left_padding = left; - this.callFlash("SetButtonTextPadding", [left, top]); -}; - -// Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button -SWFUpload.prototype.setButtonTextStyle = function (css) { - this.settings.button_text_style = css; - this.callFlash("SetButtonTextStyle", [css]); -}; -// Public: setButtonDisabled disables/enables the button -SWFUpload.prototype.setButtonDisabled = function (isDisabled) { - this.settings.button_disabled = isDisabled; - this.callFlash("SetButtonDisabled", [isDisabled]); -}; -// Public: setButtonAction sets the action that occurs when the button is clicked -SWFUpload.prototype.setButtonAction = function (buttonAction) { - this.settings.button_action = 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 - These functions are used by Flash to trigger the various - events. - - All these functions a Private. - - Because the ExternalInterface library is buggy the event calls - are added to a queue and the queue then executed by a setTimeout. - This ensures that events are executed in a determinate order and that - the ExternalInterface bugs are avoided. -******************************* */ - -SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) { - // Warning: Don't call this.debug inside here or you'll create an infinite loop - var self = this; - - if (argumentArray == undefined) { - argumentArray = []; - } else if (!(argumentArray instanceof Array)) { - argumentArray = [argumentArray]; - } - - if (typeof this.settings[handlerName] === "function") { - // Queue the event - this.eventQueue.push(function () { - this.settings[handlerName].apply(this, argumentArray); - }); - - // Execute the next queued event - setTimeout(function () { - self.executeNextEvent(); - }, 0); - - } else if (this.settings[handlerName] !== null) { - throw "Event handler " + handlerName + " is unknown or is not a function"; - } -}; - -// Private: Causes the next event in the queue to be executed. Since events are queued using a setTimeout -// we must queue them in order to garentee that they are executed in order. -SWFUpload.prototype.executeNextEvent = function () { - // Warning: Don't call this.debug inside here or you'll create an infinite loop - - var f = this.eventQueue ? this.eventQueue.shift() : null; - if (typeof(f) === "function") { - f.apply(this); - } -}; - -// Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have -// properties that contain characters that are not valid for JavaScript identifiers. To work around this -// the Flash Component escapes the parameter names and we must unescape again before passing them along. -SWFUpload.prototype.unescapeFilePostParams = function (file) { - var reg = /[$]([0-9a-f]{4})/i, unescapedPost = {}, uk, k, match; - - if (file != undefined) { - for (k in file.post) { - if (file.post.hasOwnProperty(k)) { - uk = k; - while ((match = reg.exec(uk)) !== null) { - uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16))); - } - unescapedPost[uk] = file.post[k]; - } - } - - file.post = unescapedPost; - } - - 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 () { - // Check that the movie element is loaded correctly with its ExternalInterface methods defined - var movieElement = this.getMovieElement(); - - if (!movieElement) { - this.debug("Flash called back ready but the flash movie can't be found."); - return; - } - - this.cleanUp(); - - 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 () { - var key, movieElement = this.getMovieElement(); - - // Pro-actively unhook all the Flash functions - try { - if (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 (key in movieElement) { - try { - if (typeof(movieElement[key]) === "function") { - movieElement[key] = null; - } - } catch (ex) { - } - } - } - } catch (ex1) { - - } - - // Fix Flashes own cleanup code so if the SWF Movie was removed from the page - // it doesn't display errors. - window["__flash__removeCallback"] = function (instance, name) { - try { - if (instance) { - instance[name] = null; - } - } catch (flashEx) { - - } - }; - - return movieElement; -}; - -/* When the button_action is set to JavaScript this event gets fired and executes the button_action_handler */ -SWFUpload.prototype.buttonAction = function () { - this.queueEvent("button_action_handler"); -}; - -/* This is a chance to do something before the browse window opens */ -SWFUpload.prototype.fileDialogStart = function () { - this.queueEvent("file_dialog_start_handler"); -}; - - -/* Called when a file is successfully added to the queue. */ -SWFUpload.prototype.fileQueued = function (file) { - file = this.unescapeFilePostParams(file); - this.queueEvent("file_queued_handler", file); -}; - - -/* Handle errors that occur when an attempt to queue a file fails. */ -SWFUpload.prototype.fileQueueError = function (file, errorCode, message) { - file = this.unescapeFilePostParams(file); - this.queueEvent("file_queue_error_handler", [file, errorCode, message]); -}; - -/* 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. */ -SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) { - this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]); -}; - -SWFUpload.prototype.uploadStart = function (file) { - file = this.unescapeFilePostParams(file); - this.queueEvent("return_upload_start_handler", file); -}; - -SWFUpload.prototype.returnUploadStart = function (file) { - var returnValue; - if (typeof this.settings.upload_start_handler === "function") { - file = this.unescapeFilePostParams(file); - returnValue = this.settings.upload_start_handler.call(this, file); - } else if (this.settings.upload_start_handler != undefined) { - throw "upload_start_handler must be a function"; - } - - // Convert undefined to true so if nothing is returned from the upload_start_handler it is - // interpretted as 'true'. - if (returnValue === undefined) { - returnValue = true; - } - - returnValue = !!returnValue; - - this.callFlash("ReturnUploadStart", [returnValue]); -}; - - - -SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) { - file = this.unescapeFilePostParams(file); - this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]); -}; - -SWFUpload.prototype.uploadError = function (file, errorCode, message) { - file = this.unescapeFilePostParams(file); - this.queueEvent("upload_error_handler", [file, errorCode, message]); -}; - -SWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) { - file = this.unescapeFilePostParams(file); - this.queueEvent("upload_success_handler", [file, serverData, responseReceived]); -}; - -SWFUpload.prototype.uploadComplete = function (file) { - file = this.unescapeFilePostParams(file); - this.queueEvent("upload_complete_handler", file); -}; - -/* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the - internal debug console. You can override this event and have messages written where you want. */ -SWFUpload.prototype.debug = function (message) { - this.queueEvent("debug_handler", message); -}; - - -/* ********************************** - Debug Console - The debug console is a self contained, in page location - for debug message to be sent. The Debug Console adds - itself to the body if necessary. - - The console is automatically scrolled as messages appear. - - If you are using your own debug handler or when you deploy to production and - have debug disabled you can remove these functions to reduce the file size - and complexity. -********************************** */ - -// Private: debugMessage is the default debug_handler. If you want to print debug messages -// call the debug() function. When overriding the function your own function should -// check to see if the debug setting is true before outputting debug information. -SWFUpload.prototype.debugMessage = function (message) { - var exceptionMessage, exceptionValues, key; - - if (this.settings.debug) { - exceptionValues = []; - - // Check for an exception object and print it nicely - if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") { - for (key in message) { - if (message.hasOwnProperty(key)) { - exceptionValues.push(key + ": " + message[key]); - } - } - exceptionMessage = exceptionValues.join("\n") || ""; - exceptionValues = exceptionMessage.split("\n"); - exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: "); - SWFUpload.Console.writeLine(exceptionMessage); - } else { - SWFUpload.Console.writeLine(message); - } - } -}; - -SWFUpload.Console = {}; -SWFUpload.Console.writeLine = function (message) { - var console, documentForm; - - try { - console = document.getElementById("SWFUpload_Console"); - - if (!console) { - documentForm = document.createElement("form"); - document.getElementsByTagName("body")[0].appendChild(documentForm); - - console = document.createElement("textarea"); - console.id = "SWFUpload_Console"; - console.style.fontFamily = "monospace"; - console.setAttribute("wrap", "off"); - console.wrap = "off"; - console.style.overflow = "auto"; - console.style.width = "400px"; - console.style.height = "450px"; - - // ss fixes - console.style.position = "absolute"; - console.style.top = "5px"; - console.style.zIndex = "100"; - - documentForm.appendChild(console); - } - - console.value += message + "\n"; - - console.scrollTop = console.scrollHeight - console.clientHeight; - } catch (ex) { - alert("Exception: " + ex.name + " Message: " + ex.message); - } -}; diff --git a/thirdparty/swfupload/swfupload.queue.js b/thirdparty/swfupload/swfupload.queue.js deleted file mode 100755 index 69e619da..00000000 --- a/thirdparty/swfupload/swfupload.queue.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - Queue Plug-in - - Features: - *Adds a cancelQueue() method for cancelling the entire queue. - *All queued files are uploaded when startUpload() is called. - *If false is returned from uploadComplete then the queue upload is stopped. - If false is not returned (strict comparison) then the queue upload is continued. - *Adds a QueueComplete event that is fired when all the queued files have finished uploading. - Set the event handler with the queue_complete_handler setting. - - */ - -var SWFUpload; -if (typeof(SWFUpload) === "function") { - SWFUpload.queue = {}; - - SWFUpload.prototype.initSettings = (function (oldInitSettings) { - return function () { - if (typeof(oldInitSettings) === "function") { - oldInitSettings.call(this); - } - - this.queueSettings = {}; - - this.queueSettings.queue_cancelled_flag = false; - this.queueSettings.queue_upload_count = 0; - - this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler; - this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler; - this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler; - this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler; - - this.settings.queue_complete_handler = this.settings.queue_complete_handler || null; - }; - })(SWFUpload.prototype.initSettings); - - SWFUpload.prototype.startUpload = function (fileID) { - this.queueSettings.queue_cancelled_flag = false; - this.callFlash("StartUpload", [fileID]); - }; - - SWFUpload.prototype.cancelQueue = function () { - this.queueSettings.queue_cancelled_flag = true; - this.stopUpload(); - - var stats = this.getStats(); - while (stats.files_queued > 0) { - this.cancelUpload(); - stats = this.getStats(); - } - }; - - SWFUpload.queue.uploadStartHandler = function (file) { - var returnValue; - if (typeof(this.queueSettings.user_upload_start_handler) === "function") { - returnValue = this.queueSettings.user_upload_start_handler.call(this, file); - } - - // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value. - returnValue = (returnValue === false) ? false : true; - - this.queueSettings.queue_cancelled_flag = !returnValue; - - return returnValue; - }; - - SWFUpload.queue.uploadCompleteHandler = function (file) { - var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler; - var continueUpload; - - if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) { - this.queueSettings.queue_upload_count++; - } - - if (typeof(user_upload_complete_handler) === "function") { - continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true; - } else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) { - // If the file was stopped and re-queued don't restart the upload - continueUpload = false; - } else { - continueUpload = true; - } - - if (continueUpload) { - var stats = this.getStats(); - if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) { - this.startUpload(); - } else if (this.queueSettings.queue_cancelled_flag === false) { - this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]); - this.queueSettings.queue_upload_count = 0; - } else { - this.queueSettings.queue_cancelled_flag = false; - this.queueSettings.queue_upload_count = 0; - } - } - }; -} \ No newline at end of file diff --git a/thirdparty/swfupload/swfupload.swf b/thirdparty/swfupload/swfupload.swf deleted file mode 100755 index 71ff884c..00000000 Binary files a/thirdparty/swfupload/swfupload.swf and /dev/null differ