Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/main/core/core_uploader/ |
Upload File : |
(function (exports,main_core,main_core_events) { 'use strict'; function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; } function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } } function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, "get"); return _classApplyDescriptorGet(receiver, descriptor); } function _classCheckPrivateStaticFieldDescriptor(descriptor, action) { if (descriptor === undefined) { throw new TypeError("attempted to " + action + " private static field before its declaration"); } } function _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } } function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; } var Options = /*#__PURE__*/function () { function Options() { babelHelpers.classCallCheck(this, Options); } babelHelpers.createClass(Options, null, [{ key: "getEventName", value: function getEventName(eventName) { return [this.getEventNamespace()].concat(babelHelpers.toConsumableArray(eventName)).join(':'); } }, { key: "getEventNamespace", value: function getEventNamespace() { return 'BX:Main:Uploader:'; } }, { key: "calibratePostSize", value: function calibratePostSize(deltaTime, size) { if (deltaTime <= 0) { return; } if (deltaTime < this.defaultSettings['estimatedTimeForUploadFile']) { var sizes = [this.defaultSettings['currentPostSize'] * 2, this.defaultSettings["phpPostMaxSize"]]; if (size > 0) { sizes.push(Math.ceil(size * this.defaultSettings['estimatedTimeForUploadFile'] * 1000 / deltaTime)); } this.defaultSettings['currentPostSize'] = Math.min.apply(Math, sizes); } else { this.defaultSettings['currentPostSize'] = Math.max(Math.ceil(this.defaultSettings['currentPostSize'] / 2), this.defaultSettings['phpPostMinSize']); } this.defaultSettings['currentPostSize'] = Math.max(this.defaultSettings['currentPostSize'], this.defaultSettings['phpPostMinSize']); } }, { key: "getUploadLimits", value: function getUploadLimits(key) { if (!this.defaultSettings) { this.defaultSettings = { currentPostSize: 5.5 * 1024 * 1024, phpPostMinSize: 5.5 * 1024 * 1024, // Bytes phpUploadMaxFilesize: Math.min(/^d+$/.test(main_core.Loc.getMessage('phpUploadMaxFilesize')) ? main_core.Loc.getMessage('phpUploadMaxFilesize') : 5 * 1024 * 1024, 5 * 1024 * 1024), // Bytes 5MB because of Cloud phpMaxFileUploads: Math.max(/^d+$/.test(main_core.Loc.getMessage('phpMaxFileUploads')) ? main_core.Loc.getMessage('phpMaxFileUploads') : 20, 20), phpPostMaxSize: /^d+$/.test(main_core.Loc.getMessage('phpPostMaxSize')) ? main_core.Loc.getMessage('phpPostMaxSize') : 11 * 1024 * 1024, // Bytes estimatedTimeForUploadFile: 10 * 60, // in sec maxSize: this.getMaxSize() }; } if (key) { return this.defaultSettings[key]; } return this.defaultSettings; } }, { key: "getFileTypes", value: function getFileTypes() { return ['A', //'A'll files 'I', //'I'mages 'F' //'F'iles with selected extensions ]; } }, { key: "getImageExtensions", value: function getImageExtensions() { return ["jpg", "bmp", "jpeg", "jpe", "gif", "png", "webp"]; } }, { key: "getMaxSize", value: function getMaxSize() { if (_classStaticPrivateFieldSpecGet(this, Options, _quota) !== null && !_classStaticPrivateFieldSpecGet(this, Options, _quota)) { if (/^\d+$/.test(main_core.Loc.getMessage("bxQuota"))) { _classStaticPrivateFieldSpecSet(this, Options, _quota, parseInt(main_core.Loc.getMessage("bxQuota"))); } else { _classStaticPrivateFieldSpecSet(this, Options, _quota, null); } } return _classStaticPrivateFieldSpecGet(this, Options, _quota); } }, { key: "decrementMaxSize", value: function decrementMaxSize(size) { if (this.getMaxSize() !== null) { _classStaticPrivateFieldSpecSet(this, Options, _quota, _classStaticPrivateFieldSpecGet(this, Options, _quota) - size); } return _classStaticPrivateFieldSpecGet(this, Options, _quota); } }, { key: "getMaxTimeToUploading", value: function getMaxTimeToUploading() { return 900; } }, { key: "getVersion", value: function getVersion() { return '1'; } }]); return Options; }(); babelHelpers.defineProperty(Options, "defaultSettings", null); var _quota = { writable: true, value: void 0 }; babelHelpers.defineProperty(Options, "uploadStatus", { ready: 'upload is ready', preparing: 'upload is not started, but preparing', inProgress: 'upload is in active streaming', done: 'upload is in successfully done', error: 'upload is in finished with errors', stopped: 'PAUSE' }); babelHelpers.defineProperty(Options, "fileStatus", { ready: 'fileIsReady', removed: 'fileIsRemoved', restored: 'fileIsRestored', errored: 'fileIsBad' }); var DropZone = /*#__PURE__*/function () { function DropZone(dropZoneNode) { babelHelpers.classCallCheck(this, DropZone); if (main_core.Type.isStringFilled(dropZoneNode)) { dropZoneNode = document.getElementById(dropZoneNode); } if (main_core.Type.isDomNode(dropZoneNode) && BX.DD && BX.ajax.FormData.isSupported()) { this.initialize(dropZoneNode); } } babelHelpers.createClass(DropZone, [{ key: "initialize", value: function initialize(dropZoneNode) { var _this = this; this.dndObject = new BX.DD.dropFiles(dropZoneNode); if (!this.dndObject || !this.dndObject.supported()) { return; } var handlers = { dropFiles: function dropFiles(_ref) { var _ref$compatData = babelHelpers.slicedToArray(_ref.compatData, 2), files = _ref$compatData[0], e = _ref$compatData[1]; if (e && e["dataTransfer"] && e["dataTransfer"]["items"] && e["dataTransfer"]["items"].length > 0) { var replaceFileArray = false; var fileCopies = []; var item; for (var i = 0; i < e["dataTransfer"]["items"].length; i++) { item = e["dataTransfer"]["items"][i]; if (item["webkitGetAsEntry"] && item["getAsFile"]) { replaceFileArray = true; var entry = item["webkitGetAsEntry"](); if (entry && entry.isFile) { fileCopies.push(item["getAsFile"]()); } } } if (replaceFileArray) files = fileCopies; } main_core_events.EventEmitter.emit(_this, Options.getEventName('caught'), { files: files }); }, dragEnter: function dragEnter(_ref2) { var _ref2$compatData = babelHelpers.slicedToArray(_ref2.compatData, 1), e = _ref2$compatData[0]; var isFileTransfer = false; if (e && e["dataTransfer"] && e["dataTransfer"]["types"]) { for (var i = 0; i < e["dataTransfer"]["types"].length; i++) { if (e["dataTransfer"]["types"][i] === "Files") { isFileTransfer = true; break; } } } if (isFileTransfer) { _this.dndObject.DIV.classList.add('bxu-file-input-over'); BX.onCustomEvent(_this, 'dragEnter', [e]); // compatibility event } }, dragLeave: function dragLeave(_ref3) { var _ref3$compatData = babelHelpers.slicedToArray(_ref3.compatData, 1), e = _ref3$compatData[0]; _this.dndObject.DIV.classList.remove('bxu-file-input-over'); BX.onCustomEvent(_this, 'dragLeave', [e]); // compatibility event } }; main_core_events.EventEmitter.subscribe(this.dndObject, 'dropFiles', handlers.dropFiles); main_core_events.EventEmitter.subscribe(this.dndObject, 'dragEnter', handlers.dragEnter); main_core_events.EventEmitter.subscribe(this.dndObject, 'dragLeave', handlers.dragLeave); } }, { key: "destroy", value: function destroy() { main_core_events.EventEmitter.unsubscribeAll(this.dndObject); delete this.dndObject.DIV; delete this.dndObject; } }]); return DropZone; }(); var buildAjaxPromiseToRestoreCsrf = function buildAjaxPromiseToRestoreCsrf(config, withoutRestoringCsrf) { withoutRestoringCsrf = withoutRestoringCsrf || false; var originalConfig = Object.assign({}, config); var request = null; config.onrequeststart = function (xhr) { request = xhr; }; var promise = BX.ajax.promise(config); return promise.then(function (response) { if (!withoutRestoringCsrf && main_core.Type.isPlainObject(response) && response['errors']) { var csrfProblem = false; response.errors.forEach(function (error) { if (error.code === 'invalid_csrf' && error.customData.csrf) { BX.message({ 'bitrix_sessid': error.customData.csrf }); originalConfig.headers = originalConfig.headers || []; originalConfig.headers = originalConfig.headers.filter(function (header) { return header && header.name !== 'X-Bitrix-Csrf-Token'; }); originalConfig.headers.push({ name: 'X-Bitrix-Csrf-Token', value: BX.bitrix_sessid() }); csrfProblem = true; } }); if (csrfProblem) { return buildAjaxPromiseToRestoreCsrf(originalConfig, true); } } return response; }).then(function (response) { var assetsLoaded = new BX.Promise(); assetsLoaded.fulfill(response); return assetsLoaded; }).catch(function (_ref) { var reason = _ref.reason, data = _ref.data; if (reason === 'status' && data && (String(data).indexOf('503') >= 0 || String(data).indexOf('504') >= 0)) { originalConfig['50xCounter'] = (originalConfig['50xCounter'] || 0) + 1; if (originalConfig['50xCounter'] <= 2) { var headers = request.getAllResponseHeaders().trim().split(/[\r\n]+/); var headerMap = {}; headers.forEach(function (line) { var parts = line.split(': '); var header = parts.shift().toLowerCase(); headerMap[header] = parts.join(': '); }); var timeoutSec = null; if (headerMap['retry-after'] && /\d+/.test(headerMap['retry-after'])) { timeoutSec = parseInt(headerMap['retry-after']); } var p = new BX.Promise(); setTimeout(function () { p.fulfill(); }, (timeoutSec || 20) * 1000); return p.then(function () { return buildAjaxPromiseToRestoreCsrf(originalConfig); }); } } var ajaxReject = new BX.Promise(); if (main_core.Type.isPlainObject(data) && data.status && data.hasOwnProperty('data')) { ajaxReject.reject(data); } else { ajaxReject.reject({ status: 'error', data: { ajaxRejectData: data }, errors: [{ code: 'NETWORK_ERROR', message: 'Network error' }] }); } return ajaxReject; }); }; var Stream = /*#__PURE__*/function (_EventEmitter) { babelHelpers.inherits(Stream, _EventEmitter); function Stream() { var _this; babelHelpers.classCallCheck(this, Stream); _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Stream).call(this)); _this.setEventNamespace(Options.getEventNamespace()); _this.onprogress = _this.onprogress.bind(babelHelpers.assertThisInitialized(_this)); _this.onprogressupload = _this.onprogressupload.bind(babelHelpers.assertThisInitialized(_this)); return _this; } babelHelpers.createClass(Stream, [{ key: "send", value: function send(url, formData) { var _this2 = this; this.deltaTime = -1 * new Date().getTime(); this.totalSize = null; buildAjaxPromiseToRestoreCsrf({ method: 'POST', dataType: 'json', url: url, data: formData, timeout: Options.getMaxTimeToUploading(), preparePost: false, headers: [{ name: 'X-Bitrix-Csrf-Token', value: BX.bitrix_sessid() }, { name: 'X-Bitrix-Site-Id', value: BX.message.SITE_ID || '' }], onprogress: this.onprogress, onprogressupload: this.onprogressupload }).then(function (response) { _this2.done({ status: 'success', data: response }); }).catch(function (_ref2) { var errors = _ref2.errors, data = _ref2.data; _this2.done({ status: 'failed', errors: errors.map(function (_ref3) { var code = _ref3.code, message = _ref3.message; return message; }), data: data }); }).catch(function (response) { _this2.done({ status: 'failed', errors: ['Unexpected server response.'], data: response }); }); } }, { key: "onprogress", value: function onprogress(e) {} }, { key: "onprogressupload", value: function onprogressupload(e) { var procent = 5; if (babelHelpers.typeof(e) == "object" && e.lengthComputable) { procent = e.loaded * 100 / (e["total"] || e["totalSize"]); this.totalSize = e["total"] || e["totalSize"]; } else if (e > procent) procent = e; procent = procent > 5 ? procent : 5; this.emit('progress', procent); } }, { key: "done", value: function done(response) { this.deltaTime += new Date().getTime(); Options.calibratePostSize(this.deltaTime, this.totalSize); this.emit('done', response); } }, { key: "destroy", value: function destroy() { console.log('Clear all from stream'); } }]); return Stream; }(main_core_events.EventEmitter); function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); } function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } } var _currentFileToUpload = /*#__PURE__*/new WeakMap(); var PackageFile = /*#__PURE__*/function (_EventEmitter) { babelHelpers.inherits(PackageFile, _EventEmitter); //null|ready //null|inprogress|done|errored function PackageFile(item, pack) { var _this; babelHelpers.classCallCheck(this, PackageFile); _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(PackageFile).call(this)); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "isReadyToPack", true); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "packStatus", null); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "packPercent", 0); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "uploadStatus", null); _classPrivateFieldInitSpec(babelHelpers.assertThisInitialized(_this), _currentFileToUpload, { writable: true, value: null }); _this.setEventNamespace(Options.getEventNamespace()); _this.item = item; // item with a node _this.id = item.getId(); _this.name = item.name; _this.fileStatus = Options.fileStatus.ready; // ready|remove|restore _this.isReadyToPack = item.preparationStatus === _this.constructor.preparationStatusIsDone; _this.copiesCount = item.getThumbs("getCount") + 1; main_core_events.EventEmitter.subscribeOnce(item, 'onFileIsDeleted', function () { _this.fileStatus = Options.fileStatus.removed; }); if (!_this.isReadyToPack) { main_core_events.EventEmitter.subscribeOnce(item, 'onFileIsPrepared', function () { _this.isReadyToPack = true; _this.emit('onReady'); }); main_core_events.EventEmitter.emit(item, 'onFileHasToBePrepared', new main_core_events.BaseEvent({ compatData: [item.getId(), item] })); } return _this; } babelHelpers.createClass(PackageFile, [{ key: "isReady", value: function isReady() { return this.isReadyToPack; } }, { key: "isRemoved", value: function isRemoved() { return this.fileStatus === Options.fileStatus.removed; } }, { key: "isPacked", value: function isPacked() { return this.packStatus === Options.uploadStatus.done; } }, { key: "getId", value: function getId() { return this.id; } }, { key: "markAsPacked", value: function markAsPacked(percentToIncrement) { if (percentToIncrement === true) { this.packStatus = Options.uploadStatus.done; this.packPercent = 100; } else { this.packPercent += percentToIncrement / this.copiesCount; this.packPercent = this.packPercent > 100 ? 100 : this.packPercent; } } }, { key: "packFile", value: function packFile() { var result = { error: false, done: true, data: null }; if (this.isRemoved()) { result.data = { removed: 'Y', name: this.name }; this.markAsPacked(true); } if (this.isPacked()) { return result; } var currentBlob; var copyName = 'default'; if (this.packStatus === null) { result.data = this.item.getProps() || { name: this.name }; if (this.item['restored']) { result.data['restored'] = this.item['restored']; delete this.item['restored']; } this.packStatus = Options.uploadStatus.inProgress; currentBlob = this.item["file"]; } else if (babelHelpers.classPrivateFieldGet(this, _currentFileToUpload) instanceof Blob) { currentBlob = babelHelpers.classPrivateFieldGet(this, _currentFileToUpload); babelHelpers.classPrivateFieldSet(this, _currentFileToUpload, null); } else { currentBlob = this.item.getThumbs(null); if (currentBlob === null) { this.markAsPacked(true); return result; } copyName = currentBlob['thumb']; } var packingPercent = 100; if (currentBlob instanceof Blob) // Regular behaviour { var blob = BX.UploaderUtils.getFilePart(currentBlob, Options.getUploadLimits('phpUploadMaxFilesize')); if (blob && blob !== currentBlob) { if (blob.packages - blob.package > 1) { babelHelpers.classPrivateFieldSet(this, _currentFileToUpload, currentBlob); } packingPercent = blob.size / currentBlob.size * 100; copyName = [copyName, '.ch', blob.package, '.', (blob.start > 0 ? blob.start : "0") + '.chs' + blob.packages].join(''); blob.name = copyName; } currentBlob = blob; } if (currentBlob) { result.data = result.data || { name: this.name }; if (currentBlob instanceof Blob) { result.data[copyName] = currentBlob; } else { result.data['files'] = result.data['files'] || {}; result.data['files'][copyName] = currentBlob; } } if (result.data) { result.done = false; this.markAsPacked(packingPercent); } else { this.markAsPacked(true); } return result; } }, { key: "parseResponse", value: function parseResponse(_ref) {// console.log('parseResponse: ', this.getId(), file); var file = _ref.file, hash = _ref.hash, status = _ref.status; } }, { key: "size", get: function get() { return this.item ? this.item.size || 0 : 0; } }]); return PackageFile; }(main_core_events.EventEmitter); babelHelpers.defineProperty(PackageFile, "preparationStatusIsDone", 4); var getFormDataSize = function getFormDataSize(formData) { var entries = formData.entries(); var entry, filesCount = 0, formSize = 0; while ((entry = entries.next()) && entry.done === false) { var _entry$value = babelHelpers.slicedToArray(entry.value, 2), name = _entry$value[0], value = _entry$value[1]; if (value instanceof Blob) { filesCount++; formSize += value.size; } else { formSize += value.toString().length; } formSize += name.toString().length; } return [formSize, filesCount]; }; var convertFormDataToObject = function convertFormDataToObject(formData) { var entries = formData.entries(); var entry; var data = {}; while ((entry = entries.next()) && entry.done === false) { var _entry$value2 = babelHelpers.slicedToArray(entry.value, 2), name = _entry$value2[0], value = _entry$value2[1]; if (name.indexOf('[') <= 0) { data[name] = value; } else { (function () { var names = [name.substring(0, name.indexOf('['))]; name.replace(/\[(.*?)\]/gi, function (n, nn) { names.push(nn.length > 0 ? nn : ''); }); var n = void 0; var pointer = data; while (n = names.shift()) { if (n === '') { pointer.push(value); break; } else if (names.length <= 0) { pointer[n] = value; break; } else if (names[0] === '') { pointer[n] = pointer[n] || []; pointer = pointer[n]; } else { pointer[n] = pointer[n] || {}; pointer = pointer[n]; } } })(); } } return data; }; var copyFormToForm = function copyFormToForm(fromData1, formData2) { var entries = fromData1.entries(); var entry; while ((entry = entries.next()) && entry.done === false) { var _entry$value3 = babelHelpers.slicedToArray(entry.value, 2), name = _entry$value3[0], value = _entry$value3[1]; if (value instanceof Blob) { formData2.append(name, value, value.name); } else { formData2.append(name, value); } } }; var appendToForm = function appendToForm(formData, ob, prefix) { for (var ii in ob) { if (ob.hasOwnProperty(ii)) { var name = (prefix ? prefix + '[#name#]' : '#name#').replace('#name#', ii); if (main_core.Type.isPlainObject(ob[ii])) { appendToForm(formData, ob[ii], name); } else { if (ob[ii] instanceof Blob) { formData.append(name, ob[ii], ob[ii]['name'] || ii); } else { formData.append(name, ob[ii]); } } } } }; function _classPrivateFieldInitSpec$1(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); } function _checkPrivateRedeclaration$1(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } } var _formDataFilesCount = /*#__PURE__*/new WeakMap(); var _formDataSize = /*#__PURE__*/new WeakMap(); var Package = /*#__PURE__*/function (_EventEmitter) { babelHelpers.inherits(Package, _EventEmitter); function Package(_ref) { var _this; var id = _ref.id, formData = _ref.formData, files = _ref.files, uploadFileUrl = _ref.uploadFileUrl, uploadInputName = _ref.uploadInputName; babelHelpers.classCallCheck(this, Package); _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Package).call(this)); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "length", 0); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "filesVirgin", new Set()); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "filesInprogress", new Set()); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "files", new Map()); _classPrivateFieldInitSpec$1(babelHelpers.assertThisInitialized(_this), _formDataFilesCount, { writable: true, value: 0 }); _classPrivateFieldInitSpec$1(babelHelpers.assertThisInitialized(_this), _formDataSize, { writable: true, value: 0 }); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "makeAPackTimeout", 0); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "uploadStatus", Options.uploadStatus.ready); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "errors", []); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "response", { status: 'start' }); _this.setEventNamespace(Options.getEventNamespace()); _this.id = id; _this.formData = formData; _this.uploadFileUrl = uploadFileUrl; _this.uploadInputName = uploadInputName; _this.initFiles(files); console.log('2. Package is created with ', _this.filesVirgin.size, ' files.'); _this.doneStreaming = _this.doneStreaming.bind(babelHelpers.assertThisInitialized(_this)); _this.progressStreaming = _this.progressStreaming.bind(babelHelpers.assertThisInitialized(_this)); return _this; } babelHelpers.createClass(Package, [{ key: "getId", value: function getId() { return this.id; } }, { key: "initFiles", value: function initFiles(files) { var _this2 = this; files.forEach(function (fileItem) { var uploadFile = new PackageFile(fileItem); _this2.filesVirgin.add(uploadFile.getId()); _this2.files.set(uploadFile.getId(), uploadFile); }); } }, { key: "prepare", value: function prepare() { var _getFormDataSize = getFormDataSize(this.formData), _getFormDataSize2 = babelHelpers.slicedToArray(_getFormDataSize, 2), formSize = _getFormDataSize2[0], filesCount = _getFormDataSize2[1]; console.log('2.1 Prepare form with files: ', filesCount, ' and formSize: ', parseInt(formSize), 'B'); if (Options.getUploadLimits('phpMaxFileUploads') <= filesCount) { this.error('Too many files in your form. '); return false; } if (Options.getUploadLimits('phpPostMaxSize') - formSize < Options.getUploadLimits('phpPostMinSize')) { this.error('Too much data in your form. '); return false; } var packSize = 0; this.files.forEach(function (file) { packSize += file.size; }); if (Options.getMaxSize() !== null && Options.getMaxSize() < packSize) { this.error('There is not enough space on your server.'); return false; } Options.decrementMaxSize(packSize); babelHelpers.classPrivateFieldSet(this, _formDataSize, formSize); babelHelpers.classPrivateFieldSet(this, _formDataFilesCount, filesCount); return true; } }, { key: "run", value: function run(stream) { if (this.uploadStatus !== Options.uploadStatus.ready) { return; } console.log('4. Package is running with a stream: ', stream); this.uploadStatus = Options.uploadStatus.preparing; return this.startStreaming(stream); } }, { key: "bindStream", value: function bindStream(stream) { if (stream === this.stream) { return; } this.stream = stream; stream.subscribe('done', this.doneStreaming); stream.subscribe('progress', this.progressStreaming); } }, { key: "unbindStream", value: function unbindStream(stream) { if (stream || this.stream) { (stream || this.stream).unsubscribe('done', this.doneStreaming); (stream || this.stream).unsubscribe('progress', this.progressStreaming); if (stream === this.stream) { delete this.stream; } } } }, { key: "makeAPack", value: function makeAPack(formSize, filesCount, formData) { var _this3 = this; while (formSize - Options.getUploadLimits('phpUploadMaxFilesize') > 0 && filesCount > 0) { if (this.filesVirgin.size <= 0) { break; } var entry = this.filesVirgin.entries().next(); if (entry.done === true) { break; } /*@var uploadItem: PackageFile */ var _entry$value = babelHelpers.slicedToArray(entry.value, 1), uploadItemId = _entry$value[0]; var uploadItem = this.files.get(uploadItemId); if (!uploadItem.isReady()) { return uploadItem.subscribeOnce('onReady', function () { _this3.makeAPack(formSize, filesCount, formData); }); } var result = uploadItem.packFile(); if (result.data) { var name = "".concat(this.uploadInputName, "[").concat(uploadItem.getId(), "]"); var tmpFormData = new FormData(); appendToForm(tmpFormData, result.data, name); var _getFormDataSize3 = getFormDataSize(tmpFormData), _getFormDataSize4 = babelHelpers.slicedToArray(_getFormDataSize3, 2), tmpFormSize = _getFormDataSize4[0], tmpFilesCount = _getFormDataSize4[1]; copyFormToForm(tmpFormData, formData); formSize -= tmpFormSize; filesCount -= tmpFilesCount; this.filesInprogress.add(uploadItemId); } if (result.done === true) { this.filesVirgin.delete(uploadItemId); } } return this.emit('onPackIsReady', formData); } }, { key: "startStreaming", value: function startStreaming(stream) { this.bindStream(stream); this.doStreaming(stream); } }, { key: "doStreaming", value: function doStreaming(stream) { var _this4 = this; this.subscribeOnce('onPackIsReady', function (_ref2) { var data = _ref2.data; console.log('onPackIsReady: ', data); console.groupEnd('Make a pack.'); clearTimeout(_this4.makeAPackTimeout); _this4.makeAPackTimeout = 0; if (data instanceof FormData) { var firstValue = data.entries().next(); if (firstValue.done === true && !firstValue.value) { return _this4.checkAndDone(stream); } copyFormToForm(_this4.formData, data); console.log('4.1. Start streaming'); return stream.send(_this4.uploadFileUrl, data); } _this4.error('Package: error in packing'); }); var formSize = Math.min(Options.getUploadLimits('currentPostSize'), Options.getUploadLimits('phpPostMaxSize') - babelHelpers.classPrivateFieldGet(this, _formDataSize)); var filesCount = Options.getUploadLimits('phpMaxFileUploads') - babelHelpers.classPrivateFieldGet(this, _formDataFilesCount); var fromData = new FormData(); console.group('Make a pack.'); this.makeAPack(formSize, filesCount, fromData); this.makeAPackTimeout = setTimeout(function () { _this4.emit('onPackIsReady', null); }, Options.getUploadLimits('estimatedTimeForUploadFile') * 1000); } }, { key: "doneStreaming", value: function doneStreaming(_ref3) { var stream = _ref3.target, _ref3$data = _ref3.data, status = _ref3$data.status, data = _ref3$data.data, errors = _ref3$data.errors; console.log('4.2. Done streaming'); if (status === 'success') { this.parseResponse(data); if (this.errors.length <= 0) { this.doStreaming(stream); } } else { this.error(errors.join('. ')); } } }, { key: "progressStreaming", value: function progressStreaming(_ref4) { var _this5 = this; var percent = _ref4.data; this.filesInprogress.forEach(function (itemId) { var item = _this5.files.get(itemId); var currentPercent = percent * (item.packPercent || 0); if (!item['previousPackPercent']) { item['previousPackPercent'] = currentPercent; } _this5.emit('fileIsInProgress', { itemId: itemId, item: item.item, percent: Math.ceil(Math.max(item['previousPackPercent'], currentPercent) / 100) }); item['previousPackPercent'] = currentPercent; }); } }, { key: "parseResponse", value: function parseResponse(data) { var _this6 = this; var merge = function merge(ar1, ar2) { for (var jj in ar2) { if (ar2.hasOwnProperty(jj)) { ar1[jj] = main_core.Type.isPlainObject(ar2[jj]) && main_core.Type.isPlainObject(ar1[jj]) ? merge(ar1[jj], ar2[jj]) : ar2[jj]; } } return ar1; }; this.response = merge(this.response, data); if (data.status === 'error') { this.error('Error in a uploading'); } else if (!data['files']) { this.error('Unexpected server response.'); } else { this.filesInprogress.forEach(function (itemId) { var fileResponse = data['files'][itemId] || { status: 'error', errors: ['File data is not found'] }; if (fileResponse.status === 'error' || fileResponse.status === 'uploaded') { _this6.filesVirgin.delete(itemId); _this6.emit(fileResponse.status === 'error' ? 'fileIsErrored' : 'fileIsUploaded', { itemId: itemId, item: _this6.files.get(itemId).item, response: fileResponse }); } _this6.files.get(itemId).parseResponse(fileResponse); }); this.filesInprogress.clear(); } } }, { key: "checkAndDone", value: function checkAndDone(stream) { console.log('5. Form has been sent.'); if (this.response['status'] === 'done') { this.done(stream); } else if (this.response['status'] === 'start') { this.error('Error with starting package.'); } else if (this.response['status'] !== 'continue') { this.error('Unknown response'); } } }, { key: "done", value: function done(stream) { console.log('5.1 Release the stream'); this.unbindStream(stream); this.emit('done', { status: this.errors.length <= 0 ? 'success' : 'failed' }); } }, { key: "error", value: function error(errorText) { var _this7 = this; var handler = function handler(itemId) { _this7.emit('fileIsErrored', { itemId: itemId, item: _this7.files.get(itemId).item, response: { error: errorText, status: 'failed' }, serverResponse: Object.assign({}, _this7.response) }); }; this.filesVirgin.forEach(handler); this.filesVirgin.clear(); this.filesInprogress.forEach(handler); this.filesInprogress.clear(); this.errors.push(errorText); console.log('5. Form has been sent with errors: ', this.errors); this.done(this.stream); } }, { key: "getServerResponse", value: function getServerResponse() { return this.response; } }, { key: "filesCount", get: function get() { return this.filesVirgin.size + this.filesInprogress.size; } }, { key: "data", get: function get() { return convertFormDataToObject(this.formData); } }]); return Package; }(main_core_events.EventEmitter); function _classStaticPrivateMethodGet(receiver, classConstructor, method) { _classCheckPrivateStaticAccess$1(receiver, classConstructor); return method; } function _classStaticPrivateFieldSpecGet$1(receiver, classConstructor, descriptor) { _classCheckPrivateStaticAccess$1(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor$1(descriptor, "get"); return _classApplyDescriptorGet$1(receiver, descriptor); } function _classCheckPrivateStaticFieldDescriptor$1(descriptor, action) { if (descriptor === undefined) { throw new TypeError("attempted to " + action + " private static field before its declaration"); } } function _classCheckPrivateStaticAccess$1(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } } function _classApplyDescriptorGet$1(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; } var Streams = /*#__PURE__*/function (_EventEmitter) { babelHelpers.inherits(Streams, _EventEmitter); function Streams() { babelHelpers.classCallCheck(this, Streams); return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Streams).apply(this, arguments)); } babelHelpers.createClass(Streams, null, [{ key: "addPackage", value: function addPackage(pack) { console.log('3. Add to a stream queue.'); if (this.maxInstances > 0 && _classStaticPrivateFieldSpecGet$1(this, Streams, _instance).size > this.maxInstances) { _classStaticPrivateFieldSpecGet$1(this, Streams, _packages).set(pack); } else { _classStaticPrivateFieldSpecGet$1(this, Streams, _packages).delete(pack); _classStaticPrivateMethodGet(this, Streams, _runPackage).call(this, pack); } if (!window[_classStaticPrivateFieldSpecGet$1(this, Streams, _hiddenTag)]) { window[_classStaticPrivateFieldSpecGet$1(this, Streams, _hiddenTag)] = _classStaticPrivateMethodGet(this, Streams, _catchWindow).bind(this); main_core.Event.bind(window, 'beforeunload', window[_classStaticPrivateFieldSpecGet$1(this, Streams, _hiddenTag)]); } } }]); return Streams; }(main_core_events.EventEmitter); function _catchWindow(event) { if (_classStaticPrivateFieldSpecGet$1(this, Streams, _packages).size > 0 || _classStaticPrivateFieldSpecGet$1(this, Streams, _instance).size > 0) { var confirmationMessage = main_core.Loc.getMessage('UPLOADER_UPLOADING_ONBEFOREUNLOAD'); (event || window.event).returnValue = confirmationMessage; return confirmationMessage; } } function _runPackage(pack) { var _this = this; var stream = new Stream(); _classStaticPrivateFieldSpecGet$1(this, Streams, _instance).set(stream); console.log('3.1. Run package in a stream.'); pack.subscribeOnce('done', function () { console.log('6. Package is done so release the stream.'); _classStaticPrivateFieldSpecGet$1(_this, Streams, _instance).delete(stream); stream.destroy(); if (_classStaticPrivateFieldSpecGet$1(_this, Streams, _packages).size > 0) { var _classStaticPrivateFi = babelHelpers.slicedToArray(_classStaticPrivateFieldSpecGet$1(_this, Streams, _packages).entries().next().value, 1), newPack = _classStaticPrivateFi[0]; _this.addPackage(newPack); } else if (_classStaticPrivateFieldSpecGet$1(_this, Streams, _instance).size <= 0) { main_core.Event.unbind(window, 'beforeunload', window[_classStaticPrivateFieldSpecGet$1(_this, Streams, _hiddenTag)]); delete window[_classStaticPrivateFieldSpecGet$1(_this, Streams, _hiddenTag)]; } }); pack.run(stream); } babelHelpers.defineProperty(Streams, "maxInstances", 3); var _instance = { writable: true, value: new Map() }; var _packages = { writable: true, value: new Map() }; var _hiddenTag = { writable: true, value: Symbol('streams descriptor') }; (function (window) { window.BX = window['BX'] || {}; if (window.BX["UploaderQueue"]) return false; var BX = window.BX, statuses = { "new": 0, ready: 1, preparing: 2, inprogress: 3, done: 4, failed: 5, stopped: 6, changed: 7, uploaded: 8 }; /** * @return {BX.UploaderQueue} * @params array * @params[placeHolder] - DOM node to append files /OL or UL/ */ BX.UploaderQueue = function (params, limits, caller) { this.dialogName = "BX.UploaderQueue"; limits = !!limits ? limits : {}; this.limits = { phpPostMaxSize: limits["phpPostMaxSize"], phpUploadMaxFilesize: limits["phpUploadMaxFilesize"], uploadMaxFilesize: limits["uploadMaxFilesize"] > 0 ? limits["uploadMaxFilesize"] : 0, uploadFileWidth: limits["uploadFileWidth"] > 0 ? limits["uploadFileWidth"] : 0, uploadFileHeight: limits["uploadFileHeight"] > 0 ? limits["uploadFileHeight"] : 0 }; this.placeHolder = BX(params["placeHolder"]); this.showImage = params["showImage"] !== false && params["showImage"] !== 'N'; this.sortItems = params["sortItems"] !== false && params["sortItems"] !== 'N'; this.fileCopies = params["copies"]; this.fileFields = params["fields"]; this.uploader = caller; this.itForUpload = new BX.UploaderUtils.Hash(); this.items = new BX.UploaderUtils.Hash(); this.itUploaded = new BX.UploaderUtils.Hash(); this.itFailed = new BX.UploaderUtils.Hash(); this.thumb = { tagName: "LI", className: "bx-bxu-thumb-thumb" }; if (!!params["thumb"]) { for (var ii in params["thumb"]) { if (params["thumb"].hasOwnProperty(ii) && this.thumb.hasOwnProperty(ii)) { this.thumb[ii] = params["thumb"][ii]; } } } BX.addCustomEvent(caller, "onItemIsAdded", BX.delegate(this.addItem, this)); BX.addCustomEvent(caller, "onFileIsDeleted", BX.delegate(this.deleteItem, this)); BX.addCustomEvent(caller, "onFileIsReinited", BX.delegate(this.reinitItem, this)); this.log('Initialized'); return this; }; BX.UploaderQueue.prototype = { showError: function showError(text) { this.log('Error! ' + text); }, log: function log(text) { BX.UploaderUtils.log('queue', text); }, addItem: function addItem(file, being) { var isImage; if (!this.showImage) isImage = false;else if (BX.type.isDomNode(file)) isImage = BX.UploaderUtils.isImage(file.value, null, null);else isImage = BX.UploaderUtils.isImage(file["name"], file["type"], file["size"]); BX.onCustomEvent(this.uploader, "onFileIsBeforeCreated", [file, being, isImage, this.uploader]); var params = { copies: this.fileCopies, fields: this.fileFields }, res = isImage ? new BX.UploaderImage(file, params, this.limits, this.uploader) : new BX.UploaderFile(file, params, this.limits, this.uploader), children, node, itemStatus = { status: statuses.ready }; BX.onCustomEvent(res, "onFileIsAfterCreated", [res, being, itemStatus, this.uploader]); BX.onCustomEvent(this.uploader, "onFileIsAfterCreated", [res, being, itemStatus, this.uploader]); this.items.setItem(res.id, res); if (being || itemStatus["status"] !== statuses.ready) { this.itUploaded.setItem(res.id, res); } else { this.itForUpload.setItem(res.id, res); } if (!!this.placeHolder) { if (BX(being)) { res.thumbNode = node = BX(being); node.setAttribute("bx-bxu-item-id", res.id); } else { children = res.makeThumb(); node = BX.create(this.thumb.tagName, { attrs: { id: res.id + 'Item', 'bx-bxu-item-id': res.id, className: this.thumb.className } }); if (BX.type.isNotEmptyString(children)) { if (this.thumb.tagName == 'TR') { children = children.replace(/[\n\t]/gi, "").replace(/^(\s+)(.*?)/gi, "$2").replace(/(.*?)(\s+)$/gi, "$1"); if (!!children["trim"]) children = children.trim(); var replaceFunction = function replaceFunction(str, tdParams, tdInnerHTML) { var td = node.insertCell(-1), attrs = { colspan: true, headers: true, accesskey: true, "class": true, contenteditable: true, contextmenu: true, dir: true, hidden: true, id: true, lang: true, spellcheck: true, style: true, tabindex: true, title: true, translate: true }, param; td.innerHTML = tdInnerHTML; tdParams = tdParams.split(" "); while ((param = tdParams.pop()) && param) { param = param.split("="); if (param.length == 2) { param[0] = param[0].replace(/^(\s+)(.*?)/gi, "$2").replace(/(.*?)(\s+)$/gi, "$1").replace(/^["'](.*?)["']$/gi, "$1"); param[1] = param[1].replace(/^(\s+)(.*?)/gi, "$2").replace(/(.*?)(\s+)$/gi, "$1").replace(/^["'](.*?)["']$/gi, "$1"); if (attrs[param[0]] === true) td.setAttribute(param[0], param[1]);else td[param[0]] = param[1]; } } return ""; }, regex = /^<td(.*?)>(.*?)<\/td>/i; window.data1 = children; while (regex.test(children)) { children = children.replace(regex, replaceFunction); } } else { node.innerHTML = children; } } else if (BX.type.isDomNode(children)) { BX.adjust(node, { children: [children] }); } } if (!!window["jsDD"] && this.sortItems) { if (!this._onbxdragstart) { this._onbxdragstart = BX.delegate(this.onbxdragstart, this); this._onbxdragstop = BX.delegate(this.onbxdragstop, this); this._onbxdrag = BX.delegate(this.onbxdrag, this); this._onbxdraghout = BX.delegate(this.onbxdraghout, this); this._onbxdestdraghover = BX.delegate(this.onbxdestdraghover, this); this._onbxdestdraghout = BX.delegate(this.onbxdestdraghout, this); this._onbxdestdragfinish = BX.delegate(this.onbxdestdragfinish, this); } BX.addClass(node, "bx-drag-draggable"); node.onbxdragstart = this._onbxdragstart; node.onbxdragstop = this._onbxdragstop; node.onbxdrag = this._onbxdrag; node.onbxdraghout = this._onbxdraghout; window.jsDD.registerObject(node); node.onbxdestdraghover = this._onbxdestdraghover; node.onbxdestdraghout = this._onbxdestdraghout; node.onbxdestdragfinish = this._onbxdestdragfinish; window.jsDD.registerDest(node); var inputs = BX.findChild(node, { tagName: "INPUT", props: { "type": "text" } }, true, true); for (var ii = 0; ii <= inputs.length; ii++) { BX.bind(inputs[ii], "mousedown", BX.eventCancelBubble); } } node.setAttribute("bx-item-id", res.id); if (BX(being)) { BX.onCustomEvent(this.uploader, "onFileIsBound", [res.id, res, this.caller, being]); BX.onCustomEvent(res, "onFileIsBound", [res.id, res, this.caller, being]); } else if (!!being) { this.placeHolder.appendChild(node); BX.onCustomEvent(this.uploader, "onFileIsAttached", [res.id, res, this.caller, being]); BX.onCustomEvent(res, "onFileIsAttached", [res.id, res, this.caller, being]); } else { this.placeHolder.appendChild(node); BX.onCustomEvent(this.uploader, "onFileIsAppended", [res.id, res, this.caller]); BX.onCustomEvent(res, "onFileIsAppended", [res.id, res, this.caller]); } } BX.onCustomEvent(this.uploader, "onQueueIsChanged", [this, "add", res.id, res]); }, getItem: function getItem(id) { var item = this.items.getItem(id); if (item) return { item: item, node: item.thumbNode || BX(id + 'Item') }; return null; }, onbxdragstart: function onbxdragstart() { var item = BX.proxy_context, id = item && item.getAttribute("bx-item-id"); if (id) { var template = item.innerHTML.replace(new RegExp(id, "gi"), "DragCopy"); item.__dragCopyDiv = BX.create('DIV', { attrs: { className: "bx-drag-object " + item.className }, style: { position: "absolute", zIndex: 10, width: item.clientWidth + 'px' }, html: template }); item.__dragCopyPos = BX.pos(item); BX.onCustomEvent(this.uploader, "onBxDragStart", [item, item.__dragCopyDiv]); document.body.appendChild(item.__dragCopyDiv); BX.addClass(item, "bx-drag-source"); var c = BX('DragCopyProperCanvas'), c1, it = this.items.getItem(id); if (c && it && BX(it.canvas)) { c1 = it.canvas.cloneNode(true); c.parentNode.replaceChild(c1, c); c1.getContext("2d").drawImage(it.canvas, 0, 0); } } return true; }, onbxdragstop: function onbxdragstop() { var item = BX.proxy_context; if (item.__dragCopyDiv) { BX.removeClass(item, "bx-drag-source"); item.__dragCopyDiv.parentNode.removeChild(item.__dragCopyDiv); item.__dragCopyDiv = null; delete item['__dragCopyDiv']; delete item['__dragCopyPos']; } return true; }, onbxdrag: function onbxdrag(x, y) { var item = BX.proxy_context, div = item.__dragCopyDiv; if (div) { if (item.__dragCopyPos) { if (!item.__dragCopyPos.deltaX) item.__dragCopyPos.deltaX = item.__dragCopyPos.left - x; if (!item.__dragCopyPos.deltaY) item.__dragCopyPos.deltaY = item.__dragCopyPos.top - y; x += item.__dragCopyPos.deltaX; y += item.__dragCopyPos.deltaY; } div.style.left = x + 'px'; div.style.top = y + 'px'; } }, onbxdraghout: function onbxdraghout(currentNode, x, y) {}, onbxdestdraghover: function onbxdestdraghover(currentNode) { if (!currentNode || !currentNode.hasAttribute("bx-bxu-item-id") || !this.items.hasItem(currentNode.getAttribute("bx-bxu-item-id"))) return; var item = BX.proxy_context; BX.addClass(item, "bx-drag-over"); return true; }, onbxdestdraghout: function onbxdestdraghout() { var item = BX.proxy_context; BX.removeClass(item, "bx-drag-over"); return true; }, onbxdestdragfinish: function onbxdestdragfinish(currentNode) { var item = BX.proxy_context; BX.removeClass(item, "bx-drag-over"); if (item == currentNode || !BX.hasClass(currentNode, "bx-drag-draggable")) return true; var id = currentNode.getAttribute("bx-bxu-item-id"); if (!this.items.hasItem(id)) return; var obj = item.parentNode, n = obj.childNodes.length, act, it, buff, j; for (j = 0; j < n; j++) { if (obj.childNodes[j] == item) item.number = j;else if (obj.childNodes[j] == currentNode) currentNode.number = j; if (currentNode.number > 0 && item.number > 0) break; } if (this.itForUpload.hasItem(id)) { act = item.number <= currentNode.number ? "beforeItem" : item.nextSibling ? "afterItem" : "inTheEnd"; it = null; if (act != "inTheEnd") { for (j = item.number + (act == "beforeItem" ? 0 : 1); j < n; j++) { if (this.itForUpload.hasItem(obj.childNodes[j].getAttribute("bx-bxu-item-id"))) { it = obj.childNodes[j].getAttribute("bx-bxu-item-id"); break; } } if (it === null) act = "inTheEnd"; } buff = this.itForUpload.removeItem(currentNode.getAttribute("bx-bxu-item-id")); if (act != "inTheEnd") this.itForUpload.insertBeforeItem(buff.id, buff, it);else this.itForUpload.setItem(buff.id, buff); } act = item.number <= currentNode.number ? "beforeItem" : item.nextSibling ? "afterItem" : "inTheEnd"; it = null; if (act != "inTheEnd") { for (j = item.number + (act == "beforeItem" ? 0 : 1); j < n; j++) { if (this.items.hasItem(obj.childNodes[j].getAttribute("bx-bxu-item-id"))) { it = obj.childNodes[j].getAttribute("bx-bxu-item-id"); break; } } if (it === null) act = "inTheEnd"; } buff = this.items.removeItem(currentNode.getAttribute("bx-bxu-item-id")); if (act != "inTheEnd") this.items.insertBeforeItem(buff.id, buff, it);else this.items.setItem(buff.id, buff); currentNode.parentNode.removeChild(currentNode); if (item.number <= currentNode.number) { item.parentNode.insertBefore(currentNode, item); } else if (item.nextSibling) { item.parentNode.insertBefore(currentNode, item.nextSibling); } else { for (j = 0; j < n; j++) { if (obj.childNodes[j] == item) item.number = j;else if (obj.childNodes[j] == currentNode) currentNode.number = j; } if (item.number <= currentNode.number) { item.parentNode.insertBefore(currentNode, item); } else { item.parentNode.appendChild(currentNode); } } BX.onCustomEvent(item, "onFileOrderIsChanged", [item.id, item, this.caller]); BX.onCustomEvent(this.uploader, "onQueueIsChanged", [this, "sort", item.id, item]); return true; }, deleteItem: function deleteItem(id, item) { var pointer = this.getItem(id), node; if (pointer && (!this.placeHolder || (node = pointer.node) && node)) { if (!!node) { if (!!window["jsDD"]) { node.onmousedown = null; node.onbxdragstart = null; node.onbxdragstop = null; node.onbxdrag = null; node.onbxdraghout = null; node.onbxdestdraghover = null; node.onbxdestdraghout = null; node.onbxdestdragfinish = null; node.__bxpos = null; window.jsDD.arObjects[node.__bxddid] = null; delete window.jsDD.arObjects[node.__bxddid]; window.jsDD.arDestinations[node.__bxddeid] = null; delete window.jsDD.arDestinations[node.__bxddeid]; } BX.unbindAll(node); if (item["replaced"] !== true) node.parentNode.removeChild(node); } this.items.removeItem(id); this.itUploaded.removeItem(id); this.itFailed.removeItem(id); this.itForUpload.removeItem(id); BX.onCustomEvent(this.uploader, "onQueueIsChanged", [this, "delete", id, item]); return true; } return false; }, reinitItem: function reinitItem(id, item) { var node, children; if (!!this.placeHolder && this.items.hasItem(id) && (node = BX(id + 'Item')) && node) { children = item.makeThumb(); if (BX.type.isNotEmptyString(children)) { if (this.thumb.tagName == 'TR') { children = children.replace(/[\n\t]/gi, "").replace(/^(\s+)(.*?)/gi, "$2").replace(/(.*?)(\s+)$/gi, "$1"); if (!!children["trim"]) children = children.trim(); var replaceFunction = function replaceFunction(str, tdParams, tdInnerHTML) { var td = node.insertCell(-1), attrs = { colspan: true, headers: true, accesskey: true, "class": true, contenteditable: true, contextmenu: true, dir: true, hidden: true, id: true, lang: true, spellcheck: true, style: true, tabindex: true, title: true, translate: true }, param; td.innerHTML = tdInnerHTML; tdParams = tdParams.split(" "); while ((param = tdParams.pop()) && param) { param = param.split("="); if (param.length == 2) { param[0] = param[0].replace(/^(\s+)(.*?)/gi, "$2").replace(/(.*?)(\s+)$/gi, "$1").replace(/^["'](.*?)["']$/gi, "$1"); param[1] = param[1].replace(/^(\s+)(.*?)/gi, "$2").replace(/(.*?)(\s+)$/gi, "$1").replace(/^["'](.*?)["']$/gi, "$1"); if (attrs[param[0]] === true) td.setAttribute(param[0], param[1]);else td[param[0]] = param[1]; } } return ""; }, regex = /^<td(.*?)>(.*?)<\/td>/i; window.data1 = children; while (regex.test(children)) { children = children.replace(regex, replaceFunction); } } else { node.innerHTML = children; } } else if (BX.type.isDomNode(children)) { while (BX(node.firstChild)) { BX.remove(node.firstChild); } BX.adjust(node, { children: [children] }); } BX.onCustomEvent(this.uploader, "onFileIsAppended", [item.id, item, this.caller]); BX.onCustomEvent(item, "onFileIsAppended", [item.id, item, this.caller]); } }, clear: function clear() { var item; while ((item = this.items.getFirst()) && !!item) { this.deleteItem(item.id, item); } }, restoreFiles: function restoreFiles(data, restoreErrored, startAgain) { data.reset(); var item, copy, erroredFile; while ((item = data.getNext()) && item) { erroredFile = this.itFailed.hasItem(item.id); if (restoreErrored === true) { this.itFailed.removeItem(item.id); } if (!this.items.hasItem(item.id) || this.itFailed.hasItem(item.id)) { continue; } if (startAgain === true || startAgain !== false && erroredFile) // for compatibility { delete item["uploadStatus"]; delete item.file["uploadStatus"]; delete item.file["firstChunk"]; delete item.file["package"]; delete item.file["packages"]; if (item.file["copies"]) { item.file["copies"].reset(); while ((copy = item.file["copies"].getNext()) && copy) { delete copy["uploadStatus"]; delete copy["firstChunk"]; delete copy["package"]; delete copy["packages"]; } item.file["copies"].reset(); } item["restored"] = startAgain === true ? "Y" : "C"; // Start again or continue } else { if (erroredFile) // If a error was occurred on the last step we should send this piece again { if (item.file["package"]) { item.file["package"]--; } if (item.file["copies"]) { item.file["copies"].reset(); while ((copy = item.file["copies"].getNext()) && copy) { delete copy["uploadStatus"]; delete copy["firstChunk"]; delete copy["package"]; delete copy["packages"]; } item.file["copies"].reset(); } } item["restored"] = "C"; // Continue } this.itUploaded.removeItem(item.id); this.itForUpload.setItem(item.id, item); BX.onCustomEvent(item, "onUploadRestore", [item]); } } }; return statuses; })(window); (function (window) { window.BX = window['BX'] || {}; if (window.BX["UploaderUtils"]) return false; var BX = window.BX; BX.UploaderLog = []; BX.UploaderDebug = false; var statuses = { "new": 0, ready: 1, preparing: 2, inprogress: 3, done: 4, failed: 5, stopped: 6, changed: 7, uploaded: 8 }; BX.UploaderUtils = { statuses: statuses, getId: function getId() { return new Date().valueOf() + Math.round(Math.random() * 1000000); }, log: function log() { if (BX.UploaderDebug === true) { console.log(arguments); } else { BX.UploaderLog.push(arguments); } }, Hash: function () { var d = function d() { this.length = 0; this.items = {}; this.order = []; var i; if (arguments.length == 1 && BX.type.isArray(arguments[0]) && arguments[0].length > 0) { var data = arguments[0]; for (i = 0; i < data.length; i++) { if (data[i] && babelHelpers.typeof(data[i]) == "object" && data[i]["id"]) { this.setItem(data[i]["id"], data[i]); } } } else { for (i = 0; i < arguments.length; i += 2) { this.setItem(arguments[i], arguments[i + 1]); } } }; d.prototype = { getIds: function getIds() { return this.order; }, getQueue: function getQueue(id) { id += ''; return BX.util.array_search(id, this.order); }, getByOrder: function getByOrder(order) { return this.getItem(this.order[order]); }, removeItem: function removeItem(in_key) { in_key += ''; var tmp_value, number; if (typeof this.items[in_key] != 'undefined') { tmp_value = this.items[in_key]; number = this.getQueue(in_key); this.pointer -= this.pointer >= number ? 1 : 0; delete this.items[in_key]; this.order = BX.util.deleteFromArray(this.order, number); this.length = this.order.length; } return tmp_value; }, getItem: function getItem(in_key) { in_key += ''; return this.items[in_key]; }, unshiftItem: function unshiftItem(in_key, in_value) { in_key += ''; if (typeof in_value != 'undefined') { if (typeof this.items[in_key] == 'undefined') { this.order.unshift(in_key); this.length = this.order.length; } this.items[in_key] = in_value; } return in_value; }, setItem: function setItem(in_key, in_value) { in_key += ''; if (typeof in_value != 'undefined') { if (typeof this.items[in_key] == 'undefined') { this.order.push(in_key); this.length = this.order.length; } this.items[in_key] = in_value; } return in_value; }, hasItem: function hasItem(in_key) { in_key += ''; return typeof this.items[in_key] != 'undefined'; }, insertBeforeItem: function insertBeforeItem(in_key, in_value, after_key) { in_key += ''; if (typeof in_value != 'undefined') { if (typeof this.items[in_key] == 'undefined') { this.order.splice(this.getQueue(after_key), 0, in_key); this.length = this.order.length; } this.items[in_key] = in_value; } return in_value; }, getFirst: function getFirst() { var in_key, item = null; for (var ii = 0; ii < this.order.length; ii++) { in_key = this.order[ii]; if (!!in_key && this.hasItem(in_key)) { item = this.getItem(in_key); break; } } return item; }, getNext: function getNext() { this.pointer = 0 <= this.pointer && this.pointer < this.order.length ? this.pointer : -1; var res = this.getItem(this.order[this.pointer + 1]); if (!!res) this.pointer++;else this.pointer = -1; return res; }, getPrev: function getPrev() { this.pointer = 0 <= this.pointer && this.pointer < this.order.length ? this.pointer : 0; var res = this.getItem(this.order[this.pointer - 1]); if (!!res) this.pointer--; return res; }, reset: function reset() { this.pointer = -1; }, setPointer: function setPointer(in_key) { this.pointer = this.getQueue(in_key); return this.pointer; }, getLast: function getLast() { var in_key, item = null; for (var ii = this.order.length; ii >= 0; ii--) { in_key = this.order[ii]; if (!!in_key && this.hasItem(in_key)) { item = this.getItem(in_key); break; } } return item; } }; return d; }(), getFileNameOnly: function getFileNameOnly(name) { var delimiter = "\\", start = name.lastIndexOf(delimiter), finish = name.length; if (start == -1) { delimiter = "/"; start = name.lastIndexOf(delimiter); } if (start + 1 == name.length) { finish = start; start = name.substring(0, finish).lastIndexOf(delimiter); } name = name.substring(start + 1, finish); if (delimiter == "/" && name.indexOf("?") > 0) { name = name.substring(0, name.indexOf("?")); } if (name == '') name = 'noname'; return name; }, isImageExt: function isImageExt(ext) { return BX.message('bxImageExtensions') && BX.type.isNotEmptyString(ext) ? new RegExp('(?:^|\\W)(' + ext + ')(?:\\W|$)', 'gi').test(BX.message('bxImageExtensions')) : false; }, isImage: function isImage(name, type, size) { size = BX.type.isNumber(size) ? size : BX.type.isNotEmptyString(size) && !/[\D]+/gi.test(size) ? parseInt(size) : null; return (type === null || (type || '').indexOf("image/") === 0) && (size === null || size < 20 * 1024 * 1024) && BX.UploaderUtils.isImageExt((name || '').lastIndexOf('.') > 0 ? name.substr(name.lastIndexOf('.') + 1).toLowerCase() : ''); }, scaleImage: function scaleImage(arSourceSize, arSize, resizeType) { var sourceImageWidth = parseInt(arSourceSize["width"]), sourceImageHeight = parseInt(arSourceSize["height"]); resizeType = !resizeType && !!arSize["type"] ? arSize["type"] : resizeType; arSize = !!arSize ? arSize : {}; arSize.width = parseInt(!!arSize.width ? arSize.width : 0); arSize.height = parseInt(!!arSize.height ? arSize.height : 0); var res = { bNeedCreatePicture: false, source: { x: 0, y: 0, width: 0, height: 0 }, destin: { x: 0, y: 0, width: 0, height: 0 } }, width, height; if (!(sourceImageWidth > 0 || sourceImageHeight > 0)) { BX.DoNothing(); } else { if (!BX.type.isNotEmptyString(resizeType)) { resizeType = "inscribed"; } var ResizeCoeff, iResizeCoeff; if (resizeType.indexOf("proportional") >= 0) { width = Math.max(sourceImageWidth, sourceImageHeight); height = Math.min(sourceImageWidth, sourceImageHeight); } else { width = sourceImageWidth; height = sourceImageHeight; } if (resizeType == "exact") { var ratio = sourceImageWidth / sourceImageHeight < arSize["width"] / arSize["height"] ? arSize["width"] / sourceImageWidth : arSize["height"] / sourceImageHeight, x = Math.max(0, Math.round(sourceImageWidth / 2 - arSize["width"] / 2 / ratio)), y = Math.max(0, Math.round(sourceImageHeight / 2 - arSize["height"] / 2 / ratio)); res.bNeedCreatePicture = true; res.coeff = ratio; res.destin["width"] = arSize["width"]; res.destin["height"] = arSize["height"]; res.source["x"] = x; res.source["y"] = y; res.source["width"] = Math.round(arSize["width"] / ratio, 0); res.source["height"] = Math.round(arSize["height"] / ratio, 0); } else { if (resizeType == "circumscribed") { ResizeCoeff = { width: width > 0 ? arSize["width"] / width : 1, height: height > 0 ? arSize["height"] / height : 1 }; iResizeCoeff = Math.max(ResizeCoeff["width"], ResizeCoeff["height"], 1); } else { ResizeCoeff = { width: width > 0 ? arSize["width"] / width : 1, height: height > 0 ? arSize["height"] / height : 1 }; iResizeCoeff = Math.min(ResizeCoeff["width"], ResizeCoeff["height"], 1); iResizeCoeff = 0 < iResizeCoeff ? iResizeCoeff : 1; } res.bNeedCreatePicture = iResizeCoeff != 1; res.coeff = iResizeCoeff; res.destin["width"] = Math.max(1, parseInt(iResizeCoeff * sourceImageWidth)); res.destin["height"] = Math.max(1, parseInt(iResizeCoeff * sourceImageHeight)); res.source["x"] = 0; res.source["y"] = 0; res.source["width"] = sourceImageWidth; res.source["height"] = sourceImageHeight; } } return res; }, dataURLToBlob: function dataURLToBlob(dataURL) { var marker = ';base64,', parts, contentType, raw, rawLength; if (dataURL.indexOf(marker) == -1) { parts = dataURL.split(','); contentType = parts[0].split(':')[1]; raw = parts[1]; return new Blob([raw], { type: contentType }); } parts = dataURL.split(marker); contentType = parts[0].split(':')[1]; raw = window.atob(parts[1]); rawLength = raw.length; var uInt8Array = new Uint8Array(rawLength); for (var i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i); } return new Blob([uInt8Array], { type: contentType }); }, sizeof: function sizeof(obj) { var size = 0, key; for (key in obj) { if (obj.hasOwnProperty(key)) { size += key.length; if (babelHelpers.typeof(obj[key]) == "object") { if (obj[key] === null) BX.DoNothing();else if (obj[key]["size"] > 0) size += obj[key].size;else size += BX.UploaderUtils.sizeof(obj[key]); } else if (typeof obj[key] == "number") { size += obj[key].toString().length; } else if (!!obj[key] && obj[key].length > 0) { size += obj[key].length; } } } return size; }, FormToArray: function FormToArray(form, data) { return BX.ajax.prepareForm(form, data); }, getFormattedSize: function getFormattedSize(size, precision) { var a = ["b", "Kb", "Mb", "Gb", "Tb"], pos = 0; while (size >= 1024 && pos < 4) { size /= 1024; pos++; } return Math.round(size * (precision > 0 ? precision * 10 : 1)) / (precision > 0 ? precision * 10 : 1) + " " + BX.message("FILE_SIZE_" + a[pos]); }, bindEvents: function bindEvents(obj, event, func) { var funcs = [], ii; if (typeof func == "string") { eval('funcs.push(' + func + ');'); } else if (!!func["length"] && func["length"] > 0) { for (ii = 0; ii < func.length; ii++) { if (typeof func[ii] == "string") eval('funcs.push(' + func[ii] + ');');else funcs.push(func[ii]); } } else funcs.push(func); if (funcs.length > 0) { for (ii = 0; ii < funcs.length; ii++) { BX.addCustomEvent(obj, event, funcs[ii]); } } }, applyFilePart: function applyFilePart(file, blob) { if (BX.type.isDomNode(file)) { file.uploadStatus = statuses.done; } else if (file == blob) { file.uploadStatus = statuses.done; } else if (file.blobed === true) { file.uploadStatus = file.package + 1 >= file.packages ? statuses.done : statuses.inprogress; if (file.uploadStatus == statuses.inprogress) file.package++; } return true; }, getFilePart: function getFilePart(file, MaxFilesize) { var blob, chunkSize = MaxFilesize, start, end; if (BX.type.isDomNode(file)) { blob = file; } else if (MaxFilesize <= 0 || file.size <= MaxFilesize) { blob = file; } else if (file['packages'] && file['packages'] <= file['package']) { blob = null; } else if (window.Blob || window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder) { if (file['packages']) { file.package++; start = file.package * chunkSize; end = start + chunkSize; } else { file.packages = Math.ceil(file.size / chunkSize); file.package = 0; start = 0; end = chunkSize; } if ('mozSlice' in file) blob = file.mozSlice(start, end, file.type);else if ('webkitSlice' in file) blob = file.webkitSlice(start, end, file.type);else if ('slice' in file) blob = file.slice(start, end, file.type);else blob = file.Slice(start, end, file.type); for (var ii in file) { if (file.hasOwnProperty(ii)) { blob[ii] = file[ii]; } } blob["name"] = file["name"]; blob["start"] = start; blob["package"] = file.package; blob["packages"] = file.packages; } return blob; }, makeAnArray: function makeAnArray(file, data) { file = !!file ? file : { files: [], props: {} }; var ii; for (var jj in data) { if (data.hasOwnProperty(jj)) { if (babelHelpers.typeof(data[jj]) == "object" && data[jj].length > 0) { file[jj] = !!file[jj] ? file[jj] : []; for (ii = 0; ii < data[jj].length; ii++) { file[jj].push(data[jj][ii]); } } else { for (ii in data[jj]) { if (data[jj].hasOwnProperty(ii)) { file[jj] = !!file[jj] ? file[jj] : {}; file[jj][ii] = data[jj][ii]; } } } } } return file; }, appendToForm: function appendToForm(fd, key, val) { if (!!val && babelHelpers.typeof(val) == "object") { for (var ii in val) { if (val.hasOwnProperty(ii)) { BX.UploaderUtils.appendToForm(fd, key + '[' + ii + ']', val[ii]); } } } else { fd.append(key, !!val ? val : ''); } }, FormData: function FormData() { return new (BX.Uploader.getInstanceName() == "BX.UploaderSimple" ? FormDataLocal : window.FormData)(); }, prepareData: function prepareData(arData) { var data = {}; if (null != arData) { if (babelHelpers.typeof(arData) == 'object') { for (var i in arData) { if (arData.hasOwnProperty(i)) { var name = BX.util.urlencode(i); if (babelHelpers.typeof(arData[i]) == 'object') data[name] = BX.UploaderUtils.prepareData(arData[i]);else data[name] = BX.util.urlencode(arData[i]); } } } else data = BX.util.urlencode(arData); } return data; } }; var FormDataLocal = function FormDataLocal() { var uniqueID; do { uniqueID = Math.floor(Math.random() * 99999); } while (BX("form-" + uniqueID)); this.local = true; this.form = BX.create("FORM", { props: { id: "form-" + uniqueID, method: "POST", enctype: "multipart/form-data", encoding: "multipart/form-data" }, style: { display: "none" } }); document.body.appendChild(this.form); }; FormDataLocal.prototype = { append: function append(name, val) { if (BX.type.isDomNode(val)) { this.form.appendChild(val); } else { this.form.appendChild(BX.create("INPUT", { props: { type: "hidden", name: name, value: val } })); } } }; BX.UploaderUtils.slice = function (file, start, end) { var blob = null; if ('mozSlice' in file) blob = file.mozSlice(start, end);else if ('webkitSlice' in file) blob = file.webkitSlice(start, end);else if ('slice' in file) blob = file.slice(start, end);else blob = file.Slice(start, end, file.type); return blob; }; BX.UploaderUtils.readFile = function (file, callback, method) { if (window["FileReader"]) { var fileReader = new FileReader(); fileReader.onload = fileReader.onerror = callback; method = method || 'readAsDataURL'; if (fileReader[method]) { fileReader[method](file); return fileReader; } } return false; }; })(window); var UploaderQueue = window.BX["UploaderQueue"]; var UploaderUtils = window.BX["UploaderUtils"]; var Uploader = /*#__PURE__*/function () { function Uploader(params) { babelHelpers.classCallCheck(this, Uploader); babelHelpers.defineProperty(this, "fileInput", null); babelHelpers.defineProperty(this, "form", null); babelHelpers.defineProperty(this, "limits", {}); babelHelpers.defineProperty(this, "packages", new Map()); var input = params.input, uploadFileUrl = params.uploadFileUrl, id = params.id, CID = params.CID, controlId = params.controlId, dropZone = params.dropZone, placeHolder = params.placeHolder, events = params.events; if (main_core.Type.isStringFilled(uploadFileUrl)) { this.uploadFileUrl = uploadFileUrl; } input = main_core.Type.isStringFilled(input) ? document.getElementById(input) : input; if (main_core.Type.isDomNode(input)) { this.fileInput = input; this.form = input.form; this.uploadFileUrl = this.uploadFileUrl || this.form.getAttribute('action'); } else if (input !== null) { main_core.Runtime.debug(main_core.Loc.getMessage('UPLOADER_INPUT_IS_NOT_DEFINED')); return; } if (!this.uploadFileUrl) { main_core.Runtime.debug(main_core.Loc.getMessage('UPLOADER_ACTION_URL_NOT_DEFINED')); return; } this.constructor.justCounter++; var uniqueId = UploaderUtils.getId(); this.id = main_core.Type.isStringFilled(id) ? id : ['bitrixUploaderID', uniqueId].join(''); this.CID = main_core.Type.isStringFilled(CID) ? CID : 'CID' + uniqueId; // this is a security id this.controlId = controlId || 'bitrixUploader'; // this is a control id can be lice control name this.onChange = this.onChange.bind(this); this.setLimits(params); this.initParams(params); this.init(this.fileInput); this.dropZone = this.initDropZone(dropZone); this.bindUserEvents(events); this.initFilesQueue(params); BX.onCustomEvent(window, 'onUploaderIsInited', [this.id, this]); Uploader.repo.set(this.id, this); } babelHelpers.createClass(Uploader, [{ key: "setLimits", value: function setLimits(_ref) { var uploadMaxFilesize = _ref.uploadMaxFilesize, uploadFileWidth = _ref.uploadFileWidth, uploadFileHeight = _ref.uploadFileHeight, allowUpload = _ref.allowUpload, allowUploadExt = _ref.allowUploadExt; this.limits = { uploadMaxFilesize: uploadMaxFilesize || 0, uploadFileWidth: uploadFileWidth || 0, uploadFileHeight: uploadFileHeight || 0, uploadFileExt: '', uploadFile: this.fileInput ? this.fileInput.getAttribute('accept') : '', allowUpload: allowUpload, //compatibility allowUploadExt: allowUploadExt //compatibility }; var acceptAttribute = []; if (main_core.Type.isStringFilled(this.limits['uploadFile'])) { acceptAttribute.push(this.limits['uploadFile']); } if (allowUpload === 'I') { acceptAttribute.push('image/*'); } if (main_core.Type.isStringFilled(allowUploadExt)) { var separator = allowUploadExt.indexOf(',') >= 0 ? ',' : ' '; var extensions = []; allowUploadExt.split(separator).forEach(function (extension) { extensions.push(extension.trim().replace('.', '')); acceptAttribute.push('.' + extension.trim().replace('.', '')); }); if (extensions) { this.limits["uploadFileExt"] = extensions; } } this.limits['uploadFile'] = acceptAttribute.join(', '); } }, { key: "initParams", value: function initParams(_ref2) { var uploadMethod = _ref2.uploadMethod, uploadFormData = _ref2.uploadFormData, filesInputMultiple = _ref2.filesInputMultiple, uploadInputName = _ref2.uploadInputName, uploadInputInfoName = _ref2.uploadInputInfoName, deleteFileOnServer = _ref2.deleteFileOnServer, pasteFileHashInForm = _ref2.pasteFileHashInForm; // Limits this.params = { filesInputMultiple: this.fileInput && this.fileInput["multiple"] || filesInputMultiple ? "multiple" : false, uploadFormData: uploadFormData === "N" ? "N" : "Y", uploadMethod: uploadMethod === "immediate" ? "immediate" : "deferred", uploadInputName: main_core.Type.isStringFilled(uploadInputName) ? uploadInputName : 'bxu_files', uploadInputInfoName: main_core.Type.isStringFilled(uploadInputInfoName) ? uploadInputInfoName : 'bxu_info', deleteFileOnServer: !(deleteFileOnServer === false || deleteFileOnServer === "N"), //to insert hash into the form filesInputName: this.fileInput && this.fileInput["name"] ? this.fileInput["name"] : "FILES", pasteFileHashInForm: !(pasteFileHashInForm === false || pasteFileHashInForm === "N") }; } }, { key: "init", value: function init(fileInput) { if (fileInput === null) { return true; } if (main_core.Type.isDomNode(fileInput)) { var newFileInput = this.makeFileInput(fileInput); if (fileInput === this.fileInput) { this.fileInput = newFileInput; } if (newFileInput) { return true; } } return false; } }, { key: "initDropZone", value: function initDropZone(dropZoneNode) { var _this = this; var dropZone = new DropZone(dropZoneNode); main_core_events.EventEmitter.subscribe(dropZone, Options.getEventName('caught'), function (_ref3) { var data = _ref3.data; _this.onChange(data); }); main_core_events.EventEmitter.subscribe(this, Options.getEventName('destroy'), function () { main_core_events.EventEmitter.unsubscribeAll(dropZone, Options.getEventName('caught')); dropZone.destroy(); }); return dropZone; } }, { key: "initFilesQueue", value: function initFilesQueue(_ref4) { var fields = _ref4.fields, copies = _ref4.copies, placeHolder = _ref4.placeHolder, showImage = _ref4.showImage, sortItems = _ref4.sortItems, thumb = _ref4.thumb, queueFields = _ref4.queueFields; var params = { fields: queueFields && queueFields['fields'] ? queueFields['fields'] : fields, copies: queueFields && queueFields['copies'] ? queueFields['copies'] : copies, placeHolder: queueFields && queueFields['placeHolder'] ? queueFields['placeHolder'] : placeHolder, showImage: queueFields && queueFields['showImage'] ? queueFields['showImage'] : showImage, sortItems: queueFields && queueFields['sortItems'] ? queueFields['sortItems'] : sortItems, thumb: queueFields && queueFields['thumb'] ? queueFields['thumb'] : thumb }; this.queue = new UploaderQueue(params, this.limits, this); } }, { key: "bindUserEvents", value: function bindUserEvents(events) { if (!main_core.Type.isPlainObject(events)) { return; } for (var eventName in events) { if (events.hasOwnProperty(eventName)) { main_core_events.EventEmitter.subscribe(this, eventName, events[eventName]); } } } }, { key: "makeFileInput", value: function makeFileInput(oldFileInput) { if (!main_core.Type.isDomNode(oldFileInput)) { return false; } main_core.Event.unbindAll(oldFileInput, 'change'); var newFileInput = oldFileInput.cloneNode(true); newFileInput.value = ''; newFileInput.setAttribute('name', this.params["uploadInputName"] + '[]'); newFileInput.setAttribute('multiple', this.params["filesInputMultiple"]); newFileInput.setAttribute('accept', this.limits["uploadFile"]); oldFileInput.parentNode.replaceChild(newFileInput, oldFileInput); BX.onCustomEvent(this, "onFileinputIsReinited", [newFileInput, this]); main_core.Event.bind(newFileInput, "change", this.onChange); return newFileInput; } }, { key: "onChange", value: function onChange(event) { if (!event) { return; } if (event['preventDefault']) { event.preventDefault(); } if (event['stopPropagation']) { event.stopPropagation(); } var files = []; if (main_core.Type.isArray(event)) { files = event; } else if (main_core.Type.isObject(event)) { if (event['target']) { var fileInput = event['target']; files = fileInput.files; if (!fileInput || fileInput.disabled) { return false; } BX.onCustomEvent(this, "onFileinputIsChanged", [fileInput, this]); this.init(fileInput); } else if (event['files']) { files = event['files']; } } this.onAttach(files); return false; } }, { key: "onAttach", value: function onAttach(files, nodes, check) { var _this2 = this; if (!files || !files['length']) { return false; } check = check !== false; files = babelHelpers.toConsumableArray(files); nodes = nodes && main_core.Type.isArray(nodes) ? babelHelpers.toConsumableArray(nodes) : []; BX.onCustomEvent(this, "onAttachFiles", [files, nodes, this]); var added = false; babelHelpers.toConsumableArray(files).forEach(function (file, index) { var ext = ''; var type = (file['type'] || '').toLowerCase(); if (main_core.Type.isDomNode(file) && file.value) { ext = (file.value.name || '').split('.').pop(); } else { ext = (file['name'] || file['tmp_url'] || '').split('.').pop(); if (ext.indexOf('?') > 0) { ext = ext.substr(0, ext.indexOf('?')); } } ext = ext.toLowerCase(); if (check) { var errors = []; if (_this2.limits['uploadFile'].indexOf('image/') >= 0 && type.indexOf('image/') < 0 && Options.getImageExtensions().indexOf(ext) < 0) { errors.push('File type is not an image like.'); } if (_this2.limits['uploadFileExt'].length > 0) { if (_this2.limits['uploadFileExt'].indexOf(ext) < 0) { errors.push("File extension ".concat(ext, " is in ").concat(_this2.limits['uploadFileExt'])); } else { errors.pop(); } } if (_this2.limits['uploadMaxFilesize'] > 0 && file.size > _this2.limits['uploadMaxFilesize']) { errors.push("File size ".concat(file.size, " is bigger than ").concat(_this2.limits['uploadMaxFilesize'])); } if (errors.length > 0) { return; } } if (String['normalize']) { file.name = String(file.name).normalize(); } BX.onCustomEvent(_this2, "onItemIsAdded", [file, nodes[index] || null, _this2]); added = true; }); if (added && this.params["uploadMethod"] === "immediate") { this.submit(); } return false; } }, { key: "getFormData", value: function getFormData() { var formData = new FormData(this.params["uploadFormData"] === "Y" && this.form ? this.form : undefined); var entries = formData.entries(); var entry; while ((entry = entries.next()) && entry.done === false) { var _entry$value = babelHelpers.slicedToArray(entry.value, 1), name = _entry$value[0]; if (name.indexOf(this.params["filesInputName"]) === 0 || name.indexOf(this.params["uploadInputInfoName"]) === 0 || name.indexOf(this.params["uploadInputName"]) === 0) { formData.delete(name); } } formData.append('AJAX_POST', 'Y'); formData.append('USER_ID', main_core.Loc.getMessage('USER_ID')); formData.append('sessid', BX.bitrix_sessid()); if (BX.message.SITE_ID) { formData.append('SITE_ID', BX.message.SITE_ID); } formData.append(this.params["uploadInputInfoName"] + '[controlId]', this.controlId); formData.append(this.params["uploadInputInfoName"] + '[CID]', this.CID); formData.append(this.params["uploadInputInfoName"] + '[uploadInputName]', this.params["uploadInputName"]); formData.append(this.params["uploadInputInfoName"] + '[version]', Options.getVersion()); return formData; } }, { key: "submit", value: function submit() { var _this3 = this; //region Compatibility if (this.queue.itForUpload.length <= 0) { BX.onCustomEvent(this, 'onStart', [null, { filesCount: 0 }, this]); BX.onCustomEvent(this, 'onDone', [null, null, { filesCount: 0 }]); BX.onCustomEvent(this, 'onFinish', [null, null, { filesCount: 0 }]); return; } //endregion var files = Object.values(this.queue.itForUpload.items); var formData = this.getFormData(); //region Here we can change formData var changedData = {}; var buffer1 = { post: { data: changedData, size: 0, filesCount: files.length }, //compatibility field filesCount: files.length }; var eventOnPackageIsInitialized = new main_core_events.BaseEvent(); eventOnPackageIsInitialized.setCompatData([buffer1, this.queue.itForUpload]); eventOnPackageIsInitialized.setData({ formData: formData, data: changedData, files: files }); main_core_events.EventEmitter.emit(this, 'onPackageIsInitialized', eventOnPackageIsInitialized); appendToForm(formData, buffer1.post.data); if (buffer1.post.data !== changedData) { appendToForm(formData, changedData); } //endregion var packageId = 'pIndex' + (new Date().valueOf() + Math.round(Math.random() * 1000000)); formData.append(this.params["uploadInputInfoName"] + '[packageIndex]', packageId); formData.append(this.params["uploadInputInfoName"] + '[mode]', 'upload'); formData.append(this.params["uploadInputInfoName"] + '[filesCount]', files.length); if (this.packages.size <= 0) { console.group('Upload'); } console.log('1. Create a new Package'); var packItem = new Package({ id: packageId, formData: formData, files: files, uploadFileUrl: this.uploadFileUrl, uploadInputName: this.params["uploadInputName"] }); this.queue.itForUpload = new UploaderUtils.Hash(); var eventOnStart = new main_core_events.BaseEvent(); eventOnStart.setCompatData([packageId, Object.assign({ post: { data: packItem.data, filesCount: files.length } }, packItem), this]); eventOnStart.setData({ package: packItem }); main_core_events.EventEmitter.emit(this, 'onStart', eventOnStart); this.packages.set(packItem.getId(), packItem); main_core_events.EventEmitter.emit(this, 'onBusy'); packItem.subscribeOnce('done', function (_ref5) { var p = _ref5.target, status = _ref5.data.status; var evDone = new main_core_events.BaseEvent(); evDone.setCompatData([{}, packageId, packItem, packItem.getServerResponse()]); evDone.setData({ package: packItem, response: packItem.getServerResponse() }); main_core_events.EventEmitter.emit(_this3, 'onDone', evDone); // region Compatibility if (status === 'failed') { main_core_events.EventEmitter.emit(_this3, 'onError', new main_core_events.BaseEvent({ compatData: [{}, packageId, packItem.getServerResponse()] })); } // endregion Compatibility _this3.packages.delete(p.getId()); if (_this3.packages.size <= 0) { setTimeout(function () { var ev = new main_core_events.BaseEvent(); ev.setCompatData([{}, packageId, packItem, packItem.getServerResponse()]); ev.setData({ package: packItem, response: packItem.getServerResponse() }); main_core_events.EventEmitter.emit(_this3, 'onFinish', ev); console.groupEnd('Upload'); }); } }); packItem.subscribe('fileIsUploaded', function (_ref6) { var _ref6$data = _ref6.data, itemId = _ref6$data.itemId, item = _ref6$data.item, response = _ref6$data.response; _this3.queue.itUploaded.setItem(itemId, item); BX.onCustomEvent(_this3, 'onFileIsUploaded', [itemId, item, response]); BX.onCustomEvent(item, 'onUploadDone', [item, response, _this3, packItem.getId()]); }); packItem.subscribe('fileIsErrored', function (_ref7) { var _ref7$data = _ref7.data, itemId = _ref7$data.itemId, item = _ref7$data.item, response = _ref7$data.response; _this3.queue.itFailed.setItem(itemId, item); BX.onCustomEvent(_this3, 'onFileIsUploadedWithError', [itemId, item, response, _this3, packItem.getId()]); BX.onCustomEvent(item, 'onUploadError', [item, response, _this3, packItem.getId()]); }); packItem.subscribe('fileIsInProgress', function (_ref8) { var _ref8$data = _ref8.data, item = _ref8$data.item, percent = _ref8$data.percent; BX.onCustomEvent(item, 'onUploadProgress', [item, percent, _this3, packItem.getId()]); }); if (packItem.prepare()) { files.forEach(function (item) { BX.onCustomEvent(item, 'onUploadStart', [item, 0, _this3, packItem.getId()]); }); Streams.addPackage(packItem); } } }, { key: "log", value: function log(text) {} }, { key: "destruct", value: function destruct() { main_core_events.EventEmitter.emit(this, Options.getEventName('destroy')); delete this.dropZone; } /*region Compatbility */ }, { key: "getItem", /*endregion*/ value: function getItem(id) { return this.queue.getItem(id); } }, { key: "getItems", value: function getItems() { return this.queue.items; } }, { key: "restoreItems", value: function restoreItems() { //Todo check it this.queue.restoreFiles.apply(this.queue, arguments); } }, { key: "clear", value: function clear() { var item; while ((item = this.queue.items.getFirst()) && item) { item.deleteFile(); } } }, { key: "controlID", get: function get() { return this.controlId; } }, { key: "dialogName", get: function get() { return "BX.Uploader"; } }, { key: "length", get: function get() { return this.queue.itForUpload.length; } }, { key: "streams", get: function get() { var _this4 = this; if (!this['#_streams']) { this['#_streams'] = { packages: { getItem: function getItem(id) { return _this4.packages.get(id); } } }; } return this['#_streams']; } }], [{ key: "getById", value: function getById(id) { return this.repo.get(id); } }, { key: "getInstanceById", value: function getInstanceById(id) { return this.repo.get(id); } }, { key: "getInstanceName", value: function getInstanceName() { return 'BX.Uploader'; } }]); return Uploader; }(); babelHelpers.defineProperty(Uploader, "repo", new Map()); babelHelpers.defineProperty(Uploader, "justCounter", 0); babelHelpers.defineProperty(Uploader, "getInstance", function (params) { BX.onCustomEvent(window, "onUploaderIsAlmostInited", ['BX.Uploader', params]); return new this(params); }); var Manager = /*#__PURE__*/function () { function Manager() { babelHelpers.classCallCheck(this, Manager); } babelHelpers.createClass(Manager, null, [{ key: "getById", value: function getById(id) { return Uploader.getById(id); } }]); return Manager; }(); exports.UploaderManager = Manager; exports.Uploader = Uploader; }((this.BX = this.BX || {}),BX,BX.Event)); //# sourceMappingURL=uploader.js.map