UNPKG

simpapp-phonegap-file-upload

Version:

jQuery based file upload

156 lines (151 loc) 3.86 kB
var simp = { //jQuery if not $: (typeof window.jQuery !== 'undefined') ? window.jQuery : {}, //Global params params: { multiple: false, progress: true, inputName: [], }, url: '', files: [], formData: new FormData(), // upload: function() { }, //Default callbacks uploadCallback: function() { }, errorUploadCallback: function() { }, prepFormData: function() { if(simp.params.inputName.length === 0) { if(typeof $('input[type="file"]') === 'object') { simp.params.inputName = $('input[type="file"]'); } }else { } for(var i=0;i<simp.params.inputName.length;i++) { if(simp.params.multiple === true) { for(var j=0;j<simp.params.inputName[i].files.length;j++) { if(typeof simp.params.inputName[i].files === 'object') { $.extend(simp.params.inputName[i].files[j], {postFileName: simp.params.inputName[i].name}); simp.files.push(simp.params.inputName[i]); } } }else { if(typeof simp.params.inputName[i].files === 'object') { $.extend(simp.params.inputName[i].files[0], {postFileName: simp.params.inputName[i].name}); simp.files.push(simp.params.inputName[i]); } } } if(simp.files.length !== 0) { for(var i=0;i<simp.files.length;i++) { if(simp.params.multiple === true) { for(var j=0;j<simp.files[i].files.length;j++) { simp.formData.append(simp.files[i].files[j].postFileName, simp.files[i].files[j], simp.files[i].files[j].name); } }else { simp.formData.append(simp.files[i].files[0].postFileName, simp.files[i].files[0], simp.files[i].files[0].name); } } } }, //Magic doUpload: function(successCallback,errorCallback,onProgress) { successCallback = (typeof successCallback === 'function') ? successCallback : function(){}; errorCallback = (typeof errorCallback === 'function') ? errorCallback : function(){}; onProgress = (typeof onProgress === 'function') ? onProgress : function(){}; simp.prepFormData(); $.ajax({ type: "POST", url: simp.url, success: function(e) { simp.uploadCallback(e); successCallback(e); }, xhr: function () { var myXhr = $.ajaxSettings.xhr(); if (myXhr.upload) { myXhr.upload.addEventListener('progress', function(e){ if(e.lengthComputable) { console.log(e); if(simp.params.progress===true) { var percentComplete = e.loaded / e.total; percentComplete = parseInt(percentComplete * 100); onProgress(percentComplete); } } }, false); } return myXhr; }, error: function (error) { simp.errorUploadCallback(); errorCallback(); }, async: true, data: simp.formData, cache: false, contentType: false, processData: false, }); }, //init ready: function() { console.log('ready'); }, init: function(url, options) { //input = (typeof input === 'object' || typeof input === 'string') ? input : []; url = (typeof url === 'string') ? url : ''; options = (typeof options === 'object') ? options : ''; if(options !== '') for(var i in simp.params) if(typeof options[i] !== 'undefined') this.params[i] = options[i]; this.url = url; this.loadRes(); }, bindEvents: function() { }, //loading jQuery func loadRes: function() { if(!window.jQuery) { var script = document.createElement("SCRIPT"); script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'; script.type = 'text/javascript'; script.onload = function() { simp.ready(window.jQuery); }; document.getElementsByTagName("head")[0].appendChild(script); }else { simp.ready(window.jQuery); } } };