/home/ivoiecob/email.hirewise-va.com/static/js/64.app.bcf73ca4371280b7bc26.js
"use strict";
(self["webpackChunkafterlogic_aurora_platform"] = self["webpackChunkafterlogic_aurora_platform"] || []).push([[64],{
/***/ "73GV":
/*!*************************************************!*\
!*** ./modules/CoreWebclient/js/utils/Files.js ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
AlertPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/AlertPopup.js */ "Rjyw"),
UserSettings = __webpack_require__(/*! modules/CoreWebclient/js/Settings.js */ "KIwC"),
FilesUtils = {};
/**
* Gets link for download by hash.
*
* @param {string} sModuleName Name of module that owns the file.
* @param {string} sHash Hash of the file.
* @param {string} sPublicHash Hash of shared folder if the file is displayed by public link.
*
* @return {string}
*/
FilesUtils.getDownloadLink = function (sModuleName, sHash, sPublicHash) {
return sHash.length > 0 ? '?/Download/' + sModuleName + '/DownloadFile/' + sHash + '/' + (sPublicHash ? '0/' + sPublicHash : '') : '';
};
/**
* Gets link for view by hash in iframe.
*
* @param {number} iAccountId
* @param {string} sUrl
*
* @return {string}
*/
FilesUtils.getIframeWrappwer = function (iAccountId, sUrl) {
return '?/Raw/Iframe/' + iAccountId + '/' + window.encodeURIComponent(sUrl) + '/';
};
FilesUtils.thumbQueue = function () {
var oImages = {},
oImagesIncrements = {},
iNumberOfImages = 2;
return function (sImageSrc, fImageSrcObserver) {
if (fImageSrcObserver) {
if (!(sImageSrc in oImagesIncrements) || oImagesIncrements[sImageSrc] > 0)
//load first images
{
if (!(sImageSrc in oImagesIncrements))
//on first image
{
oImagesIncrements[sImageSrc] = iNumberOfImages;
oImages[sImageSrc] = [];
}
oImagesIncrements[sImageSrc]--;
fImageSrcObserver(sImageSrc); //load image
} else
//create queue
{
oImages[sImageSrc].push({
imageSrc: sImageSrc,
imageSrcObserver: fImageSrcObserver
});
}
} else
//load images from queue (fires load event)
{
if (oImages[sImageSrc] && oImages[sImageSrc].length) {
oImages[sImageSrc][0].imageSrcObserver(oImages[sImageSrc][0].imageSrc);
oImages[sImageSrc].shift();
}
}
};
}();
/**
* @param {string} sFileName
* @param {number} iSize
* @returns {Boolean}
*/
FilesUtils.showErrorIfAttachmentSizeLimit = function (sFileName, iSize) {
var sWarning = TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_SIZE_DETAILED', {
'FILENAME': sFileName,
'MAXSIZE': TextUtils.getFriendlySize(UserSettings.AttachmentSizeLimit)
});
if (UserSettings.AttachmentSizeLimit > 0 && iSize > UserSettings.AttachmentSizeLimit) {
Popups.showPopup(AlertPopup, [sWarning]);
return true;
}
return false;
};
module.exports = FilesUtils;
/***/ }),
/***/ "LIBG":
/*!***************************************************************!*\
!*** ./modules/CoreWebclient/js/models/CAbstractFileModel.js ***!
\***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
$ = __webpack_require__(/*! jquery */ "M4cL"),
ko = __webpack_require__(/*! knockout */ "p09A"),
moment = __webpack_require__(/*! moment */ "sdEb"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
FilesUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Files.js */ "73GV"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
UrlUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Url.js */ "3cxN"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC"),
WindowOpener = __webpack_require__(/*! modules/CoreWebclient/js/WindowOpener.js */ "zVyH"),
aViewMimeTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'text/html', 'text/plain', 'text/css', 'text/rfc822-headers', 'message/delivery-status', 'application/x-httpd-php', 'application/javascript'],
aViewExtensions = [];
if (navigator.pdfViewerEnabled) {
aViewMimeTypes.push('application/pdf');
aViewMimeTypes.push('application/x-pdf');
}
/**
* @constructor
*/
function CAbstractFileModel() {
this.id = ko.observable('');
this.index = ko.observable(0);
this.fileName = ko.observable('');
this.tempName = ko.observable('');
this.extension = ko.observable('');
this.fileName.subscribe(function (sFileName) {
this.id(sFileName);
this.extension(Utils.getFileExtension(sFileName));
}, this);
// Can be overwritten
this.displayName = ko.computed(function () {
return this.fileName();
}, this);
this.size = ko.observable(0);
this.friendlySize = ko.computed(function () {
return this.size() > 0 ? TextUtils.getFriendlySize(this.size()) : '';
}, this);
this.hash = ko.observable('');
this.thumbUrlInQueue = ko.observable('');
this.thumbUrlInQueueSubscribtion = this.thumbUrlInQueue.subscribe(function () {
this.getInThumbQueue();
}, this);
this.thumbnailSrc = ko.observable('');
this.thumbnailLoaded = ko.observable(false);
this.mimeType = ko.observable('');
this.uploadUid = ko.observable('');
this.uploaded = ko.observable(false);
this.uploadError = ko.observable(false);
this.downloading = ko.observable(false);
this.bHasHtmlEmbed = false;
this.otherTemplates = ko.observableArray([]);
// Some modules can override this field if it is necessary to manage it.
this.visibleCancelButton = ko.observable(true);
this.cancelButtonTooltip = TextUtils.i18n('COREWEBCLIENT/ACTION_CANCEL');
this.statusText = ko.observable('');
this.statusTooltip = ko.computed(function () {
return this.uploadError() ? this.statusText() : '';
}, this);
this.progressPercent = ko.observable(0);
this.visibleProgress = ko.observable(false);
this.uploadStarted = ko.observable(false);
this.uploadStarted.subscribe(function () {
if (this.uploadStarted()) {
this.uploaded(false);
this.visibleProgress(true);
this.progressPercent(20);
} else {
this.progressPercent(100);
this.visibleProgress(false);
this.uploaded(true);
}
}, this);
this.downloading.subscribe(function () {
if (this.downloading()) {
this.visibleProgress(true);
} else {
this.visibleProgress(false);
this.progressPercent(0);
}
}, this);
this.allowDrag = ko.observable(false);
this.allowUpload = ko.observable(false);
this.allowPublicLink = ko.observable(false);
this.bIsSecure = ko.observable(false);
this.sHeaderText = '';
this.oActionsData = {
'view': {
'Text': TextUtils.i18n('COREWEBCLIENT/ACTION_VIEW_FILE'),
'HandlerName': 'viewFile'
},
'download': {
'Text': TextUtils.i18n('COREWEBCLIENT/ACTION_DOWNLOAD_FILE'),
'HandlerName': 'downloadFile',
'Tooltip': ko.computed(function () {
var sTitle = TextUtils.i18n('COREWEBCLIENT/INFO_CLICK_TO_DOWNLOAD_FILE', {
'FILENAME': this.fileName(),
'SIZE': this.friendlySize()
});
if (this.friendlySize() === '') {
sTitle = sTitle.replace(' ()', '');
}
return sTitle;
}, this)
}
};
this.allowActions = ko.observable(true);
this.iconAction = ko.observable('download');
this.cssClasses = ko.computed(function () {
return this.getCommonClasses().join(' ');
}, this);
this.actions = ko.observableArray([]);
this.firstAction = ko.computed(function () {
if (this.actions().length > 1) {
return this.actions()[0];
}
return '';
}, this);
this.secondAction = ko.computed(function () {
if (this.actions().length === 1) {
return this.actions()[0];
}
if (this.actions().length > 1) {
return this.actions()[1];
}
return '';
}, this);
this.subFiles = ko.observableArray([]);
this.subFilesExpanded = ko.observable(false);
this.sUploadSubFolder = '';
this.bIsHidden = false;
}
CAbstractFileModel.prototype.addAction = function (sAction, bMain, oActionData) {
if (bMain) {
this.actions.unshift(sAction);
} else {
this.actions.push(sAction);
}
this.actions(_.compact(this.actions()));
if (oActionData) {
this.oActionsData[sAction] = oActionData;
}
};
CAbstractFileModel.prototype.removeAction = function (sAction) {
this.actions(_.without(this.actions(), sAction));
};
CAbstractFileModel.prototype.getMainAction = function () {
return this.actions()[0];
};
CAbstractFileModel.prototype.hasAction = function (sAction) {
return _.indexOf(this.actions(), sAction) !== -1;
};
/**
* Returns button text for specified action.
* @param {string} sAction
* @returns string
*/
CAbstractFileModel.prototype.getActionText = function (sAction) {
if (this.hasAction(sAction) && this.oActionsData[sAction] && (typeof this.oActionsData[sAction].Text === 'string' || _.isFunction(this.oActionsData[sAction].Text))) {
return _.isFunction(this.oActionsData[sAction].Text) ? this.oActionsData[sAction].Text() : this.oActionsData[sAction].Text;
}
return '';
};
CAbstractFileModel.prototype.getActionUrl = function (sAction) {
return this.hasAction(sAction) && this.oActionsData[sAction] ? this.oActionsData[sAction].Url || '' : '';
};
/**
* Executes specified action.
* @param {string} sAction
*/
CAbstractFileModel.prototype.executeAction = function (sAction) {
var oData = this.hasAction(sAction) && this.oActionsData[sAction];
if (oData) {
if (_.isFunction(oData.Handler)) {
oData.Handler();
} else if (typeof oData.HandlerName === 'string' && _.isFunction(this[oData.HandlerName])) {
this[oData.HandlerName]();
}
}
};
/**
* Returns tooltip for specified action.
* @param {string} sAction
* @returns string
*/
CAbstractFileModel.prototype.getTooltip = function (sAction) {
var mTootip = this.hasAction(sAction) && this.oActionsData[sAction] ? this.oActionsData[sAction].Tooltip : '';
if (typeof mTootip === 'string') {
return mTootip;
}
if (_.isFunction(mTootip)) {
return mTootip();
}
return '';
};
/**
* Returns list of css classes for file.
* @returns array
*/
CAbstractFileModel.prototype.getCommonClasses = function () {
var aClasses = [];
if (this.allowUpload() && !this.uploaded() || this.downloading()) {
aClasses.push('incomplete');
}
if (this.uploadError()) {
aClasses.push('fail');
} else {
aClasses.push('success');
}
return aClasses;
};
/**
* Parses attachment data from server.
* @param {AjaxAttachmenResponse} oData
*/
CAbstractFileModel.prototype.parse = function (oData) {
this.fileName(Types.pString(oData.FileName));
this.tempName(Types.pString(oData.TempName));
if (this.tempName() === '') {
this.tempName(this.fileName());
}
this.mimeType(Types.pString(oData.MimeType));
this.size(oData.EstimatedSize ? Types.pInt(oData.EstimatedSize) : Types.pInt(oData.SizeInBytes));
this.hash(Types.pString(oData.Hash));
this.parseActions(oData);
this.uploadUid(this.hash());
this.uploaded(true);
if (_.isFunction(this.additionalParse)) {
this.additionalParse(oData);
}
};
CAbstractFileModel.prototype.parseActions = function (oData) {
this.thumbUrlInQueue(Types.pString(oData.ThumbnailUrl) !== '' ? Types.pString(oData.ThumbnailUrl) + '/' + Math.random() : '');
this.commonParseActions(oData);
this.commonExcludeActions();
};
CAbstractFileModel.prototype.commonExcludeActions = function () {
if (!this.isViewSupported()) {
this.removeAction('view');
}
};
CAbstractFileModel.prototype.commonParseActions = function (oData) {
_.each(oData.Actions, function (oData, sAction) {
if (!this.oActionsData[sAction]) {
this.oActionsData[sAction] = {};
}
this.oActionsData[sAction].Url = Types.pString(oData.url);
this.actions.push(sAction);
}, this);
};
CAbstractFileModel.addViewExtensions = function (aAddViewExtensions) {
if (_.isArray(aAddViewExtensions)) {
aViewExtensions = _.union(aViewExtensions, aAddViewExtensions);
}
};
CAbstractFileModel.prototype.isViewSupported = function () {
return -1 !== $.inArray(this.mimeType(), aViewMimeTypes) || -1 !== $.inArray(Types.pString(this.extension()).toLowerCase(), aViewExtensions);
};
CAbstractFileModel.prototype.getInThumbQueue = function () {
if (this.thumbUrlInQueue() !== '' && (!this.linked || this.linked && !this.linked())) {
FilesUtils.thumbQueue(this.thumbUrlInQueue(), this.thumbnailSrc);
}
};
/**
* Starts downloading attachment on click.
*/
CAbstractFileModel.prototype.downloadFile = function (bNotBroadcastEvent) {
//todo: UrlUtils.downloadByUrl in nessesary context in new window
var sDownloadLink = this.getActionUrl('download'),
oParams = {
'File': this,
'CancelDownload': false
};
if (sDownloadLink.length > 0 && sDownloadLink !== '#') {
if (!bNotBroadcastEvent) {
App.broadcastEvent('AbstractFileModel::FileDownload::before', oParams);
}
if (!oParams.CancelDownload) {
if (_.isFunction(oParams.CustomDownloadHandler)) {
oParams.CustomDownloadHandler();
} else {
sDownloadLink += '/' + moment().unix();
UrlUtils.downloadByUrl(sDownloadLink, this.extension() === 'eml');
}
}
}
};
/**
* Can be overridden.
* Starts viewing attachment on click.
* @param {Object} oViewModel
* @param {Object} oEvent
*/
CAbstractFileModel.prototype.viewFile = function (oViewModel, oEvent) {
Utils.calmEvent(oEvent);
this.viewCommonFile();
};
/**
* Starts viewing attachment on click.
* @param {string=} sUrl
*/
CAbstractFileModel.prototype.viewCommonFile = function (sUrl) {
var oWin = null,
oParams = null;
if (!Types.isNonEmptyString(sUrl)) {
sUrl = UrlUtils.getAppPath() + this.getActionUrl('view');
}
if (sUrl.length > 0 && sUrl !== '#') {
sUrl += '/' + moment().unix();
oParams = {
sUrl: sUrl,
index: this.index(),
hash: this.hash(),
continueView: true
};
App.broadcastEvent('AbstractFileModel::FileView::before', oParams);
if (oParams.continueView) {
oWin = WindowOpener.open(oParams.sUrl, oParams.sUrl, false);
if (oWin) {
oWin.focus();
}
}
}
};
/**
* This allows to download a file from the Webmail UI using drag-n-drop
* @param {Object} oAttachment
* @param {*} oEvent
* @return {boolean}
*/
CAbstractFileModel.prototype.eventDragStart = function (oAttachment, oEvent) {
var oLocalEvent = oEvent.originalEvent || oEvent;
if (oAttachment && oLocalEvent && oLocalEvent.dataTransfer && oLocalEvent.dataTransfer.setData) {
oLocalEvent.dataTransfer.setData('DownloadURL', this.generateTransferDownloadUrl());
}
return true;
};
/**
* @return {string}
*/
CAbstractFileModel.prototype.generateTransferDownloadUrl = function () {
var sLink = this.getActionUrl('download');
if ('http' !== sLink.substr(0, 4)) {
sLink = UrlUtils.getAppPath() + sLink;
}
return this.mimeType() + ':' + this.fileName() + ':' + sLink;
};
/**
* Fills attachment data for upload.
*
* @param {string} sFileUid
* @param {Object} oFileData
* @param {bool} bOnlyUploadStatus
*/
CAbstractFileModel.prototype.onUploadSelect = function (sFileUid, oFileData, bOnlyUploadStatus) {
if (!bOnlyUploadStatus) {
this.fileName(Types.pString(oFileData['FileName']));
this.mimeType(Types.pString(oFileData['Type']));
this.size(Types.pInt(oFileData['Size']));
}
this.uploadUid(sFileUid);
this.uploaded(false);
this.statusText('');
this.progressPercent(0);
this.visibleProgress(false);
// if uploading file is from uploading folder it should be hidden in files list.
this.sUploadSubFolder = Types.pString(oFileData.Folder);
this.bIsHidden = this.sUploadSubFolder !== '';
};
/**
* Starts progress.
*/
CAbstractFileModel.prototype.onUploadStart = function () {
this.visibleProgress(true);
};
/**
* Fills progress upload data.
*
* @param {number} iUploadedSize
* @param {number} iTotalSize
*/
CAbstractFileModel.prototype.onUploadProgress = function (iUploadedSize, iTotalSize) {
if (iTotalSize > 0) {
this.progressPercent(Math.ceil(iUploadedSize / iTotalSize * 100));
this.visibleProgress(true);
}
};
/**
* Fills progress download data.
*
* @param {number} iDownloadedSize
* @param {number} iTotalSize
*/
CAbstractFileModel.prototype.onDownloadProgress = function (iDownloadedSize, iTotalSize) {
if (iTotalSize > 0) {
this.progressPercent(Math.ceil(iDownloadedSize / iTotalSize * 100));
this.visibleProgress(this.progressPercent() < 100);
}
};
/**
* Fills data when upload has completed.
*
* @param {string} sFileUid
* @param {boolean} bResponseReceived
* @param {Object} oResponse
*/
CAbstractFileModel.prototype.onUploadComplete = function (sFileUid, bResponseReceived, oResponse) {
var bError = !bResponseReceived || !oResponse || !!oResponse.ErrorCode || !oResponse.Result || !!oResponse.Result.Error || false,
sError = oResponse && oResponse.ErrorCode && oResponse.ErrorCode === Enums.Errors.CanNotUploadFileLimit ? TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_SIZE') : TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_UNKNOWN');
this.progressPercent(0);
this.visibleProgress(false);
this.uploaded(true);
this.uploadError(bError);
this.statusText(bError ? sError : TextUtils.i18n('COREWEBCLIENT/REPORT_UPLOAD_COMPLETE'));
if (!bError) {
this.fillDataAfterUploadComplete(oResponse, sFileUid);
setTimeout(function (self) {
return function () {
self.statusText('');
};
}(this), 3000);
}
};
/**
* Should be overriden.
*
* @param {Object} oResult
* @param {string} sFileUid
*/
CAbstractFileModel.prototype.fillDataAfterUploadComplete = function (oResult, sFileUid) {};
/**
* @param {Object} oAttachmentModel
* @param {Object} oEvent
*/
CAbstractFileModel.prototype.onImageLoad = function (oAttachmentModel, oEvent) {
if (this.thumbUrlInQueue() !== '' && !this.thumbnailLoaded()) {
this.thumbnailLoaded(true);
FilesUtils.thumbQueue(this.thumbUrlInQueue());
}
};
/**
* Signalise that file download was stoped.
*/
CAbstractFileModel.prototype.stopDownloading = function () {
this.downloading(false);
};
/**
* Signalise that file download was started.
*/
CAbstractFileModel.prototype.startDownloading = function () {
this.downloading(true);
};
module.exports = CAbstractFileModel;
/***/ })
}]);