Cleanup Jua multi file uploader

This commit is contained in:
djmaze 2021-11-17 13:30:39 +01:00
parent 7027b1b74c
commit 6ba4e70d5e

63
vendors/jua/jua.js vendored
View file

@ -13,10 +13,10 @@
if (aItems && aItems.length) if (aItems && aItems.length)
{ {
let let
oFile,
iInputLimit = iLimit, iInputLimit = iLimit,
oFile = null,
bUseLimit = 0 < iLimit, bUseLimit = 0 < iLimit,
bCallLimit = false bCallLimit = !fLimitCallback
; ;
[...aItems].forEach(oItem => { [...aItems].forEach(oItem => {
@ -27,7 +27,7 @@
oFile = getDataFromFile(oItem); oFile = getDataFromFile(oItem);
oFile && fFileCallback(oFile); oFile && fFileCallback(oFile);
} }
else if (bUseLimit && !bCallLimit && 0 > iLimit && fLimitCallback) else if (bUseLimit && !bCallLimit)
{ {
bCallLimit = true; bCallLimit = true;
fLimitCallback(iInputLimit); fLimitCallback(iInputLimit);
@ -101,7 +101,18 @@
{ {
constructor(options) constructor(options)
{ {
const self = this; let timer,
el = options.clickElement;
const self = this,
timerStart = fn => {
timerStop();
timer = setTimeout(fn, 200);
},
timerStop = () => {
timer && clearTimeout(timer);
timer = 0;
};
self.oEvents = { self.oEvents = {
onSelect: null, onSelect: null,
@ -125,7 +136,6 @@
}, options || {}); }, options || {});
self.oQueue = new Queue(1 == options.limit ? 1 : 2); self.oQueue = new Queue(1 == options.limit ? 1 : 2);
let el = options.clickElement;
if (el) { if (el) {
el.style.position = 'relative'; el.style.position = 'relative';
el.style.overflow = 'hidden'; el.style.overflow = 'hidden';
@ -161,24 +171,24 @@
if (oBigDropZone) if (oBigDropZone)
{ {
addEventListeners(oBigDropZone, { addEventListeners(oBigDropZone, {
dragover: () => self.docTimer.clear(), dragover: () => timerStop(),
dragenter: oEvent => { dragenter: oEvent => {
if (eventContainsFiles(oEvent)) if (eventContainsFiles(oEvent))
{ {
self.docTimer.clear(); timerStop();
oEvent.preventDefault(); oEvent.preventDefault();
self.runEvent('onBodyDragEnter', [oEvent]); self.runEvent('onBodyDragEnter', oEvent);
} }
}, },
dragleave: oEvent => dragleave: oEvent =>
oEvent.dataTransfer && self.docTimer.start(() => self.runEvent('onBodyDragLeave', [oEvent])), oEvent.dataTransfer && timerStart(() => self.runEvent('onBodyDragLeave', oEvent)),
drop: oEvent => { drop: oEvent => {
if (oEvent.dataTransfer) { if (oEvent.dataTransfer) {
let bFiles = eventContainsFiles(oEvent); let bFiles = eventContainsFiles(oEvent);
bFiles && oEvent.preventDefault(); bFiles && oEvent.preventDefault();
self.runEvent('onBodyDragLeave', [oEvent]); self.runEvent('onBodyDragLeave', oEvent);
return !bFiles; return !bFiles;
} }
@ -191,10 +201,10 @@
addEventListeners(el, { addEventListeners(el, {
dragenter: oEvent => { dragenter: oEvent => {
if (eventContainsFiles(oEvent)) { if (eventContainsFiles(oEvent)) {
self.docTimer.clear(); timerStop();
oEvent.preventDefault(); oEvent.preventDefault();
self.runEvent('onDragEnter', [el, oEvent]); self.runEvent('onDragEnter', el, oEvent);
} }
}, },
dragover: oEvent => { dragover: oEvent => {
@ -203,7 +213,7 @@
{ {
let sEffect = oEvent.dataTransfer.effectAllowed; let sEffect = oEvent.dataTransfer.effectAllowed;
self.docTimer.clear(); timerStop();
oEvent.dataTransfer.dropEffect = (sEffect === 'move' || sEffect === 'linkMove') ? 'move' : 'copy'; oEvent.dataTransfer.dropEffect = (sEffect === 'move' || sEffect === 'linkMove') ? 'move' : 'copy';
@ -219,8 +229,8 @@
if (oEvent.dataTransfer) { if (oEvent.dataTransfer) {
let oRelatedTarget = doc.elementFromPoint(oEvent.clientX, oEvent.clientY); let oRelatedTarget = doc.elementFromPoint(oEvent.clientX, oEvent.clientY);
if (!oRelatedTarget || !el.contains(oRelatedTarget)) { if (!oRelatedTarget || !el.contains(oRelatedTarget)) {
self.docTimer.clear(); timerStop();
self.runEvent('onDragLeave', [el, oEvent]); self.runEvent('onDragLeave', el, oEvent);
} }
} }
}, },
@ -233,7 +243,7 @@
oFile => { oFile => {
if (oFile) { if (oFile) {
self.addNewFile(oFile); self.addNewFile(oFile);
self.docTimer.clear(); timerStop();
} }
}, },
self.options.limit, self.options.limit,
@ -241,7 +251,7 @@
); );
} }
self.runEvent('onDragLeave', [oEvent]); self.runEvent('onDragLeave', oEvent);
} }
}); });
} }
@ -259,11 +269,10 @@
/** /**
* @param {string} sName * @param {string} sName
* @param {string=} aArgs
*/ */
runEvent(sName, aArgs) runEvent(sName, ...aArgs)
{ {
this.oEvents[sName] && this.oEvents[sName].apply(null, aArgs || []); this.oEvents[sName] && this.oEvents[sName].apply(null, aArgs);
} }
/** /**
@ -448,20 +457,6 @@
return arr.map(dec => dec.toString(16).padStart(2,'0')).join(''); return arr.map(dec => dec.toString(16).padStart(2,'0')).join('');
} }
/**
* @type {number}
*/
Jua.prototype.docTimer = {
start: function(fn){
this.clear();
this.timer = setTimeout(fn, 200);
},
clear: function(){
this.timer && clearTimeout(this.timer);
this.timer = 0;
}
};
this.Jua = Jua; this.Jua = Jua;
})(document); })(document);