# AJAX simple file upload Upload multiple files with progress. Has hooks for pre/post work ## How to use include `ajaxFileUploadSimeple.js` ## How to run init with `initAjaxUploader(ConfigObject)` Where the config object can have the following settings ## Config Object settiings ### {String} target_file Must be set prefix for the element for the file upload ### {String} target_form Must be set the master form in which this element sits ### {Number} [max_files=1] maximum uploadable files, if 1, multiple will be removed from input file field, if 0, no limit ### {Number} [max_file_size=0] In bytes, maximum file size. If not set unlimited. 0 is also unlimited ### {Array} [allowed_extensions=[]] Allowed file extensions. Without leading '.'. Will be added to the input file accept list ### {Array} [allowed_file_types=[]] Allowed file types in mime format. Will be added to the input file accept list ### {String} [target_router=''] value of the action _POST variable, if not set or if empty use "fileUpload" ### {String} [target_action=''] override the target_form action field ### {Object} [form_parameters={}] Key/Value list for additional parameters to add to the form submit. Added BEFORE fileBeforeUpload parameters ### {Object} [translation={}] Translated strings pushed into the AFUS_strings object ### {Boolean} [auto_submit=false] if we override the submit button and directly upload ### {Function} [fileChange=''] Function run on change of -file element entry. Parameters are target_file, file_pos, target_router ### {Function} [fileChangeAll=''] Function run on change of -file element entry after all file changes for each entry are run. Parameters are target_file, target_router ### {Function} [fileRemove=''] Called when an upload file is removed from the queue before upload. Parameters are target_file, file_pos ### {Functuon} [fileClear=''] called when clear button is pressed. Parameters are target_file ### {Function} [fileBeforeUploadAll=''] Function called before uploads start. Parameters are target_file, target_router ### {Function} [fileBeforeUpload=''] Function called before upload starts. Parameters are target_file, file_pos, target_router ### {Function} [fileUploaded=''] Function called after upload has successfully finished. Parameters are target_file, file_pos, target_router, data (object returned from upload function call) ### {Function} [fileUploadedAll=''] After all uploads have been done, this one will be called. Parameters are target_file, target_router ### {Function} [fileUploadError=''] Function called after upload has failed. Parameters are target_file, file_pos, target_router, data (object returned from upload function call) ## Method call flow ```txt [**1**] initAjaxUploader [1 run 2] check if browser is capable for uploader [1 run 1-A] run config check [1 listen 8-C] cancel upload output [1 run 3] afusPassThroughEvent [1 run 4] run main file uploader function attachment ``` ```txt [1-A] afusUploaderConfigCheck check and clean config ``` ```txt [**2**] afusSupportAjaxUploadWithProgress ``` ```txt [**3**] afusPassThroughEvent [3 set 1] change event on input file [3 call 3-A] file extension check [3 call 3-B] file type check [3 set 2] sets upload queue delete in fileChange function [3 ext 2-1] fileRemove function [3 ext] fileChange function [3 ext] fileChangeAll [3 set 3] call click submit if auto submit ``` ```txt [3-A] afusHasExtension [3-B] afusHasFileType ``` ```txt [**4**] afusInitFullFormAjaxUpload [4 set 1] on submit function [4 ext] fileBeforeUploadAll function [4 run 6] afusSendFile main file send (promise) [4 run 5] call class for async submitter iterator [4 on finally call 8-C] finally promise: afusFinalPostUpload [4 on finally ext] finally promise: call fileUploadedAll external ``` ```txt [**5**] class afusAsyncUploader [5-A] class constructor for init [5-B] iterator internal loop method for processing files ``` ```txt [**6**] afusSendFile [6 ext] fileBeforeUpload function [6] main xhr uploader start [6 set 7-A] loadstart event afusOnloadStartHandler [6 set 7-C] progress event afusOnProgressHandler [6 set 7-B] load event afusOnloadHandler [6 set 7-D] readystatechange event afusOnReadyStateChangeHandler ``` ```txt [7-A] afusOnloadStartHandler [7-A call 9-A] add +1 to running [7-B] afusOnloadHandler [7-C] afusOnProgressHandler [7-D] afusOnReadyStateChangeHandler [7-D call 9-B] -1 for running queue count [7-D call 8-B] afusUploadError [7-D call 8-A] if success afusPostUpload [7-D ext] if error fileUploadError function ``` ```txt [8-A] afusPostUpload [8-B] afusUploadError [8-C] afusCancelUploadOutput [8-D] afusFinalPostUpload [8-E] afusResetInternalVariables ``` ```txt [9-A] afusRunningStart [9-B] afusRunningStop [9-C] afusRunningGet ```