@shopify/polaris
Version:
Shopify’s product component library
56 lines (46 loc) • 1.75 kB
JavaScript
var dragEvents = ['dragover', 'dragenter', 'drop'];
function fileAccepted(file, accept) {
return file.type === 'application/x-moz-file' || accepts(file, accept);
}
function getDataTransferFiles(event) {
if (isDragEvent(event) && event.dataTransfer) {
var dt = event.dataTransfer;
if (dt.files && dt.files.length) {
return Array.from(dt.files);
} else if (dt.items && dt.items.length) {
// Chrome is the only browser that allows to read the file list on drag
// events and uses `items` instead of `files` in this case.
return Array.from(dt.items);
}
} else if (isChangeEvent(event) && event.target.files) {
// Return files from even when a file was selected from an upload dialog
return Array.from(event.target.files);
}
return [];
}
function accepts(file, acceptedFiles) {
if (file && acceptedFiles) {
var fileName = file.name || '';
var mimeType = file.type || '';
var baseMimeType = mimeType.replace(/\/.*$/, '');
var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');
return acceptedFilesArray.some(type => {
var validType = type.trim();
if (validType.startsWith('.')) {
return fileName.toLowerCase().endsWith(validType.toLowerCase());
} else if (validType.endsWith('/*')) {
// This is something like a image/* mime type
return baseMimeType === validType.replace(/\/.*$/, '');
}
return mimeType === validType;
});
}
return true;
}
function isDragEvent(event) {
return dragEvents.indexOf(event.type) > 0;
}
function isChangeEvent(event) {
return Object.prototype.hasOwnProperty.call(event, 'target');
}
export { fileAccepted, getDataTransferFiles };