From 0654748e9539d774db80db68dd30246573af213c Mon Sep 17 00:00:00 2001 From: Rogerio Taques Date: Tue, 10 Apr 2018 11:07:43 +0900 Subject: [PATCH] Minor bug fix --- src/droparea.css | 4 ++- src/droparea.js | 84 ++++++++++++++++++++++++++++++++------------- src/droparea.min.js | 2 +- 3 files changed, 64 insertions(+), 26 deletions(-) diff --git a/src/droparea.css b/src/droparea.css index 63cd73a..349a599 100644 --- a/src/droparea.css +++ b/src/droparea.css @@ -4,7 +4,7 @@ * or thru the normal select from your computer method. * * @requires jQuery v2.1.3 or above - * @version 2.0.0 + * @version 2.0.1 * @cat Plugins/Image * @author Rogério Taques (rogerio.taques@gmail.com) * @copyright 2015-2018, Rogério Taques @@ -88,6 +88,8 @@ margin: 10px 20px; text-align: center; box-shadow: #777 1px 1px 1px; + min-height: 24px; + background: #d5d5d5; } .statusbar > .progressbar > div { diff --git a/src/droparea.js b/src/droparea.js index 588f46a..ca4d726 100644 --- a/src/droparea.js +++ b/src/droparea.js @@ -4,7 +4,7 @@ * or thru the normal select from your computer method. * * @requires jQuery v2.1.3 or above - * @version 2.0.0 + * @version 2.0.1 * @cat Plugins/Image * @author Rogério Taques (rogerio.taques@gmail.com) * @copyright 2015-2018, Rogério Taques @@ -34,11 +34,9 @@ (function($) { 'use strict'; - var drop_area; - // var file; - // var form_data; - // var statusbar; - var o; + var dropArea = []; + + var oo = []; // Default options var defaults = { @@ -154,11 +152,16 @@ /** * Creates an status bar of the droparea upload progress. + * @param {jqyElement} drop_area The droparea element * @return StatusBar */ - var _createStatusBar = function() { + var _createStatusBar = function(drop_area) { _sent += 1; // increase the submission counter + var daKey = drop_area.data('droparea-key'); + + var o = oo[daKey]; + var abortElem = $('' + o.i18n.abort + ''); var fileNameElem = $('
'); @@ -248,14 +251,17 @@ /** * + * @param {jqrElement} target The droparea element + * @param {json} opts The instance options * @param {string} msg The message to display * @param {boolean} [dismissable] If true, a dismiss button will be at the alert block * @param {boolean} [autohide] If true, message will disapear after defaults.notificationDelay * @return void */ - var _createAlertBlock = function(msg, dismissable, autohide) { - var target = drop_area; + var _createAlertBlock = function(target, msg, dismissable, autohide) { var alertblock, filename, dismiss; + var daKey = target.data('droparea-key'); + var opts = oo[daKey]; // sanitize arguments dismissable = typeof dismissable != 'undefined' ? dismissable : true; @@ -267,7 +273,9 @@ .html(msg) .appendTo(alertblock); - dismiss = $('').html(o.i18n.dismiss); + dismiss = $('').html( + opts.i18n.dismiss + ); // place statusbar covering all the object alertblock.css({ @@ -284,7 +292,10 @@ // implement a dismiss button // and inject it when alert block is dismissable if (dismissable) { - dismiss.on('click', _onClickDismiss).appendTo(alertblock); + dismiss + .off('click.droparea') + .on('click.droparea', _onClickDismiss) + .appendTo(alertblock); } // whenever alert is auto-hideable @@ -294,7 +305,7 @@ alertblock.fadeOut('fast', function() { $(this).remove(); }); - }, o.notificationDelay); + }, opts.notificationDelay); } }; // _createAlertBlock @@ -303,7 +314,7 @@ * @param {File} file * @return void */ - var _sendFileToServer = function(file) { + var _sendFileToServer = function(drop_area, o, file) { var statusbar, jqXHR; var fnXHR = function() { @@ -404,7 +415,7 @@ } // create the statusbar in order to set submition progress - statusbar = new _createStatusBar(); + statusbar = new _createStatusBar(drop_area); statusbar.setFileNameSize(file.name, file.size); jqXHR = $.ajax(ajaxOpts) @@ -417,9 +428,11 @@ /** * Intercepts the file select + * @param {jqrElement} drop_area The droparea element + * @param {json} o The options * @return void */ - var _interceptFileSelector = function() { + var _interceptFileSelector = function(drop_area, o) { if ($(o.fileHolder).length && $(o.filePreview).length) { $(o.fileHolder) .off('change.droparea') @@ -432,7 +445,7 @@ event.originalEvent.target.files ) { file = event.originalEvent.target.files[0]; - _sendFileToServer(file); + _sendFileToServer(drop_area, o, file); } }); } @@ -447,6 +460,10 @@ ev.stopPropagation(); ev.preventDefault(); + var drop_area = $(ev.currentTarget); + var daKey = drop_area.data('droparea-key'); + var o = oo[daKey]; + // simulate that user is selecting the file, // but not dropping it instead $(o.fileHolder).click(); @@ -461,6 +478,8 @@ ev.stopPropagation(); ev.preventDefault(); + var drop_area = $(ev.currentTarget); + // apply a new style on droppable area drop_area.addClass('droparea-dragging'); }; // _onDragEnter @@ -474,6 +493,8 @@ ev.stopPropagation(); ev.preventDefault(); + var drop_area = $(ev.currentTarget); + // restore original style drop_area.removeClass('droparea-dragging'); }; // _onDragLeave @@ -487,6 +508,8 @@ ev.stopPropagation(); ev.preventDefault(); + var drop_area = $(ev.currentTarget); + // apply a new style on droppable area drop_area.addClass('droparea-dragging'); }; // _onDragOver @@ -497,10 +520,14 @@ * @return void */ var _onDrop = function(ev) { + ev.preventDefault(); + // get the original file var file = ev.originalEvent.dataTransfer.files[0]; - ev.preventDefault(); + var drop_area = $(ev.currentTarget); + var daKey = drop_area.data('droparea-key'); + var o = oo[daKey]; // apply a new style on droppable area drop_area.toggleClass('droparea-dropped droparea-dragging'); @@ -508,7 +535,7 @@ // do not upload when options.upload is set to false // open the file selection for 'fileHolder' instead. if (!o.upload) { - _createAlertBlock(o, drop_area, o.i18n.unableToUpload, true, false); + _createAlertBlock(drop_area, o.i18n.unableToUpload, true, false); $(o.fileHolder).click(); return; } @@ -522,6 +549,7 @@ if (accepting.indexOf(extension) === -1) { _createAlertBlock( + drop_area, o.i18n.wrongFileType.replace( '%s', '' + o.accepted.split('|').join(' or ') + '' @@ -535,6 +563,7 @@ // check if dropped file size is allowed if (file.size / 1024 > o.fileMaxSize) { _createAlertBlock( + drop_area, o.i18n.wrongFileSize.replace( '%s', '' + o.fileMaxSize + ' ' + o.i18n.kb + '' @@ -544,14 +573,15 @@ return; } - _sendFileToServer(file); + _sendFileToServer(drop_area, o, file); }; // _onDrop /** * Initializes the plugin handlers + * @param {jqrObject} drop_area The droparea element * @return void */ - var _initHandlers = function() { + var _initHandlers = function(drop_area) { drop_area .off('click.droparea') .on('click.droparea', _onClick) @@ -572,8 +602,11 @@ */ var _construct = function(options) { return this.each(function() { - drop_area = $(this); - o = $.extend({}, defaults, options); + var daKey = dropArea.length; + var drop_area = $(this); + var o = $.extend({}, defaults, options); + + drop_area.attr('data-droparea-key', daKey); // If given method isn't allowed fallback to POST if (['POST', 'PATCH', 'PUT'].indexOf(o.method) === -1) { @@ -585,8 +618,11 @@ .parent() .css('position', drop_area.parent().css('position') || 'relative'); - _interceptFileSelector(); - _initHandlers(); + dropArea[daKey] = drop_area; + oo[daKey] = o; + + _interceptFileSelector(drop_area, o); + _initHandlers(drop_area); }); }; // _construct diff --git a/src/droparea.min.js b/src/droparea.min.js index 7aa84c2..1f4a146 100644 --- a/src/droparea.min.js +++ b/src/droparea.min.js @@ -1,4 +1,4 @@ /* File: src/droparea.js */ -(function($){'use strict';var drop_area;var o;var defaults ={url:'path/to/server/script',method:'POST',upload:true,fileHolder:'#file',filePreview:'#file-preview',notificationDelay:5000,accepted:'.jpg|.png|.gif',fileMaxSize:2048,extra:[],onSuccess:null,onFail:null,i18n:{unableToUpload:'Unable to upload at this time.
Select a file.',wrongFileType:'Unacceptable file type!
Try:%s',wrongFileSize:'Dropped file is too big!
Max file size allowed:%s',abort:'Abort',mb:' MB',kb:' KB',percent:'% ',dismiss:'Dismiss',error:'Err:'}};var _sent = 0;var _updateImageSource = function(file){var oFReader = new FileReader();if (file){oFReader.readAsDataURL(file);oFReader.onload = function(oFREvent){$(o.filePreview).animate({opacity:0},'slow',function(){$(o.filePreview).attr('src',oFREvent.target.result);$(o.filePreview).animate({opacity:1},'slow',function(){drop_area .find('.statusbar.alert-block') .fadeOut('slow',function(){$(this).remove();});});});};}};var _onClickDismiss = function(ev){ev.stopPropagation();ev.preventDefault();$(ev.currentTarget) .parent() .fadeOut('fast',function(){$(this).remove();});};var _createStatusBar = function(){_sent += 1;var abortElem = $('
' + o.i18n.abort + '');var fileNameElem = $('
');var fileSizeElem = $('
');var progressBarElem = $('
',{style:{top:0,left:0}});var statusBarElem = $('
',{id:'droparea-statusbar-' + _sent});var setFileNameSize = function(fileName,fileSize){var sizeStr = '';var sizeKb = fileSize / 1024;var fixSize = function(val){val = parseFloat(val.toFixed(2));return val % 1 === 0 ? val.toFixed(0):val.toFixed(2);};if (parseInt(sizeKb) > 1024){sizeStr = fixSize(sizeKb / 1024) + o.i18n.mb;}else{sizeStr = fixSize(sizeKb) + o.i18n.kb;}fileNameElem.html(fileName);fileSizeElem.html(sizeStr);};var setProgress = function(progress){progressBarElem .find('div') .animate({width:progress + '%'},10) .html(progress + o.i18n.percent);if (parseInt(progress) >= 100){abortElem.hide();}};var setAbort = function(jqxhr){abortElem.off('click.droparea').on('click.droparea',function(event){event.preventDefault();event.stopPropagation();if (jqxhr.abort){jqxhr.abort();}statusBarElem.fadeOut('fast',function(){statusBarElem.remove();});});};var setFailure = function(msg){progressBarElem.addClass('droparea-fail');progressBarElem.find('div:first').html(msg);};statusBarElem.append( fileNameElem,fileSizeElem,progressBarElem,abortElem );drop_area.find('.statusbar').remove();drop_area.append(statusBarElem);return{statusBar:statusBarElem,setFailure:setFailure,setFileNameSize:setFileNameSize.bind(this),setProgress:setProgress.bind(this),setAbort:setAbort.bind(this)};};var _createAlertBlock = function(msg,dismissable,autohide){var target = drop_area;var alertblock,filename,dismiss;dismissable = typeof dismissable!= 'undefined' ? dismissable:true;autohide = typeof autohide!= 'undefined' ? autohide:true;alertblock = $('
');filename = $('
') .html(msg) .appendTo(alertblock);dismiss = $('').html(o.i18n.dismiss);alertblock.css({top:0,left:0});target.find('.statusbar').remove();target.append(alertblock);if (dismissable){dismiss.on('click',_onClickDismiss).appendTo(alertblock);}if (autohide){setTimeout(function(){alertblock.fadeOut('fast',function(){$(this).remove();});},o.notificationDelay);}};var _sendFileToServer = function(file){var statusbar,jqXHR;var fnXHR = function(){var xhrObj = $.ajaxSettings.xhr();var onUploadProgress = function(ev){var percent = 0;var position = ev.loaded||ev.position;var total = ev.total;if (ev.lengthComputable){percent = Math.ceil(position / total * 100);}statusbar.setProgress(percent);};if (xhrObj.upload){xhrObj.upload.addEventListener('progress',onUploadProgress,false);}return xhrObj;};var ajaxOpts ={xhr:fnXHR,url:o.url,method:o.method,type:o.method,contentType:false,processData:false,cache:false,data:{}};var onXHRSuccess = function(r){if (typeof r === 'string'){r = $.parseJSON(r);}statusbar.setProgress(100);if (o.onSuccess!== null && $.isFunction(o.onSuccess)){var fileNameToReturn = typeof r.file_name!== 'undefined' ? r.file_name:null;o.onSuccess(r,fileNameToReturn,file);}drop_area.removeClass('droparea-dropped');};var onXHRFail = function(jqXHR,textStatus,errorThrown){statusbar.setFailure(o.i18n.error + errorThrown);if (o.onFail && $.isFunction(o.onSuccess)){o.onFail(jqXHR.responseJSON||jqXHR);}};var onXHRComplete = function(rjqXHR,textStatus){var fh = $(o.fileHolder);fh.replaceWith(fh.val('').clone(true));setTimeout(function(){statusbar.statusBar.fadeOut('fast',function(){$(this).remove();});},o.notificationDelay);};ajaxOpts.data = new FormData();ajaxOpts.data.append(o.fileHolder.replace('#',''),file);if (o.extra!== null){for (var i in o.extra){if ($('#' + o.extra[i].replace('#','')).length){ajaxOpts.data.append( o.extra[i].replace('#',''),$('#' + o.extra[i].replace('#','')).val() );}}}statusbar = new _createStatusBar();statusbar.setFileNameSize(file.name,file.size);jqXHR = $.ajax(ajaxOpts) .then(onXHRSuccess) .catch(onXHRFail) .always(onXHRComplete);statusbar.setAbort(jqXHR);};var _interceptFileSelector = function(){if ($(o.fileHolder).length && $(o.filePreview).length){$(o.fileHolder) .off('change.droparea') .on('change.droparea',(event) =>{var file;if ( event.originalEvent && event.originalEvent.target && event.originalEvent.target.files ){file = event.originalEvent.target.files[0];_sendFileToServer(file);}});}};var _onClick = function(ev){ev.stopPropagation();ev.preventDefault();$(o.fileHolder).click();};var _onDragEnter = function(ev){ev.stopPropagation();ev.preventDefault();drop_area.addClass('droparea-dragging');};var _onDragLeave = function(ev){ev.stopPropagation();ev.preventDefault();drop_area.removeClass('droparea-dragging');};var _onDragOver = function(ev){ev.stopPropagation();ev.preventDefault();drop_area.addClass('droparea-dragging');};var _onDrop = function(ev){var file = ev.originalEvent.dataTransfer.files[0];ev.preventDefault();drop_area.toggleClass('droparea-dropped droparea-dragging');if (!o.upload){_createAlertBlock(o,drop_area,o.i18n.unableToUpload,true,false);$(o.fileHolder).click();return;}if (o.accepted!== null && typeof o.accepted!== 'boolean'){var accepting = o.accepted.toLowerCase();var extension = file.name .substr(file.name.lastIndexOf('.')) .toLowerCase();if (accepting.indexOf(extension) === -1){_createAlertBlock( o.i18n.wrongFileType.replace( '%s','' + o.accepted.split('|').join(' or ') + '' ) );return;}}if (file.size / 1024 > o.fileMaxSize){_createAlertBlock( o.i18n.wrongFileSize.replace( '%s','' + o.fileMaxSize + ' ' + o.i18n.kb + '' ) );return;}_sendFileToServer(file);};var _initHandlers = function(){drop_area .off('click.droparea') .on('click.droparea',_onClick) .off('dragenter.droparea') .on('dragenter.droparea',_onDragEnter) .off('dragleave.droparea') .on('dragleave.droparea',_onDragLeave) .off('dragover.droparea') .on('dragover.droparea',_onDragOver) .off('drop.droparea') .on('drop.droparea',_onDrop);};var _construct = function(options){return this.each(function(){drop_area = $(this);o = $.extend({},defaults,options);if (['POST','PATCH','PUT'].indexOf(o.method) === -1){o.method = 'POST';}drop_area .parent() .css('position',drop_area.parent().css('position')||'relative');_interceptFileSelector();_initHandlers();});};var methods ={init:_construct};$.fn.droparea = function(method){if (methods[method]){return methods[method].apply( this,Array.prototype.slice.call(arguments,1) );}else if (typeof method === 'object'||!method){return methods.init.apply(this,arguments);}else{$.error('Method ' + method + ' does not exist on Droparea.js');}};})(jQuery); +(function($){'use strict';var dropArea = [];var oo = [];var defaults ={url:'path/to/server/script',method:'POST',upload:true,fileHolder:'#file',filePreview:'#file-preview',notificationDelay:5000,accepted:'.jpg|.png|.gif',fileMaxSize:2048,extra:[],onSuccess:null,onFail:null,i18n:{unableToUpload:'Unable to upload at this time.
Select a file.',wrongFileType:'Unacceptable file type!
Try:%s',wrongFileSize:'Dropped file is too big!
Max file size allowed:%s',abort:'Abort',mb:' MB',kb:' KB',percent:'% ',dismiss:'Dismiss',error:'Err:'}};var _sent = 0;var _updateImageSource = function(file){var oFReader = new FileReader();if (file){oFReader.readAsDataURL(file);oFReader.onload = function(oFREvent){$(o.filePreview).animate({opacity:0},'slow',function(){$(o.filePreview).attr('src',oFREvent.target.result);$(o.filePreview).animate({opacity:1},'slow',function(){drop_area .find('.statusbar.alert-block') .fadeOut('slow',function(){$(this).remove();});});});};}};var _onClickDismiss = function(ev){ev.stopPropagation();ev.preventDefault();$(ev.currentTarget) .parent() .fadeOut('fast',function(){$(this).remove();});};var _createStatusBar = function(drop_area){_sent += 1;var daKey = drop_area.data('droparea-key');var o = oo[daKey];var abortElem = $('
' + o.i18n.abort + '');var fileNameElem = $('
');var fileSizeElem = $('
');var progressBarElem = $('
',{style:{top:0,left:0}});var statusBarElem = $('
',{id:'droparea-statusbar-' + _sent});var setFileNameSize = function(fileName,fileSize){var sizeStr = '';var sizeKb = fileSize / 1024;var fixSize = function(val){val = parseFloat(val.toFixed(2));return val % 1 === 0 ? val.toFixed(0):val.toFixed(2);};if (parseInt(sizeKb) > 1024){sizeStr = fixSize(sizeKb / 1024) + o.i18n.mb;}else{sizeStr = fixSize(sizeKb) + o.i18n.kb;}fileNameElem.html(fileName);fileSizeElem.html(sizeStr);};var setProgress = function(progress){progressBarElem .find('div') .animate({width:progress + '%'},10) .html(progress + o.i18n.percent);if (parseInt(progress) >= 100){abortElem.hide();}};var setAbort = function(jqxhr){abortElem.off('click.droparea').on('click.droparea',function(event){event.preventDefault();event.stopPropagation();if (jqxhr.abort){jqxhr.abort();}statusBarElem.fadeOut('fast',function(){statusBarElem.remove();});});};var setFailure = function(msg){progressBarElem.addClass('droparea-fail');progressBarElem.find('div:first').html(msg);};statusBarElem.append( fileNameElem,fileSizeElem,progressBarElem,abortElem );drop_area.find('.statusbar').remove();drop_area.append(statusBarElem);return{statusBar:statusBarElem,setFailure:setFailure,setFileNameSize:setFileNameSize.bind(this),setProgress:setProgress.bind(this),setAbort:setAbort.bind(this)};};var _createAlertBlock = function(target,msg,dismissable,autohide){var alertblock,filename,dismiss;var daKey = target.data('droparea-key');var opts = oo[daKey];dismissable = typeof dismissable!= 'undefined' ? dismissable:true;autohide = typeof autohide!= 'undefined' ? autohide:true;alertblock = $('
');filename = $('
') .html(msg) .appendTo(alertblock);dismiss = $('').html( opts.i18n.dismiss );alertblock.css({top:0,left:0});target.find('.statusbar').remove();target.append(alertblock);if (dismissable){dismiss .off('click.droparea') .on('click.droparea',_onClickDismiss) .appendTo(alertblock);}if (autohide){setTimeout(function(){alertblock.fadeOut('fast',function(){$(this).remove();});},opts.notificationDelay);}};var _sendFileToServer = function(drop_area,o,file){var statusbar,jqXHR;var fnXHR = function(){var xhrObj = $.ajaxSettings.xhr();var onUploadProgress = function(ev){var percent = 0;var position = ev.loaded||ev.position;var total = ev.total;if (ev.lengthComputable){percent = Math.ceil(position / total * 100);}statusbar.setProgress(percent);};if (xhrObj.upload){xhrObj.upload.addEventListener('progress',onUploadProgress,false);}return xhrObj;};var ajaxOpts ={xhr:fnXHR,url:o.url,method:o.method,type:o.method,contentType:false,processData:false,cache:false,data:{}};var onXHRSuccess = function(r){if (typeof r === 'string'){r = $.parseJSON(r);}statusbar.setProgress(100);if (o.onSuccess!== null && $.isFunction(o.onSuccess)){var fileNameToReturn = typeof r.file_name!== 'undefined' ? r.file_name:null;o.onSuccess(r,fileNameToReturn,file);}drop_area.removeClass('droparea-dropped');};var onXHRFail = function(jqXHR,textStatus,errorThrown){statusbar.setFailure(o.i18n.error + errorThrown);if (o.onFail && $.isFunction(o.onSuccess)){o.onFail(jqXHR.responseJSON||jqXHR);}};var onXHRComplete = function(rjqXHR,textStatus){var fh = $(o.fileHolder);fh.replaceWith(fh.val('').clone(true));setTimeout(function(){statusbar.statusBar.fadeOut('fast',function(){$(this).remove();});},o.notificationDelay);};ajaxOpts.data = new FormData();ajaxOpts.data.append(o.fileHolder.replace('#',''),file);if (o.extra!== null){for (var i in o.extra){if ($('#' + o.extra[i].replace('#','')).length){ajaxOpts.data.append( o.extra[i].replace('#',''),$('#' + o.extra[i].replace('#','')).val() );}}}statusbar = new _createStatusBar(drop_area);statusbar.setFileNameSize(file.name,file.size);jqXHR = $.ajax(ajaxOpts) .then(onXHRSuccess) .catch(onXHRFail) .always(onXHRComplete);statusbar.setAbort(jqXHR);};var _interceptFileSelector = function(drop_area,o){if ($(o.fileHolder).length && $(o.filePreview).length){$(o.fileHolder) .off('change.droparea') .on('change.droparea',(event) =>{var file;if ( event.originalEvent && event.originalEvent.target && event.originalEvent.target.files ){file = event.originalEvent.target.files[0];_sendFileToServer(drop_area,o,file);}});}};var _onClick = function(ev){ev.stopPropagation();ev.preventDefault();var drop_area = $(ev.currentTarget);var daKey = drop_area.data('droparea-key');var o = oo[daKey];$(o.fileHolder).click();};var _onDragEnter = function(ev){ev.stopPropagation();ev.preventDefault();var drop_area = $(ev.currentTarget);drop_area.addClass('droparea-dragging');};var _onDragLeave = function(ev){ev.stopPropagation();ev.preventDefault();var drop_area = $(ev.currentTarget);drop_area.removeClass('droparea-dragging');};var _onDragOver = function(ev){ev.stopPropagation();ev.preventDefault();var drop_area = $(ev.currentTarget);drop_area.addClass('droparea-dragging');};var _onDrop = function(ev){ev.preventDefault();var file = ev.originalEvent.dataTransfer.files[0];var drop_area = $(ev.currentTarget);var daKey = drop_area.data('droparea-key');var o = oo[daKey];drop_area.toggleClass('droparea-dropped droparea-dragging');if (!o.upload){_createAlertBlock(drop_area,o.i18n.unableToUpload,true,false);$(o.fileHolder).click();return;}if (o.accepted!== null && typeof o.accepted!== 'boolean'){var accepting = o.accepted.toLowerCase();var extension = file.name .substr(file.name.lastIndexOf('.')) .toLowerCase();if (accepting.indexOf(extension) === -1){_createAlertBlock( drop_area,o.i18n.wrongFileType.replace( '%s','' + o.accepted.split('|').join(' or ') + '' ) );return;}}if (file.size / 1024 > o.fileMaxSize){_createAlertBlock( drop_area,o.i18n.wrongFileSize.replace( '%s','' + o.fileMaxSize + ' ' + o.i18n.kb + '' ) );return;}_sendFileToServer(drop_area,o,file);};var _initHandlers = function(drop_area){drop_area .off('click.droparea') .on('click.droparea',_onClick) .off('dragenter.droparea') .on('dragenter.droparea',_onDragEnter) .off('dragleave.droparea') .on('dragleave.droparea',_onDragLeave) .off('dragover.droparea') .on('dragover.droparea',_onDragOver) .off('drop.droparea') .on('drop.droparea',_onDrop);};var _construct = function(options){return this.each(function(){var daKey = dropArea.length;var drop_area = $(this);var o = $.extend({},defaults,options);drop_area.attr('data-droparea-key',daKey);if (['POST','PATCH','PUT'].indexOf(o.method) === -1){o.method = 'POST';}drop_area .parent() .css('position',drop_area.parent().css('position')||'relative');dropArea[daKey] = drop_area;oo[daKey] = o;_interceptFileSelector(drop_area,o);_initHandlers(drop_area);});};var methods ={init:_construct};$.fn.droparea = function(method){if (methods[method]){return methods[method].apply( this,Array.prototype.slice.call(arguments,1) );}else if (typeof method === 'object'||!method){return methods.init.apply(this,arguments);}else{$.error('Method ' + method + ' does not exist on Droparea.js');}};})(jQuery);