universal-choose-image
Version:
80 lines (70 loc) • 2.26 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
function inputCreateAndAppend(multiple, accept) {
var inputElement = document.createElement('INPUT');
inputElement.name = 'file';
inputElement.id = 'input-' + Math.random() * 1e8;
inputElement.type = 'file';
multiple ? inputElement.setAttribute('multiple', 'multiple') : null;
inputElement.style.display = 'none';
inputElement.setAttribute('accept', accept || 'image/*');
document.body.appendChild(inputElement);
return inputElement;
}
function transformBase64(files) {
return new Promise(function (resolve, reject) {
!files.length ? reject() : null;
var base64Array = [];
var count = 0;
files.forEach(function (file, index) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
// @ts-ignore
base64Array[index] = e.target.result;
};
reader.onloadend = function () {
count++;
if (count === files.length) {
resolve(base64Array);
}
};
});
});
}
var choose = function (options) {
if (options === void 0) {
options = {};
}
return new Promise(function (resolve, reject) {
var _options = options,
_options$count = _options.count,
count = _options$count === void 0 ? 1 : _options$count;
var inputElement = inputCreateAndAppend(count > 1, options.accept);
inputElement.addEventListener('change', function (e) {
var files = e.target.files && Array.from(e.target.files).slice(0, count);
if (options.disableConvert) {
resolve({
data: [],
files: files
});
inputElement.remove && inputElement.remove();
} else {
transformBase64(files).then(function (base64Array) {
return resolve({
data: base64Array,
files: files
});
}).catch(reject).finally(function () {
return inputElement.remove && inputElement.remove();
});
}
}, false);
var MouseEvents = document.createEvent('MouseEvents');
MouseEvents.initEvent('click', true, true);
inputElement.dispatchEvent(MouseEvents);
});
};
var _default = choose;
exports.default = _default;