| Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/uploader/core/dist/ |
| Current File : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/uploader/core/dist/ui.uploader.bundle.js |
this.BX = this.BX || {};
this.BX.UI = this.BX.UI || {};
(function (exports,main_core_events,ui_uploader_core,ui_vue3,main_core) {
'use strict';
const FileStatus = {
INIT: 'init',
ADDED: 'added',
LOADING: 'loading',
PENDING: 'pending',
UPLOADING: 'uploading',
COMPLETE: 'complete',
//REMOVING: 'removing',
//REMOVE_FAILED: 'remove-failed',
LOAD_FAILED: 'load-failed',
UPLOAD_FAILED: 'upload-failed'
};
const FileOrigin = {
CLIENT: 'client',
SERVER: 'server'
};
const FileEvent = {
ADD: 'onAdd',
BEFORE_UPLOAD: 'onBeforeUpload',
UPLOAD_START: 'onUploadStart',
UPLOAD_ERROR: 'onUploadError',
UPLOAD_PROGRESS: 'onUploadProgress',
UPLOAD_COMPLETE: 'onUploadComplete',
UPLOAD_CONTROLLER_INIT: 'onUploadControllerInit',
LOAD_START: 'onLoadStart',
LOAD_PROGRESS: 'onLoadProgress',
LOAD_COMPLETE: 'onLoadComplete',
LOAD_ERROR: 'onLoadError',
LOAD_CONTROLLER_INIT: 'onLoadControllerInit',
REMOVE_ERROR: 'onRemoveError',
REMOVE_COMPLETE: 'onRemoveComplete',
REMOVE_CONTROLLER_INIT: 'onRemoveControllerInit',
STATE_CHANGE: 'onStateChange',
STATUS_CHANGE: 'onStatusChange',
PREPARE_FILE_ASYNC: 'onPrepareFileAsync'
};
class UploaderError extends main_core.BaseError {
constructor(code, ...args) {
let message = main_core.Type.isString(args[0]) ? args[0] : null;
let description = main_core.Type.isString(args[1]) ? args[1] : null;
const customData = main_core.Type.isPlainObject(args[args.length - 1]) ? args[args.length - 1] : {};
const replacements = {};
Object.keys(customData).forEach(key => {
replacements[`#${key}#`] = customData[key];
});
if (!main_core.Type.isString(message) && main_core.Loc.hasMessage(`UPLOADER_${code}`)) {
message = main_core.Loc.getMessage(`UPLOADER_${code}`, replacements);
}
if (main_core.Type.isStringFilled(message) && !main_core.Type.isString(description) && main_core.Loc.hasMessage(`UPLOADER_${code}_DESC`)) {
description = main_core.Loc.getMessage(`UPLOADER_${code}_DESC`, replacements);
}
super(message, code, customData);
this.description = '';
this.origin = UploaderError.Origin.CLIENT;
this.type = UploaderError.Type.USER;
this.setDescription(description);
}
static createFromAjaxErrors(errors) {
if (!main_core.Type.isArrayFilled(errors) || !main_core.Type.isPlainObject(errors[0])) {
return new this('SERVER_ERROR');
}
const uploaderError = errors.find(error => {
return error.type === 'file-uploader';
});
if (uploaderError && !uploaderError.system) {
// Take the First Uploader User Error
const {
code,
message,
description,
customData
} = uploaderError;
const error = new this(code, message, description, customData);
error.setOrigin(UploaderError.Origin.SERVER);
error.setType(UploaderError.Type.USER);
return error;
} else {
let {
code,
message,
description
} = errors[0];
const {
customData,
system,
type
} = errors[0];
if (code === 'NETWORK_ERROR') {
message = main_core.Loc.getMessage('UPLOADER_NETWORK_ERROR');
} else {
code = main_core.Type.isStringFilled(code) ? code : 'SERVER_ERROR';
if (!main_core.Type.isStringFilled(description)) {
description = message;
message = main_core.Loc.getMessage('UPLOADER_SERVER_ERROR');
}
}
console.error('Uploader', errors);
const error = new this(code, message, description, customData);
error.setOrigin(UploaderError.Origin.SERVER);
if (type === 'file-uploader') {
error.setType(system ? UploaderError.Type.SYSTEM : UploaderError.Type.USER);
} else {
error.setType(UploaderError.Type.UNKNOWN);
}
return error;
}
}
static createFromError(error) {
return new this(error.name, error.message);
}
getDescription() {
return this.description;
}
setDescription(text) {
if (main_core.Type.isString(text)) {
this.description = text;
}
return this;
}
getOrigin() {
return this.origin;
}
setOrigin(origin) {
if (Object.values(UploaderError.Origin).includes(origin)) {
this.origin = origin;
}
return this;
}
getType() {
return this.type;
}
setType(type) {
if (main_core.Type.isStringFilled(type)) {
this.type = type;
}
return this;
}
clone() {
const options = JSON.parse(JSON.stringify(this));
const error = new UploaderError(options.code, options.message, options.description, options.customData);
error.setOrigin(options.origin);
error.setType(options.type);
return error;
}
toString() {
return `Uploader Error (${this.getCode()}): ${this.getMessage()} (${this.getOrigin()})`;
}
toJSON() {
return {
code: this.getCode(),
message: this.getMessage(),
description: this.getDescription(),
origin: this.getOrigin(),
type: this.getType(),
customData: this.getCustomData()
};
}
}
UploaderError.Origin = {
SERVER: 'server',
CLIENT: 'client'
};
UploaderError.Type = {
USER: 'user',
SYSTEM: 'system',
UNKNOWN: 'unknown'
};
var _server = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("server");
var _options = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("options");
class AbstractUploadController extends main_core_events.EventEmitter {
constructor(server, options = {}) {
super();
Object.defineProperty(this, _server, {
writable: true,
value: void 0
});
Object.defineProperty(this, _options, {
writable: true,
value: void 0
});
this.setEventNamespace('BX.UI.Uploader.UploadController');
babelHelpers.classPrivateFieldLooseBase(this, _server)[_server] = server;
babelHelpers.classPrivateFieldLooseBase(this, _options)[_options] = options;
}
getServer() {
return babelHelpers.classPrivateFieldLooseBase(this, _server)[_server];
}
getOptions() {
return babelHelpers.classPrivateFieldLooseBase(this, _options)[_options];
}
getOption(option, defaultValue) {
if (!main_core.Type.isUndefined(babelHelpers.classPrivateFieldLooseBase(this, _options)[_options][option])) {
return babelHelpers.classPrivateFieldLooseBase(this, _options)[_options][option];
} else if (!main_core.Type.isUndefined(defaultValue)) {
return defaultValue;
}
return null;
}
upload(file) {
throw new Error('You must implement upload() method.');
}
abort() {
throw new Error('You must implement abort() method.');
}
}
var _server$1 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("server");
var _options$1 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("options");
class AbstractLoadController extends main_core_events.EventEmitter {
constructor(server, options = {}) {
super();
Object.defineProperty(this, _server$1, {
writable: true,
value: void 0
});
Object.defineProperty(this, _options$1, {
writable: true,
value: void 0
});
this.setEventNamespace('BX.UI.Uploader.LoadController');
babelHelpers.classPrivateFieldLooseBase(this, _server$1)[_server$1] = server;
babelHelpers.classPrivateFieldLooseBase(this, _options$1)[_options$1] = options;
}
getServer() {
return babelHelpers.classPrivateFieldLooseBase(this, _server$1)[_server$1];
}
getOptions() {
return babelHelpers.classPrivateFieldLooseBase(this, _options$1)[_options$1];
}
getOption(option, defaultValue) {
if (!main_core.Type.isUndefined(babelHelpers.classPrivateFieldLooseBase(this, _options$1)[_options$1][option])) {
return babelHelpers.classPrivateFieldLooseBase(this, _options$1)[_options$1][option];
} else if (!main_core.Type.isUndefined(defaultValue)) {
return defaultValue;
}
return null;
}
load(file) {
throw new Error('You must implement load() method.');
}
abort() {
throw new Error('You must implement abort() method.');
}
}
var _server$2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("server");
var _options$2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("options");
class AbstractRemoveController extends main_core_events.EventEmitter {
constructor(server, options = {}) {
super();
Object.defineProperty(this, _server$2, {
writable: true,
value: void 0
});
Object.defineProperty(this, _options$2, {
writable: true,
value: void 0
});
this.setEventNamespace('BX.UI.Uploader.RemoveController');
babelHelpers.classPrivateFieldLooseBase(this, _server$2)[_server$2] = server;
babelHelpers.classPrivateFieldLooseBase(this, _options$2)[_options$2] = options;
}
getServer() {
return babelHelpers.classPrivateFieldLooseBase(this, _server$2)[_server$2];
}
getOptions() {
return babelHelpers.classPrivateFieldLooseBase(this, _options$2)[_options$2];
}
getOption(option, defaultValue) {
if (!Type.isUndefined(babelHelpers.classPrivateFieldLooseBase(this, _options$2)[_options$2][option])) {
return babelHelpers.classPrivateFieldLooseBase(this, _options$2)[_options$2][option];
} else if (!Type.isUndefined(defaultValue)) {
return defaultValue;
}
return null;
}
remove(file) {
throw new Error('You must implement remove() method.');
}
}
let crypto = window.crypto || window.msCrypto;
if (!crypto && typeof process === 'object') {
crypto = require('crypto').webcrypto;
}
const createUniqueId = () => {
return `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));
};
const getExtensionFromType = type => {
if (!main_core.Type.isStringFilled(type)) {
return '';
}
const subtype = type.split('/').pop();
if (/javascript/.test(subtype)) {
return 'js';
}
if (/plain/.test(subtype)) {
return 'txt';
}
if (/svg/.test(subtype)) {
return 'svg';
}
if (/[a-z]+/.test(subtype)) {
return subtype;
}
return '';
};
let counter = 0;
const createFileFromBlob = (blob, fileName) => {
if (!main_core.Type.isStringFilled(fileName)) {
const date = new Date();
fileName = `File ${date.getFullYear()}-${date.getMonth()}-${date.getDate()}-${++counter}`;
const extension = getExtensionFromType(blob.type);
if (extension) {
fileName += `.${extension}`;
}
}
try {
return new File([blob], fileName, {
lastModified: Date.now(),
lastModifiedDate: new Date(),
type: blob.type
});
} catch (exception) {
const file = blob.slice(0, blob.size, blob.type);
file.name = fileName;
file.lastModified = Date.now();
file.lastModifiedDate = new Date();
return file;
}
};
const regexp = /^data:((?:\w+\/(?:(?!;).)+)?)((?:;[\w\W]*?[^;])*),(.+)$/;
const isDataUri = str => {
return typeof str === 'string' ? str.match(regexp) : false;
};
const createBlobFromDataUri = dataURI => {
const byteString = atob(dataURI.split(',')[1]);
const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
const buffer = new ArrayBuffer(byteString.length);
const view = new Uint8Array(buffer);
for (let i = 0; i < byteString.length; i++) {
view[i] = byteString.charCodeAt(i);
}
return new Blob([buffer], {
type: mimeString
});
};
const getFileExtension = filename => {
const position = main_core.Type.isStringFilled(filename) ? filename.lastIndexOf('.') : -1;
return position > 0 ? filename.substring(position + 1) : '';
};
const imageExtensions = ['jpg', 'bmp', 'jpeg', 'jpe', 'gif', 'png', 'webp'];
const isResizableImage = (file, mimeType = null) => {
const fileName = main_core.Type.isFile(file) ? file.name : file;
const type = main_core.Type.isFile(file) ? file.type : mimeType;
const extension = getFileExtension(fileName).toLowerCase();
if (imageExtensions.includes(extension)) {
if (type === null || /^image\/[a-z0-9.-]+$/i.test(type)) {
return true;
}
}
return false;
};
const formatFileSize = (size, base = 1024) => {
let i = 0;
const units = getUnits();
while (size >= base && units[i + 1]) {
size /= base;
i++;
}
return (main_core.Type.isInteger(size) ? size : size.toFixed(1)) + units[i];
};
let fileSizeUnits = null;
const getUnits = () => {
if (fileSizeUnits !== null) {
return fileSizeUnits;
}
const units = main_core.Loc.getMessage('UPLOADER_FILE_SIZE_POSTFIXES').split(/[|]/);
fileSizeUnits = main_core.Type.isArrayFilled(units) ? units : ['B', 'kB', 'MB', 'GB', 'TB'];
return fileSizeUnits;
};
var _id = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("id");
var _file = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("file");
var _serverId = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("serverId");
var _name = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("name");
var _originalName = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("originalName");
var _size = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("size");
var _type = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("type");
var _width = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("width");
var _height = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("height");
var _clientPreview = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("clientPreview");
var _clientPreviewUrl = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("clientPreviewUrl");
var _clientPreviewWidth = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("clientPreviewWidth");
var _clientPreviewHeight = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("clientPreviewHeight");
var _serverPreviewUrl = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("serverPreviewUrl");
var _serverPreviewWidth = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("serverPreviewWidth");
var _serverPreviewHeight = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("serverPreviewHeight");
var _downloadUrl = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("downloadUrl");
var _removeUrl = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("removeUrl");
var _status = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("status");
var _origin = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("origin");
var _errors = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("errors");
var _progress = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("progress");
var _uploadController = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploadController");
var _loadController = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("loadController");
var _removeController = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("removeController");
var _uploadCallbacks = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploadCallbacks");
var _setStatus = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("setStatus");
class UploaderFile extends main_core_events.EventEmitter {
constructor(source, fileOptions = {}) {
super();
Object.defineProperty(this, _setStatus, {
value: _setStatus2
});
Object.defineProperty(this, _id, {
writable: true,
value: null
});
Object.defineProperty(this, _file, {
writable: true,
value: null
});
Object.defineProperty(this, _serverId, {
writable: true,
value: null
});
Object.defineProperty(this, _name, {
writable: true,
value: ''
});
Object.defineProperty(this, _originalName, {
writable: true,
value: null
});
Object.defineProperty(this, _size, {
writable: true,
value: 0
});
Object.defineProperty(this, _type, {
writable: true,
value: ''
});
Object.defineProperty(this, _width, {
writable: true,
value: null
});
Object.defineProperty(this, _height, {
writable: true,
value: null
});
Object.defineProperty(this, _clientPreview, {
writable: true,
value: null
});
Object.defineProperty(this, _clientPreviewUrl, {
writable: true,
value: null
});
Object.defineProperty(this, _clientPreviewWidth, {
writable: true,
value: null
});
Object.defineProperty(this, _clientPreviewHeight, {
writable: true,
value: null
});
Object.defineProperty(this, _serverPreviewUrl, {
writable: true,
value: null
});
Object.defineProperty(this, _serverPreviewWidth, {
writable: true,
value: null
});
Object.defineProperty(this, _serverPreviewHeight, {
writable: true,
value: null
});
Object.defineProperty(this, _downloadUrl, {
writable: true,
value: null
});
Object.defineProperty(this, _removeUrl, {
writable: true,
value: null
});
Object.defineProperty(this, _status, {
writable: true,
value: FileStatus.INIT
});
Object.defineProperty(this, _origin, {
writable: true,
value: FileOrigin.CLIENT
});
Object.defineProperty(this, _errors, {
writable: true,
value: []
});
Object.defineProperty(this, _progress, {
writable: true,
value: 0
});
Object.defineProperty(this, _uploadController, {
writable: true,
value: null
});
Object.defineProperty(this, _loadController, {
writable: true,
value: null
});
Object.defineProperty(this, _removeController, {
writable: true,
value: null
});
Object.defineProperty(this, _uploadCallbacks, {
writable: true,
value: new CallbackCollection(this)
});
this.setEventNamespace('BX.UI.Uploader.File');
const options = main_core.Type.isPlainObject(fileOptions) ? fileOptions : {};
if (main_core.Type.isFile(source)) {
babelHelpers.classPrivateFieldLooseBase(this, _file)[_file] = source;
} else if (main_core.Type.isBlob(source)) {
babelHelpers.classPrivateFieldLooseBase(this, _file)[_file] = createFileFromBlob(source, options.name || source.name);
} else if (isDataUri(source)) {
const blob = createBlobFromDataUri(source);
babelHelpers.classPrivateFieldLooseBase(this, _file)[_file] = createFileFromBlob(blob, options.name);
} else if (main_core.Type.isNumber(source) || main_core.Type.isStringFilled(source)) {
babelHelpers.classPrivateFieldLooseBase(this, _origin)[_origin] = FileOrigin.SERVER;
babelHelpers.classPrivateFieldLooseBase(this, _serverId)[_serverId] = source;
if (main_core.Type.isPlainObject(options)) {
this.setFile(options);
}
}
babelHelpers.classPrivateFieldLooseBase(this, _id)[_id] = main_core.Type.isStringFilled(options.id) ? options.id : createUniqueId();
this.subscribeFromOptions({
[FileEvent.ADD]: () => {
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.ADDED);
}
});
this.subscribeFromOptions(options.events);
}
load() {
if (!this.canLoad()) {
return;
}
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.LOADING);
this.emit(FileEvent.LOAD_START);
babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController].load(this);
}
upload(callbacks = {}) {
babelHelpers.classPrivateFieldLooseBase(this, _uploadCallbacks)[_uploadCallbacks].subscribe(callbacks);
if (this.isComplete() && this.isUploadable()) {
return babelHelpers.classPrivateFieldLooseBase(this, _uploadCallbacks)[_uploadCallbacks].emit('onComplete');
} else if (this.isUploadFailed()) {
return babelHelpers.classPrivateFieldLooseBase(this, _uploadCallbacks)[_uploadCallbacks].emit('onError', {
error: this.getError()
});
} else if (!this.canUpload()) {
return babelHelpers.classPrivateFieldLooseBase(this, _uploadCallbacks)[_uploadCallbacks].emit('onError', {
error: new UploaderError('FILE_UPLOAD_NOT_ALLOWED')
});
}
const event = new main_core_events.BaseEvent({
data: {
file: this
}
});
this.emit(FileEvent.BEFORE_UPLOAD, event);
if (event.isDefaultPrevented()) {
return;
}
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.UPLOADING);
this.emit(FileEvent.UPLOAD_START);
babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController].upload(this);
}
remove() {
if (this.getStatus() === FileStatus.INIT) {
return;
}
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.INIT);
this.emit(FileEvent.REMOVE_COMPLETE);
this.abort(); //this.#setStatus(FileStatus.REMOVING);
//this.#removeController.remove(this);
if (babelHelpers.classPrivateFieldLooseBase(this, _removeController)[_removeController] !== null && this.getOrigin() === FileOrigin.CLIENT) {
babelHelpers.classPrivateFieldLooseBase(this, _removeController)[_removeController].remove(this);
}
babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController] = null;
babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController] = null;
babelHelpers.classPrivateFieldLooseBase(this, _removeController)[_removeController] = null;
} // stop(): void
// {
// if (this.isUploading())
// {
// this.abort();
// this.setStatus(FileStatus.PENDING);
// }
// }
//
// resume(): void
// {
//
// }
// retry(): void
// {
// // TODO
// }
abort() {
if (this.isLoading()) {
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.LOAD_FAILED);
const error = new UploaderError('FILE_LOAD_ABORTED');
this.emit(FileEvent.LOAD_ERROR, {
error
});
} else if (this.isUploading()) {
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.UPLOAD_FAILED);
const error = new UploaderError('FILE_UPLOAD_ABORTED');
this.emit('onUploadError', {
error
});
babelHelpers.classPrivateFieldLooseBase(this, _uploadCallbacks)[_uploadCallbacks].emit('onError', {
error
});
}
if (babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController]) {
babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController].abort();
}
if (babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController]) {
babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController].abort();
}
}
getUploadController() {
return babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController];
}
setUploadController(controller) {
if (this.getOrigin() === FileOrigin.SERVER) {
return;
}
if (!(controller instanceof AbstractUploadController) && !main_core.Type.isNull(controller)) {
return;
}
const changed = babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController] !== controller;
babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController] = controller;
if (babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController] && changed) {
babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController].subscribeOnce('onError', event => {
const error = this.addError(event.getData().error);
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.UPLOAD_FAILED);
this.emit(FileEvent.UPLOAD_ERROR, {
error
});
babelHelpers.classPrivateFieldLooseBase(this, _uploadCallbacks)[_uploadCallbacks].emit('onError', {
error
});
});
babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController].subscribe('onProgress', event => {
const {
progress
} = event.getData();
this.setProgress(progress);
this.emit(FileEvent.UPLOAD_PROGRESS, {
progress
});
});
babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController].subscribeOnce('onUpload', event => {
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.COMPLETE);
this.setFile(event.getData().fileInfo);
this.emit(FileEvent.UPLOAD_COMPLETE);
babelHelpers.classPrivateFieldLooseBase(this, _uploadCallbacks)[_uploadCallbacks].emit('onComplete');
});
}
if (changed) {
this.emit(FileEvent.UPLOAD_CONTROLLER_INIT, {
controller
});
}
}
setLoadController(controller) {
if (!(controller instanceof AbstractLoadController)) {
return;
}
const changed = babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController] !== controller;
babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController] = controller;
if (babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController] && changed) {
babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController].subscribeOnce('onError', event => {
const error = this.addError(event.getData().error);
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.LOAD_FAILED);
this.emit(FileEvent.LOAD_ERROR, {
error
});
});
babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController].subscribe('onProgress', event => {
const {
progress
} = event.getData();
this.emit(FileEvent.LOAD_PROGRESS, {
progress
});
});
babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController].subscribeOnce('onLoad', event => {
if (this.getOrigin() === FileOrigin.SERVER) {
this.setFile(event.getData().fileInfo);
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.COMPLETE);
this.emit(FileEvent.LOAD_COMPLETE);
} else {
const event = new main_core_events.BaseEvent({
data: {
file: this
}
});
this.emitAsync(FileEvent.PREPARE_FILE_ASYNC, event).then(() => {
if (this.isUploadable()) {
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.PENDING);
} else {
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.COMPLETE);
}
this.emit(FileEvent.LOAD_COMPLETE);
}).catch(error => {
error = this.addError(error);
babelHelpers.classPrivateFieldLooseBase(this, _setStatus)[_setStatus](FileStatus.LOAD_FAILED);
this.emit(FileEvent.LOAD_ERROR, {
error
});
});
}
});
}
if (changed) {
this.emit(FileEvent.LOAD_CONTROLLER_INIT, {
controller
});
}
}
setRemoveController(controller) {
if (!(controller instanceof AbstractRemoveController) && !main_core.Type.isNull(controller)) {
return;
}
const changed = babelHelpers.classPrivateFieldLooseBase(this, _removeController)[_removeController] !== controller;
babelHelpers.classPrivateFieldLooseBase(this, _removeController)[_removeController] = controller;
if (babelHelpers.classPrivateFieldLooseBase(this, _removeController)[_removeController] && changed) {
babelHelpers.classPrivateFieldLooseBase(this, _removeController)[_removeController].subscribeOnce('onError', event => {//const error = this.addError(event.getData().error);
//this.emit(FileEvent.REMOVE_ERROR, { error });
});
babelHelpers.classPrivateFieldLooseBase(this, _removeController)[_removeController].subscribeOnce('onRemove', event => {//this.#setStatus(FileStatus.INIT);
//this.emit(FileEvent.REMOVE_COMPLETE);
});
}
if (changed) {
this.emit(FileEvent.REMOVE_CONTROLLER_INIT, {
controller
});
}
}
isReadyToUpload() {
return this.getStatus() === FileStatus.PENDING;
}
isUploadable() {
return babelHelpers.classPrivateFieldLooseBase(this, _uploadController)[_uploadController] !== null;
}
isLoadable() {
return babelHelpers.classPrivateFieldLooseBase(this, _loadController)[_loadController] !== null;
}
canUpload() {
return this.isReadyToUpload() && this.isUploadable();
}
canLoad() {
return this.getStatus() === FileStatus.ADDED && this.isLoadable();
}
isUploading() {
return this.getStatus() === FileStatus.UPLOADING;
}
isLoading() {
return this.getStatus() === FileStatus.LOADING;
}
isComplete() {
return this.getStatus() === FileStatus.COMPLETE;
}
isFailed() {
return this.getStatus() === FileStatus.LOAD_FAILED || this.getStatus() === FileStatus.UPLOAD_FAILED;
}
isLoadFailed() {
return this.getStatus() === FileStatus.LOAD_FAILED;
}
isUploadFailed() {
return this.getStatus() === FileStatus.UPLOAD_FAILED;
}
getBinary() {
return babelHelpers.classPrivateFieldLooseBase(this, _file)[_file];
}
/**
* @internal
*/
setFile(file) {
if (main_core.Type.isFile(file)) {
babelHelpers.classPrivateFieldLooseBase(this, _file)[_file] = file;
} else if (main_core.Type.isBlob(file)) {
babelHelpers.classPrivateFieldLooseBase(this, _file)[_file] = createFileFromBlob(file, this.getName());
} else if (main_core.Type.isPlainObject(file)) {
this.setName(file.name);
this.setOriginalName(file.originalName);
this.setType(file.type);
this.setSize(file.size);
this.setServerId(file.serverId);
this.setWidth(file.width);
this.setHeight(file.height);
this.setClientPreview(file.clientPreview, file.clientPreviewWidth, file.clientPreviewHeight);
this.setServerPreview(file.serverPreviewUrl, file.serverPreviewWidth, file.serverPreviewHeight);
this.setDownloadUrl(file.downloadUrl);
this.setRemoveUrl(file.removeUrl);
}
}
getName() {
return this.getBinary() ? this.getBinary().name : babelHelpers.classPrivateFieldLooseBase(this, _name)[_name];
}
/**
* @internal
*/
setName(name) {
if (main_core.Type.isStringFilled(name)) {
babelHelpers.classPrivateFieldLooseBase(this, _name)[_name] = name;
this.emit(FileEvent.STATE_CHANGE, {
property: 'name',
value: name
});
}
}
getOriginalName() {
return babelHelpers.classPrivateFieldLooseBase(this, _originalName)[_originalName] ? babelHelpers.classPrivateFieldLooseBase(this, _originalName)[_originalName] : this.getName();
}
/**
* @internal
*/
setOriginalName(name) {
if (main_core.Type.isStringFilled(name)) {
babelHelpers.classPrivateFieldLooseBase(this, _originalName)[_originalName] = name;
this.emit(FileEvent.STATE_CHANGE, {
property: 'originalName',
value: name
});
}
}
getExtension() {
const name = this.getOriginalName();
const position = name.lastIndexOf('.');
return position >= 0 ? name.substring(position + 1).toLowerCase() : '';
}
getType() {
return this.getBinary() ? this.getBinary().type : babelHelpers.classPrivateFieldLooseBase(this, _type)[_type];
}
/**
* internal
*/
setType(type) {
if (main_core.Type.isStringFilled(type)) {
babelHelpers.classPrivateFieldLooseBase(this, _type)[_type] = type;
this.emit(FileEvent.STATE_CHANGE, {
property: 'type',
value: type
});
}
}
getSize() {
return this.getBinary() ? this.getBinary().size : babelHelpers.classPrivateFieldLooseBase(this, _size)[_size];
}
getSizeFormatted() {
return formatFileSize(this.getSize());
}
/**
* @internal
*/
setSize(size) {
if (main_core.Type.isNumber(size) && size >= 0) {
babelHelpers.classPrivateFieldLooseBase(this, _size)[_size] = size;
this.emit(FileEvent.STATE_CHANGE, {
property: 'size',
value: size
});
}
}
getId() {
return babelHelpers.classPrivateFieldLooseBase(this, _id)[_id];
}
getServerId() {
return babelHelpers.classPrivateFieldLooseBase(this, _serverId)[_serverId];
}
setServerId(id) {
if (main_core.Type.isNumber(id) || main_core.Type.isStringFilled(id)) {
babelHelpers.classPrivateFieldLooseBase(this, _serverId)[_serverId] = id;
this.emit(FileEvent.STATE_CHANGE, {
property: 'serverId',
value: id
});
}
}
getStatus() {
return babelHelpers.classPrivateFieldLooseBase(this, _status)[_status];
}
getOrigin() {
return babelHelpers.classPrivateFieldLooseBase(this, _origin)[_origin];
}
getDownloadUrl() {
return babelHelpers.classPrivateFieldLooseBase(this, _downloadUrl)[_downloadUrl];
}
setDownloadUrl(url) {
if (main_core.Type.isStringFilled(url)) {
babelHelpers.classPrivateFieldLooseBase(this, _downloadUrl)[_downloadUrl] = url;
this.emit(FileEvent.STATE_CHANGE, {
property: 'downloadUrl',
value: url
});
}
}
getRemoveUrl() {
return babelHelpers.classPrivateFieldLooseBase(this, _removeUrl)[_removeUrl];
}
setRemoveUrl(url) {
if (main_core.Type.isStringFilled(url)) {
babelHelpers.classPrivateFieldLooseBase(this, _removeUrl)[_removeUrl] = url;
this.emit(FileEvent.STATE_CHANGE, {
property: 'removeUrl',
value: url
});
}
}
getWidth() {
return babelHelpers.classPrivateFieldLooseBase(this, _width)[_width];
}
setWidth(width) {
if (main_core.Type.isNumber(width)) {
babelHelpers.classPrivateFieldLooseBase(this, _width)[_width] = width;
this.emit(FileEvent.STATE_CHANGE, {
property: 'width',
value: width
});
}
}
getHeight() {
return babelHelpers.classPrivateFieldLooseBase(this, _height)[_height];
}
setHeight(height) {
if (main_core.Type.isNumber(height)) {
babelHelpers.classPrivateFieldLooseBase(this, _height)[_height] = height;
this.emit(FileEvent.STATE_CHANGE, {
property: 'height',
value: height
});
}
}
getPreviewUrl() {
return this.getClientPreview() ? this.getClientPreviewUrl() : this.getServerPreviewUrl();
}
getPreviewWidth() {
return this.getClientPreview() ? this.getClientPreviewWidth() : this.getServerPreviewWidth();
}
getPreviewHeight() {
return this.getClientPreview() ? this.getClientPreviewHeight() : this.getServerPreviewHeight();
}
getClientPreview() {
return babelHelpers.classPrivateFieldLooseBase(this, _clientPreview)[_clientPreview];
}
setClientPreview(file, width = null, height = null) {
if (main_core.Type.isBlob(file) || main_core.Type.isNull(file)) {
this.revokeClientPreviewUrl();
const url = main_core.Type.isNull(file) ? null : URL.createObjectURL(file);
babelHelpers.classPrivateFieldLooseBase(this, _clientPreview)[_clientPreview] = file;
babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewUrl)[_clientPreviewUrl] = url;
babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewWidth)[_clientPreviewWidth] = width;
babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewHeight)[_clientPreviewHeight] = height;
this.emit(FileEvent.STATE_CHANGE, {
property: 'clientPreviewUrl',
value: url
});
this.emit(FileEvent.STATE_CHANGE, {
property: 'clientPreviewWidth',
value: width
});
this.emit(FileEvent.STATE_CHANGE, {
property: 'clientPreviewHeight',
value: height
});
}
}
getClientPreviewUrl() {
return babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewUrl)[_clientPreviewUrl];
}
revokeClientPreviewUrl() {
if (babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewUrl)[_clientPreviewUrl] !== null) {
URL.revokeObjectURL(babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewUrl)[_clientPreviewUrl]);
babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewUrl)[_clientPreviewUrl] = null;
this.emit(FileEvent.STATE_CHANGE, {
property: 'clientPreviewUrl',
value: null
});
}
}
getClientPreviewWidth() {
return babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewWidth)[_clientPreviewWidth];
}
getClientPreviewHeight() {
return babelHelpers.classPrivateFieldLooseBase(this, _clientPreviewHeight)[_clientPreviewHeight];
}
getServerPreviewUrl() {
return babelHelpers.classPrivateFieldLooseBase(this, _serverPreviewUrl)[_serverPreviewUrl];
}
setServerPreview(url, width = null, height = null) {
if (main_core.Type.isStringFilled(url) || main_core.Type.isNull(url)) {
babelHelpers.classPrivateFieldLooseBase(this, _serverPreviewUrl)[_serverPreviewUrl] = url;
babelHelpers.classPrivateFieldLooseBase(this, _serverPreviewWidth)[_serverPreviewWidth] = width;
babelHelpers.classPrivateFieldLooseBase(this, _serverPreviewHeight)[_serverPreviewHeight] = height;
this.emit(FileEvent.STATE_CHANGE, {
property: 'serverPreviewUrl',
value: url
});
this.emit(FileEvent.STATE_CHANGE, {
property: 'serverPreviewWidth',
value: width
});
this.emit(FileEvent.STATE_CHANGE, {
property: 'serverPreviewHeight',
value: height
});
}
}
getServerPreviewWidth() {
return babelHelpers.classPrivateFieldLooseBase(this, _serverPreviewWidth)[_serverPreviewWidth];
}
getServerPreviewHeight() {
return babelHelpers.classPrivateFieldLooseBase(this, _serverPreviewHeight)[_serverPreviewHeight];
}
isImage() {
return isResizableImage(this.getOriginalName(), this.getType());
}
getProgress() {
return babelHelpers.classPrivateFieldLooseBase(this, _progress)[_progress];
}
setProgress(progress) {
if (main_core.Type.isNumber(progress)) {
babelHelpers.classPrivateFieldLooseBase(this, _progress)[_progress] = progress;
this.emit(FileEvent.STATE_CHANGE, {
property: 'progress',
value: progress
});
}
}
addError(error) {
if (error instanceof Error) {
error = UploaderError.createFromError(error);
}
babelHelpers.classPrivateFieldLooseBase(this, _errors)[_errors].push(error);
this.emit(FileEvent.STATE_CHANGE);
return error;
}
getError() {
return babelHelpers.classPrivateFieldLooseBase(this, _errors)[_errors][0] || null;
}
getErrors() {
return babelHelpers.classPrivateFieldLooseBase(this, _errors)[_errors];
}
getState() {
return JSON.parse(JSON.stringify(this));
}
toJSON() {
return {
id: this.getId(),
serverId: this.getServerId(),
status: this.getStatus(),
name: this.getName(),
originalName: this.getOriginalName(),
size: this.getSize(),
sizeFormatted: this.getSizeFormatted(),
type: this.getType(),
extension: this.getExtension(),
origin: this.getOrigin(),
isImage: this.isImage(),
failed: this.isFailed(),
width: this.getWidth(),
height: this.getHeight(),
progress: this.getProgress(),
error: this.getError(),
errors: this.getErrors(),
previewUrl: this.getPreviewUrl(),
previewWidth: this.getPreviewWidth(),
previewHeight: this.getPreviewHeight(),
clientPreviewUrl: this.getClientPreviewUrl(),
clientPreviewWidth: this.getClientPreviewWidth(),
clientPreviewHeight: this.getClientPreviewHeight(),
serverPreviewUrl: this.getServerPreviewUrl(),
serverPreviewWidth: this.getServerPreviewWidth(),
serverPreviewHeight: this.getServerPreviewHeight(),
downloadUrl: this.getDownloadUrl(),
removeUrl: this.getRemoveUrl()
};
}
}
function _setStatus2(status) {
babelHelpers.classPrivateFieldLooseBase(this, _status)[_status] = status;
this.emit(FileEvent.STATE_CHANGE, {
property: 'status',
value: status
});
this.emit(FileEvent.STATUS_CHANGE);
}
var _emitter = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("emitter");
class CallbackCollection {
constructor(file) {
Object.defineProperty(this, _emitter, {
writable: true,
value: null
});
babelHelpers.classPrivateFieldLooseBase(this, _emitter)[_emitter] = new main_core_events.EventEmitter(file, 'BX.UI.Uploader.File.UploadCallbacks');
}
subscribe(callbacks = {}) {
callbacks = main_core.Type.isPlainObject(callbacks) ? callbacks : {};
if (main_core.Type.isFunction(callbacks.onComplete)) {
this.getEmitter().subscribeOnce('onComplete', callbacks.onComplete);
}
if (main_core.Type.isFunction(callbacks.onError)) {
this.getEmitter().subscribeOnce('onError', callbacks.onError);
}
}
emit(eventName, event) {
if (babelHelpers.classPrivateFieldLooseBase(this, _emitter)[_emitter]) {
babelHelpers.classPrivateFieldLooseBase(this, _emitter)[_emitter].emit(eventName, event);
babelHelpers.classPrivateFieldLooseBase(this, _emitter)[_emitter].unsubscribeAll();
}
}
getEmitter() {
if (main_core.Type.isNull(babelHelpers.classPrivateFieldLooseBase(this, _emitter)[_emitter])) {
babelHelpers.classPrivateFieldLooseBase(this, _emitter)[_emitter] = new main_core_events.EventEmitter(this, 'BX.UI.Uploader.File.UploadCallbacks');
}
return babelHelpers.classPrivateFieldLooseBase(this, _emitter)[_emitter];
}
}
var _data = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("data");
var _offset = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("offset");
var _retries = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("retries");
class Chunk {
constructor(data, offset) {
Object.defineProperty(this, _data, {
writable: true,
value: null
});
Object.defineProperty(this, _offset, {
writable: true,
value: 0
});
Object.defineProperty(this, _retries, {
writable: true,
value: []
});
babelHelpers.classPrivateFieldLooseBase(this, _data)[_data] = data;
babelHelpers.classPrivateFieldLooseBase(this, _offset)[_offset] = offset;
}
getNextRetryDelay() {
if (babelHelpers.classPrivateFieldLooseBase(this, _retries)[_retries].length === 0) {
return null;
}
return babelHelpers.classPrivateFieldLooseBase(this, _retries)[_retries].shift();
}
setRetries(retries) {
if (main_core.Type.isArray(retries)) {
babelHelpers.classPrivateFieldLooseBase(this, _retries)[_retries] = retries;
}
}
getData() {
return babelHelpers.classPrivateFieldLooseBase(this, _data)[_data];
}
getOffset() {
return babelHelpers.classPrivateFieldLooseBase(this, _offset)[_offset];
}
getSize() {
return this.getData().size;
}
}
var _file$1 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("file");
var _chunkOffset = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("chunkOffset");
var _chunkTimeout = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("chunkTimeout");
var _token = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("token");
var _xhr = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("xhr");
var _aborted = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("aborted");
var _uploadChunk = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploadChunk");
var _retryUploadChunk = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("retryUploadChunk");
var _getNextChunk = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("getNextChunk");
class UploadController extends AbstractUploadController {
constructor(server, options = {}) {
super(server, options);
Object.defineProperty(this, _getNextChunk, {
value: _getNextChunk2
});
Object.defineProperty(this, _retryUploadChunk, {
value: _retryUploadChunk2
});
Object.defineProperty(this, _uploadChunk, {
value: _uploadChunk2
});
Object.defineProperty(this, _file$1, {
writable: true,
value: null
});
Object.defineProperty(this, _chunkOffset, {
writable: true,
value: null
});
Object.defineProperty(this, _chunkTimeout, {
writable: true,
value: null
});
Object.defineProperty(this, _token, {
writable: true,
value: null
});
Object.defineProperty(this, _xhr, {
writable: true,
value: null
});
Object.defineProperty(this, _aborted, {
writable: true,
value: false
});
}
upload(file) {
if (babelHelpers.classPrivateFieldLooseBase(this, _chunkOffset)[_chunkOffset] !== null) {
return;
}
babelHelpers.classPrivateFieldLooseBase(this, _file$1)[_file$1] = file;
const nextChunk = babelHelpers.classPrivateFieldLooseBase(this, _getNextChunk)[_getNextChunk]();
if (nextChunk) {
babelHelpers.classPrivateFieldLooseBase(this, _uploadChunk)[_uploadChunk](nextChunk);
}
}
abort() {
if (babelHelpers.classPrivateFieldLooseBase(this, _xhr)[_xhr]) {
babelHelpers.classPrivateFieldLooseBase(this, _aborted)[_aborted] = true;
babelHelpers.classPrivateFieldLooseBase(this, _xhr)[_xhr].abort();
babelHelpers.classPrivateFieldLooseBase(this, _xhr)[_xhr] = null;
}
clearTimeout(babelHelpers.classPrivateFieldLooseBase(this, _chunkTimeout)[_chunkTimeout]);
}
getFile() {
return babelHelpers.classPrivateFieldLooseBase(this, _file$1)[_file$1];
}
getChunkSize() {
return this.getServer().getChunkSize();
}
getChunkOffset() {
return babelHelpers.classPrivateFieldLooseBase(this, _chunkOffset)[_chunkOffset];
}
getToken() {
return babelHelpers.classPrivateFieldLooseBase(this, _token)[_token];
}
setToken(token) {
if (main_core.Type.isStringFilled(token)) {
babelHelpers.classPrivateFieldLooseBase(this, _token)[_token] = token;
}
}
}
function _uploadChunk2(chunk) {
const totalSize = this.getFile().getSize();
const isOnlyOneChunk = chunk.getOffset() === 0 && totalSize === chunk.getSize();
let fileName = this.getFile().getName();
if (fileName.normalize) {
fileName = fileName.normalize();
}
const type = main_core.Type.isStringFilled(this.getFile().getType()) ? this.getFile().getType() : 'application/octet-stream';
const headers = [{
name: 'Content-Type',
value: type
}, {
name: 'X-Upload-Content-Name',
value: encodeURIComponent(fileName)
}];
if (!isOnlyOneChunk) {
const rangeStart = chunk.getOffset();
const rangeEnd = chunk.getOffset() + chunk.getSize() - 1;
const rangeHeader = `bytes ${rangeStart}-${rangeEnd}/${totalSize}`;
headers.push({
name: 'Content-Range',
value: rangeHeader
});
}
const controllerOptions = this.getServer().getControllerOptions();
main_core.ajax.runAction('ui.fileuploader.upload', {
headers,
data: chunk.getData(),
preparePost: false,
getParameters: {
controller: this.getServer().getController(),
controllerOptions: controllerOptions ? JSON.stringify(controllerOptions) : null,
token: this.getToken() || ''
},
onrequeststart: xhr => {
babelHelpers.classPrivateFieldLooseBase(this, _xhr)[_xhr] = xhr;
babelHelpers.classPrivateFieldLooseBase(this, _aborted)[_aborted] = false;
},
onprogressupload: event => {
if (event.lengthComputable) {
const size = this.getFile().getSize();
const uploadedBytes = Math.min(size, chunk.getOffset() + event.loaded);
const progress = size > 0 ? Math.floor(uploadedBytes / size * 100) : 100;
this.emit('onProgress', {
progress
});
}
}
}).then(response => {
if (response.data.token) {
this.setToken(response.data.token);
if (this.getFile().getServerId() === null) {
// Now we can remove a temp file on the backend
this.getFile().setServerId(response.data.token);
}
const size = this.getFile().getSize();
const progress = size > 0 ? Math.floor((chunk.getOffset() + chunk.getSize()) / size * 100) : 100;
this.emit('onProgress', {
progress
});
const nextChunk = babelHelpers.classPrivateFieldLooseBase(this, _getNextChunk)[_getNextChunk]();
if (nextChunk) {
babelHelpers.classPrivateFieldLooseBase(this, _uploadChunk)[_uploadChunk](nextChunk);
} else {
this.emit('onProgress', {
progress: 100
});
this.emit('onUpload', {
fileInfo: response.data.file
});
}
} else {
this.emit('onError', {
error: new UploaderError('SERVER_ERROR')
});
}
}).catch(response => {
if (babelHelpers.classPrivateFieldLooseBase(this, _aborted)[_aborted]) {
return;
}
const error = UploaderError.createFromAjaxErrors(response.errors);
const shouldRetry = error.getCode() === 'NETWORK_ERROR' || error.getType() === UploaderError.Type.UNKNOWN;
if (!shouldRetry || !babelHelpers.classPrivateFieldLooseBase(this, _retryUploadChunk)[_retryUploadChunk](chunk)) {
this.emit('onError', {
error
});
}
});
}
function _retryUploadChunk2(chunk) {
const nextDelay = chunk.getNextRetryDelay();
if (nextDelay === null) {
return false;
}
clearTimeout(babelHelpers.classPrivateFieldLooseBase(this, _chunkTimeout)[_chunkTimeout]);
babelHelpers.classPrivateFieldLooseBase(this, _chunkTimeout)[_chunkTimeout] = setTimeout(() => {
babelHelpers.classPrivateFieldLooseBase(this, _uploadChunk)[_uploadChunk](chunk);
}, nextDelay);
return true;
}
function _getNextChunk2() {
if (this.getChunkOffset() !== null && this.getChunkOffset() >= this.getFile().getSize()) {
// End of File
return null;
}
if (this.getChunkOffset() === null) {
// First call
babelHelpers.classPrivateFieldLooseBase(this, _chunkOffset)[_chunkOffset] = 0;
}
let chunk;
if (this.getChunkOffset() === 0 && this.getFile().getSize() <= this.getChunkSize()) {
chunk = new Chunk(this.getFile().getBinary(), this.getChunkOffset());
babelHelpers.classPrivateFieldLooseBase(this, _chunkOffset)[_chunkOffset] = this.getFile().getSize();
} else {
const currentChunkSize = Math.min(this.getChunkSize(), this.getFile().getSize() - this.getChunkOffset());
const nextOffset = this.getChunkOffset() + currentChunkSize;
const fileRange = this.getFile().getBinary().slice(this.getChunkOffset(), nextOffset);
chunk = new Chunk(fileRange, this.getChunkOffset());
babelHelpers.classPrivateFieldLooseBase(this, _chunkOffset)[_chunkOffset] = nextOffset;
}
chunk.setRetries([...this.getServer().getChunkRetryDelays()]);
return chunk;
}
const pendingQueues = new WeakMap();
const loadingFiles = new WeakMap();
function loadMultiple(controller, file) {
const server = controller.getServer();
const timeout = controller.getOption('timeout', 100);
let queue = pendingQueues.get(server);
if (!queue) {
queue = {
tasks: [],
load: main_core.Runtime.debounce(loadInternal, timeout, server),
xhr: null,
aborted: false
};
pendingQueues.set(server, queue);
}
queue.tasks.push({
controller,
file
});
queue.load();
}
function abort(controller, file) {
const server = controller.getServer();
const queue = pendingQueues.get(server);
if (queue) {
queue.tasks = queue.tasks.filter(task => {
return task.file !== file;
});
if (queue.tasks.length === 0) {
pendingQueues.delete(server);
}
} else {
const queue = loadingFiles.get(file);
if (queue) {
queue.tasks = queue.tasks.filter(task => {
return task.file !== file;
});
loadingFiles.delete(file);
if (queue.tasks.length === 0) {
queue.aborted = true;
queue.xhr.abort();
}
}
}
}
function loadInternal() {
const server = this;
const queue = pendingQueues.get(server);
if (!queue) {
return;
}
pendingQueues.delete(server);
if (queue.tasks.length === 0) {
return;
}
const fileIds = [];
queue.tasks.forEach(task => {
const file = task.file;
fileIds.push(file.getServerId());
loadingFiles.set(file, queue);
});
const controllerOptions = server.getControllerOptions();
main_core.ajax.runAction('ui.fileuploader.load', {
data: {
fileIds: fileIds
},
getParameters: {
controller: server.getController(),
controllerOptions: controllerOptions ? JSON.stringify(controllerOptions) : null
},
onrequeststart: xhr => {
queue.xhr = xhr;
},
onprogress: event => {
if (event.lengthComputable) {
const progress = event.total > 0 ? Math.floor(event.loaded / event.total * 100) : 100;
queue.tasks.forEach(task => {
const {
controller,
file
} = task;
controller.emit('onProgress', {
file,
progress
});
});
}
}
}).then(response => {
var _response$data;
if ((_response$data = response.data) != null && _response$data.files) {
const fileResults = {};
response.data.files.forEach(fileResult => {
fileResults[fileResult.id] = fileResult;
});
queue.tasks.forEach(task => {
const {
controller,
file
} = task;
const fileResult = fileResults[file.getServerId()] || null;
loadingFiles.delete(file);
if (fileResult && fileResult.success) {
controller.emit('onProgress', {
file,
progress: 100
});
controller.emit('onLoad', {
fileInfo: fileResult.data.file
});
} else {
const error = UploaderError.createFromAjaxErrors(fileResult == null ? void 0 : fileResult.errors);
controller.emit('onError', {
error
});
}
});
} else {
const error = new UploaderError('SERVER_ERROR');
queue.tasks.forEach(task => {
const {
controller,
file
} = task;
loadingFiles.delete(file);
controller.emit('onError', {
error: error.clone()
});
});
}
}).catch(response => {
const error = queue.aborted ? null : UploaderError.createFromAjaxErrors(response.errors);
queue.tasks.forEach(task => {
const {
controller,
file
} = task;
loadingFiles.delete(file);
if (!queue.aborted) {
controller.emit('onError', {
error: error.clone()
});
}
});
});
}
var _file$2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("file");
class ServerLoadController extends AbstractLoadController {
constructor(server, options = {}) {
super(server, options);
Object.defineProperty(this, _file$2, {
writable: true,
value: null
});
}
load(file) {
if (this.getServer().getController()) {
babelHelpers.classPrivateFieldLooseBase(this, _file$2)[_file$2] = file;
loadMultiple(this, file);
} else {
this.emit('onProgress', {
file,
progress: 100
});
this.emit('onLoad', {
fileInfo: null
});
}
}
abort() {
if (this.getServer().getController() && babelHelpers.classPrivateFieldLooseBase(this, _file$2)[_file$2]) {
abort(this, babelHelpers.classPrivateFieldLooseBase(this, _file$2)[_file$2]);
}
}
}
class ClientLoadController extends AbstractLoadController {
constructor(server, options = {}) {
super(server, options);
}
load(file) {
if (main_core.Type.isFile(file.getBinary())) {
this.emit('onProgress', {
file,
progress: 100
});
this.emit('onLoad', {
fileInfo: file
});
} else {
this.emit('onError', {
error: new UploaderError('WRONG_FILE_SOURCE')
});
}
}
abort() {}
}
const queues = new WeakMap();
function removeMultiple(controller, file) {
const server = controller.getServer();
let queue = queues.get(server);
if (!queue) {
queue = {
tasks: [],
remove: main_core.Runtime.debounce(removeInternal, 1000, server),
xhr: null
};
queues.set(server, queue);
}
queue.tasks.push({
controller,
file
});
queue.remove();
}
function removeInternal() {
const server = this;
const queue = queues.get(server);
if (!queue) {
return;
}
const {
tasks
} = queue;
queues.delete(server);
const fileIds = [];
tasks.forEach(task => {
const file = task.file;
if (file.getServerId() !== null) {
fileIds.push(file.getServerId());
}
});
if (fileIds.length === 0) {
return;
}
const controllerOptions = server.getControllerOptions();
main_core.ajax.runAction('ui.fileuploader.remove', {
data: {
fileIds: fileIds
},
getParameters: {
controller: server.getController(),
controllerOptions: controllerOptions ? JSON.stringify(controllerOptions) : null
},
onrequeststart: xhr => {
queue.xhr = xhr;
}
}).then(response => {
var _response$data;
if ((_response$data = response.data) != null && _response$data.files) {
const fileResults = {};
response.data.files.forEach(fileResult => {
fileResults[fileResult.id] = fileResult;
});
tasks.forEach(task => {
const {
controller,
file
} = task;
const fileResult = fileResults[file.getServerId()] || null;
if (fileResult && fileResult.success) {
controller.emit('onRemove', {
fileId: fileResult.id
});
} else {
const error = UploaderError.createFromAjaxErrors(fileResult == null ? void 0 : fileResult.errors);
controller.emit('onError', {
error
});
}
});
} else {
const error = new UploaderError('SERVER_ERROR');
tasks.forEach(task => {
const {
controller
} = task;
controller.emit('onError', {
error: error.clone()
});
});
}
}).catch(response => {
const error = UploaderError.createFromAjaxErrors(response.errors);
tasks.forEach(task => {
const {
controller
} = task;
controller.emit('onError', {
error: error.clone()
});
});
});
}
class RemoveController extends AbstractRemoveController {
constructor(server) {
super(server);
}
remove(file) {
removeMultiple(this, file);
}
}
var _controller = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("controller");
var _controllerOptions = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("controllerOptions");
var _uploadControllerClass = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploadControllerClass");
var _uploadControllerOptions = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploadControllerOptions");
var _loadControllerClass = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("loadControllerClass");
var _loadControllerOptions = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("loadControllerOptions");
var _removeControllerClass = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("removeControllerClass");
var _removeControllerOptions = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("removeControllerOptions");
var _chunkSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("chunkSize");
var _defaultChunkSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("defaultChunkSize");
var _chunkMinSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("chunkMinSize");
var _chunkMaxSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("chunkMaxSize");
var _chunkRetryDelays = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("chunkRetryDelays");
var _calcChunkSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("calcChunkSize");
class Server {
constructor(serverOptions) {
Object.defineProperty(this, _calcChunkSize, {
value: _calcChunkSize2
});
Object.defineProperty(this, _controller, {
writable: true,
value: null
});
Object.defineProperty(this, _controllerOptions, {
writable: true,
value: null
});
Object.defineProperty(this, _uploadControllerClass, {
writable: true,
value: null
});
Object.defineProperty(this, _uploadControllerOptions, {
writable: true,
value: {}
});
Object.defineProperty(this, _loadControllerClass, {
writable: true,
value: null
});
Object.defineProperty(this, _loadControllerOptions, {
writable: true,
value: {}
});
Object.defineProperty(this, _removeControllerClass, {
writable: true,
value: null
});
Object.defineProperty(this, _removeControllerOptions, {
writable: true,
value: {}
});
Object.defineProperty(this, _chunkSize, {
writable: true,
value: null
});
Object.defineProperty(this, _defaultChunkSize, {
writable: true,
value: null
});
Object.defineProperty(this, _chunkMinSize, {
writable: true,
value: null
});
Object.defineProperty(this, _chunkMaxSize, {
writable: true,
value: null
});
Object.defineProperty(this, _chunkRetryDelays, {
writable: true,
value: [1000, 3000, 6000]
});
const options = main_core.Type.isPlainObject(serverOptions) ? serverOptions : {};
babelHelpers.classPrivateFieldLooseBase(this, _controller)[_controller] = main_core.Type.isStringFilled(options.controller) ? options.controller : null;
babelHelpers.classPrivateFieldLooseBase(this, _controllerOptions)[_controllerOptions] = main_core.Type.isPlainObject(options.controllerOptions) ? options.controllerOptions : null;
const _chunkSize2 = main_core.Type.isNumber(options.chunkSize) && options.chunkSize > 0 ? options.chunkSize : this.getDefaultChunkSize();
babelHelpers.classPrivateFieldLooseBase(this, _chunkSize)[_chunkSize] = options.forceChunkSize === true ? _chunkSize2 : babelHelpers.classPrivateFieldLooseBase(this, _calcChunkSize)[_calcChunkSize](_chunkSize2);
if (options.chunkRetryDelays === false || options.chunkRetryDelays === null) {
babelHelpers.classPrivateFieldLooseBase(this, _chunkRetryDelays)[_chunkRetryDelays] = [];
} else if (main_core.Type.isArray(options.chunkRetryDelays)) {
babelHelpers.classPrivateFieldLooseBase(this, _chunkRetryDelays)[_chunkRetryDelays] = options.chunkRetryDelays;
}
['uploadControllerClass', 'loadControllerClass', 'removeControllerClass'].forEach(controllerClass => {
let fn = null;
if (main_core.Type.isStringFilled(options[controllerClass])) {
fn = main_core.Runtime.getClass(options[controllerClass]);
if (!main_core.Type.isFunction(fn)) {
throw new Error(`Uploader.Server: "${controllerClass}" must be a function.`);
}
} else if (main_core.Type.isFunction(options[controllerClass])) {
fn = options[controllerClass];
}
if (controllerClass === 'uploadControllerClass') {
babelHelpers.classPrivateFieldLooseBase(this, _uploadControllerClass)[_uploadControllerClass] = fn;
} else if (controllerClass === 'loadControllerClass') {
babelHelpers.classPrivateFieldLooseBase(this, _loadControllerClass)[_loadControllerClass] = fn;
} else if (controllerClass === 'removeControllerClass') {
babelHelpers.classPrivateFieldLooseBase(this, _removeControllerClass)[_removeControllerClass] = fn;
}
});
babelHelpers.classPrivateFieldLooseBase(this, _loadControllerOptions)[_loadControllerOptions] = main_core.Type.isPlainObject(options.loadControllerOptions) ? options.loadControllerOptions : {};
babelHelpers.classPrivateFieldLooseBase(this, _uploadControllerOptions)[_uploadControllerOptions] = main_core.Type.isPlainObject(options.uploadControllerOptions) ? options.uploadControllerOptions : {};
babelHelpers.classPrivateFieldLooseBase(this, _removeControllerOptions)[_removeControllerOptions] = main_core.Type.isPlainObject(options.removeControllerOptions) ? options.removeControllerOptions : {};
}
createUploadController() {
if (babelHelpers.classPrivateFieldLooseBase(this, _uploadControllerClass)[_uploadControllerClass]) {
const controller = new (babelHelpers.classPrivateFieldLooseBase(this, _uploadControllerClass)[_uploadControllerClass])(this, babelHelpers.classPrivateFieldLooseBase(this, _uploadControllerOptions)[_uploadControllerOptions]);
if (!(controller instanceof AbstractUploadController)) {
throw new Error('Uploader.Server: "uploadControllerClass" must be an instance of AbstractUploadController.');
}
return controller;
} else if (main_core.Type.isStringFilled(babelHelpers.classPrivateFieldLooseBase(this, _controller)[_controller])) {
return new UploadController(this, babelHelpers.classPrivateFieldLooseBase(this, _uploadControllerOptions)[_uploadControllerOptions]);
}
return null;
}
createLoadController() {
if (babelHelpers.classPrivateFieldLooseBase(this, _loadControllerClass)[_loadControllerClass]) {
const controller = new (babelHelpers.classPrivateFieldLooseBase(this, _loadControllerClass)[_loadControllerClass])(this, babelHelpers.classPrivateFieldLooseBase(this, _loadControllerOptions)[_loadControllerOptions]);
if (!(controller instanceof AbstractLoadController)) {
throw new Error('Uploader.Server: "loadControllerClass" must be an instance of AbstractLoadController.');
}
return controller;
}
return new ServerLoadController(this, babelHelpers.classPrivateFieldLooseBase(this, _loadControllerOptions)[_loadControllerOptions]);
}
createClientLoadController() {
return new ClientLoadController(this, babelHelpers.classPrivateFieldLooseBase(this, _loadControllerOptions)[_loadControllerOptions]);
}
createRemoveController() {
if (babelHelpers.classPrivateFieldLooseBase(this, _removeControllerClass)[_removeControllerClass]) {
const controller = new (babelHelpers.classPrivateFieldLooseBase(this, _removeControllerClass)[_removeControllerClass])(this, babelHelpers.classPrivateFieldLooseBase(this, _removeControllerOptions)[_removeControllerOptions]);
if (!(controller instanceof AbstractRemoveController)) {
throw new Error('Uploader.Server: "removeControllerClass" must be an instance of AbstractRemoveController.');
}
return controller;
} else if (main_core.Type.isStringFilled(babelHelpers.classPrivateFieldLooseBase(this, _controller)[_controller])) {
return new RemoveController(this, babelHelpers.classPrivateFieldLooseBase(this, _removeControllerOptions)[_removeControllerOptions]);
}
return null;
}
getController() {
return babelHelpers.classPrivateFieldLooseBase(this, _controller)[_controller];
}
getControllerOptions() {
return babelHelpers.classPrivateFieldLooseBase(this, _controllerOptions)[_controllerOptions];
}
getChunkSize() {
return babelHelpers.classPrivateFieldLooseBase(this, _chunkSize)[_chunkSize];
}
getDefaultChunkSize() {
if (babelHelpers.classPrivateFieldLooseBase(this, _defaultChunkSize)[_defaultChunkSize] === null) {
const settings = main_core.Extension.getSettings('ui.uploader.core');
babelHelpers.classPrivateFieldLooseBase(this, _defaultChunkSize)[_defaultChunkSize] = settings.get('defaultChunkSize', 5 * 1024 * 1024);
}
return babelHelpers.classPrivateFieldLooseBase(this, _defaultChunkSize)[_defaultChunkSize];
}
getChunkMinSize() {
if (babelHelpers.classPrivateFieldLooseBase(this, _chunkMinSize)[_chunkMinSize] === null) {
const settings = main_core.Extension.getSettings('ui.uploader.core');
babelHelpers.classPrivateFieldLooseBase(this, _chunkMinSize)[_chunkMinSize] = settings.get('chunkMinSize', 1024 * 1024);
}
return babelHelpers.classPrivateFieldLooseBase(this, _chunkMinSize)[_chunkMinSize];
}
getChunkMaxSize() {
if (babelHelpers.classPrivateFieldLooseBase(this, _chunkMaxSize)[_chunkMaxSize] === null) {
const settings = main_core.Extension.getSettings('ui.uploader.core');
babelHelpers.classPrivateFieldLooseBase(this, _chunkMaxSize)[_chunkMaxSize] = settings.get('chunkMaxSize', 5 * 1024 * 1024);
}
return babelHelpers.classPrivateFieldLooseBase(this, _chunkMaxSize)[_chunkMaxSize];
}
getChunkRetryDelays() {
return babelHelpers.classPrivateFieldLooseBase(this, _chunkRetryDelays)[_chunkRetryDelays];
}
}
function _calcChunkSize2(chunkSize) {
return Math.min(Math.max(this.getChunkMinSize(), chunkSize), this.getChunkMaxSize());
}
var _uploader = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploader");
class Filter {
constructor(uploader, filterOptions = {}) {
Object.defineProperty(this, _uploader, {
writable: true,
value: null
});
babelHelpers.classPrivateFieldLooseBase(this, _uploader)[_uploader] = uploader;
}
getUploader() {
return babelHelpers.classPrivateFieldLooseBase(this, _uploader)[_uploader];
}
/**
* @abstract
*/
apply(...args) {
throw new Error('You must implement apply() method.');
}
}
var _maxFileSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("maxFileSize");
var _minFileSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("minFileSize");
var _maxTotalFileSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("maxTotalFileSize");
var _imageMaxFileSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imageMaxFileSize");
var _imageMinFileSize = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imageMinFileSize");
class FileSizeFilter extends Filter {
constructor(uploader, filterOptions = {}) {
super(uploader);
Object.defineProperty(this, _maxFileSize, {
writable: true,
value: 256 * 1024 * 1024
});
Object.defineProperty(this, _minFileSize, {
writable: true,
value: 0
});
Object.defineProperty(this, _maxTotalFileSize, {
writable: true,
value: null
});
Object.defineProperty(this, _imageMaxFileSize, {
writable: true,
value: 48 * 1024 * 1024
});
Object.defineProperty(this, _imageMinFileSize, {
writable: true,
value: 0
});
const settings = main_core.Extension.getSettings('ui.uploader.core');
babelHelpers.classPrivateFieldLooseBase(this, _maxFileSize)[_maxFileSize] = settings.get('maxFileSize', babelHelpers.classPrivateFieldLooseBase(this, _maxFileSize)[_maxFileSize]);
babelHelpers.classPrivateFieldLooseBase(this, _minFileSize)[_minFileSize] = settings.get('minFileSize', babelHelpers.classPrivateFieldLooseBase(this, _minFileSize)[_minFileSize]);
babelHelpers.classPrivateFieldLooseBase(this, _maxTotalFileSize)[_maxTotalFileSize] = settings.get('maxTotalFileSize', babelHelpers.classPrivateFieldLooseBase(this, _maxTotalFileSize)[_maxTotalFileSize]);
babelHelpers.classPrivateFieldLooseBase(this, _imageMaxFileSize)[_imageMaxFileSize] = settings.get('imageMaxFileSize', babelHelpers.classPrivateFieldLooseBase(this, _imageMaxFileSize)[_imageMaxFileSize]);
babelHelpers.classPrivateFieldLooseBase(this, _imageMinFileSize)[_imageMinFileSize] = settings.get('imageMinFileSize', babelHelpers.classPrivateFieldLooseBase(this, _imageMinFileSize)[_imageMinFileSize]);
const options = main_core.Type.isPlainObject(filterOptions) ? filterOptions : {};
this.setMaxFileSize(options['maxFileSize']);
this.setMinFileSize(options['minFileSize']);
this.setMaxTotalFileSize(options['maxTotalFileSize']);
this.setImageMaxFileSize(options['imageMaxFileSize']);
this.setImageMinFileSize(options['imageMinFileSize']);
}
apply(file) {
return new Promise((resolve, reject) => {
if (this.getMaxFileSize() !== null && file.getSize() > this.getMaxFileSize()) {
reject(new UploaderError('MAX_FILE_SIZE_EXCEEDED', {
maxFileSize: formatFileSize(this.getMaxFileSize()),
maxFileSizeInBytes: this.getMaxFileSize()
}));
return;
}
if (file.getSize() < this.getMinFileSize()) {
reject(new UploaderError('MIN_FILE_SIZE_EXCEEDED', {
minFileSize: formatFileSize(this.getMinFileSize()),
minFileSizeInBytes: this.getMinFileSize()
}));
return;
}
if (file.isImage()) {
if (this.getImageMaxFileSize() !== null && file.getSize() > this.getImageMaxFileSize()) {
reject(new UploaderError('IMAGE_MAX_FILE_SIZE_EXCEEDED', {
imageMaxFileSize: formatFileSize(this.getImageMaxFileSize()),
imageMaxFileSizeInBytes: this.getImageMaxFileSize()
}));
return;
}
if (file.getSize() < this.getImageMinFileSize()) {
reject(new UploaderError('IMAGE_MIN_FILE_SIZE_EXCEEDED', {
imageMinFileSize: formatFileSize(this.getImageMinFileSize()),
imageMinFileSizeInBytes: this.getImageMinFileSize()
}));
return;
}
}
if (this.getMaxTotalFileSize() !== null) {
if (this.getUploader().getTotalSize() > this.getMaxTotalFileSize()) {
reject(new UploaderError('MAX_TOTAL_FILE_SIZE_EXCEEDED', {
maxTotalFileSize: formatFileSize(this.getMaxTotalFileSize()),
maxTotalFileSizeInBytes: this.getMaxTotalFileSize()
}));
return;
}
}
resolve();
});
}
getMaxFileSize() {
return babelHelpers.classPrivateFieldLooseBase(this, _maxFileSize)[_maxFileSize];
}
setMaxFileSize(value) {
if (main_core.Type.isNumber(value) && value >= 0 || main_core.Type.isNull(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _maxFileSize)[_maxFileSize] = value;
}
}
getMinFileSize() {
return babelHelpers.classPrivateFieldLooseBase(this, _minFileSize)[_minFileSize];
}
setMinFileSize(value) {
if (main_core.Type.isNumber(value) && value >= 0) {
babelHelpers.classPrivateFieldLooseBase(this, _minFileSize)[_minFileSize] = value;
}
}
getMaxTotalFileSize() {
return babelHelpers.classPrivateFieldLooseBase(this, _maxTotalFileSize)[_maxTotalFileSize];
}
setMaxTotalFileSize(value) {
if (main_core.Type.isNumber(value) && value >= 0 || main_core.Type.isNull(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _maxTotalFileSize)[_maxTotalFileSize] = value;
}
}
getImageMaxFileSize() {
return babelHelpers.classPrivateFieldLooseBase(this, _imageMaxFileSize)[_imageMaxFileSize];
}
setImageMaxFileSize(value) {
if (main_core.Type.isNumber(value) && value >= 0 || main_core.Type.isNull(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _imageMaxFileSize)[_imageMaxFileSize] = value;
}
}
getImageMinFileSize() {
return babelHelpers.classPrivateFieldLooseBase(this, _imageMinFileSize)[_imageMinFileSize];
}
setImageMinFileSize(value) {
if (main_core.Type.isNumber(value) && value >= 0) {
babelHelpers.classPrivateFieldLooseBase(this, _imageMinFileSize)[_imageMinFileSize] = value;
}
}
}
const isValidFileType = (file, fileTypes) => {
if (!main_core.Type.isArrayFilled(fileTypes)) {
return true;
}
const mimeType = file.type;
const baseMimeType = mimeType.replace(/\/.*$/, '');
for (let i = 0; i < fileTypes.length; i++) {
if (!main_core.Type.isStringFilled(fileTypes[i])) {
continue;
}
const type = fileTypes[i].trim().toLowerCase();
if (type.charAt(0) === '.') // extension case
{
if (file.name.toLowerCase().indexOf(type, file.name.length - type.length) !== -1) {
return true;
}
} else if (/\/\*$/.test(type)) // image/* mime type case
{
if (baseMimeType === type.replace(/\/.*$/, '')) {
return true;
}
} else if (mimeType === type) {
return true;
}
}
return false;
};
class FileTypeFilter extends Filter {
constructor(uploader, filterOptions = {}) {
super(uploader);
}
apply(file) {
return new Promise((resolve, reject) => {
if (isValidFileType(file.getBinary(), this.getUploader().getAcceptedFileTypes())) {
resolve();
} else {
reject(new UploaderError('FILE_TYPE_NOT_ALLOWED'));
}
});
}
}
const getArrayBuffer = file => {
return new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);
fileReader.onload = () => {
const buffer = fileReader.result;
resolve(buffer);
};
fileReader.onerror = () => {
reject(fileReader.error);
};
});
};
const convertStringToBuffer = str => {
const result = [];
for (let i = 0; i < str.length; i++) {
result.push(str.charCodeAt(i) & 0xFF);
}
return result;
};
const compareBuffers = (dataView, dest, start) => {
for (let i = start, j = 0; j < dest.length;) {
if (dataView.getUint8(i++) !== dest[j++]) {
return false;
}
}
return true;
};
const GIF87a = convertStringToBuffer('GIF87a');
const GIF89a = convertStringToBuffer('GIF89a');
class Gif {
getSize(file) {
return new Promise((resolve, reject) => {
if (file.size < 10) {
return reject(new Error('GIF signature not found.'));
}
const blob = file.slice(0, 10);
getArrayBuffer(blob).then(buffer => {
const view = new DataView(buffer);
if (!compareBuffers(view, GIF87a, 0) && !compareBuffers(view, GIF89a, 0)) {
return reject(new Error('GIF signature not found.'));
}
resolve({
width: view.getUint16(6, true),
height: view.getUint16(8, true)
});
}).catch(error => {
reject(error);
});
});
}
}
const PNG_SIGNATURE = convertStringToBuffer('\x89PNG\r\n\x1a\n');
const IHDR_SIGNATURE = convertStringToBuffer('IHDR');
const FRIED_CHUNK_NAME = convertStringToBuffer('CgBI');
class Png {
getSize(file) {
return new Promise((resolve, reject) => {
if (file.size < 40) {
return reject(new Error('PNG signature not found.'));
}
const blob = file.slice(0, 40);
getArrayBuffer(blob).then(buffer => {
const view = new DataView(buffer);
if (!compareBuffers(view, PNG_SIGNATURE, 0)) {
return reject(new Error('PNG signature not found.'));
}
if (compareBuffers(view, FRIED_CHUNK_NAME, 12)) {
if (compareBuffers(view, IHDR_SIGNATURE, 28)) {
resolve({
width: view.getUint32(32),
height: view.getUint32(36)
});
} else {
return reject(new Error('PNG IHDR not found.'));
}
} else if (compareBuffers(view, IHDR_SIGNATURE, 12)) {
resolve({
width: view.getUint32(16),
height: view.getUint32(20)
});
} else {
return reject(new Error('PNG IHDR not found.'));
}
}).catch(error => {
return reject(error);
});
});
}
}
const BMP_SIGNATURE = 0x424d; // BM
class Bmp {
getSize(file) {
return new Promise((resolve, reject) => {
if (file.size < 26) {
return reject(new Error('BMP signature not found.'));
}
const blob = file.slice(0, 26);
getArrayBuffer(blob).then(buffer => {
const view = new DataView(buffer);
if (!view.getUint16(0) === BMP_SIGNATURE) {
return reject(new Error('BMP signature not found.'));
}
resolve({
width: view.getUint32(18, true),
height: Math.abs(view.getInt32(22, true))
});
}).catch(error => {
reject(error);
});
});
}
}
const EXIF_SIGNATURE = convertStringToBuffer('Exif\0\0');
class Jpeg {
getSize(file) {
return new Promise((resolve, reject) => {
if (file.size < 2) {
return reject(new Error('JPEG signature not found.'));
}
getArrayBuffer(file).then(buffer => {
const view = new DataView(buffer);
if (view.getUint8(0) !== 0xFF || view.getUint8(1) !== 0xD8) {
return reject(new Error('JPEG signature not found.'));
}
let offset = 2;
let orientation = -1;
for (;;) {
if (view.byteLength - offset < 2) {
return reject(new Error('JPEG signature not found.'));
}
if (view.getUint8(offset++) !== 0xFF) {
return reject(new Error('JPEG signature not found.'));
}
let code = view.getUint8(offset++);
let length; // skip padding bytes
while (code === 0xFF) {
code = view.getUint8(offset++);
}
if (0xD0 <= code && code <= 0xD9 || code === 0x01) {
length = 0;
} else if (0xC0 <= code && code <= 0xFE) {
// the rest of the unreserved markers
if (view.byteLength - offset < 2) {
return reject(new Error('JPEG signature not found.'));
}
length = view.getUint16(offset) - 2;
offset += 2;
} else {
return reject(new Error('JPEG unknown markers.'));
}
if (code === 0xD9
/* EOI */
|| code === 0xDA
/* SOS */
) {
return reject(new Error('JPEG end of the data stream.'));
} // try to get orientation from Exif segment
if (code === 0xE1 && length >= 10 && compareBuffers(view, EXIF_SIGNATURE, offset)) {
const exifBlock = new DataView(view.buffer, offset + 6, offset + length);
orientation = getOrientation(exifBlock);
}
if (length >= 5 && 0xC0 <= code && code <= 0xCF && code !== 0xC4 && code !== 0xC8 && code !== 0xCC) {
if (view.byteLength - offset < length) {
return reject(new Error('JPEG size not found.'));
}
let width = view.getUint16(offset + 3);
let height = view.getUint16(offset + 1);
if (orientation >= 5 && orientation <= 8) {
[width, height] = [height, width];
}
return resolve({
width,
height,
orientation
});
}
offset += length;
}
}).catch(error => {
reject(error);
});
});
}
}
const Marker = {
BIG_ENDIAN: 0x4d4d,
LITTLE_ENDIAN: 0x4949
};
const getOrientation = exifBlock => {
const byteAlign = exifBlock.getUint16(0);
const isBigEndian = byteAlign === Marker.BIG_ENDIAN;
const isLittleEndian = byteAlign === Marker.LITTLE_ENDIAN;
if (isBigEndian || isLittleEndian) {
return extractOrientation(exifBlock, isLittleEndian);
}
return -1;
};
const extractOrientation = (exifBlock, littleEndian = false) => {
const offset = 8; // idf offset
const idfDirectoryEntries = exifBlock.getUint16(offset, littleEndian);
const IDF_ENTRY_BYTES = 12;
const NUM_DIRECTORY_ENTRIES_BYTES = 2;
for (let directoryEntryNumber = 0; directoryEntryNumber < idfDirectoryEntries; directoryEntryNumber++) {
const start = offset + NUM_DIRECTORY_ENTRIES_BYTES + directoryEntryNumber * IDF_ENTRY_BYTES;
const end = start + IDF_ENTRY_BYTES; // Skip on corrupt EXIF blocks
if (start > exifBlock.byteLength) {
return -1;
}
const block = new DataView(exifBlock.buffer, exifBlock.byteOffset + start, end - start);
const tagNumber = block.getUint16(0, littleEndian); // 274 is the `orientation` tag ID
if (tagNumber === 274) {
const dataFormat = block.getUint16(2, littleEndian);
if (dataFormat !== 3) {
return -1;
}
const numberOfComponents = block.getUint32(4, littleEndian);
if (numberOfComponents !== 1) {
return -1;
}
return block.getUint16(8, littleEndian);
}
}
};
const RIFF_HEADER = 0x52494646; // RIFF
const WEBP_SIGNATURE = 0x57454250; // WEBP
const VP8_SIGNATURE = 0x56503820; // VP8
const VP8L_SIGNATURE = 0x5650384c; // VP8L
const VP8X_SIGNATURE = 0x56503858; // VP8X
class Webp {
getSize(file) {
return new Promise((resolve, reject) => {
if (file.size < 16) {
return reject(new Error('WEBP signature not found.'));
}
const blob = file.slice(0, 30);
getArrayBuffer(blob).then(buffer => {
const view = new DataView(buffer);
if (view.getUint32(0) !== RIFF_HEADER && view.getUint32(8) !== WEBP_SIGNATURE) {
return reject(new Error('WEBP signature not found.'));
}
const headerType = view.getUint32(12);
const headerView = new DataView(buffer, 20, 10);
if (headerType === VP8_SIGNATURE && headerView.getUint8(0) !== 0x2f) {
resolve({
width: headerView.getUint16(6, true) & 0x3fff,
height: headerView.getUint16(8, true) & 0x3fff
});
return;
} else if (headerType === VP8L_SIGNATURE && headerView.getUint8(0) === 0x2f) {
const bits = headerView.getUint32(1, true);
resolve({
width: (bits & 0x3FFF) + 1,
height: (bits >> 14 & 0x3FFF) + 1
});
return;
} else if (headerType === VP8X_SIGNATURE) {
const extendedHeader = headerView.getUint8(0);
const validStart = (extendedHeader & 0xc0) === 0;
const validEnd = (extendedHeader & 0x01) === 0;
if (validStart && validEnd) {
const width = 1 + (headerView.getUint8(6) << 16 | headerView.getUint8(5) << 8 | headerView.getUint8(4));
const height = 1 + (headerView.getUint8(9) << 0 | headerView.getUint8(8) << 8 | headerView.getUint8(7));
resolve({
width,
height
});
return;
}
}
reject(new Error('WEBP signature not found.'));
}).catch(error => {
reject(error);
});
});
}
}
const jpg = new Jpeg();
const typeHandlers = {
gif: new Gif(),
png: new Png(),
bmp: new Bmp(),
jpg: jpg,
jpeg: jpg,
jpe: jpg,
webp: new Webp()
};
const getImageSize = file => {
if (file.size === 0) {
return Promise.reject(new Error('Unknown image type.'));
}
const extension = getFileExtension(file.name).toLowerCase();
const type = file.type.replace(/^image\//, '');
const typeHandler = typeHandlers[extension] || typeHandlers[type];
if (!typeHandler) {
return Promise.reject(new Error('Unknown image type.'));
}
return typeHandler.getSize(file);
};
var _imageMinWidth = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imageMinWidth");
var _imageMinHeight = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imageMinHeight");
var _imageMaxWidth = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imageMaxWidth");
var _imageMaxHeight = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imageMaxHeight");
var _ignoreUnknownImageTypes = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("ignoreUnknownImageTypes");
class ImageSizeFilter extends Filter {
constructor(uploader, filterOptions = {}) {
super(uploader);
Object.defineProperty(this, _imageMinWidth, {
writable: true,
value: 1
});
Object.defineProperty(this, _imageMinHeight, {
writable: true,
value: 1
});
Object.defineProperty(this, _imageMaxWidth, {
writable: true,
value: 7000
});
Object.defineProperty(this, _imageMaxHeight, {
writable: true,
value: 7000
});
Object.defineProperty(this, _ignoreUnknownImageTypes, {
writable: true,
value: false
});
const settings = main_core.Extension.getSettings('ui.uploader.core');
babelHelpers.classPrivateFieldLooseBase(this, _imageMinWidth)[_imageMinWidth] = settings.get('imageMinWidth', babelHelpers.classPrivateFieldLooseBase(this, _imageMinWidth)[_imageMinWidth]);
babelHelpers.classPrivateFieldLooseBase(this, _imageMinHeight)[_imageMinHeight] = settings.get('imageMinHeight', babelHelpers.classPrivateFieldLooseBase(this, _imageMinHeight)[_imageMinHeight]);
babelHelpers.classPrivateFieldLooseBase(this, _imageMaxWidth)[_imageMaxWidth] = settings.get('imageMaxWidth', babelHelpers.classPrivateFieldLooseBase(this, _imageMaxWidth)[_imageMaxWidth]);
babelHelpers.classPrivateFieldLooseBase(this, _imageMaxHeight)[_imageMaxHeight] = settings.get('imageMaxHeight', babelHelpers.classPrivateFieldLooseBase(this, _imageMaxHeight)[_imageMaxHeight]);
const options = main_core.Type.isPlainObject(filterOptions) ? filterOptions : {};
this.setImageMinWidth(options['imageMinWidth']);
this.setImageMinHeight(options['imageMinHeight']);
this.setImageMaxWidth(options['imageMaxWidth']);
this.setImageMaxHeight(options['imageMaxHeight']);
this.setIgnoreUnknownImageTypes(options['ignoreUnknownImageTypes']);
}
apply(file) {
return new Promise((resolve, reject) => {
if (!file.isImage()) {
resolve();
return;
}
getImageSize(file.getBinary()).then(({
width,
height
}) => {
file.setWidth(width);
file.setHeight(height);
if (width < this.getImageMinWidth() || height < this.getImageMinHeight()) {
reject(new UploaderError('IMAGE_IS_TOO_SMALL', {
minWidth: this.getImageMinWidth(),
minHeight: this.getImageMinHeight()
}));
} else if (width > this.getImageMaxWidth() || height > this.getImageMaxHeight()) {
reject(new UploaderError('IMAGE_IS_TOO_BIG', {
maxWidth: this.getImageMaxWidth(),
maxHeight: this.getImageMaxHeight()
}));
} else {
resolve();
}
}).catch(error => {
if (this.getIgnoreUnknownImageTypes()) {
resolve();
} else {
if (error) {
console.log('Uploader ImageSizeFilter:', error);
}
reject(new UploaderError('IMAGE_TYPE_NOT_SUPPORTED'));
}
});
});
}
getImageMinWidth() {
return babelHelpers.classPrivateFieldLooseBase(this, _imageMinWidth)[_imageMinWidth];
}
setImageMinWidth(value) {
if (main_core.Type.isNumber(value) && value > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _imageMinWidth)[_imageMinWidth] = value;
}
}
getImageMinHeight() {
return babelHelpers.classPrivateFieldLooseBase(this, _imageMinHeight)[_imageMinHeight];
}
setImageMinHeight(value) {
if (main_core.Type.isNumber(value) && value > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _imageMinHeight)[_imageMinHeight] = value;
}
}
getImageMaxWidth() {
return babelHelpers.classPrivateFieldLooseBase(this, _imageMaxWidth)[_imageMaxWidth];
}
setImageMaxWidth(value) {
if (main_core.Type.isNumber(value) && value > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _imageMaxWidth)[_imageMaxWidth] = value;
}
}
getImageMaxHeight() {
return babelHelpers.classPrivateFieldLooseBase(this, _imageMaxHeight)[_imageMaxHeight];
}
setImageMaxHeight(value) {
if (main_core.Type.isNumber(value) && value > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _imageMaxHeight)[_imageMaxHeight] = value;
}
}
getIgnoreUnknownImageTypes() {
return babelHelpers.classPrivateFieldLooseBase(this, _ignoreUnknownImageTypes)[_ignoreUnknownImageTypes];
}
setIgnoreUnknownImageTypes(value) {
if (main_core.Type.isBoolean(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _ignoreUnknownImageTypes)[_ignoreUnknownImageTypes] = value;
}
}
}
const createWorker = fn => {
const workerBlob = new Blob(['(', fn.toString(), ')()'], {
type: 'application/javascript'
});
const workerURL = URL.createObjectURL(workerBlob);
const worker = new Worker(workerURL);
return {
post: (message, callback, transfer) => {
const id = createUniqueId();
worker.onmessage = event => {
if (event.data.id === id) {
callback(event.data.message);
}
};
worker.postMessage({
id,
message
}, transfer);
},
terminate: () => {
worker.terminate();
URL.revokeObjectURL(workerURL);
}
};
};
const BitmapWorker = function () {
self.onmessage = event => {
// Hack for Safari. Workers can become unpredictable.
// Sometimes 'self.postMessage' doesn't emit 'onmessage' event.
setTimeout(() => {
createImageBitmap(event.data.message.file).then(bitmap => {
var _event$data;
self.postMessage({
id: event == null ? void 0 : (_event$data = event.data) == null ? void 0 : _event$data.id,
message: bitmap
}, [bitmap]);
}).catch(() => {
self.postMessage({
id: event.data.id,
message: null
}, []);
});
}, 0);
};
};
const loadImage = file => new Promise((resolve, reject) => {
const image = document.createElement('img');
const url = URL.createObjectURL(file);
image.src = url;
image.onerror = error => {
URL.revokeObjectURL(image.src);
reject(error);
};
image.onload = () => {
URL.revokeObjectURL(url);
resolve({
width: image.naturalWidth,
height: image.naturalHeight,
image
});
};
});
const createImagePreview = (data, width, height) => {
width = Math.round(width);
height = Math.round(height);
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
const context = canvas.getContext('2d'); // context.imageSmoothingQuality = 'high';
context.drawImage(data, 0, 0, width, height);
return canvas;
};
const supportedMimeTypes = main_core.Browser.isSafari() ? ['image/jpeg', 'image/png'] : ['image/jpeg', 'image/png', 'image/webp'];
const getCanvasToBlobType = (blob, mimeType = 'image/jpeg', mimeTypeMode = 'auto') => {
mimeType = supportedMimeTypes.includes(mimeType) ? mimeType : 'image/jpeg';
if (mimeTypeMode === 'force') {
return mimeType;
} else {
return supportedMimeTypes.includes(blob.type) ? blob.type : mimeType;
}
};
const getFilenameWithoutExtension = name => {
return name.substr(0, name.lastIndexOf('.')) || name;
};
const extensionMap = {
'jpeg': 'jpg'
};
const renameFileToMatchMimeType = (filename, mimeType) => {
const name = getFilenameWithoutExtension(filename);
const type = mimeType.split('/')[1];
const extension = extensionMap[type] || type;
return `${name}.${extension}`;
};
const canvasPrototype = window.HTMLCanvasElement && window.HTMLCanvasElement.prototype;
const hasToBlobSupport = window.HTMLCanvasElement && canvasPrototype.toBlob;
const convertCanvasToBlob = (canvas, type, quality) => {
return new Promise((resolve, reject) => {
if (hasToBlobSupport) {
canvas.toBlob(blob => {
resolve(blob);
}, type, quality);
} else {
const blob = createBlobFromDataUri(canvas.toDataURL(type, quality));
resolve(blob);
}
});
};
const getResizedImageSize = (imageData, options) => {
const {
mode = 'contain',
upscale = false
} = options;
let {
width,
height
} = options;
if (!width && !height) {
return {
targetWidth: 0,
targetHeight: 0,
useOriginalSize: true
};
}
if (width === null) {
width = height;
} else if (height === null) {
height = width;
}
if (mode !== 'force') {
const ratioWidth = width / imageData.width;
const ratioHeight = height / imageData.height;
let ratio = 1;
if (mode === 'cover') {
ratio = Math.max(ratioWidth, ratioHeight);
} else if (mode === 'contain') {
ratio = Math.min(ratioWidth, ratioHeight);
} // if image is too small, exit here with original image
if (ratio > 1 && upscale === false) {
return {
targetWidth: imageData.width,
targetHeight: imageData.height,
useOriginalSize: true
};
}
width = imageData.width * ratio;
height = imageData.height * ratio;
}
/*if (mode === 'crop')
{
const sourceImageRatio = sourceImageWidth / sourceImageHeight;
const targetRatio = targetWidth / targetHeight;
if (sourceImageRatio > targetRatio)
{
const newWidth = sourceImageHeight * targetRatio;
srcX = (sourceImageWidth - newWidth) / 2;
sourceImageWidth = newWidth;
}
else
{
const newHeight = sourceImageWidth / targetRatio;
srcY = (sourceImageHeight - newHeight) / 2;
sourceImageHeight = newHeight;
}
context.drawImage(image, srcX, srcY, sourceImageWidth, sourceImageHeight, 0, 0, targetWidth, targetHeight);
}*/
return {
targetWidth: Math.round(width),
targetHeight: Math.round(height),
useOriginalSize: false
};
};
let canCreateImageBitmap = 'createImageBitmap' in window && typeof ImageBitmap !== 'undefined' && ImageBitmap.prototype && ImageBitmap.prototype.close;
if (canCreateImageBitmap && main_core.Browser.isSafari()) {
const ua = navigator.userAgent.toLowerCase();
const regex = new RegExp('version\\/([0-9.]+)', 'i');
const result = regex.exec(ua);
if (result && result[1] && result[1] < '16.4') {
// Webkit bug https://bugs.webkit.org/show_bug.cgi?id=223326
canCreateImageBitmap = false;
}
}
const resizeImage = (source, options) => {
return new Promise((resolve, reject) => {
const loadImageDataFallback = () => {
loadImage(source).then(({
image
}) => {
handleImageLoad(image);
}).catch(error => {
reject(error);
});
};
const handleImageLoad = imageData => {
const {
targetWidth,
targetHeight,
useOriginalSize
} = getResizedImageSize(imageData, options);
if (useOriginalSize) {
if ('close' in imageData) {
imageData.close();
}
resolve({
preview: source,
width: imageData.width,
height: imageData.height
});
return;
}
const canvas = createImagePreview(imageData, targetWidth, targetHeight); // if it was ImageBitmap
if ('close' in imageData) {
imageData.close();
}
const {
quality = 0.92,
mimeType,
mimeTypeMode
} = options;
const type = getCanvasToBlobType(source, mimeType, mimeTypeMode);
convertCanvasToBlob(canvas, type, quality).then(blob => {
let preview = blob;
if (main_core.Type.isFile(source)) {
// File type could be changed pic.gif -> pic.jpg
const newFileName = renameFileToMatchMimeType(source.name, type);
preview = createFileFromBlob(blob, newFileName);
}
resolve({
preview,
width: targetWidth,
height: targetHeight
});
}).catch(error => {
reject(error);
});
};
if (canCreateImageBitmap) {
const bitmapWorker = createWorker(BitmapWorker);
bitmapWorker.post({
file: source
}, imageBitmap => {
bitmapWorker.terminate();
if (imageBitmap) {
handleImageLoad(imageBitmap);
} else {
loadImageDataFallback();
}
});
} else {
loadImageDataFallback();
}
});
};
const isVideo = blob => {
return /^video\/[a-z0-9.-]+$/i.test(blob.type);
};
const createVideoPreview = (blob, options = {
width: 300,
height: 3000
}, seekTime = 10) => {
return new Promise((resolve, reject) => {
const video = document.createElement('video');
video.setAttribute('src', URL.createObjectURL(blob));
video.load();
main_core.Event.bind(video, 'error', error => {
reject('Error while loading video file', error);
});
main_core.Event.bind(video, 'loadedmetadata', () => {
if (video.duration < seekTime) {
seekTime = 0;
}
video.currentTime = seekTime;
main_core.Event.bind(video, 'seeked', () => {
const imageData = {
width: video.videoWidth,
height: video.videoHeight
};
const {
targetWidth,
targetHeight
} = getResizedImageSize(imageData, options);
if (!targetWidth || !targetHeight) {
reject();
return;
}
const canvas = createImagePreview(video, targetWidth, targetHeight);
const {
quality = 0.92,
mimeType = 'image/jpeg'
} = options;
convertCanvasToBlob(canvas, mimeType, quality).then(blob => {
resolve({
preview: blob,
width: targetWidth,
height: targetHeight
});
}).catch(() => {
reject();
});
});
});
});
};
var _imagePreviewWidth = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imagePreviewWidth");
var _imagePreviewHeight = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imagePreviewHeight");
var _imagePreviewQuality = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imagePreviewQuality");
var _imagePreviewMimeType = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imagePreviewMimeType");
var _imagePreviewMimeTypeMode = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imagePreviewMimeTypeMode");
var _imagePreviewUpscale = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imagePreviewUpscale");
var _imagePreviewResizeMode = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("imagePreviewResizeMode");
var _getResizeImageOptions = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("getResizeImageOptions");
class ImagePreviewFilter extends Filter {
constructor(uploader, filterOptions = {}) {
super(uploader);
Object.defineProperty(this, _getResizeImageOptions, {
value: _getResizeImageOptions2
});
Object.defineProperty(this, _imagePreviewWidth, {
writable: true,
value: 300
});
Object.defineProperty(this, _imagePreviewHeight, {
writable: true,
value: 300
});
Object.defineProperty(this, _imagePreviewQuality, {
writable: true,
value: 0.92
});
Object.defineProperty(this, _imagePreviewMimeType, {
writable: true,
value: 'image/jpeg'
});
Object.defineProperty(this, _imagePreviewMimeTypeMode, {
writable: true,
value: 'auto'
});
Object.defineProperty(this, _imagePreviewUpscale, {
writable: true,
value: false
});
Object.defineProperty(this, _imagePreviewResizeMode, {
writable: true,
value: 'contain'
});
const options = main_core.Type.isPlainObject(filterOptions) ? filterOptions : {};
this.setImagePreviewWidth(options['imagePreviewWidth']);
this.setImagePreviewHeight(options['imagePreviewHeight']);
this.setImagePreviewQuality(options['imagePreviewQuality']);
this.setImagePreviewUpscale(options['imagePreviewUpscale']);
this.setImagePreviewResizeMode(options['imagePreviewResizeMode']);
this.setImagePreviewMimeType(options['imagePreviewMimeType']);
this.setImagePreviewMimeTypeMode(options['imagePreviewMimeTypeMode']);
}
apply(file) {
return new Promise((resolve, reject) => {
if (isResizableImage(file.getBinary())) {
resizeImage(file.getBinary(), babelHelpers.classPrivateFieldLooseBase(this, _getResizeImageOptions)[_getResizeImageOptions]()).then(({
preview,
width,
height
}) => {
file.setClientPreview(preview, width, height);
resolve();
}).catch(error => {
if (error) {
console.log('Uploader: image resize error', error);
}
resolve();
});
} else if (isVideo(file.getBinary()) && !main_core.Browser.isSafari()) {
createVideoPreview(file.getBinary(), babelHelpers.classPrivateFieldLooseBase(this, _getResizeImageOptions)[_getResizeImageOptions]()).then(({
preview,
width,
height
}) => {
file.setClientPreview(preview, width, height);
resolve();
}).catch(error => {
if (error) {
console.log('Uploader: video preview error', error);
}
resolve();
});
} else {
resolve();
}
});
}
getImagePreviewWidth() {
return babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewWidth)[_imagePreviewWidth];
}
setImagePreviewWidth(value) {
if (main_core.Type.isNumber(value) && value > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewWidth)[_imagePreviewWidth] = value;
}
}
getImagePreviewHeight() {
return babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewHeight)[_imagePreviewHeight];
}
setImagePreviewHeight(value) {
if (main_core.Type.isNumber(value) && value > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewHeight)[_imagePreviewHeight] = value;
}
}
getImagePreviewQuality() {
return babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewQuality)[_imagePreviewQuality];
}
setImagePreviewQuality(value) {
if (main_core.Type.isNumber(value) && value > 0.1 && value <= 1) {
babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewQuality)[_imagePreviewQuality] = value;
}
}
getImagePreviewUpscale() {
return babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewUpscale)[_imagePreviewUpscale];
}
setImagePreviewUpscale(value) {
if (main_core.Type.isBoolean(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewUpscale)[_imagePreviewUpscale] = value;
}
}
getImagePreviewResizeMode() {
return babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewResizeMode)[_imagePreviewResizeMode];
}
setImagePreviewResizeMode(value) {
if (['contain', 'force', 'cover'].includes(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewResizeMode)[_imagePreviewResizeMode] = value;
}
}
getImagePreviewMimeType() {
return babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewMimeType)[_imagePreviewMimeType];
}
setImagePreviewMimeType(value) {
if (['image/jpeg', 'image/png', 'image/webp'].includes(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewMimeType)[_imagePreviewMimeType] = value;
}
}
getImagePreviewMimeTypeMode() {
return babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewMimeTypeMode)[_imagePreviewMimeTypeMode];
}
setImagePreviewMimeTypeMode(value) {
if (['auto', 'force'].includes(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _imagePreviewMimeTypeMode)[_imagePreviewMimeTypeMode] = value;
}
}
}
function _getResizeImageOptions2() {
return {
width: this.getImagePreviewWidth(),
height: this.getImagePreviewHeight(),
mode: this.getImagePreviewResizeMode(),
upscale: this.getImagePreviewUpscale(),
quality: this.getImagePreviewQuality(),
mimeType: this.getImagePreviewMimeType(),
mimeTypeMode: this.getImagePreviewMimeTypeMode()
};
}
var _resizeWidth = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("resizeWidth");
var _resizeHeight = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("resizeHeight");
var _resizeMethod = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("resizeMethod");
var _resizeMimeType = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("resizeMimeType");
var _resizeMimeTypeMode = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("resizeMimeTypeMode");
var _resizeQuality = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("resizeQuality");
class ImageResizeFilter extends Filter {
constructor(uploader, filterOptions = {}) {
super(uploader);
Object.defineProperty(this, _resizeWidth, {
writable: true,
value: null
});
Object.defineProperty(this, _resizeHeight, {
writable: true,
value: null
});
Object.defineProperty(this, _resizeMethod, {
writable: true,
value: 'contain'
});
Object.defineProperty(this, _resizeMimeType, {
writable: true,
value: 'image/jpeg'
});
Object.defineProperty(this, _resizeMimeTypeMode, {
writable: true,
value: 'auto'
});
Object.defineProperty(this, _resizeQuality, {
writable: true,
value: 0.92
});
const options = main_core.Type.isPlainObject(filterOptions) ? filterOptions : {};
this.setResizeWidth(options['imageResizeWidth']);
this.setResizeHeight(options['imageResizeHeight']);
this.setResizeMode(options['imageResizeMode']);
this.setResizeMimeType(options['imageResizeMimeType']);
this.setResizeMimeTypeMode(options['imageResizeMimeTypeMode']);
this.setResizeQuality(options['imageResizeQuality']);
}
apply(file) {
return new Promise((resolve, reject) => {
if (this.getResizeWidth() === null && this.getResizeHeight() === null) {
return resolve();
}
if (!isResizableImage(file.getBinary())) {
return resolve();
}
const options = {
width: this.getResizeWidth(),
height: this.getResizeHeight(),
mode: this.getResizeMode(),
quality: this.getResizeQuality(),
mimeType: this.getResizeMimeType(),
mimeTypeMode: this.getResizeMimeTypeMode()
};
resizeImage(file.getBinary(), options).then(({
preview,
width,
height
}) => {
file.setWidth(width);
file.setHeight(height);
file.setFile(preview);
resolve();
}).catch(error => {
if (error) {
console.log('image resize error', error);
}
resolve();
});
});
}
getResizeWidth() {
return babelHelpers.classPrivateFieldLooseBase(this, _resizeWidth)[_resizeWidth];
}
setResizeWidth(value) {
if (main_core.Type.isNumber(value) && value > 0 || main_core.Type.isNull(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _resizeWidth)[_resizeWidth] = value;
}
}
getResizeHeight() {
return babelHelpers.classPrivateFieldLooseBase(this, _resizeHeight)[_resizeHeight];
}
setResizeHeight(value) {
if (main_core.Type.isNumber(value) && value > 0 || main_core.Type.isNull(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _resizeHeight)[_resizeHeight] = value;
}
}
getResizeMode() {
return babelHelpers.classPrivateFieldLooseBase(this, _resizeMethod)[_resizeMethod];
}
setResizeMode(value) {
if (['contain', 'force', 'cover'].includes(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _resizeMethod)[_resizeMethod] = value;
}
}
getResizeMimeType() {
return babelHelpers.classPrivateFieldLooseBase(this, _resizeMimeType)[_resizeMimeType];
}
setResizeMimeType(value) {
if (['image/jpeg', 'image/png', 'image/webp'].includes(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _resizeMimeType)[_resizeMimeType] = value;
}
}
getResizeMimeTypeMode() {
return babelHelpers.classPrivateFieldLooseBase(this, _resizeMimeTypeMode)[_resizeMimeTypeMode];
}
setResizeMimeTypeMode(value) {
if (['auto', 'force'].includes(value)) {
babelHelpers.classPrivateFieldLooseBase(this, _resizeMimeTypeMode)[_resizeMimeTypeMode] = value;
}
}
getResizeQuality() {
return babelHelpers.classPrivateFieldLooseBase(this, _resizeQuality)[_resizeQuality];
}
setResizeQuality(value) {
if (main_core.Type.isNumber(value) && value > 0.1 && value <= 1) {
babelHelpers.classPrivateFieldLooseBase(this, _resizeQuality)[_resizeQuality] = value;
}
}
}
const UploaderStatus = {
STARTED: 0,
STOPPED: 1
};
const UploaderEvent = {
UPLOAD_START: 'onUploadStart',
UPLOAD_COMPLETE: 'onUploadComplete',
ERROR: 'onError',
MAX_FILE_COUNT_EXCEEDED: 'onMaxFileCountExceeded',
DESTROY: 'onDestroy',
BEFORE_BROWSE: 'onBeforeBrowse',
BEFORE_DROP: 'onBeforeDrop',
BEFORE_PASTE: 'onBeforePaste',
FILE_BEFORE_ADD: 'File:onBeforeAdd',
FILE_ADD_START: 'File:onAddStart',
FILE_LOAD_START: 'File:onLoadStart',
FILE_LOAD_PROGRESS: 'File:onLoadProgress',
FILE_LOAD_COMPLETE: 'File:onLoadComplete',
FILE_ERROR: 'File:onError',
FILE_ADD: 'File:onAdd',
FILE_REMOVE: 'File:onRemove',
FILE_UPLOAD_START: 'File:onUploadStart',
FILE_UPLOAD_PROGRESS: 'File:onUploadProgress',
FILE_UPLOAD_COMPLETE: 'File:onUploadComplete',
FILE_COMPLETE: 'File:onComplete',
FILE_STATUS_CHANGE: 'File:onStatusChange',
FILE_STATE_CHANGE: 'File:onStateChange'
};
const FilterType = {
VALIDATION: 'validation',
PREPARATION: 'preparation'
};
const getFilesFromDataTransfer = dataTransfer => {
return new Promise((resolve, reject) => {
if (!dataTransfer.items) {
resolve(dataTransfer.files ? Array.from(dataTransfer.files) : []);
return;
}
const items = Array.from(dataTransfer.items).filter(item => isFileSystemItem(item)).map(item => getFilesFromItem(item));
Promise.all(items).then(fileGroups => {
const files = [];
fileGroups.forEach(group => {
files.push.apply(files, group);
});
resolve(files);
}).catch(reject);
});
};
const isFileSystemItem = item => {
if ('webkitGetAsEntry' in item) {
const entry = item.webkitGetAsEntry();
if (entry) {
return entry.isFile || entry.isDirectory;
}
}
return item.kind === 'file';
};
const getFilesFromItem = item => {
return new Promise((resolve, reject) => {
if (isDirectoryEntry(item)) {
getFilesInDirectory(getAsEntry(item)).then(resolve).catch(reject);
return;
}
resolve([item.getAsFile()]);
});
};
const getFilesInDirectory = entry => {
return new Promise((resolve, reject) => {
const files = [];
let dirCounter = 0;
let fileCounter = 0;
const resolveIfDone = () => {
if (fileCounter === 0 && dirCounter === 0) {
resolve(files);
}
};
const readEntries = dirEntry => {
dirCounter++;
const directoryReader = dirEntry.createReader();
const readBatch = () => {
directoryReader.readEntries(entries => {
if (entries.length === 0) {
dirCounter--;
resolveIfDone();
return;
}
entries.forEach(entry => {
if (entry.isDirectory) {
readEntries(entry);
} else {
fileCounter++;
entry.file(file => {
files.push(file);
fileCounter--;
resolveIfDone();
});
}
});
readBatch();
}, reject);
};
readBatch();
};
readEntries(entry);
});
};
const isDirectoryEntry = item => isEntry(item) && (getAsEntry(item) || {}).isDirectory;
const isEntry = item => 'webkitGetAsEntry' in item;
const getAsEntry = item => item.webkitGetAsEntry();
let result = null;
const canAppendFileToForm = () => {
if (result === null) {
try {
const dataTransfer = new DataTransfer();
const file = new File(['hello'], 'my.txt');
dataTransfer.items.add(file);
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.files = dataTransfer.files;
result = input.files.length === 1;
} catch (err) {
result = false;
}
}
return result;
};
const assignFileToInput = (input, file) => {
try {
const dataTransfer = new DataTransfer();
const files = main_core.Type.isArray(file) ? file : [file];
files.forEach(file => {
dataTransfer.items.add(file);
});
input.files = dataTransfer.files;
} catch (error) {
return false;
}
return true;
};
var _files = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("files");
var _multiple = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("multiple");
var _autoUpload = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("autoUpload");
var _allowReplaceSingle = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("allowReplaceSingle");
var _maxParallelUploads = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("maxParallelUploads");
var _maxParallelLoads = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("maxParallelLoads");
var _acceptOnlyImages = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("acceptOnlyImages");
var _acceptedFileTypes = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("acceptedFileTypes");
var _ignoredFileNames = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("ignoredFileNames");
var _maxFileCount = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("maxFileCount");
var _server$3 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("server");
var _hiddenFields = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("hiddenFields");
var _hiddenFieldsContainer = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("hiddenFieldsContainer");
var _hiddenFieldName = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("hiddenFieldName");
var _assignAsFile = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("assignAsFile");
var _filters = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("filters");
var _status$1 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("status");
var _onBeforeUploadHandler = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("onBeforeUploadHandler");
var _onFileStatusChangeHandler = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("onFileStatusChangeHandler");
var _onFileStateChangeHandler = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("onFileStateChangeHandler");
var _onInputFileChangeHandler = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("onInputFileChangeHandler");
var _onPasteHandler = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("onPasteHandler");
var _onDropHandler = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("onDropHandler");
var _browsingNodes = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("browsingNodes");
var _dropNodes = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("dropNodes");
var _pastingNodes = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("pastingNodes");
var _setLoadEvents = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("setLoadEvents");
var _setUploadEvents = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("setUploadEvents");
var _setRemoveEvents = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("setRemoveEvents");
var _handleBeforeUpload = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleBeforeUpload");
var _handleFileStatusChange = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleFileStatusChange");
var _handleFileStateChange = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleFileStateChange");
var _exceedsMaxFileCount = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("exceedsMaxFileCount");
var _applyFilters = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("applyFilters");
var _removeFile = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("removeFile");
var _handleBrowseClick = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleBrowseClick");
var _handleInputFileChange = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleInputFileChange");
var _handleDrop = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleDrop");
var _preventDefault = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("preventDefault");
var _handlePaste = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handlePaste");
var _uploadNext = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploadNext");
var _loadNext = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("loadNext");
var _setHiddenField = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("setHiddenField");
var _resetHiddenField = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("resetHiddenField");
var _resetHiddenFields = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("resetHiddenFields");
var _syncInputPositions = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("syncInputPositions");
class Uploader extends main_core_events.EventEmitter {
constructor(uploaderOptions) {
super();
Object.defineProperty(this, _syncInputPositions, {
value: _syncInputPositions2
});
Object.defineProperty(this, _resetHiddenFields, {
value: _resetHiddenFields2
});
Object.defineProperty(this, _resetHiddenField, {
value: _resetHiddenField2
});
Object.defineProperty(this, _setHiddenField, {
value: _setHiddenField2
});
Object.defineProperty(this, _loadNext, {
value: _loadNext2
});
Object.defineProperty(this, _uploadNext, {
value: _uploadNext2
});
Object.defineProperty(this, _handlePaste, {
value: _handlePaste2
});
Object.defineProperty(this, _preventDefault, {
value: _preventDefault2
});
Object.defineProperty(this, _handleDrop, {
value: _handleDrop2
});
Object.defineProperty(this, _handleInputFileChange, {
value: _handleInputFileChange2
});
Object.defineProperty(this, _handleBrowseClick, {
value: _handleBrowseClick2
});
Object.defineProperty(this, _removeFile, {
value: _removeFile2
});
Object.defineProperty(this, _applyFilters, {
value: _applyFilters2
});
Object.defineProperty(this, _exceedsMaxFileCount, {
value: _exceedsMaxFileCount2
});
Object.defineProperty(this, _handleFileStateChange, {
value: _handleFileStateChange2
});
Object.defineProperty(this, _handleFileStatusChange, {
value: _handleFileStatusChange2
});
Object.defineProperty(this, _handleBeforeUpload, {
value: _handleBeforeUpload2
});
Object.defineProperty(this, _setRemoveEvents, {
value: _setRemoveEvents2
});
Object.defineProperty(this, _setUploadEvents, {
value: _setUploadEvents2
});
Object.defineProperty(this, _setLoadEvents, {
value: _setLoadEvents2
});
Object.defineProperty(this, _files, {
writable: true,
value: []
});
Object.defineProperty(this, _multiple, {
writable: true,
value: false
});
Object.defineProperty(this, _autoUpload, {
writable: true,
value: true
});
Object.defineProperty(this, _allowReplaceSingle, {
writable: true,
value: true
});
Object.defineProperty(this, _maxParallelUploads, {
writable: true,
value: 2
});
Object.defineProperty(this, _maxParallelLoads, {
writable: true,
value: 10
});
Object.defineProperty(this, _acceptOnlyImages, {
writable: true,
value: false
});
Object.defineProperty(this, _acceptedFileTypes, {
writable: true,
value: []
});
Object.defineProperty(this, _ignoredFileNames, {
writable: true,
value: ['.ds_store', 'thumbs.db', 'desktop.ini']
});
Object.defineProperty(this, _maxFileCount, {
writable: true,
value: null
});
Object.defineProperty(this, _server$3, {
writable: true,
value: null
});
Object.defineProperty(this, _hiddenFields, {
writable: true,
value: new Map()
});
Object.defineProperty(this, _hiddenFieldsContainer, {
writable: true,
value: null
});
Object.defineProperty(this, _hiddenFieldName, {
writable: true,
value: 'file'
});
Object.defineProperty(this, _assignAsFile, {
writable: true,
value: false
});
Object.defineProperty(this, _filters, {
writable: true,
value: new Map()
});
Object.defineProperty(this, _status$1, {
writable: true,
value: UploaderStatus.STOPPED
});
Object.defineProperty(this, _onBeforeUploadHandler, {
writable: true,
value: null
});
Object.defineProperty(this, _onFileStatusChangeHandler, {
writable: true,
value: null
});
Object.defineProperty(this, _onFileStateChangeHandler, {
writable: true,
value: null
});
Object.defineProperty(this, _onInputFileChangeHandler, {
writable: true,
value: null
});
Object.defineProperty(this, _onPasteHandler, {
writable: true,
value: null
});
Object.defineProperty(this, _onDropHandler, {
writable: true,
value: null
});
Object.defineProperty(this, _browsingNodes, {
writable: true,
value: new Map()
});
Object.defineProperty(this, _dropNodes, {
writable: true,
value: new Set()
});
Object.defineProperty(this, _pastingNodes, {
writable: true,
value: new Set()
});
this.setEventNamespace('BX.UI.Uploader');
babelHelpers.classPrivateFieldLooseBase(this, _onBeforeUploadHandler)[_onBeforeUploadHandler] = babelHelpers.classPrivateFieldLooseBase(this, _handleBeforeUpload)[_handleBeforeUpload].bind(this);
babelHelpers.classPrivateFieldLooseBase(this, _onFileStatusChangeHandler)[_onFileStatusChangeHandler] = babelHelpers.classPrivateFieldLooseBase(this, _handleFileStatusChange)[_handleFileStatusChange].bind(this);
babelHelpers.classPrivateFieldLooseBase(this, _onFileStateChangeHandler)[_onFileStateChangeHandler] = babelHelpers.classPrivateFieldLooseBase(this, _handleFileStateChange)[_handleFileStateChange].bind(this);
babelHelpers.classPrivateFieldLooseBase(this, _onInputFileChangeHandler)[_onInputFileChangeHandler] = babelHelpers.classPrivateFieldLooseBase(this, _handleInputFileChange)[_handleInputFileChange].bind(this);
babelHelpers.classPrivateFieldLooseBase(this, _onPasteHandler)[_onPasteHandler] = babelHelpers.classPrivateFieldLooseBase(this, _handlePaste)[_handlePaste].bind(this);
babelHelpers.classPrivateFieldLooseBase(this, _onDropHandler)[_onDropHandler] = babelHelpers.classPrivateFieldLooseBase(this, _handleDrop)[_handleDrop].bind(this);
const options = main_core.Type.isPlainObject(uploaderOptions) ? Object.assign({}, uploaderOptions) : {};
babelHelpers.classPrivateFieldLooseBase(this, _multiple)[_multiple] = main_core.Type.isBoolean(options.multiple) ? options.multiple : false;
const acceptedFileTypes = main_core.Type.isString(options.acceptedFileTypes) || main_core.Type.isArray(options.acceptedFileTypes) ? options.acceptedFileTypes : Uploader.getGlobalOption('acceptedFileTypes', null);
this.setAcceptedFileTypes(acceptedFileTypes);
const acceptOnlyImages = main_core.Type.isBoolean(options.acceptOnlyImages) ? options.acceptOnlyImages : Uploader.getGlobalOption('acceptOnlyImages', null);
this.setAcceptOnlyImages(acceptOnlyImages);
const ignoredFileNames = main_core.Type.isArray(options.ignoredFileNames) ? options.ignoredFileNames : Uploader.getGlobalOption('ignoredFileNames', null);
this.setIgnoredFileNames(ignoredFileNames);
this.setMaxFileCount(options.maxFileCount);
this.setAllowReplaceSingle(options.allowReplaceSingle);
this.assignBrowse(options.browseElement);
this.assignDropzone(options.dropElement);
this.assignPaste(options.pasteElement);
this.setHiddenFieldsContainer(options.hiddenFieldsContainer);
this.setHiddenFieldName(options.hiddenFieldName);
this.setAssignAsFile(options.assignAsFile);
this.setAutoUpload(options.autoUpload);
this.setMaxParallelUploads(options.maxParallelUploads);
this.setMaxParallelLoads(options.maxParallelLoads);
let serverOptions = main_core.Type.isPlainObject(options.serverOptions) ? options.serverOptions : {};
serverOptions = Object.assign({}, {
controller: options.controller,
controllerOptions: options.controllerOptions
}, serverOptions);
babelHelpers.classPrivateFieldLooseBase(this, _server$3)[_server$3] = new Server(serverOptions);
this.subscribeFromOptions(options.events);
this.addFilter(FilterType.VALIDATION, new FileSizeFilter(this, options));
this.addFilter(FilterType.VALIDATION, new FileTypeFilter(this, options));
this.addFilter(FilterType.VALIDATION, new ImageSizeFilter(this, options));
this.addFilter(FilterType.VALIDATION, new ImagePreviewFilter(this, options));
this.addFilter(FilterType.PREPARATION, new ImageResizeFilter(this, options));
this.addFilters(options.filters);
this.addFiles(options.files);
}
static getGlobalOption(path, defaultValue = null) {
const globalOptions = main_core.Extension.getSettings('ui.uploader.core');
return globalOptions.get(path, defaultValue);
}
addFiles(fileList) {
if (!main_core.Type.isArrayLike(fileList)) {
return;
}
const files = Array.from(fileList);
if (babelHelpers.classPrivateFieldLooseBase(this, _exceedsMaxFileCount)[_exceedsMaxFileCount](files)) {
return;
}
files.forEach(file => {
if (main_core.Type.isArrayFilled(file)) {
this.addFile(file[0], file[1]);
} else {
this.addFile(file);
}
});
}
addFile(source, options) {
const file = new UploaderFile(source, options);
if (this.getIgnoredFileNames().includes(file.getName().toLowerCase())) {
return;
}
if (babelHelpers.classPrivateFieldLooseBase(this, _exceedsMaxFileCount)[_exceedsMaxFileCount]([file])) {
return;
}
if (!this.isMultiple() && this.shouldReplaceSingle() && babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].length > 0) {
const fileToReplace = babelHelpers.classPrivateFieldLooseBase(this, _files)[_files][0];
this.removeFile(fileToReplace);
}
const event = new main_core_events.BaseEvent({
data: {
file: file
}
});
this.emit(UploaderEvent.FILE_BEFORE_ADD, event);
if (event.isDefaultPrevented()) {
return;
}
file.subscribe(FileEvent.STATUS_CHANGE, babelHelpers.classPrivateFieldLooseBase(this, _onFileStatusChangeHandler)[_onFileStatusChangeHandler]);
file.subscribe(FileEvent.STATE_CHANGE, babelHelpers.classPrivateFieldLooseBase(this, _onFileStateChangeHandler)[_onFileStateChangeHandler]);
babelHelpers.classPrivateFieldLooseBase(this, _setUploadEvents)[_setUploadEvents](file);
babelHelpers.classPrivateFieldLooseBase(this, _setLoadEvents)[_setLoadEvents](file);
babelHelpers.classPrivateFieldLooseBase(this, _setRemoveEvents)[_setRemoveEvents](file);
if (file.getOrigin() === FileOrigin.SERVER) {
file.setLoadController(this.getServer().createLoadController());
} else {
file.setLoadController(this.getServer().createClientLoadController());
}
if (file.getOrigin() === FileOrigin.CLIENT) {
const uploadController = this.getServer().createUploadController();
file.setUploadController(uploadController);
}
file.setRemoveController(this.getServer().createRemoveController());
babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].push(file);
file.emit(FileEvent.ADD);
this.emit(UploaderEvent.FILE_ADD_START, {
file
});
if (file.getOrigin() === FileOrigin.SERVER) {
file.load();
} else {
babelHelpers.classPrivateFieldLooseBase(this, _loadNext)[_loadNext]();
}
}
start() {
if (this.getStatus() !== UploaderStatus.STARTED && this.getPendingFileCount() > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _status$1)[_status$1] = UploaderStatus.STARTED;
this.emit(UploaderEvent.UPLOAD_START);
babelHelpers.classPrivateFieldLooseBase(this, _uploadNext)[_uploadNext]();
}
} // stop(): void
// {
// this.#status = UploaderStatus.STOPPED;
//
// this.getFiles().forEach((file: UploaderFile) => {
// if (file.isUploading())
// {
// file.abort();
// file.setStatus(FileStatus.PENDING);
// }
// });
//
// this.emit('onStop');
// }
cancel() {
this.getFiles().forEach(file => {
file.remove();
});
}
destroy() {
this.emit(UploaderEvent.DESTROY);
this.unassignBrowseAll();
this.unassignDropzoneAll();
this.unassignPasteAll();
this.getFiles().forEach(file => {
file.remove();
});
babelHelpers.classPrivateFieldLooseBase(this, _resetHiddenFields)[_resetHiddenFields]();
babelHelpers.classPrivateFieldLooseBase(this, _files)[_files] = [];
babelHelpers.classPrivateFieldLooseBase(this, _server$3)[_server$3] = null;
babelHelpers.classPrivateFieldLooseBase(this, _acceptedFileTypes)[_acceptedFileTypes] = null;
babelHelpers.classPrivateFieldLooseBase(this, _ignoredFileNames)[_ignoredFileNames] = null;
babelHelpers.classPrivateFieldLooseBase(this, _filters)[_filters] = null;
Object.setPrototypeOf(this, null);
}
removeFile(file) {
if (main_core.Type.isString(file)) {
file = this.getFile(file);
}
const index = babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].findIndex(element => element === file);
if (index === -1) {
return;
}
file.remove();
}
getFile(id) {
return babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].find(file => file.getId() === id) || null;
}
getFiles() {
return Array.from(babelHelpers.classPrivateFieldLooseBase(this, _files)[_files]);
}
isMultiple() {
return babelHelpers.classPrivateFieldLooseBase(this, _multiple)[_multiple];
}
getStatus() {
return babelHelpers.classPrivateFieldLooseBase(this, _status$1)[_status$1];
}
addFilter(type, filter, filterOptions = {}) {
if (main_core.Type.isFunction(filter) || main_core.Type.isString(filter)) {
const className = main_core.Type.isString(filter) ? main_core.Reflection.getClass(filter) : filter;
if (main_core.Type.isFunction(className)) {
filter = new className(this, filterOptions);
}
}
if (filter instanceof Filter) {
let filters = babelHelpers.classPrivateFieldLooseBase(this, _filters)[_filters].get(type);
if (!main_core.Type.isArray(filters)) {
filters = [];
babelHelpers.classPrivateFieldLooseBase(this, _filters)[_filters].set(type, filters);
}
filters.push(filter);
} else {
throw new Error('Uploader: a filter must be an instance of FileUploader.Filter.');
}
}
addFilters(filters) {
if (main_core.Type.isArray(filters)) {
filters.forEach(filter => {
if (main_core.Type.isPlainObject(filter)) {
this.addFilter(filter.type, filter.filter, filter.options);
}
});
}
}
getServer() {
return babelHelpers.classPrivateFieldLooseBase(this, _server$3)[_server$3];
}
assignBrowse(nodes) {
nodes = main_core.Type.isElementNode(nodes) ? [nodes] : nodes;
if (!main_core.Type.isArray(nodes)) {
return;
}
nodes.forEach(node => {
if (!main_core.Type.isElementNode(node) || babelHelpers.classPrivateFieldLooseBase(this, _browsingNodes)[_browsingNodes].has(node)) {
return;
}
let input;
if (node.tagName === 'INPUT' && node.type === 'file') {
input = node; // Add already selected files
if (input.files && input.files.length) {
this.addFiles(input.files);
}
const acceptAttr = input.getAttribute('accept');
if (main_core.Type.isStringFilled(acceptAttr)) {
this.setAcceptedFileTypes(acceptAttr);
}
babelHelpers.classPrivateFieldLooseBase(this, _browsingNodes)[_browsingNodes].set(node, null);
} else {
input = document.createElement('input');
input.setAttribute('type', 'file');
const onBrowseClickHandler = babelHelpers.classPrivateFieldLooseBase(this, _handleBrowseClick)[_handleBrowseClick].bind(this, input, node);
babelHelpers.classPrivateFieldLooseBase(this, _browsingNodes)[_browsingNodes].set(node, onBrowseClickHandler);
main_core.Event.bind(node, 'click', onBrowseClickHandler);
}
if (this.isMultiple()) {
input.setAttribute('multiple', 'multiple');
}
if (main_core.Type.isArrayFilled(this.getAcceptedFileTypes())) {
input.setAttribute('accept', this.getAcceptedFileTypes().join(','));
}
main_core.Event.bind(input, 'change', babelHelpers.classPrivateFieldLooseBase(this, _onInputFileChangeHandler)[_onInputFileChangeHandler]);
});
}
unassignBrowse(nodes) {
nodes = main_core.Type.isElementNode(nodes) ? [nodes] : nodes;
if (!main_core.Type.isArray(nodes)) {
return;
}
nodes.forEach(node => {
if (babelHelpers.classPrivateFieldLooseBase(this, _browsingNodes)[_browsingNodes].has(node)) {
main_core.Event.unbind(node, 'click', babelHelpers.classPrivateFieldLooseBase(this, _browsingNodes)[_browsingNodes].get(node));
main_core.Event.unbind(node, 'change', babelHelpers.classPrivateFieldLooseBase(this, _onInputFileChangeHandler)[_onInputFileChangeHandler]);
babelHelpers.classPrivateFieldLooseBase(this, _browsingNodes)[_browsingNodes].delete(node);
}
});
}
unassignBrowseAll() {
Array.from(babelHelpers.classPrivateFieldLooseBase(this, _browsingNodes)[_browsingNodes].keys()).forEach(node => {
this.unassignBrowse(node);
});
}
assignDropzone(nodes) {
nodes = main_core.Type.isElementNode(nodes) ? [nodes] : nodes;
if (!main_core.Type.isArray(nodes)) {
return;
}
nodes.forEach(node => {
if (!main_core.Type.isElementNode(node) || babelHelpers.classPrivateFieldLooseBase(this, _dropNodes)[_dropNodes].has(node)) {
return;
}
main_core.Event.bind(node, 'dragover', babelHelpers.classPrivateFieldLooseBase(this, _preventDefault)[_preventDefault]);
main_core.Event.bind(node, 'dragenter', babelHelpers.classPrivateFieldLooseBase(this, _preventDefault)[_preventDefault]);
main_core.Event.bind(node, 'drop', babelHelpers.classPrivateFieldLooseBase(this, _onDropHandler)[_onDropHandler]);
babelHelpers.classPrivateFieldLooseBase(this, _dropNodes)[_dropNodes].add(node);
});
}
unassignDropzone(nodes) {
nodes = main_core.Type.isElementNode(nodes) ? [nodes] : nodes;
if (!main_core.Type.isArray(nodes)) {
return;
}
nodes.forEach(node => {
if (babelHelpers.classPrivateFieldLooseBase(this, _dropNodes)[_dropNodes].has(node)) {
main_core.Event.unbind(node, 'dragover', babelHelpers.classPrivateFieldLooseBase(this, _preventDefault)[_preventDefault]);
main_core.Event.unbind(node, 'dragenter', babelHelpers.classPrivateFieldLooseBase(this, _preventDefault)[_preventDefault]);
main_core.Event.unbind(node, 'drop', babelHelpers.classPrivateFieldLooseBase(this, _onDropHandler)[_onDropHandler]);
babelHelpers.classPrivateFieldLooseBase(this, _dropNodes)[_dropNodes].delete(node);
}
});
}
unassignDropzoneAll() {
Array.from(babelHelpers.classPrivateFieldLooseBase(this, _dropNodes)[_dropNodes]).forEach(node => {
this.unassignDropzone(node);
});
}
assignPaste(nodes) {
nodes = main_core.Type.isElementNode(nodes) ? [nodes] : nodes;
if (!main_core.Type.isArray(nodes)) {
return;
}
nodes.forEach(node => {
if (!main_core.Type.isElementNode(node) || babelHelpers.classPrivateFieldLooseBase(this, _pastingNodes)[_pastingNodes].has(node)) {
return;
}
main_core.Event.bind(node, 'paste', babelHelpers.classPrivateFieldLooseBase(this, _onPasteHandler)[_onPasteHandler]);
babelHelpers.classPrivateFieldLooseBase(this, _pastingNodes)[_pastingNodes].add(node);
});
}
unassignPaste(nodes) {
nodes = main_core.Type.isElementNode(nodes) ? [nodes] : nodes;
if (!main_core.Type.isArray(nodes)) {
return;
}
nodes.forEach(node => {
if (babelHelpers.classPrivateFieldLooseBase(this, _pastingNodes)[_pastingNodes].has(node)) {
main_core.Event.unbind(node, 'paste', babelHelpers.classPrivateFieldLooseBase(this, _onPasteHandler)[_onPasteHandler]);
babelHelpers.classPrivateFieldLooseBase(this, _pastingNodes)[_pastingNodes].delete(node);
}
});
}
unassignPasteAll() {
Array.from(babelHelpers.classPrivateFieldLooseBase(this, _pastingNodes)[_pastingNodes]).forEach(node => {
this.unassignPaste(node);
});
}
getHiddenFieldsContainer() {
let element = null;
if (main_core.Type.isStringFilled(babelHelpers.classPrivateFieldLooseBase(this, _hiddenFieldsContainer)[_hiddenFieldsContainer])) {
element = document.querySelector(babelHelpers.classPrivateFieldLooseBase(this, _hiddenFieldsContainer)[_hiddenFieldsContainer]);
if (!main_core.Type.isElementNode(element)) {
console.error(`Uploader: a hidden field container was not found (${babelHelpers.classPrivateFieldLooseBase(this, _hiddenFieldsContainer)[_hiddenFieldsContainer]}).`);
}
} else if (main_core.Type.isElementNode(babelHelpers.classPrivateFieldLooseBase(this, _hiddenFieldsContainer)[_hiddenFieldsContainer])) {
element = babelHelpers.classPrivateFieldLooseBase(this, _hiddenFieldsContainer)[_hiddenFieldsContainer];
}
return element;
}
setHiddenFieldsContainer(container) {
if (main_core.Type.isStringFilled(container) || main_core.Type.isElementNode(container) || main_core.Type.isNull(container)) {
babelHelpers.classPrivateFieldLooseBase(this, _hiddenFieldsContainer)[_hiddenFieldsContainer] = container;
}
}
getHiddenFieldName() {
return babelHelpers.classPrivateFieldLooseBase(this, _hiddenFieldName)[_hiddenFieldName];
}
setHiddenFieldName(name) {
if (main_core.Type.isStringFilled(name)) {
babelHelpers.classPrivateFieldLooseBase(this, _hiddenFieldName)[_hiddenFieldName] = name;
}
}
shouldAssignAsFile() {
return babelHelpers.classPrivateFieldLooseBase(this, _assignAsFile)[_assignAsFile];
}
setAssignAsFile(flag) {
if (main_core.Type.isBoolean(flag)) {
babelHelpers.classPrivateFieldLooseBase(this, _assignAsFile)[_assignAsFile] = flag;
}
}
getTotalSize() {
return babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].reduce((totalSize, file) => {
return totalSize + file.getSize();
}, 0);
}
shouldAutoUpload() {
return babelHelpers.classPrivateFieldLooseBase(this, _autoUpload)[_autoUpload];
}
setAutoUpload(flag) {
if (main_core.Type.isBoolean(flag)) {
babelHelpers.classPrivateFieldLooseBase(this, _autoUpload)[_autoUpload] = flag;
}
}
getMaxParallelUploads() {
return babelHelpers.classPrivateFieldLooseBase(this, _maxParallelUploads)[_maxParallelUploads];
}
setMaxParallelUploads(number) {
if (main_core.Type.isNumber(number) && number > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _maxParallelUploads)[_maxParallelUploads] = number;
}
}
getMaxParallelLoads() {
return babelHelpers.classPrivateFieldLooseBase(this, _maxParallelLoads)[_maxParallelLoads];
}
setMaxParallelLoads(number) {
if (main_core.Type.isNumber(number) && number > 0) {
babelHelpers.classPrivateFieldLooseBase(this, _maxParallelLoads)[_maxParallelLoads] = number;
}
}
getUploadingFileCount() {
return babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].filter(file => file.isUploading()).length;
}
getPendingFileCount() {
return babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].filter(file => file.isReadyToUpload()).length;
}
static getImageExtensions() {
return this.getGlobalOption('imageExtensions', ['.jpg', '.bmp', '.jpeg', '.jpe', '.gif', '.png', '.webp']);
}
setAcceptOnlyImages(flag) {
if (main_core.Type.isBoolean(flag)) {
this.acceptOnlyImages(flag);
}
}
acceptOnlyImages(flag = true) {
const imageExtensions = flag ? Uploader.getImageExtensions() : [];
this.setAcceptedFileTypes(imageExtensions);
babelHelpers.classPrivateFieldLooseBase(this, _acceptOnlyImages)[_acceptOnlyImages] = flag;
}
shouldAcceptOnlyImages() {
return babelHelpers.classPrivateFieldLooseBase(this, _acceptOnlyImages)[_acceptOnlyImages];
}
getAcceptedFileTypes() {
return babelHelpers.classPrivateFieldLooseBase(this, _acceptedFileTypes)[_acceptedFileTypes];
}
setAcceptedFileTypes(fileTypes) {
if (main_core.Type.isString(fileTypes)) {
fileTypes = fileTypes.split(',');
}
if (main_core.Type.isArray(fileTypes)) {
babelHelpers.classPrivateFieldLooseBase(this, _acceptedFileTypes)[_acceptedFileTypes] = [];
babelHelpers.classPrivateFieldLooseBase(this, _acceptOnlyImages)[_acceptOnlyImages] = false;
fileTypes.forEach(type => {
if (main_core.Type.isStringFilled(type)) {
babelHelpers.classPrivateFieldLooseBase(this, _acceptedFileTypes)[_acceptedFileTypes].push(type);
}
});
}
}
getIgnoredFileNames() {
return babelHelpers.classPrivateFieldLooseBase(this, _ignoredFileNames)[_ignoredFileNames];
}
setIgnoredFileNames(fileNames) {
if (main_core.Type.isArray(fileNames)) {
babelHelpers.classPrivateFieldLooseBase(this, _ignoredFileNames)[_ignoredFileNames] = [];
fileNames.forEach(fileName => {
if (main_core.Type.isStringFilled(fileName)) {
babelHelpers.classPrivateFieldLooseBase(this, _ignoredFileNames)[_ignoredFileNames].push(fileName.toLowerCase());
}
});
}
}
setMaxFileCount(maxFileCount) {
if (main_core.Type.isNumber(maxFileCount) && maxFileCount > 0 || maxFileCount === null) {
babelHelpers.classPrivateFieldLooseBase(this, _maxFileCount)[_maxFileCount] = maxFileCount;
}
}
getMaxFileCount() {
return babelHelpers.classPrivateFieldLooseBase(this, _maxFileCount)[_maxFileCount];
}
setAllowReplaceSingle(flag) {
if (main_core.Type.isBoolean(flag)) {
babelHelpers.classPrivateFieldLooseBase(this, _allowReplaceSingle)[_allowReplaceSingle] = flag;
}
}
shouldReplaceSingle() {
return babelHelpers.classPrivateFieldLooseBase(this, _allowReplaceSingle)[_allowReplaceSingle];
}
}
function _setLoadEvents2(file) {
file.subscribeFromOptions({
[FileEvent.LOAD_START]: () => {
this.emit(UploaderEvent.FILE_LOAD_START, {
file
});
},
[FileEvent.LOAD_PROGRESS]: event => {
const {
progress
} = event.getData();
this.emit(UploaderEvent.FILE_LOAD_PROGRESS, {
file,
progress
});
},
[FileEvent.LOAD_ERROR]: event => {
const {
error
} = event.getData();
this.emit(UploaderEvent.FILE_ERROR, {
file,
error
});
this.emit(UploaderEvent.FILE_ADD, {
file,
error
});
babelHelpers.classPrivateFieldLooseBase(this, _loadNext)[_loadNext]();
},
[FileEvent.LOAD_COMPLETE]: () => {
this.emit(UploaderEvent.FILE_ADD, {
file
});
this.emit(UploaderEvent.FILE_LOAD_COMPLETE, {
file
});
if (file.getOrigin() === FileOrigin.SERVER || !file.isUploadable()) {
this.emit(UploaderEvent.FILE_COMPLETE, {
file
});
babelHelpers.classPrivateFieldLooseBase(this, _setHiddenField)[_setHiddenField](file);
} else if (file.isUploadable() && this.shouldAutoUpload()) {
file.upload();
}
babelHelpers.classPrivateFieldLooseBase(this, _loadNext)[_loadNext]();
},
[FileEvent.PREPARE_FILE_ASYNC]: event => {
const file = event.getData().file;
return babelHelpers.classPrivateFieldLooseBase(this, _applyFilters)[_applyFilters](FilterType.VALIDATION, file).then(() => babelHelpers.classPrivateFieldLooseBase(this, _applyFilters)[_applyFilters](FilterType.PREPARATION, file));
}
});
}
function _setUploadEvents2(file) {
file.subscribeFromOptions({
[FileEvent.BEFORE_UPLOAD]: babelHelpers.classPrivateFieldLooseBase(this, _onBeforeUploadHandler)[_onBeforeUploadHandler],
[FileEvent.UPLOAD_START]: () => {
this.emit(UploaderEvent.FILE_UPLOAD_START, {
file
});
},
[FileEvent.UPLOAD_PROGRESS]: event => {
const {
progress
} = event.getData();
this.emit(UploaderEvent.FILE_UPLOAD_PROGRESS, {
file,
progress
});
},
[FileEvent.UPLOAD_ERROR]: event => {
const {
error
} = event.getData();
this.emit(UploaderEvent.FILE_ERROR, {
file,
error
});
babelHelpers.classPrivateFieldLooseBase(this, _uploadNext)[_uploadNext]();
},
[FileEvent.UPLOAD_COMPLETE]: () => {
this.emit(UploaderEvent.FILE_UPLOAD_COMPLETE, {
file
});
this.emit(UploaderEvent.FILE_COMPLETE, {
file
});
babelHelpers.classPrivateFieldLooseBase(this, _setHiddenField)[_setHiddenField](file);
babelHelpers.classPrivateFieldLooseBase(this, _uploadNext)[_uploadNext]();
}
});
}
function _setRemoveEvents2(file) {
file.subscribeOnce(FileEvent.REMOVE_ERROR, event => {
const {
error
} = event.getData();
this.emit(UploaderEvent.FILE_ERROR, {
file,
error
});
});
file.subscribeOnce(FileEvent.REMOVE_COMPLETE, () => {
babelHelpers.classPrivateFieldLooseBase(this, _removeFile)[_removeFile](file);
});
}
function _handleBeforeUpload2(event) {
if (this.getStatus() === UploaderStatus.STOPPED) {
event.preventDefault();
this.start();
} else {
if (this.getUploadingFileCount() >= this.getMaxParallelUploads()) {
event.preventDefault();
}
}
}
function _handleFileStatusChange2(event) {
const file = event.getTarget();
this.emit(UploaderEvent.FILE_STATUS_CHANGE, {
file
});
}
function _handleFileStateChange2(event) {
const file = event.getTarget();
const property = event.getData().property;
const value = event.getData().value;
this.emit(UploaderEvent.FILE_STATE_CHANGE, {
file,
property,
value
});
}
function _exceedsMaxFileCount2(fileList) {
const totalNewFiles = fileList.length;
const totalFiles = babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].length;
if (!this.isMultiple() && totalNewFiles > 1) {
return true;
}
let maxFileCount;
if (this.isMultiple()) {
maxFileCount = this.getMaxFileCount();
} else {
maxFileCount = this.shouldReplaceSingle() ? null : 1;
}
if (maxFileCount !== null && totalFiles + totalNewFiles > maxFileCount) {
const error = new UploaderError('MAX_FILE_COUNT_EXCEEDED', {
maxFileCount
});
this.emit(UploaderEvent.MAX_FILE_COUNT_EXCEEDED, {
error
});
this.emit(UploaderEvent.ERROR, {
error
});
return true;
}
return false;
}
function _applyFilters2(type, ...args) {
return new Promise((resolve, reject) => {
const filters = [...(babelHelpers.classPrivateFieldLooseBase(this, _filters)[_filters].get(type) || [])];
if (filters.length === 0) {
resolve();
return;
}
const firstFilter = filters.shift(); // chain filters
filters.reduce((current, next) => {
return current.then(() => next.apply(...args));
}, firstFilter.apply(...args)).then(result => resolve(result)).catch(error => reject(error));
});
}
function _removeFile2(file) {
const index = babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].findIndex(element => element === file);
if (index !== -1) {
babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].splice(index, 1);
}
file.unsubscribeAll();
this.emit(UploaderEvent.FILE_REMOVE, {
file
});
babelHelpers.classPrivateFieldLooseBase(this, _resetHiddenField)[_resetHiddenField](file);
}
function _handleBrowseClick2(input, node) {
const event = new main_core_events.BaseEvent({
data: {
input,
node
}
});
this.emit(UploaderEvent.BEFORE_BROWSE, event);
if (event.isDefaultPrevented()) {
return;
}
input.click();
}
function _handleInputFileChange2(event) {
const input = event.currentTarget;
this.addFiles(Array.from(input.files)); // reset file input
input.value = '';
}
function _handleDrop2(dragEvent) {
dragEvent.preventDefault();
const event = new main_core_events.BaseEvent({
data: {
dragEvent
}
});
this.emit(UploaderEvent.BEFORE_DROP, event);
if (event.isDefaultPrevented()) {
return;
}
getFilesFromDataTransfer(dragEvent.dataTransfer).then(files => {
this.addFiles(files);
});
}
function _preventDefault2(event) {
event.preventDefault();
}
function _handlePaste2(clipboardEvent) {
clipboardEvent.preventDefault();
const clipboardData = clipboardEvent.clipboardData;
if (!clipboardData) {
return;
}
const event = new main_core_events.BaseEvent({
data: {
clipboardEvent
}
});
this.emit(UploaderEvent.BEFORE_PASTE, event);
if (event.isDefaultPrevented()) {
return;
}
getFilesFromDataTransfer(clipboardData).then(files => {
this.addFiles(files);
});
}
function _uploadNext2() {
if (this.getStatus() !== UploaderStatus.STARTED) {
return;
}
const maxParallelUploads = this.getMaxParallelUploads();
const currentUploads = this.getUploadingFileCount();
const pendingFiles = babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].filter(file => file.isReadyToUpload());
const pendingUploads = pendingFiles.length;
if (currentUploads < maxParallelUploads) {
const limit = Math.min(maxParallelUploads - currentUploads, pendingFiles.length);
for (let i = 0; i < limit; i++) {
const pendingFile = pendingFiles[i];
pendingFile.upload();
}
} // All files are COMPLETE or FAILED
if (currentUploads === 0 && pendingUploads === 0) {
babelHelpers.classPrivateFieldLooseBase(this, _status$1)[_status$1] = UploaderStatus.STOPPED;
this.emit(UploaderEvent.UPLOAD_COMPLETE);
}
}
function _loadNext2() {
const maxParallelLoads = this.getMaxParallelLoads();
const currentLoads = babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].filter(file => file.isLoading()).length;
const pendingFiles = babelHelpers.classPrivateFieldLooseBase(this, _files)[_files].filter(file => {
return file.getStatus() === FileStatus.ADDED && file.getOrigin() === FileOrigin.CLIENT;
});
if (currentLoads < maxParallelLoads) {
const limit = Math.min(maxParallelLoads - currentLoads, pendingFiles.length);
for (let i = 0; i < limit; i++) {
const pendingFile = pendingFiles[i];
pendingFile.load();
}
}
}
function _setHiddenField2(file) {
const container = this.getHiddenFieldsContainer();
if (!container || babelHelpers.classPrivateFieldLooseBase(this, _hiddenFields)[_hiddenFields].has(file.getId())) {
return;
} // TODO: is it needed?
const isExistingServerFile = main_core.Type.isNumber(file.getServerId());
if (isExistingServerFile) {
return;
}
const assignAsFile = file.getOrigin() === FileOrigin.CLIENT && !file.isUploadable() && this.shouldAssignAsFile() && canAppendFileToForm();
const input = document.createElement('input');
input.type = assignAsFile ? 'file' : 'hidden';
input.name = this.getHiddenFieldName() + (this.isMultiple() ? '[]' : '');
if (assignAsFile) {
main_core.Dom.style(input, {
visibility: 'hidden',
left: 0,
top: 0,
width: 0,
height: 0,
position: 'absolute',
'pointer-events': 'none'
});
assignFileToInput(input, file.getBinary());
} else if (file.getServerId() !== null) {
input.value = file.getServerId();
}
main_core.Dom.append(input, container);
babelHelpers.classPrivateFieldLooseBase(this, _hiddenFields)[_hiddenFields].set(file.getId(), input);
babelHelpers.classPrivateFieldLooseBase(this, _syncInputPositions)[_syncInputPositions]();
}
function _resetHiddenField2(file) {
const input = babelHelpers.classPrivateFieldLooseBase(this, _hiddenFields)[_hiddenFields].get(file.getId());
if (input) {
main_core.Dom.remove(input);
babelHelpers.classPrivateFieldLooseBase(this, _hiddenFields)[_hiddenFields].delete(file.getId());
}
}
function _resetHiddenFields2() {
Array.from(babelHelpers.classPrivateFieldLooseBase(this, _hiddenFields)[_hiddenFields].values()).forEach(input => {
main_core.Dom.remove(input);
});
babelHelpers.classPrivateFieldLooseBase(this, _hiddenFields)[_hiddenFields] = [];
}
function _syncInputPositions2() {
const container = this.getHiddenFieldsContainer();
if (!container) {
return;
}
this.getFiles().forEach(file => {
const input = babelHelpers.classPrivateFieldLooseBase(this, _hiddenFields)[_hiddenFields].get(file.getId());
if (input) {
main_core.Dom.append(input, container);
}
});
}
/**
* @memberof BX.UI.Uploader
*/
var _uploader$1 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploader");
var _items = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("items");
var _uploaderError = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploaderError");
var _getItemsArray = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("getItemsArray");
var _getItem = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("getItem");
var _handleFileAdd = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleFileAdd");
var _handleFileRemove = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleFileRemove");
var _handleFileStateChange$1 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleFileStateChange");
var _handleError = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleError");
var _handleUploadStart = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleUploadStart");
var _handleUploadComplete = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("handleUploadComplete");
class VueUploaderAdapter extends main_core_events.EventEmitter {
constructor(uploaderOptions) {
super();
Object.defineProperty(this, _handleUploadComplete, {
value: _handleUploadComplete2
});
Object.defineProperty(this, _handleUploadStart, {
value: _handleUploadStart2
});
Object.defineProperty(this, _handleError, {
value: _handleError2
});
Object.defineProperty(this, _handleFileStateChange$1, {
value: _handleFileStateChange2$1
});
Object.defineProperty(this, _handleFileRemove, {
value: _handleFileRemove2
});
Object.defineProperty(this, _handleFileAdd, {
value: _handleFileAdd2
});
Object.defineProperty(this, _getItem, {
value: _getItem2
});
Object.defineProperty(this, _getItemsArray, {
value: _getItemsArray2
});
Object.defineProperty(this, _uploader$1, {
writable: true,
value: null
});
Object.defineProperty(this, _items, {
writable: true,
value: null
});
Object.defineProperty(this, _uploaderError, {
writable: true,
value: null
});
this.setEventNamespace('BX.UI.Uploader.Vue.Adapter');
babelHelpers.classPrivateFieldLooseBase(this, _items)[_items] = ui_vue3.ref([]);
babelHelpers.classPrivateFieldLooseBase(this, _uploaderError)[_uploaderError] = ui_vue3.shallowRef(null);
const options = main_core.Type.isPlainObject(uploaderOptions) ? Object.assign({}, uploaderOptions) : {};
const userEvents = options.events;
options.events = {
'File:onAddStart': babelHelpers.classPrivateFieldLooseBase(this, _handleFileAdd)[_handleFileAdd].bind(this),
'File:onRemove': babelHelpers.classPrivateFieldLooseBase(this, _handleFileRemove)[_handleFileRemove].bind(this),
'File:onStateChange': babelHelpers.classPrivateFieldLooseBase(this, _handleFileStateChange$1)[_handleFileStateChange$1].bind(this),
'onError': babelHelpers.classPrivateFieldLooseBase(this, _handleError)[_handleError].bind(this),
'onUploadStart': babelHelpers.classPrivateFieldLooseBase(this, _handleUploadStart)[_handleUploadStart].bind(this),
'onUploadComplete': babelHelpers.classPrivateFieldLooseBase(this, _handleUploadComplete)[_handleUploadComplete].bind(this)
};
babelHelpers.classPrivateFieldLooseBase(this, _uploader$1)[_uploader$1] = new ui_uploader_core.Uploader(options);
babelHelpers.classPrivateFieldLooseBase(this, _uploader$1)[_uploader$1].subscribeFromOptions(userEvents);
}
getUploader() {
return babelHelpers.classPrivateFieldLooseBase(this, _uploader$1)[_uploader$1];
}
getItems() {
return babelHelpers.classPrivateFieldLooseBase(this, _items)[_items];
}
getUploaderError() {
return babelHelpers.classPrivateFieldLooseBase(this, _uploaderError)[_uploaderError];
}
}
function _getItemsArray2() {
return babelHelpers.classPrivateFieldLooseBase(this, _items)[_items].value;
}
function _getItem2(id) {
return babelHelpers.classPrivateFieldLooseBase(this, _getItemsArray)[_getItemsArray]().find(item => item.id === id);
}
function _handleFileAdd2(event) {
const {
file
} = event.getData();
const item = file.getState();
babelHelpers.classPrivateFieldLooseBase(this, _getItemsArray)[_getItemsArray]().push(item);
this.emit('Item:onAdd', {
item
});
}
function _handleFileRemove2(event) {
const {
file
} = event.getData();
const position = babelHelpers.classPrivateFieldLooseBase(this, _getItemsArray)[_getItemsArray]().findIndex(fileInfo => fileInfo.id === file.getId());
if (position >= 0) {
const result = babelHelpers.classPrivateFieldLooseBase(this, _getItemsArray)[_getItemsArray]().splice(position, 1);
this.emit('Item:onRemove', {
item: result[0]
});
}
}
function _handleFileStateChange2$1(event) {
const {
file
} = event.getData();
const item = babelHelpers.classPrivateFieldLooseBase(this, _getItem)[_getItem](file.getId());
if (item) {
Object.assign(item, file.getState());
}
}
function _handleError2(event) {
const {
error
} = event.getData();
babelHelpers.classPrivateFieldLooseBase(this, _uploaderError)[_uploaderError].value = error.toJSON();
this.emit('Uploader:onError', event);
}
function _handleUploadStart2(event) {
this.emit('Uploader:onUploadStart', event);
}
function _handleUploadComplete2(event) {
this.emit('Uploader:onUploadComplete', event);
}
/**
* @memberof BX.UI.Uploader
*/
var _vueAdapter = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("vueAdapter");
var _uploaderOptions = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("uploaderOptions");
var _widgetOptions = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("widgetOptions");
var _vueApp = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("vueApp");
class VueUploaderWidget extends main_core_events.EventEmitter {
constructor(uploaderOptions, widgetOptions = {}) {
super();
Object.defineProperty(this, _vueAdapter, {
writable: true,
value: null
});
Object.defineProperty(this, _uploaderOptions, {
writable: true,
value: null
});
Object.defineProperty(this, _widgetOptions, {
writable: true,
value: {}
});
Object.defineProperty(this, _vueApp, {
writable: true,
value: null
});
this.setEventNamespace('BX.UI.Uploader.Vue.Widget');
babelHelpers.classPrivateFieldLooseBase(this, _uploaderOptions)[_uploaderOptions] = uploaderOptions;
babelHelpers.classPrivateFieldLooseBase(this, _widgetOptions)[_widgetOptions] = widgetOptions;
}
getRootComponent() {
return null;
}
getAdapter() {
if (babelHelpers.classPrivateFieldLooseBase(this, _vueAdapter)[_vueAdapter] === null) {
babelHelpers.classPrivateFieldLooseBase(this, _vueAdapter)[_vueAdapter] = new VueUploaderAdapter(babelHelpers.classPrivateFieldLooseBase(this, _uploaderOptions)[_uploaderOptions]);
}
return babelHelpers.classPrivateFieldLooseBase(this, _vueAdapter)[_vueAdapter];
}
getUploader() {
return this.getAdapter().getUploader();
}
getVueApp() {
if (babelHelpers.classPrivateFieldLooseBase(this, _vueApp)[_vueApp] !== null) {
return babelHelpers.classPrivateFieldLooseBase(this, _vueApp)[_vueApp];
}
babelHelpers.classPrivateFieldLooseBase(this, _vueApp)[_vueApp] = ui_vue3.BitrixVue.createApp(this.getRootComponent(), {
uploaderOptions: babelHelpers.classPrivateFieldLooseBase(this, _uploaderOptions)[_uploaderOptions],
widgetOptions: babelHelpers.classPrivateFieldLooseBase(this, _widgetOptions)[_widgetOptions],
uploaderAdapter: this.getAdapter()
});
return babelHelpers.classPrivateFieldLooseBase(this, _vueApp)[_vueApp];
}
renderTo(node) {
if (main_core.Type.isDomNode(node)) {
this.getVueApp().mount(node);
}
}
}
/**
* @memberof BX.UI.Uploader
*/
const VueUploaderComponent = {
name: 'VueUploaderComponent',
props: {
uploaderOptions: {
type: Object
},
widgetOptions: {
type: Object,
default: {}
},
uploaderAdapter: {
type: Object,
default: null
}
},
data: () => ({
items: [],
uploaderError: null
}),
provide() {
return {
uploader: this.uploader,
adapter: this.adapter,
widgetOptions: this.widgetOptions
};
},
beforeCreate() {
this.adapter = this.uploaderAdapter === null ? new VueUploaderAdapter(this.uploaderOptions) : this.uploaderAdapter;
this.uploader = this.adapter.getUploader();
},
created() {
this.items = this.adapter.getItems();
this.uploaderError = this.adapter.getUploaderError();
},
unmounted() {
this.uploader.destroy();
}
};
const isImage = blob => {
return /^image\/[a-z0-9.-]+$/i.test(blob.type);
};
const Marker$1 = {
JPEG: 0xffd8,
APP1: 0xffe1,
EXIF: 0x45786966,
TIFF: 0x4949,
Orientation: 0x0112,
Unknown: 0xff00
};
const getUint16 = (view, offset, little = false) => view.getUint16(offset, little);
const getUint32 = (view, offset, little = false) => view.getUint32(offset, little);
const getJpegOrientation = file => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e) {
const view = new DataView(e.target.result);
if (getUint16(view, 0) !== Marker$1.JPEG) {
resolve(-1);
return;
}
const length = view.byteLength;
let offset = 2;
while (offset < length) {
const marker = getUint16(view, offset);
offset += 2; // APP1 Marker
if (marker === Marker$1.APP1) {
if (getUint32(view, offset += 2) !== Marker$1.EXIF) {
// no EXIF
break;
}
const little = getUint16(view, offset += 6) === Marker$1.TIFF;
offset += getUint32(view, offset + 4, little);
const tags = getUint16(view, offset, little);
offset += 2;
for (let i = 0; i < tags; i++) {
// Found the orientation tag
if (getUint16(view, offset + i * 12, little) === Marker$1.Orientation) {
resolve(getUint16(view, offset + i * 12 + 8, little));
return;
}
}
} else if ((marker & Marker$1.Unknown) !== Marker$1.Unknown) {
break; // Invalid
} else {
offset += getUint16(view, offset);
}
} // Nothing found
resolve(-1);
};
reader.readAsArrayBuffer(file.slice(0, 64 * 1024));
});
};
const isJpeg = blob => {
return /^image\/jpeg$/i.test(blob.type);
};
var index = /*#__PURE__*/Object.freeze({
formatFileSize: formatFileSize,
getFileExtension: getFileExtension,
getFilenameWithoutExtension: getFilenameWithoutExtension,
getExtensionFromType: getExtensionFromType,
getJpegOrientation: getJpegOrientation,
getArrayBuffer: getArrayBuffer,
isDataUri: isDataUri,
isImage: isImage,
isResizableImage: isResizableImage,
isJpeg: isJpeg,
getImageSize: getImageSize,
resizeImage: resizeImage,
loadImage: loadImage,
isValidFileType: isValidFileType,
canAppendFileToForm: canAppendFileToForm,
assignFileToInput: assignFileToInput,
createFileFromBlob: createFileFromBlob,
createBlobFromDataUri: createBlobFromDataUri,
createUniqueId: createUniqueId,
createWorker: createWorker
});
exports.Uploader = Uploader;
exports.UploaderStatus = UploaderStatus;
exports.UploaderEvent = UploaderEvent;
exports.FileStatus = FileStatus;
exports.FileOrigin = FileOrigin;
exports.FileEvent = FileEvent;
exports.FilterType = FilterType;
exports.Helpers = index;
exports.UploaderError = UploaderError;
exports.VueUploaderAdapter = VueUploaderAdapter;
exports.VueUploaderWidget = VueUploaderWidget;
exports.VueUploaderComponent = VueUploaderComponent;
exports.Server = Server;
}((this.BX.UI.Uploader = this.BX.UI.Uploader || {}),BX.Event,BX.UI.Uploader,BX.Vue3,BX));
//# sourceMappingURL=ui.uploader.bundle.js.map