/home/ivoiecob/email.hirewise-va.com/static/js/59.app.196a43105d95f4bd58f6.js
"use strict";
(self["webpackChunkafterlogic_aurora_platform"] = self["webpackChunkafterlogic_aurora_platform"] || []).push([[59],{
/***/ "0HIo":
/*!*********************************************************!*\
!*** ./modules/MailWebclient/js/models/CFilterModel.js ***!
\*********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ko = __webpack_require__(/*! knockout */ "p09A"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9");
/**
* @param {number} iAccountID
* @constructor
*/
function CFilterModel(iAccountID) {
this.iAccountId = iAccountID;
this.enable = ko.observable(true).extend({
'reversible': true
});
this.field = ko.observable('').extend({
'reversible': true
}); //map to Field
this.condition = ko.observable('').extend({
'reversible': true
});
this.filter = ko.observable('').extend({
'reversible': true
});
this.action = ko.observable('').extend({
'reversible': true
});
this.folder = ko.observable('').extend({
'reversible': true
});
this.email = ko.observable('').extend({
'reversible': true
});
}
/**
* @param {Object} oData
*/
CFilterModel.prototype.parse = function (oData) {
this.enable(!!oData.Enable);
this.field(Types.pInt(oData.Field));
this.condition(Types.pInt(oData.Condition));
this.filter(Types.pString(oData.Filter));
this.action(Types.pInt(oData.Action));
this.folder(Types.pString(oData.FolderFullName));
this.email(Types.pString(oData.Email));
this.commit();
};
CFilterModel.prototype.revert = function () {
this.enable.revert();
this.field.revert();
this.condition.revert();
this.filter.revert();
this.action.revert();
this.folder.revert();
this.email.revert();
};
CFilterModel.prototype.commit = function () {
this.enable.commit();
this.field.commit();
this.condition.commit();
this.filter.commit();
this.action.commit();
this.folder.commit();
this.email.commit();
};
CFilterModel.prototype.toString = function () {
var aState = [this.enable(), this.field(), this.condition(), this.filter(), this.action(), this.folder(), this.email()];
return aState.join(':');
};
module.exports = CFilterModel;
/***/ }),
/***/ "1uL4":
/*!*******************************************************************!*\
!*** ./modules/MailWebclient/js/views/CComposeViewAutoEncrypt.js ***!
\*******************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/* provided dependency */ var $ = __webpack_require__(/*! jquery */ "M4cL");
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "rBrp"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
ModulesManager = __webpack_require__(/*! modules/CoreWebclient/js/ModulesManager.js */ "5D2l"),
Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
ConfirmPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/ConfirmPopup.js */ "MYiO"),
SendingUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Sending.js */ "yHWv");
function CComposeViewAutoEncrypt() {
this.recipientsInfo = ko.observable({});
this.autoEncryptSignMessage = ko.observable(false);
}
CComposeViewAutoEncrypt.prototype.setAutoEncryptSubscribes = function () {
this.hasRecipientsWithKey = ko.computed(function () {
return !!_.find(this.recipientsInfo(), function (oRecipientInfo) {
return oRecipientInfo.hasKey && (oRecipientInfo.encryptMessage || oRecipientInfo.signMessage) && _.indexOf(this.recipientEmails(), oRecipientInfo.email) !== -1;
}.bind(this));
}, this).extend({
throttle: 10
});
this.allowAtoEncryptSignMessage = ko.computed(function () {
return this.hasRecipientsWithKey() && !this.messageSignedOrEncrypted();
}, this);
this.allowAtoEncryptSignMessage.subscribe(function () {
this.autoEncryptSignMessage(this.allowAtoEncryptSignMessage());
}, this);
this.recipientEmails.subscribe(function () {
var aInfoKeys = _.keys(this.recipientsInfo()),
aDiff = _.difference(this.recipientEmails(), aInfoKeys);
if (aDiff.length > 0) {
ModulesManager.run('ContactsWebclient', 'getContactsByEmails', [aDiff, function (oContacts) {
_.each(_.values(oContacts), function (oContact) {
if (oContact) {
this.recipientsInfo()[oContact.email()] = {
email: oContact.email(),
encryptMessage: oContact.pgpEncryptMessages(),
hasKey: typeof oContact.publicPgpKey() === 'string' && oContact.publicPgpKey() !== '',
id: oContact.uuid(),
label: oContact.email(),
name: oContact.displayName(),
sharedToAll: oContact.sharedToAll(),
signMessage: oContact.pgpSignMessages(),
storage: oContact.storage(),
team: oContact.team(),
value: oContact.email()
};
}
}.bind(this));
$(this.toAddrDom()).inputosaurus('refresh');
$(this.ccAddrDom()).inputosaurus('refresh');
$(this.bccAddrDom()).inputosaurus('refresh');
this.recipientsInfo.valueHasMutated();
}.bind(this)]);
}
}, this);
};
CComposeViewAutoEncrypt.prototype.getInputosaurusMethods = function () {
return {
addRecipientInfo: function (oRecipientInfo) {
var oRecipient = AddressUtils.getEmailParts(oRecipientInfo.value);
this.recipientsInfo()[oRecipient.email] = oRecipientInfo;
this.recipientsInfo.valueHasMutated();
}.bind(this),
getRecipientPgpKeyHtml: function (sFullEmail) {
var oRecipient = AddressUtils.getEmailParts(sFullEmail),
oRecipientInfo = this.recipientsInfo()[oRecipient.email],
bHasKey = !!oRecipientInfo && !!oRecipientInfo.hasKey,
sKeyHtml = '',
sEncryptTitle = null,
sSignTitle = null;
if (bHasKey) {
sKeyHtml += '<span class="address_capsule_key address_capsule_key_unset"></span>';
if (oRecipientInfo.encryptMessage) {
sEncryptTitle = TextUtils.i18n('MAILWEBCLIENT/HINT_MESSAGE_ENCRYPT_WITH_KEY');
sKeyHtml += '<span class="address_capsule_key address_capsule_key_encrypt" title="' + sEncryptTitle + '"></span>';
} else {
sKeyHtml += '<span class="address_capsule_key address_capsule_key_not_encrypt"></span>';
}
if (oRecipientInfo.signMessage) {
sSignTitle = TextUtils.i18n('MAILWEBCLIENT/HINT_MESSAGE_SIGN_WITH_KEY');
sKeyHtml += '<span class="address_capsule_key address_capsule_key_sign" title="' + sSignTitle + '"></span>';
}
}
return sKeyHtml;
}.bind(this)
};
};
CComposeViewAutoEncrypt.prototype.groupAllRecipients = function (aRecipients) {
var aRecipientsSimple = [],
aRecipientsEncrypt = [],
aRecipientsSign = [],
aRecipientsSignEncrypt = [],
encryptContactsUuids = [],
signEncryptContactsUuids = [],
iSendingCount = 0;
_.each(aRecipients, function (sRecipient) {
var oRecipientInfo = this.recipientsInfo()[sRecipient];
if (oRecipientInfo && oRecipientInfo.hasKey) {
if (oRecipientInfo.encryptMessage) {
if (oRecipientInfo.signMessage) {
aRecipientsSignEncrypt.push(sRecipient);
signEncryptContactsUuids.push(oRecipientInfo.uuid);
} else {
aRecipientsEncrypt.push(sRecipient);
encryptContactsUuids.push(oRecipientInfo.uuid);
}
} else if (oRecipientInfo.signMessage) {
aRecipientsSign.push(sRecipient);
} else {
aRecipientsSimple.push(sRecipient);
}
} else {
aRecipientsSimple.push(sRecipient);
}
}.bind(this));
if (aRecipientsSimple.length > 0) {
iSendingCount++;
}
if (aRecipientsEncrypt.length > 0) {
iSendingCount++;
}
if (aRecipientsSign.length > 0) {
iSendingCount++;
}
if (aRecipientsSignEncrypt.length > 0) {
iSendingCount++;
}
return {
simple: aRecipientsSimple,
encrypt: aRecipientsEncrypt,
sign: aRecipientsSign,
signEncrypt: aRecipientsSignEncrypt,
encryptContactsUuids: encryptContactsUuids,
signEncryptContactsUuids: signEncryptContactsUuids,
simpleCount: aRecipientsSimple.length,
encryptCount: aRecipientsEncrypt.length,
signCount: aRecipientsSign.length,
signEncryptCount: aRecipientsSignEncrypt.length,
groupCount: iSendingCount
};
};
CComposeViewAutoEncrypt.prototype.confirmNotAllRecipientsEncryptSign = function (oRecipients, fCallBack) {
var sConfirm = null;
if (oRecipients.simpleCount > 0) {
if (oRecipients.encryptCount > 0 || oRecipients.signEncryptCount > 0) {
sConfirm = TextUtils.i18n('MAILWEBCLIENT/CONFIRM_ENCRYPT_NOT_ALL_RECIPIENTS');
} else if (oRecipients.signCount > 0) {
sConfirm = TextUtils.i18n('MAILWEBCLIENT/CONFIRM_SIGN_NOT_ALL_RECIPIENTS');
}
} else {
if (oRecipients.signCount > 0 && (oRecipients.encryptCount > 0 || oRecipients.signEncryptCount > 0)) {
sConfirm = TextUtils.i18n('MAILWEBCLIENT/CONFIRM_ENCRYPT_NOT_ALL_RECIPIENTS');
} else if (oRecipients.signCount === 0 && oRecipients.encryptCount > 0 && oRecipients.signEncryptCount > 0) {
sConfirm = TextUtils.i18n('MAILWEBCLIENT/CONFIRM_SIGN_NOT_ALL_RECIPIENTS');
}
}
if (sConfirm !== null) {
Popups.showPopup(ConfirmPopup, [sConfirm, fCallBack, '', TextUtils.i18n('MAILWEBCLIENT/ACTION_PROCEED_SENDING')]);
} else {
fCallBack(true);
}
};
CComposeViewAutoEncrypt.prototype.proceedEncryptSignAndSend = function (oRecipients, sFromEmail, sPassword) {
var sData = this.oHtmlEditor.getPlainText(),
oSendParameters = this.getSendSaveParameters(true),
aInfoToSend = [],
fOkCallback = function fOkCallback(aRecipients, bAddToSentFolder, sRes, bEncrypt) {
var oCloneSendParameters = _.clone(oSendParameters);
oCloneSendParameters.Text = sRes;
oCloneSendParameters.IsHtml = false;
oCloneSendParameters.Recipients = aRecipients;
fContinueSending(oCloneSendParameters, bAddToSentFolder);
},
fContinueSending = _.bind(function (oSendParameters, bAddToSentFolder) {
aInfoToSend.push({
oSendParameters: oSendParameters,
bAddToSentFolder: bAddToSentFolder
});
if (aInfoToSend.length === oRecipients.groupCount) {
this.sending(true);
this.requiresPostponedSending(!this.allowStartSending());
this.backToListOnSendOrSave(true);
_.each(aInfoToSend, function (oInfoToSend) {
SendingUtils.send('SendMessage', oInfoToSend.oSendParameters, true, this.onSendOrSaveMessageResponse, this, this.requiresPostponedSending(), oInfoToSend.bAddToSentFolder);
}.bind(this));
}
}, this);
if (oRecipients.simpleCount > 0) {
var oCloneSendParameters = _.clone(oSendParameters);
oCloneSendParameters.Recipients = oRecipients.simple;
fContinueSending(oCloneSendParameters, oRecipients.signCount === 0 && oRecipients.encryptCount === 0 && oRecipients.signEncryptCount === 0);
}
if (oRecipients.signCount > 0) {
ModulesManager.run('OpenPgpWebclient', 'encryptSign', [false, true, sData, oRecipients.sign, [], fOkCallback.bind(this, oRecipients.sign, oRecipients.encryptCount === 0 && oRecipients.signEncryptCount === 0), sFromEmail, sPassword]);
}
if (oRecipients.encryptContactsUuids.length > 0) {}
if (oRecipients.encryptCount > 0) {
ModulesManager.run('OpenPgpWebclient', 'encryptSign', [true, false, sData, oRecipients.encrypt, oRecipients.encryptContactsUuids, fOkCallback.bind(this, oRecipients.encrypt, oRecipients.signEncryptCount === 0), sFromEmail]);
}
if (oRecipients.signEncryptCount > 0) {
ModulesManager.run('OpenPgpWebclient', 'encryptSign', [true, true, sData, oRecipients.signEncrypt, oRecipients.signEncryptContactsUuids, fOkCallback.bind(this, oRecipients.signEncrypt, true), sFromEmail, sPassword]);
}
};
CComposeViewAutoEncrypt.prototype.encryptSignAndSend = function () {
var sFromEmail = this.selectedFetcherOrIdentity().email(),
aRecipients = this.recipientEmails(),
oRecipients = this.groupAllRecipients(aRecipients);
this.confirmNotAllRecipientsEncryptSign(oRecipients, function (bProceed) {
if (bProceed) {
if (oRecipients.signCount > 0 || oRecipients.signEncryptCount > 0) {
ModulesManager.run('OpenPgpWebclient', 'getPrivateKeyPassword', [sFromEmail, function (sPassword) {
this.proceedEncryptSignAndSend(oRecipients, sFromEmail, sPassword);
}.bind(this)]);
} else {
this.proceedEncryptSignAndSend(oRecipients, sFromEmail);
}
}
}.bind(this));
};
module.exports = CComposeViewAutoEncrypt;
/***/ }),
/***/ "3boL":
/*!*************************************************************!*\
!*** ./modules/MailWebclient/js/models/CAttachmentModel.js ***!
\*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
var _ = __webpack_require__(/*! underscore */ "C3HO"),
$ = __webpack_require__(/*! jquery */ "M4cL"),
ko = __webpack_require__(/*! knockout */ "p09A"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
WindowOpener = __webpack_require__(/*! modules/CoreWebclient/js/WindowOpener.js */ "zVyH"),
CAbstractFileModel = __webpack_require__(/*! modules/CoreWebclient/js/models/CAbstractFileModel.js */ "LIBG"),
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ");
/**
* @constructor
* @extends CCommonFileModel
*/
function CAttachmentModel(iAccountId) {
this.iAccountId = iAccountId || App.currentAccountId();
this.folderName = ko.observable('');
this.messageUid = ko.observable('');
this.cid = ko.observable('');
this.contentLocation = ko.observable('');
this.inline = ko.observable(false);
this.linked = ko.observable(false);
this.mimePartIndex = ko.observable('');
this.messagePart = ko.observable(null);
CAbstractFileModel.call(this);
this.cancelButtonTooltip = TextUtils.i18n('COREWEBCLIENT/ACTION_REMOVE');
this.content = ko.observable('');
this.isMessageType = ko.computed(function () {
this.mimeType();
this.mimePartIndex();
return this.mimeType() === 'message/rfc822';
}, this);
}
_.extendOwn(CAttachmentModel.prototype, CAbstractFileModel.prototype);
/**
* Method is used in other modules
* @returns {CAttachmentModel}
*/
CAttachmentModel.prototype.getNewInstance = function () {
return new CAttachmentModel(this.iAccountId);
};
CAttachmentModel.prototype.getCopy = function () {
var oCopy = new CAttachmentModel(this.iAccountId);
oCopy.copyProperties(this);
return oCopy;
};
CAttachmentModel.prototype.copyProperties = function (oSource) {
this.folderName(oSource.folderName());
this.messageUid(oSource.messageUid());
this.cid(oSource.cid());
this.contentLocation(oSource.contentLocation());
this.inline(oSource.inline());
this.linked(oSource.linked());
this.mimePartIndex(oSource.mimePartIndex());
this.messagePart(oSource.messagePart());
this.content(oSource.content());
this.fileName(oSource.fileName());
this.tempName(oSource.tempName());
this.size(oSource.size());
this.hash(oSource.hash());
this.mimeType(oSource.mimeType());
this.thumbnailSrc(oSource.thumbnailSrc());
this.thumbnailLoaded(oSource.thumbnailLoaded());
this.statusText(oSource.statusText());
this.uploaded(oSource.uploaded());
var newActionsData = {};
this.oActionsData = Object.assign(newActionsData, oSource.oActionsData);
this.actions(_toConsumableArray(oSource.actions()));
this.thumbUrlInQueue(oSource.thumbUrlInQueue());
this.subFilesExpanded(oSource.subFilesExpanded());
this.subFiles(_toConsumableArray(oSource.subFiles()));
App.broadcastEvent('MailWebclient::CopyFileProperties::after', {
file: this,
source: oSource
});
};
/**
* Parses attachment data from server.
*
* @param {AjaxAttachmenResponse} oData
*/
CAttachmentModel.prototype.additionalParse = function (oData) {
this.content(Types.pString(oData.Content));
this.mimePartIndex(Types.pString(oData.MimePartIndex));
if (this.isMessageType() && this.mimePartIndex() === '') {
this.actions(_.without(this.actions(), 'view'));
}
this.cid(Types.pString(oData.CID));
this.contentLocation(Types.pString(oData.ContentLocation));
this.inline(!!oData.IsInline);
this.linked(!!oData.IsLinked);
App.broadcastEvent('MailWebclient::ParseFile::after', this);
};
/**
* @param {string} sFolderName
* @param {string} sMessageUid
*/
CAttachmentModel.prototype.setMessageData = function (sFolderName, sMessageUid) {
this.folderName(sFolderName);
this.messageUid(sMessageUid);
};
/**
* @param {Object} oResult
* @param {Object} oRequest
*/
CAttachmentModel.prototype.onGetMessageResponse = function (oResult, oRequest) {
var oParameters = oRequest.Parameters,
oResult = oResult.Result,
CMessageModel = __webpack_require__(/*! modules/MailWebclient/js/models/CMessageModel.js */ "WzKm"),
oMessage = new CMessageModel();
if (oResult && this.oNewWindow) {
oResult.TimeStampInUTC = oResult.ReceivedOrDateTimeStampInUTC;
oMessage.parse(oResult, oParameters.AccountID, false, true);
this.messagePart(oMessage);
this.messagePart().viewMessage(this.oNewWindow);
this.oNewWindow = undefined;
}
};
/**
* Starts viewing attachment on click.
*/
CAttachmentModel.prototype.viewFile = function () {
if (this.isMessageType()) {
this.viewMessageFile();
} else {
this.viewCommonFile();
}
};
/**
* Starts viewing attachment on click.
*/
CAttachmentModel.prototype.viewMessageFile = function () {
var oWin = null,
sLoadingText = '<div style="margin: 30px; text-align: center; font: normal 14px Tahoma;">' + TextUtils.i18n('COREWEBCLIENT/INFO_LOADING') + '</div>';
oWin = WindowOpener.open('', this.fileName());
if (oWin) {
if (this.messagePart()) {
this.messagePart().viewMessage(oWin);
} else {
$(oWin.document.body).html(sLoadingText);
this.oNewWindow = oWin;
Ajax.send('GetMessage', {
'AccountID': this.iAccountId,
'Folder': this.folderName(),
'Uid': this.messageUid(),
'Rfc822MimeIndex': this.mimePartIndex()
}, this.onGetMessageResponse, this);
}
oWin.focus();
}
};
/**
* @param {Object} oResponse
* @param {string} sFileUid
*/
CAttachmentModel.prototype.fillDataAfterUploadComplete = function (oResponse, sFileUid) {
this.cid(Types.pString(sFileUid));
if (oResponse && oResponse.Result && oResponse.Result.Attachment) {
this.tempName(Types.pString(oResponse.Result.Attachment.TempName));
this.mimeType(Types.pString(oResponse.Result.Attachment.MimeType));
this.size(Types.pInt(oResponse.Result.Attachment.Size));
this.hash(Types.pString(oResponse.Result.Attachment.Hash));
this.parseActions(oResponse.Result.Attachment);
}
};
/**
* Parses contact attachment data from server.
*
* @param {Object} oData
* @param {string} sMessageFolder
* @param {string} sMessageUid
*/
CAttachmentModel.prototype.parseFromUpload = function (oData, sMessageFolder, sMessageUid) {
this.setMessageData(sMessageFolder, sMessageUid);
this.fileName(Types.pString(oData.Name));
this.tempName(oData.TempName ? Types.pString(oData.TempName) : this.fileName());
this.mimeType(Types.pString(oData.MimeType));
this.size(Types.pInt(oData.Size));
this.hash(Types.pString(oData.Hash));
this.parseActions(oData);
this.uploadUid(this.hash());
this.uploaded(true);
this.uploadStarted(false);
};
CAttachmentModel.prototype.parseActions = function (oData) {
this.thumbUrlInQueue(Types.pString(oData.ThumbnailUrl) !== '' ? Types.pString(oData.ThumbnailUrl) + '/' + Math.random() : '');
this.commonParseActions(oData);
if (this.isMessageType()) {
if (this.folderName() !== '' && this.messageUid() !== '') {
if (!this.hasAction('view')) {
this.actions.unshift('view');
}
this.otherTemplates.push({
name: 'MailWebclient_PrintMessageView',
data: this.messagePart
});
} else {
this.actions(_.without(this.actions(), 'view'));
}
} else {
// have to check source data since this.inline is not populated yet
if (!oData.IsInline) {
this.commonExcludeActions();
}
}
};
CAttachmentModel.prototype.errorFromUpload = function () {
this.uploaded(true);
this.uploadError(true);
this.uploadStarted(false);
this.statusText(TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_UNKNOWN'));
};
module.exports = CAttachmentModel;
/***/ }),
/***/ "68+x":
/*!************************************************************!*\
!*** ./modules/MailWebclient/js/popups/EditFolderPopup.js ***!
\************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC"),
Api = __webpack_require__(/*! modules/CoreWebclient/js/Api.js */ "Z9uT"),
CAbstractPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/CAbstractPopup.js */ "69av"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ"),
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8");
/**
* @constructor
*/
function CEditFolderPopup() {
CAbstractPopup.call(this);
this.isSaving = ko.observable(false);
MailCache.folderListLoading.subscribe(function () {
var bListLoading = MailCache.folderListLoading.indexOf(MailCache.editedFolderList().iAccountId) !== -1;
if (!bListLoading && this.isSaving()) {
this.isSaving(false);
this.closePopup();
}
}, this);
this.options = ko.observableArray([]);
this.parentFolder = ko.observable('');
this.folderName = ko.observable('');
this.folderNameFocus = ko.observable(false);
this.oFolder = null;
this.defaultOptionsAfterRender = Utils.defaultOptionsAfterRender;
}
_.extendOwn(CEditFolderPopup.prototype, CAbstractPopup.prototype);
CEditFolderPopup.prototype.PopupTemplate = 'MailWebclient_Settings_EditFolderPopup';
/**
* @param {object} oFolder
*/
CEditFolderPopup.prototype.onOpen = function (oFolder) {
this.oFolder = oFolder;
this.options(MailCache.editedFolderList().getOptions(TextUtils.i18n('MAILWEBCLIENT/LABEL_NO_PARENT_FOLDER'), true, false, true, false, [oFolder.fullName()]));
this.parentFolder(oFolder.parentFullName());
this.folderName(oFolder.name());
this.folderNameFocus(true);
};
CEditFolderPopup.prototype.save = function () {
if (this.oFolder.parentFullName() !== this.parentFolder()) {
var oParameters = {
'AccountID': this.oFolder.iAccountId,
'PrevFolderFullNameRaw': this.oFolder.fullName(),
'NewFolderNameInUtf8': this.folderName(),
'ChangeParent': true,
'NewParentFolder': this.parentFolder()
};
this.isSaving(true);
Ajax.send('RenameFolder', oParameters, _.bind(this.onResponseFolderRename, this), this);
} else if (this.oFolder.name() !== this.folderName()) {
var oParameters = {
'AccountID': this.oFolder.iAccountId,
'PrevFolderFullNameRaw': this.oFolder.fullName(),
'NewFolderNameInUtf8': this.folderName(),
'ChangeParent': false
};
this.isSaving(true);
Ajax.send('RenameFolder', oParameters, _.bind(this.onResponseFolderRename, this), this);
} else {
this.closePopup();
}
};
CEditFolderPopup.prototype.onResponseFolderRename = function (oResponse, oRequest) {
if (oResponse && oResponse.Result && oResponse.Result.FullName) {
MailCache.getFolderList(AccountList.editedId());
} else {
this.isSaving(false);
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_RENAME_FOLDER'));
MailCache.getFolderList(AccountList.editedId());
}
};
CEditFolderPopup.prototype.cancelPopup = function () {
if (!this.isSaving()) {
this.closePopup();
}
};
module.exports = new CEditFolderPopup();
/***/ }),
/***/ "7VXH":
/*!***********************************************************!*\
!*** ./modules/CoreWebclient/js/utils/Contenteditable.js ***!
\***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO");
var ContenteditableUtils = {};
ContenteditableUtils.setCursorAtTheEnd = function (contentEditableElement) {
if (document.createRange) {
var range = document.createRange();
range.selectNodeContents(contentEditableElement);
range.collapse(false);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
contentEditableElement.focus();
range.detach();
}
};
ContenteditableUtils.getSelectionRanges = function () {
var ranges = [];
if (window.getSelection) {
var selection = window.getSelection(),
count = selection.rangeCount;
for (var index = 0; index < count; index++) {
ranges.push(selection.getRangeAt(index));
}
}
return ranges;
};
ContenteditableUtils.setSelectionRanges = function (ranges) {
var collapse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var rangeText = '';
if (window.getSelection && _.isArray(ranges)) {
var count = ranges.length,
selection = window.getSelection();
selection.removeAllRanges();
for (var index = 0; index < count; index++) {
var range = ranges[index];
if (range) {
selection.addRange(range);
rangeText += range;
if (collapse) {
range.collapse(false);
}
}
}
}
return rangeText;
};
module.exports = ContenteditableUtils;
/***/ }),
/***/ "Fj7m":
/*!*************************************************!*\
!*** ./modules/MailWebclient/js/AccountList.js ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
MainTab = App.isNewTab() && window.opener ? window.opener.MainTabMailMethods : null,
Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "ioSH"),
CoreAjax = __webpack_require__(/*! modules/CoreWebclient/js/Ajax.js */ "8QQh"),
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ"),
LinksUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Links.js */ "dpSB"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
CAccountModel = __webpack_require__(/*! modules/MailWebclient/js/models/CAccountModel.js */ "YmTJ"),
CFetcherModel = __webpack_require__(/*! modules/MailWebclient/js/models/CFetcherModel.js */ "Vbjo"),
CAliasModel = __webpack_require__(/*! modules/MailWebclient/js/models/CAliasModel.js */ "slJ3"),
CIdentityModel = __webpack_require__(/*! modules/MailWebclient/js/models/CIdentityModel.js */ "JI31");
/**
* @constructor
*/
function CAccountListModel() {
this.collection = ko.observableArray([]);
this.unifiedMailboxAccounts = ko.computed(function () {
if (Settings.AllowUnifiedInbox) {
return _.filter(this.collection(), function (oAccount) {
return oAccount.includeInUnifiedMailbox();
});
}
return [];
}, this);
this.unifiedInboxAllowed = ko.computed(function () {
return this.unifiedMailboxAccounts().length > 1;
}, this);
this.unifiedInboxReady = ko.observable(false);
}
/**
* @param {string} sHash
*/
CAccountListModel.prototype.getAccountByHash = function (sHash) {
return _.find(this.collection(), function (oAcct) {
return oAcct.hash() === sHash;
}, this);
};
/**
* @param {string} sNewCurrentHash
*/
CAccountListModel.prototype.changeCurrentAccountByHash = function (sNewCurrentHash) {
var oAccount = this.getAccountByHash(sNewCurrentHash);
if (oAccount && oAccount.id() !== this.currentId()) {
this.changeCurrentAccount(oAccount.id(), false);
}
};
/**
* Changes current account. Sets hash to show new account data.
*
* @param {number} iNewCurrentId
* @param {boolean} bPassToMail
*/
CAccountListModel.prototype.changeCurrentAccount = function (iNewCurrentId, bPassToMail) {
var oCurrentAccount = this.getCurrent(),
oNewCurrentAccount = this.getAccount(iNewCurrentId);
if (oNewCurrentAccount && this.currentId() !== iNewCurrentId) {
if (oCurrentAccount) {
oCurrentAccount.isCurrent(false);
}
this.currentId(iNewCurrentId);
oNewCurrentAccount.isCurrent(true);
} else if (!oCurrentAccount) {
this.currentId(0);
}
if (bPassToMail) {
Routing.setHash(LinksUtils.getMailbox());
}
};
/**
* @param {string} sNewEditedHash
*/
CAccountListModel.prototype.changeEditedAccountByHash = function (sNewEditedHash) {
var oAccount = this.getAccountByHash(sNewEditedHash);
if (oAccount && oAccount.id() !== this.editedId()) {
this.changeEditedAccount(oAccount.id());
}
};
/**
* Changes editable account.
*
* @param {number} iNewEditedId
*/
CAccountListModel.prototype.changeEditedAccount = function (iNewEditedId) {
var oEditedAccount = this.getEdited(),
oNewEditedAccount = this.getAccount(iNewEditedId);
if (oNewEditedAccount && this.editedId() !== iNewEditedId) {
if (oEditedAccount) {
oEditedAccount.isEdited(false);
}
this.editedId(iNewEditedId);
oNewEditedAccount.isEdited(true);
} else if (!oEditedAccount) {
this.editedId(0);
}
};
CAccountListModel.prototype.getDefaultFriendlyName = function () {
var oCurrAccount = this.getCurrent(),
oDefIdentity = _.find(oCurrAccount && oCurrAccount.identities() || [], function (oIdnt) {
return oIdnt.isDefault();
}) || oCurrAccount;
return oDefIdentity ? oDefIdentity.friendlyName() || oDefIdentity.email() : '';
};
/**
* @param {type} sHash
* @returns {Object}
*/
CAccountListModel.prototype.getIdentityByHash = function (sHash) {
var oIdentity = null;
_.each(this.collection(), function (oAccount) {
if (!oIdentity) {
oIdentity = _.find(oAccount.identities() || [], function (oIdnt) {
return oIdnt.hash() === sHash;
});
}
}, this);
return oIdentity;
};
/**
* @param {type} sHash
* @returns {Object}
*/
CAccountListModel.prototype.getFetcherByHash = function (sHash) {
var oFoundFetcher = null;
_.each(this.collection(), function (oAccount) {
if (!oFoundFetcher) {
oFoundFetcher = _.find(oAccount.fetchers(), function (oFetcher) {
return oFetcher.hash() === sHash;
});
}
}, this);
return oFoundFetcher;
};
/**
* @param {type} sHash
* @returns {Object}
*/
CAccountListModel.prototype.getAliasByHash = function (sHash) {
var oAlias = null;
_.each(this.collection(), function (oAccount) {
if (!oAlias) {
oAlias = _.find(oAccount.aliases() || [], function (oAlias) {
return oAlias.hash() === sHash;
});
}
}, this);
return oAlias;
};
/**
* Fills the collection of accounts.
* @param {Array} aAccounts
*/
CAccountListModel.prototype.parse = function (aAccounts) {
if (_.isArray(aAccounts)) {
this.collection(_.map(aAccounts, function (oRawAccount) {
return new CAccountModel(oRawAccount);
}));
this.initObservables(this.collection().length > 0 ? this.collection()[0].id() : 0);
}
};
/**
* @param {int} iCurrentId
*/
CAccountListModel.prototype.initObservables = function (iCurrentId) {
var oCurrAccount = this.getAccount(iCurrentId);
if (oCurrAccount) {
oCurrAccount.isCurrent(true);
oCurrAccount.isEdited(true);
}
this.currentId = ko.observable(iCurrentId);
this.editedId = ko.observable(iCurrentId);
};
/**
* @return {boolean}
*/
CAccountListModel.prototype.hasAccount = function () {
return this.collection().length > 0;
};
/**
* @param {number} iId
*
* @return {Object|undefined}
*/
CAccountListModel.prototype.getAccount = function (iId) {
var oAccount = _.find(this.collection(), function (oAcct) {
return oAcct.id() === iId;
}, this);
/** @type {Object|undefined} */
return oAccount;
};
/**
* @return {Object|undefined}
*/
CAccountListModel.prototype.getDefault = function () {
var oAccount = _.find(this.collection(), function (oAcct) {
return oAcct.bDefault;
}, this);
return oAccount;
};
/**
* @return {Object|undefined}
*/
CAccountListModel.prototype.getCurrent = function () {
return this.getAccount(this.currentId());
};
/**
* @return {Object|undefined}
*/
CAccountListModel.prototype.getEdited = function () {
return this.getAccount(this.editedId());
};
/**
* @param {number=} iAccountId
* @return {string}
*/
CAccountListModel.prototype.getEmail = function (iAccountId) {
iAccountId = iAccountId || this.currentId();
var sEmail = '',
oAccount = this.getAccount(iAccountId);
if (oAccount) {
sEmail = oAccount.email();
}
return sEmail;
};
/**
* @param {Object} oAccount
*/
CAccountListModel.prototype.addAccount = function (oAccount) {
this.collection.push(oAccount);
};
/**
* @param {number} iId
*/
CAccountListModel.prototype.deleteAccount = function (iId) {
this.collection.remove(function (oAcct) {
return oAcct.id() === iId;
});
var iFirstAccId = this.collection().length > 0 ? this.collection()[0].id() : 0;
this.changeCurrentAccount(iFirstAccId, false);
this.changeEditedAccount(iFirstAccId);
};
/**
* @param {number} iId
*
* @return {boolean}
*/
CAccountListModel.prototype.hasAccountWithId = function (iId) {
var oAccount = _.find(this.collection(), function (oAcct) {
return oAcct.id() === iId;
}, this);
return !!oAccount;
};
CAccountListModel.prototype.populateFetchersIdentities = function () {
this.populateFetchers();
this.populateIdentities();
this.populateAliases();
};
CAccountListModel.prototype.populateFetchers = function () {
if (Settings.AllowFetchers) {
CoreAjax.send(Settings.FetchersServerModuleName, 'GetFetchers', {
'AccountID': this.editedId()
}, this.onGetFetchersResponse, this);
}
};
CAccountListModel.prototype.populateAliases = function (fAfterPopulateAliases) {
if (Settings.AllowAliases) {
CoreAjax.send(Settings.AliasesServerModuleName, 'GetAliases', {
'AccountID': this.editedId()
}, function (oResponse, oRequest) {
this.onGetAliasesResponse(oResponse, oRequest);
if (_.isFunction(fAfterPopulateAliases)) {
fAfterPopulateAliases();
}
}, this);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CAccountListModel.prototype.onGetFetchersResponse = function (oResponse, oRequest) {
var oFetchers = {};
if (Types.isNonEmptyArray(oResponse.Result)) {
_.each(oResponse.Result, function (oData) {
var oFetcher = new CFetcherModel();
oFetcher.parse(oData);
if (!oFetchers[oFetcher.accountId()]) {
oFetchers[oFetcher.accountId()] = [];
}
oFetchers[oFetcher.accountId()].push(oFetcher);
});
}
_.each(this.collection(), function (oAccount) {
var aFetchers = Types.isNonEmptyArray(oFetchers[oAccount.id()]) ? oFetchers[oAccount.id()] : [];
oAccount.fetchers(aFetchers);
}, this);
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CAccountListModel.prototype.onGetAliasesResponse = function (oResponse, oRequest) {
var oAliases = {};
if (oResponse.Result && Types.isNonEmptyArray(oResponse.Result.ObjAliases)) {
_.each(oResponse.Result.ObjAliases, function (oData) {
var oAlias = new CAliasModel();
oAlias.parse(oData);
if (!oAliases[oAlias.accountId()]) {
oAliases[oAlias.accountId()] = [];
}
oAliases[oAlias.accountId()].push(oAlias);
});
}
_.each(this.collection(), function (oAccount) {
var aAliases = Types.isNonEmptyArray(oAliases[oAccount.id()]) ? oAliases[oAccount.id()] : [];
oAccount.aliases(aAliases);
}, this);
};
/**
* @param {function} fAfterPopulateIdentities
*/
CAccountListModel.prototype.populateIdentities = function (fAfterPopulateIdentities) {
if (Settings.AllowIdentities && this.collection().length >= 1) {
Ajax.send('GetIdentities', null, function (oResponse, oRequest) {
this.onGetIdentitiesResponse(oResponse, oRequest);
if (_.isFunction(fAfterPopulateIdentities)) {
fAfterPopulateIdentities();
}
}, this);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CAccountListModel.prototype.onGetIdentitiesResponse = function (oResponse, oRequest) {
var oIdentities = {};
if (Types.isNonEmptyArray(oResponse.Result)) {
_.each(oResponse.Result, function (oIdentityData) {
var oIdentity = new CIdentityModel(),
iAccountId = -1;
oIdentity.parse(oIdentityData);
iAccountId = oIdentity.accountId();
if (!oIdentities[iAccountId]) {
oIdentities[iAccountId] = [];
}
oIdentities[iAccountId].push(oIdentity);
});
}
_.each(this.collection(), function (oAccount) {
var aIdentities = oIdentities[oAccount.id()],
oIdentity = new CIdentityModel();
if (!oAccount.bAllowUseIdentities || !Types.isNonEmptyArray(aIdentities)) {
aIdentities = [];
}
oIdentity.parse({
AccountPart: true,
Default: !_.find(aIdentities, function (oIdentity) {
return oIdentity.isDefault();
}),
Email: oAccount.email(),
FriendlyName: oAccount.friendlyName(),
IdAccount: oAccount.id(),
EntityId: 0,
// default identity id
Signature: oAccount.signature(),
UseSignature: oAccount.useSignature()
});
aIdentities.unshift(oIdentity);
oAccount.identities(aIdentities);
});
};
/**
* @param {Object} oSrcAccounts
*/
CAccountListModel.prototype.populateIdentitiesFromSourceAccount = function (oSrcAccounts) {
if (oSrcAccounts) {
_.each(this.collection(), function (oAccount) {
var oSrcAccount = oSrcAccounts.getAccount(oAccount.id());
if (oSrcAccount) {
oAccount.fetchers(oSrcAccount.fetchers());
oAccount.identities(oSrcAccount.identities());
oAccount.signature(oSrcAccount.signature());
oAccount.useSignature(oSrcAccount.useSignature());
}
});
}
};
CAccountListModel.prototype.getAccountsEmails = function () {
return _.uniq(_.map(this.collection(), function (oAccount) {
return oAccount.email();
}));
};
CAccountListModel.prototype.getAllFullEmails = function () {
var aFullEmails = [];
_.each(this.collection(), function (oAccount) {
if (oAccount) {
if (Types.isNonEmptyArray(oAccount.identities())) {
_.each(oAccount.identities(), function (oIdentity) {
aFullEmails.push(oIdentity.fullEmail());
});
} else {
aFullEmails.push(oAccount.fullEmail());
}
_.each(oAccount.fetchers(), function (oFetcher) {
if (oFetcher.isEnabled() && oFetcher.isOutgoingEnabled() && oFetcher.fullEmail() !== '') {
aFullEmails.push(oFetcher.fullEmail());
}
});
}
});
return aFullEmails;
};
CAccountListModel.prototype.getCurrentFetchersAndFiltersFolderNames = function () {
var oAccount = this.getCurrent(),
aFolders = [];
if (oAccount) {
if (oAccount.filters()) {
_.each(oAccount.filters().collection(), function (oFilter) {
aFolders.push(oFilter.folder());
}, this);
}
_.each(oAccount.fetchers(), function (oFetcher) {
aFolders.push(oFetcher.folder());
}, this);
}
return aFolders;
};
/**
* @param {Array} aEmails
* @returns {string}
*/
CAccountListModel.prototype.getAttendee = function (aEmails) {
var aAccountsEmails = [],
sAttendee = '';
_.each(this.collection(), function (oAccount) {
if (oAccount.isCurrent()) {
aAccountsEmails = _.union([oAccount.email()], oAccount.getFetchersIdentitiesEmails(), aAccountsEmails);
} else {
aAccountsEmails = _.union(aAccountsEmails, [oAccount.email()], oAccount.getFetchersIdentitiesEmails());
}
});
aAccountsEmails = _.uniq(aAccountsEmails);
_.each(aAccountsEmails, _.bind(function (sAccountEmail) {
if (sAttendee === '') {
var sFoundEmail = _.find(aEmails, function (sEmail) {
return sEmail === sAccountEmail;
});
if (sFoundEmail === sAccountEmail) {
sAttendee = sAccountEmail;
}
}
}, this));
return sAttendee;
};
var AccountList = new CAccountListModel();
if (window.auroraAppData.Mail && _.isArray(window.auroraAppData.Mail.Accounts)) {
AccountList.parse(window.auroraAppData.Mail.Accounts);
} else {
AccountList.parse([]);
}
if (MainTab) {
AccountList.populateIdentitiesFromSourceAccount(MainTab.getAccountList());
}
module.exports = AccountList;
/***/ }),
/***/ "Hq9N":
/*!*****************************************************!*\
!*** ./modules/MailWebclient/js/utils/Templates.js ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); }
var App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o");
var MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z");
module.exports = {
fillTemplatesOptions: function fillTemplatesOptions(templatesOptionsObservable) {
if (Settings.AllowInsertTemplateOnCompose) {
templatesOptionsObservable(this.getTemplatesOptions());
}
},
initTemplatesSubscription: function initTemplatesSubscription(templatesOptionsObservable) {
var _this = this;
if (Settings.AllowInsertTemplateOnCompose) {
App.subscribeEvent('MailWebclient::ParseMessagesBodies::after', function (parameters) {
if (parameters.AccountID === MailCache.currentAccountId() && parameters.Folder === MailCache.getTemplateFolder()) {
templatesOptionsObservable(_this.getTemplatesOptions());
}
});
}
},
getTemplatesOptions: function getTemplatesOptions() {
var folderList = MailCache.folderList(),
templateFolderFullName = MailCache.getTemplateFolder(),
templateFolder = templateFolderFullName ? folderList.getFolderByFullName(templateFolderFullName) : null,
uidList = templateFolder ? templateFolder.getUidList('', '', Settings.MessagesSortBy.DefaultSortBy, Settings.MessagesSortBy.DefaultSortOrder) : null,
templatesOptions = [];
if (uidList) {
var uids = uidList.collection();
if (uids.length > Settings.MaxTemplatesCountOnCompose) {
uids.splice(Settings.MaxTemplatesCountOnCompose), _readOnlyError("uids");
}
uids.forEach(function (uid) {
var message = templateFolder.getMessageByUid(uid);
if (message.text() !== '') {
templatesOptions.push({
subject: message.subject(),
text: message.text()
});
}
});
}
return templatesOptions;
}
};
/***/ }),
/***/ "J08i":
/*!*********************************************************!*\
!*** ./modules/MailWebclient/js/utils/ScreenCompose.js ***!
\*********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "ioSH"),
LinksUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Links.js */ "dpSB"),
ScreenComposeUtils = {};
ScreenComposeUtils.composeMessage = function () {
Routing.setHash(LinksUtils.getCompose());
};
/**
* @param {int} iAccountId
* @param {string} sFolder
* @param {string} sUid
*/
ScreenComposeUtils.composeMessageFromDrafts = function (iAccountId, sFolder, sUid) {
var aParams = LinksUtils.getComposeFromMessage('drafts', iAccountId, sFolder, sUid);
Routing.setHash(aParams);
};
/**
* @param {string} sReplyType
* @param {int} iAccountId
* @param {string} sFolder
* @param {string} sUid
*/
ScreenComposeUtils.composeMessageAsReplyOrForward = function (sReplyType, iAccountId, sFolder, sUid) {
var aParams = LinksUtils.getComposeFromMessage(sReplyType, iAccountId, sFolder, sUid);
Routing.setHash(aParams);
};
/**
* @param {string} sToAddresses
*/
ScreenComposeUtils.composeMessageToAddresses = function (sToAddresses) {
var aParams = LinksUtils.getComposeWithToField(sToAddresses);
Routing.setHash(aParams);
};
ScreenComposeUtils.composeMessageWithData = function (oData) {
var aParams = LinksUtils.getComposeWithData(oData);
aParams.shift();
aParams.shift();
Routing.goDirectly(LinksUtils.getCompose(), aParams);
};
/**
* @param {Object} oMessage
*/
ScreenComposeUtils.composeMessageWithEml = function (oMessage) {
var aParams = LinksUtils.getComposeWithEmlObject(oMessage.accountId(), oMessage.folder(), oMessage.longUid(), oMessage);
aParams.shift();
aParams.shift();
Routing.goDirectly(LinksUtils.getCompose(), aParams);
};
/**
* @param {Array} aFileItems
*/
ScreenComposeUtils.composeMessageWithAttachments = function (aFileItems) {
var aParams = LinksUtils.getComposeWithObject('attachments', aFileItems);
aParams.shift();
aParams.shift();
Routing.goDirectly(LinksUtils.getCompose(), aParams);
};
module.exports = ScreenComposeUtils;
/***/ }),
/***/ "JI31":
/*!***********************************************************!*\
!*** ./modules/MailWebclient/js/models/CIdentityModel.js ***!
\***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ko = __webpack_require__(/*! knockout */ "p09A"),
AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "rBrp"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC");
/**
* @constructor
*/
function CIdentityModel() {
this.IDENTITY = true; // constant
this.bAccountPart = false;
this.isDefault = ko.observable(false);
this.email = ko.observable('');
this.friendlyName = ko.observable('');
this.fullEmail = ko.computed(function () {
return AddressUtils.getFullEmail(this.friendlyName(), this.email());
}, this);
this.accountId = ko.observable(-1);
this.id = ko.observable(-1);
this.signature = ko.observable('');
this.useSignature = ko.observable(false);
this.hash = ko.computed(function () {
return Utils.getHash(this.accountId() + 'identity' + this.id());
}, this);
}
/**
* @param {Object} oData
*/
CIdentityModel.prototype.parse = function (oData) {
this.bAccountPart = !!oData.AccountPart;
this.isDefault(!!oData.Default);
this.email(Types.pString(oData.Email));
this.friendlyName(Types.pString(oData.FriendlyName));
this.accountId(Types.pInt(oData.IdAccount));
this.id(Types.pInt(oData.EntityId));
var sSignature = Types.pString(oData.Signature);
if (sSignature.indexOf('<') !== 0) {
sSignature = '<div>' + sSignature + '</div>';
}
this.signature = ko.observable(sSignature);
this.useSignature(!!oData.UseSignature);
};
module.exports = CIdentityModel;
/***/ }),
/***/ "Jd7T":
/*!***********************************************************!*\
!*** ./modules/MailWebclient/js/views/CHtmlEditorView.js ***!
\***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
$ = __webpack_require__(/*! jquery */ "M4cL"),
ko = __webpack_require__(/*! knockout */ "p09A");
var AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "rBrp"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9");
var App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Browser = __webpack_require__(/*! modules/CoreWebclient/js/Browser.js */ "/Odb"),
CJua = __webpack_require__(/*! modules/CoreWebclient/js/CJua.js */ "hr1f"),
UserSettings = __webpack_require__(/*! modules/CoreWebclient/js/Settings.js */ "KIwC");
var Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
AlertPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/AlertPopup.js */ "Rjyw"),
ConfirmPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/ConfirmPopup.js */ "MYiO");
var CAttachmentModel = __webpack_require__(/*! modules/MailWebclient/js/models/CAttachmentModel.js */ "3boL"),
CColorPickerView = __webpack_require__(/*! modules/MailWebclient/js/views/CColorPickerView.js */ "gbYw"),
CCrea = __webpack_require__(/*! modules/MailWebclient/js/CCrea.js */ "y9oY"),
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
TemplatesUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Templates.js */ "Hq9N"),
sourceEditor = __webpack_require__(/*! modules/MailWebclient/js/views/html-editor/SourceEditor.js */ "bpAE");
/**
* @constructor
* @param {boolean} bInsertImageAsBase64
* @param {boolean} bAllowComposePlainText
* @param {Object=} oParent
*/
function CHtmlEditorView(bInsertImageAsBase64, bAllowComposePlainText, oParent) {
var _this = this;
this.oParent = oParent;
this.creaId = 'creaId' + Math.random().toString().replace('.', '');
this.textFocused = ko.observable(false);
this.workareaDom = ko.observable();
this.plaintextDom = ko.observable();
this.uploaderAreaDom = ko.observable();
this.editorUploaderBodyDragOver = ko.observable(false);
this.htmlEditorDom = ko.observable();
this.toolbarDom = ko.observable();
this.colorPickerDropdownDom = ko.observable();
this.insertLinkDropdownDom = ko.observable();
this.insertImageDropdownDom = ko.observable();
this.isFWBold = ko.observable(false);
this.isFSItalic = ko.observable(false);
this.isTDUnderline = ko.observable(false);
this.isTDStrikeThrough = ko.observable(false);
this.isEnumeration = ko.observable(false);
this.isBullets = ko.observable(false);
this.isEnable = ko.observable(true);
this.isEnable.subscribe(function () {
if (this.oCrea) {
this.oCrea.setEditable(this.isEnable());
}
}, this);
this.bInsertImageAsBase64 = bInsertImageAsBase64;
this.bAllowFileUpload = !(bInsertImageAsBase64 && window.File === undefined);
this.bAllowInsertImage = Settings.AllowInsertImage;
this.bAllowHorizontalLineButton = Settings.AllowHorizontalLineButton;
this.bAllowComposePlainText = bAllowComposePlainText;
this.plainTextMode = ko.observable(false);
this.changeTextModeTitle = ko.computed(function () {
return this.plainTextMode() ? TextUtils.i18n('MAILWEBCLIENT/LINK_TURNOFF_PLAINTEXT') : TextUtils.i18n('MAILWEBCLIENT/LINK_TURNON_PLAINTEXT');
}, this);
this.bAllowEditHtmlSource = Settings.AllowEditHtmlSource;
this.editSourceMode = ko.observable(false);
this.htmlSourceDom = ko.observable();
this.htmlSourceDom.subscribe(function () {
sourceEditor.setHtmlSourceDom(_this.htmlSourceDom());
});
this.sourceCodeButtonText = ko.computed(function () {
return _this.editSourceMode() ? TextUtils.i18n('MAILWEBCLIENT/ACTION_EDIT_HTML_PREVIEW') : TextUtils.i18n('MAILWEBCLIENT/ACTION_EDIT_HTML_SOURCE_CODE');
});
this.lockFontSubscribing = ko.observable(false);
this.bAllowImageDragAndDrop = !Browser.ie10AndAbove;
this.aFonts = ['Arial', 'Arial Black', 'Courier New', 'Tahoma', 'Times New Roman', 'Verdana'];
this.sDefaultFont = Settings.DefaultFontName;
this.correctFontFromSettings();
this.selectedFont = ko.observable('');
this.selectedFont.subscribe(function () {
if (this.oCrea && !this.lockFontSubscribing() && !this.inactive()) {
this.oCrea.fontName(this.selectedFont());
}
}, this);
this.iDefaultSize = Settings.DefaultFontSize;
this.selectedSize = ko.observable(0);
this.selectedSize.subscribe(function () {
if (this.oCrea && !this.lockFontSubscribing() && !this.inactive()) {
this.oCrea.fontSize(this.selectedSize());
}
}, this);
this.visibleInsertLinkPopup = ko.observable(false);
this.linkForInsert = ko.observable('');
this.linkFocused = ko.observable(false);
this.visibleLinkPopup = ko.observable(false);
this.linkPopupDom = ko.observable(null);
this.linkHrefDom = ko.observable(null);
this.linkHref = ko.observable('');
this.visibleLinkHref = ko.observable(false);
this.visibleImagePopup = ko.observable(false);
this.visibleImagePopup.subscribe(function () {
this.onImageOut();
}, this);
this.imagePopupTop = ko.observable(0);
this.imagePopupLeft = ko.observable(0);
this.imageSelected = ko.observable(false);
this.tooltipText = ko.observable('');
this.tooltipPopupTop = ko.observable(0);
this.tooltipPopupLeft = ko.observable(0);
this.visibleInsertImagePopup = ko.observable(false);
this.imageUploaderButton = ko.observable(null);
this.aUploadedImagesData = [];
this.imagePathFromWeb = ko.observable('');
this.visibleTemplatePopup = ko.observable(false);
this.visibleFontColorPopup = ko.observable(false);
this.oFontColorPickerView = new CColorPickerView(TextUtils.i18n('MAILWEBCLIENT/LABEL_TEXT_COLOR'), this.setTextColorFromPopup, this);
this.oBackColorPickerView = new CColorPickerView(TextUtils.i18n('MAILWEBCLIENT/LABEL_BACKGROUND_COLOR'), this.setBackColorFromPopup, this);
this.inactive = ko.observable(false);
this.sPlaceholderText = '';
this.bAllowChangeInputDirection = UserSettings.IsRTL || Settings.AllowChangeInputDirection;
this.disableEdit = ko.observable(false);
this.textChanged = ko.observable(false);
this.actualTextChanged = ko.observable(false);
this.templates = ko.observableArray([]);
TemplatesUtils.initTemplatesSubscription(this.templates);
this.imageResizeOptions = [];
_.each(Settings.ImageResizerOptions, function (value, label) {
_this.imageResizeOptions.push({
label: TextUtils.i18n(label),
value: value
});
});
}
CHtmlEditorView.prototype.ViewTemplate = 'MailWebclient_HtmlEditorView';
CHtmlEditorView.prototype.setInactive = function (bInactive) {
this.inactive(bInactive);
if (this.inactive()) {
if (this.editSourceMode()) {
this.toggleSourceEdit();
}
this.setPlaceholder();
} else {
this.removePlaceholder();
}
};
CHtmlEditorView.prototype.setPlaceholder = function () {
var sText = this.removeAllTags(this.getText());
if (sText === '' || sText === ' ') {
this.setText('<span>' + this.sPlaceholderText + '</span>');
if (this.oCrea) {
this.oCrea.setBlur();
}
}
};
CHtmlEditorView.prototype.removePlaceholder = function () {
var sText = this.oCrea ? this.removeAllTags(this.oCrea.getText(false)) : '';
if (sText === this.sPlaceholderText) {
this.setText('');
if (this.oCrea) {
this.oCrea.setFocus(true);
}
}
};
CHtmlEditorView.prototype.hasOpenedPopup = function () {
return this.visibleInsertLinkPopup() || this.visibleLinkPopup() || this.visibleImagePopup() || this.visibleInsertImagePopup() || this.visibleFontColorPopup() || this.visibleTemplatePopup();
};
CHtmlEditorView.prototype.setDisableEdit = function (bDisableEdit) {
this.disableEdit(!!bDisableEdit);
};
CHtmlEditorView.prototype.correctFontFromSettings = function () {
var sDefaultFont = this.sDefaultFont,
bFound = false;
_.each(this.aFonts, function (sFont) {
if (sFont.toLowerCase() === sDefaultFont.toLowerCase()) {
sDefaultFont = sFont;
bFound = true;
}
});
if (bFound) {
this.sDefaultFont = sDefaultFont;
} else {
this.aFonts.push(sDefaultFont);
}
};
/**
* @param {Object} $link
*/
CHtmlEditorView.prototype.showLinkPopup = function ($link) {
var $workarea = $(this.workareaDom()),
$composePopup = $workarea.closest('.panel.compose'),
oWorkareaPos = $workarea.position(),
oPos = $link.position(),
iHeight = $link.height(),
iLeft = Math.round(oPos.left + oWorkareaPos.left),
iTop = Math.round(oPos.top + iHeight + oWorkareaPos.top);
this.linkHref($link.attr('href') || $link.text());
$(this.linkPopupDom()).css({
left: iLeft,
top: iTop
});
$(this.linkHrefDom()).css({
left: iLeft,
top: iTop
});
if (!Browser.firefox && $composePopup.length === 1) {
$(this.linkPopupDom()).css({
'max-width': $composePopup.width() - iLeft - 40 + 'px',
'white-space': 'pre-line',
'word-wrap': 'break-word'
});
}
this.visibleLinkPopup(true);
};
CHtmlEditorView.prototype.hideLinkPopup = function () {
this.visibleLinkPopup(false);
};
CHtmlEditorView.prototype.showChangeLink = function () {
this.visibleLinkHref(true);
this.hideLinkPopup();
};
CHtmlEditorView.prototype.changeLink = function () {
this.oCrea.changeLink(this.linkHref());
this.hideChangeLink();
};
CHtmlEditorView.prototype.hideChangeLink = function () {
this.visibleLinkHref(false);
};
/**
* @param {jQuery} $image
* @param {Object} oEvent
*/
CHtmlEditorView.prototype.showImagePopup = function ($image, oEvent) {
var $workarea = $(this.workareaDom()),
oWorkareaPos = $workarea.position(),
oWorkareaOffset = $workarea.offset();
this.imagePopupLeft(Math.round(oEvent.pageX + oWorkareaPos.left - oWorkareaOffset.left));
this.imagePopupTop(Math.round(oEvent.pageY + oWorkareaPos.top - oWorkareaOffset.top));
this.visibleImagePopup(true);
};
CHtmlEditorView.prototype.hideImagePopup = function () {
this.visibleImagePopup(false);
};
CHtmlEditorView.prototype.resizeImage = function (sSize) {
var oParams = {
width: 'auto',
height: 'auto'
};
if (sSize) {
oParams.width = sSize;
}
this.oCrea.changeCurrentImage(oParams);
this.visibleImagePopup(false);
};
CHtmlEditorView.prototype.onImageOver = function (oEvent) {
if (oEvent.target.nodeName === 'IMG' && !this.visibleImagePopup()) {
this.imageSelected(true);
this.tooltipText(TextUtils.i18n('MAILWEBCLIENT/ACTION_CLICK_TO_EDIT_IMAGE'));
var self = this,
$workarea = $(this.workareaDom());
$workarea.bind('mousemove.image', function (oEvent) {
var oWorkareaPos = $workarea.position(),
oWorkareaOffset = $workarea.offset();
self.tooltipPopupTop(Math.round(oEvent.pageY + oWorkareaPos.top - oWorkareaOffset.top));
self.tooltipPopupLeft(Math.round(oEvent.pageX + oWorkareaPos.left - oWorkareaOffset.left));
});
}
return true;
};
CHtmlEditorView.prototype.onImageOut = function (oEvent) {
if (this.imageSelected()) {
this.imageSelected(false);
var $workarea = $(this.workareaDom());
$workarea.unbind('mousemove.image');
}
return true;
};
CHtmlEditorView.prototype.commit = function () {
this.textChanged(false);
};
/**
* @param {string} sText
* @param {boolean} bPlain
* @param {string} sTabIndex
* @param {string} sPlaceholderText
*/
CHtmlEditorView.prototype.init = function (sText, bPlain, sTabIndex, sPlaceholderText) {
var _this2 = this;
this.sPlaceholderText = sPlaceholderText || '';
if (this.oCrea) {
this.oCrea.$container = $('#' + this.oCrea.oOptions.creaId);
// in case if knockoutjs destroyed dom element with html editor
if (this.oCrea.$container.children().length === 0) {
this.oCrea.start(this.isEnable());
// this.editorUploader must be re-initialized because compose popup is destroyed after it is closed
this.initEditorUploader();
}
} else {
$(document.body).on('click', _.bind(function (oEvent) {
var oParent = $(oEvent.target).parents('span.dropdown_helper');
if (oParent.length === 0) {
this.closeAllPopups(true);
}
}, this));
this.initEditorUploader();
this.oCrea = new CCrea({
creaId: this.creaId,
fontNameArray: this.aFonts,
defaultFontName: this.sDefaultFont,
defaultFontSize: this.iDefaultSize,
alwaysTryUseImageWhilePasting: Settings.AlwaysTryUseImageWhilePasting,
isRtl: UserSettings.IsRTL,
enableDrop: false,
onChange: _.bind(function () {
this.textChanged(true);
this.actualTextChanged.valueHasMutated();
}, this),
onCursorMove: _.bind(this.setFontValuesFromText, this),
onFocus: _.bind(this.onCreaFocus, this),
onBlur: _.bind(this.onCreaBlur, this),
onUrlIn: _.bind(this.showLinkPopup, this),
onUrlOut: _.bind(this.hideLinkPopup, this),
onImageSelect: _.bind(this.showImagePopup, this),
onImageBlur: _.bind(this.hideImagePopup, this),
onItemOver: Browser.mobileDevice || App.isMobile() ? null : _.bind(this.onImageOver, this),
onItemOut: Browser.mobileDevice || App.isMobile() ? null : _.bind(this.onImageOut, this),
openInsertLinkDialog: _.bind(this.insertLink, this),
onUrlClicked: true
});
this.oCrea.start(this.isEnable());
sourceEditor.setOnChangeHandler(function () {
_this2.textChanged(true);
_this2.actualTextChanged.valueHasMutated();
});
}
if (this.plaintextDom()) {
this.plaintextDom().on('keyup paste', function () {
_this2.textChanged(true);
_this2.actualTextChanged.valueHasMutated();
});
}
this.oCrea.setTabIndex(sTabIndex);
this.clearUndoRedo();
this.editSourceMode(false);
sourceEditor.clear();
this.setText(sText, bPlain);
this.setFontValuesFromText();
this.aUploadedImagesData = [];
this.selectedFont(this.sDefaultFont);
this.selectedSize(this.iDefaultSize);
TemplatesUtils.fillTemplatesOptions(this.templates);
};
CHtmlEditorView.prototype.toggleTemplatePopup = function (oViewModel, oEvent) {
if (this.visibleTemplatePopup()) {
this.visibleTemplatePopup(false);
} else {
oEvent.stopPropagation();
this.closeAllPopups();
this.visibleTemplatePopup(true);
}
};
CHtmlEditorView.prototype.insertTemplate = function (sHtml, oEvent) {
oEvent.stopPropagation();
this.insertHtml(sHtml);
};
CHtmlEditorView.prototype.isInitialized = function () {
return !!this.oCrea;
};
CHtmlEditorView.prototype.setFocus = function () {
if (this.oCrea) {
this.oCrea.setFocus(false);
}
};
/**
* @param {string} sNewSignatureContent
* @param {string} sOldSignatureContent
*/
CHtmlEditorView.prototype.changeSignatureContent = function (sNewSignatureContent, sOldSignatureContent) {
if (this.oCrea && !this.disableEdit()) {
this.oCrea.changeSignatureContent(sNewSignatureContent, sOldSignatureContent);
}
};
CHtmlEditorView.prototype.setFontValuesFromText = function () {
this.lockFontSubscribing(true);
this.isFWBold(this.oCrea.getIsBold());
this.isFSItalic(this.oCrea.getIsItalic());
this.isTDUnderline(this.oCrea.getIsUnderline());
this.isTDStrikeThrough(this.oCrea.getIsStrikeThrough());
this.isEnumeration(this.oCrea.getIsEnumeration());
this.isBullets(this.oCrea.getIsBullets());
this.selectedFont(this.oCrea.getFontName());
this.selectedSize(this.oCrea.getFontSizeInNumber().toString());
this.lockFontSubscribing(false);
};
CHtmlEditorView.prototype.isUndoAvailable = function () {
if (this.oCrea) {
return this.oCrea.isUndoAvailable();
}
return false;
};
CHtmlEditorView.prototype.getPlainText = function () {
if (this.oCrea) {
return this.oCrea.getPlainText();
}
return '';
};
/**
* @param {boolean=} bRemoveSignatureAnchor = false
*/
CHtmlEditorView.prototype.getText = function (bRemoveSignatureAnchor) {
if (this.plainTextMode()) {
return this.plaintextDom() ? this.plaintextDom().val() : '';
}
if (this.editSourceMode() && sourceEditor.isInitialized()) {
return sourceEditor.getText();
}
var sText = this.oCrea ? this.oCrea.getText(bRemoveSignatureAnchor) : '';
return this.sPlaceholderText !== '' && this.removeAllTags(sText) === this.sPlaceholderText ? '' : sText;
};
CHtmlEditorView.prototype.getEditableArea = function () {
return this.oCrea.$editableArea;
};
/**
* @param {string} sText
* @param {boolean} bPlain
*/
CHtmlEditorView.prototype.setText = function (sText) {
var bPlain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (this.oCrea && !this.disableEdit()) {
if (bPlain !== null) {
this.plainTextMode(!!bPlain);
}
if (this.plainTextMode()) {
if (TextUtils.isHtml(sText)) {
sText = TextUtils.htmlToPlain(sText);
}
this.plaintextDom().val(sText);
} else {
if (!TextUtils.isHtml(sText)) {
sText = TextUtils.plainToHtml(sText);
}
this.oCrea.setText(sText);
}
if (this.inactive() && sText === '') {
this.setPlaceholder();
}
}
};
CHtmlEditorView.prototype.undoAndClearRedo = function () {
if (this.oCrea) {
this.oCrea.undo();
this.oCrea.clearRedo();
}
};
CHtmlEditorView.prototype.clearUndoRedo = function () {
if (this.oCrea) {
this.oCrea.clearUndoRedo();
}
};
/**
* @param {string} sText
*/
CHtmlEditorView.prototype.removeAllTags = function (sText) {
return sText.replace(/<style>.*<\/style>/g, '').replace(/<[^>]*>/g, '');
};
CHtmlEditorView.prototype.onCreaFocus = function () {
if (this.oCrea) {
this.closeAllPopups();
this.textFocused(true);
}
};
CHtmlEditorView.prototype.onCreaBlur = function () {
if (this.oCrea) {
this.textFocused(false);
}
};
CHtmlEditorView.prototype.onEscHandler = function () {
if (!Popups.hasOpenedMaximizedPopups()) {
this.closeAllPopups();
}
};
/**
* @param {boolean} bWithoutLinkPopup
*/
CHtmlEditorView.prototype.closeAllPopups = function (bWithoutLinkPopup) {
bWithoutLinkPopup = !!bWithoutLinkPopup;
if (!bWithoutLinkPopup) {
this.visibleLinkPopup(false);
}
this.visibleInsertLinkPopup(false);
this.visibleImagePopup(false);
this.visibleInsertImagePopup(false);
this.visibleFontColorPopup(false);
this.visibleTemplatePopup(false);
};
/**
* @param {string} sHtml
*/
CHtmlEditorView.prototype.insertHtml = function (sHtml) {
if (this.oCrea) {
if (!this.oCrea.isFocused()) {
this.oCrea.setFocus(true);
}
this.oCrea.insertHtml(sHtml, false);
}
};
/**
* @param {Object} oViewModel
* @param {Object} oEvent
*/
CHtmlEditorView.prototype.insertLink = function (oViewModel, oEvent) {
if (!this.inactive() && !this.visibleInsertLinkPopup()) {
if (oEvent && _.isFunction(oEvent.stopPropagation)) {
oEvent.stopPropagation();
}
this.linkForInsert(this.oCrea.getSelectedText());
this.closeAllPopups();
this.visibleInsertLinkPopup(true);
this.linkFocused(true);
}
};
/**
* @param {Object} oCurrentViewModel
* @param {Object} event
*/
CHtmlEditorView.prototype.insertLinkFromPopup = function (oCurrentViewModel, event) {
if (this.linkForInsert().length > 0) {
if (AddressUtils.isCorrectEmail(this.linkForInsert())) {
this.oCrea.insertEmailLink(this.linkForInsert());
} else {
this.oCrea.insertLink(this.linkForInsert());
}
}
this.closeInsertLinkPopup(oCurrentViewModel, event);
return false;
};
/**
* @param {Object} oCurrentViewModel
* @param {Object} event
*/
CHtmlEditorView.prototype.closeInsertLinkPopup = function (oCurrentViewModel, event) {
this.visibleInsertLinkPopup(false);
if (event) {
event.stopPropagation();
}
};
CHtmlEditorView.prototype.textColor = function (oViewModel, oEvent) {
if (!this.inactive()) {
this.closeAllPopups();
if (!this.visibleFontColorPopup()) {
oEvent.stopPropagation();
this.visibleFontColorPopup(true);
this.oFontColorPickerView.onShow();
this.oBackColorPickerView.onShow();
}
}
};
/**
* @param {string} sColor
* @return string
*/
CHtmlEditorView.prototype.colorToHex = function (sColor) {
if (sColor.substr(0, 1) === '#') {
return sColor;
}
/*jslint bitwise: true*/
var aDigits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(sColor),
iRed = Types.pInt(aDigits[2]),
iGreen = Types.pInt(aDigits[3]),
iBlue = Types.pInt(aDigits[4]),
iRgb = iBlue | iGreen << 8 | iRed << 16,
sRgb = iRgb.toString(16);
/*jslint bitwise: false*/
while (sRgb.length < 6) {
sRgb = '0' + sRgb;
}
return aDigits[1] + '#' + sRgb;
};
/**
* @param {string} sColor
*/
CHtmlEditorView.prototype.setTextColorFromPopup = function (sColor) {
this.oCrea.textColor(this.colorToHex(sColor));
this.closeAllPopups();
};
/**
* @param {string} sColor
*/
CHtmlEditorView.prototype.setBackColorFromPopup = function (sColor) {
this.oCrea.backgroundColor(this.colorToHex(sColor));
this.closeAllPopups();
};
CHtmlEditorView.prototype.insertImage = function (oViewModel, oEvent) {
if (!this.inactive() && Settings.AllowInsertImage && !this.visibleInsertImagePopup()) {
oEvent.stopPropagation();
this.imagePathFromWeb('');
this.closeAllPopups();
this.visibleInsertImagePopup(true);
this.initUploader();
}
return true;
};
/**
* @param {Object} oCurrentViewModel
* @param {Object} event
*/
CHtmlEditorView.prototype.insertWebImageFromPopup = function (oCurrentViewModel, event) {
if (Settings.AllowInsertImage && this.imagePathFromWeb().length > 0) {
this.oCrea.insertImage(this.imagePathFromWeb());
}
this.closeInsertImagePopup(oCurrentViewModel, event);
};
/**
* @param {string} sUid
* @param oAttachmentData
*/
CHtmlEditorView.prototype.insertComputerImageFromPopup = function (sUid, oAttachmentData) {
var iAccountId = _.isFunction(this.oParent && this.oParent.senderAccountId) ? this.oParent.senderAccountId() : MailCache.currentAccountId(),
oAttachment = new CAttachmentModel(iAccountId),
sViewLink = '',
bResult = false;
oAttachment.parse(oAttachmentData);
sViewLink = oAttachment.getActionUrl('view');
if (Settings.AllowInsertImage && sViewLink.length > 0) {
bResult = this.oCrea.insertImage(sViewLink);
if (bResult) {
$(this.oCrea.$editableArea).find('img[src="' + sViewLink + '"]').attr('data-x-src-cid', sUid);
oAttachmentData.CID = sUid;
this.aUploadedImagesData.push(oAttachmentData);
}
}
this.closeInsertImagePopup();
};
CHtmlEditorView.prototype.getUploadedImagesData = function () {
return this.aUploadedImagesData;
};
/**
* @param {?=} oCurrentViewModel
* @param {?=} event
*/
CHtmlEditorView.prototype.closeInsertImagePopup = function (oCurrentViewModel, event) {
this.visibleInsertImagePopup(false);
if (event) {
event.stopPropagation();
}
};
/**
* Initializes file uploader.
*/
CHtmlEditorView.prototype.initUploader = function () {
// this.oJua must be re-initialized because compose popup is destroyed after it is closed
if (this.imageUploaderButton()) {
this.oJua = new CJua({
action: '?/Api/',
name: 'jua-uploader',
queueSize: 2,
clickElement: this.imageUploaderButton(),
hiddenElementsPosition: UserSettings.IsRTL ? 'right' : 'left',
disableMultiple: true,
disableAjaxUpload: false,
disableDragAndDrop: true,
hidden: _.extendOwn({
Module: Settings.ServerModuleName,
Method: 'UploadAttachment',
Parameters: function Parameters() {
return JSON.stringify({
AccountID: MailCache.currentAccountId()
});
}
}, App.getCommonRequestParameters())
});
if (this.bInsertImageAsBase64) {
this.oJua.on('onSelect', _.bind(this.onEditorDrop, this));
} else {
this.oJua.on('onSelect', _.bind(this.onFileUploadSelect, this)).on('onComplete', _.bind(this.onFileUploadComplete, this));
}
}
};
/**
* Initializes file uploader for editor.
*/
CHtmlEditorView.prototype.initEditorUploader = function () {
// this.editorUploader must be re-initialized because compose popup is destroyed after it is closed
if (Settings.AllowInsertImage && this.uploaderAreaDom()) {
var fBodyDragEnter = null,
fBodyDragOver = null;
if (this.oParent && this.oParent.composeUploaderDragOver && this.oParent.onFileUploadProgress && this.oParent.onFileUploadStart && this.oParent.onFileUploadComplete) {
fBodyDragEnter = _.bind(function () {
this.editorUploaderBodyDragOver(true);
this.oParent.composeUploaderDragOver(true);
}, this);
fBodyDragOver = _.bind(function () {
this.editorUploaderBodyDragOver(false);
this.oParent.composeUploaderDragOver(false);
}, this);
this.editorUploader = new CJua({
action: '?/Api/',
name: 'jua-uploader',
queueSize: 1,
dragAndDropElement: this.bAllowImageDragAndDrop ? this.uploaderAreaDom() : null,
disableMultiple: true,
disableAjaxUpload: false,
disableDragAndDrop: !this.bAllowImageDragAndDrop,
hidden: _.extendOwn({
Module: Settings.ServerModuleName,
Method: 'UploadAttachment',
Parameters: function Parameters() {
return JSON.stringify({
AccountID: MailCache.currentAccountId()
});
}
}, App.getCommonRequestParameters())
});
this.editorUploader.on('onDragEnter', _.bind(this.oParent.composeUploaderDragOver, this.oParent, true)).on('onDragLeave', _.bind(this.oParent.composeUploaderDragOver, this.oParent, false)).on('onBodyDragEnter', fBodyDragEnter).on('onBodyDragLeave', fBodyDragOver).on('onProgress', _.bind(this.oParent.onFileUploadProgress, this.oParent)).on('onSelect', _.bind(this.onEditorDrop, this)).on('onStart', _.bind(this.oParent.onFileUploadStart, this.oParent)).on('onComplete', _.bind(this.oParent.onFileUploadComplete, this.oParent));
} else {
fBodyDragEnter = _.bind(this.editorUploaderBodyDragOver, this, true);
fBodyDragOver = _.bind(this.editorUploaderBodyDragOver, this, false);
this.editorUploader = new CJua({
queueSize: 1,
dragAndDropElement: this.bAllowImageDragAndDrop ? this.uploaderAreaDom() : null,
disableMultiple: true,
disableAjaxUpload: false,
disableDragAndDrop: !this.bAllowImageDragAndDrop
});
this.editorUploader.on('onBodyDragEnter', fBodyDragEnter).on('onBodyDragLeave', fBodyDragOver).on('onSelect', _.bind(this.onEditorDrop, this));
}
}
};
CHtmlEditorView.prototype.isDragAndDropSupported = function () {
return this.editorUploader ? this.editorUploader.isDragAndDropSupported() : false;
};
CHtmlEditorView.prototype.onEditorDrop = function (sUid, oData) {
var oReader = null,
oFile = null,
self = this,
bCreaFocused = false,
hash = Math.random().toString(),
sId = '';
if (oData && oData.File && typeof oData.File.type === 'string') {
if (Settings.AllowInsertImage && 0 === oData.File.type.indexOf('image/')) {
oFile = oData.File;
if (Settings.ImageUploadSizeLimit > 0 && oFile.size > Settings.ImageUploadSizeLimit) {
Popups.showPopup(AlertPopup, [TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_SIZE')]);
} else {
oReader = new window.FileReader();
bCreaFocused = this.oCrea.isFocused();
if (!bCreaFocused) {
this.oCrea.setFocus(true);
}
sId = oFile.name + '_' + hash;
this.oCrea.insertHtml('<img id="' + sId + '" src="./static/styles/images/wait.gif" />', true);
if (!bCreaFocused) {
this.oCrea.fixFirefoxCursorBug();
}
oReader.onload = function (oEvent) {
self.oCrea.changeImageSource(sId, oEvent.target.result);
};
oReader.readAsDataURL(oFile);
}
} else {
if (this.oParent && this.oParent.onFileUploadSelect) {
this.oParent.onFileUploadSelect(sUid, oData);
return true;
} else if (!Browser.ie10AndAbove) {
Popups.showPopup(AlertPopup, [TextUtils.i18n('MAILWEBCLIENT/ERROR_NOT_IMAGE_CHOOSEN')]);
}
}
}
return false;
};
/**
* @param {Object} oFile
*/
CHtmlEditorView.prototype.isFileImage = function (oFile) {
if (typeof oFile.Type === 'string') {
return -1 !== oFile.Type.indexOf('image');
} else {
var iDotPos = oFile.FileName.lastIndexOf('.'),
sExt = oFile.FileName.substr(iDotPos + 1),
aImageExt = ['jpg', 'jpeg', 'gif', 'tif', 'tiff', 'png'];
return -1 !== $.inArray(sExt, aImageExt);
}
};
/**
* @param {string} sUid
* @param {Object} oFile
*/
CHtmlEditorView.prototype.onFileUploadSelect = function (sUid, oFile) {
if (!this.isFileImage(oFile)) {
Popups.showPopup(AlertPopup, [TextUtils.i18n('MAILWEBCLIENT/ERROR_NOT_IMAGE_CHOOSEN')]);
return false;
}
this.closeInsertImagePopup();
return true;
};
/**
* @param {string} sUid
* @param {boolean} bResponseReceived
* @param {Object} oData
*/
CHtmlEditorView.prototype.onFileUploadComplete = function (sUid, bResponseReceived, oData) {
var sError = '';
if (oData && oData.Result) {
if (oData.Result.Error) {
sError = oData.Result.Error === 'size' ? TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_SIZE') : TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_UNKNOWN');
Popups.showPopup(AlertPopup, [sError]);
} else {
this.oCrea.setFocus(true);
this.insertComputerImageFromPopup(sUid, oData.Result.Attachment);
}
} else {
Popups.showPopup(AlertPopup, [TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_UNKNOWN')]);
}
};
CHtmlEditorView.prototype.undo = function () {
if (!this.inactive()) {
this.oCrea.undo();
}
return false;
};
CHtmlEditorView.prototype.redo = function () {
if (!this.inactive()) {
this.oCrea.redo();
}
return false;
};
CHtmlEditorView.prototype.bold = function () {
if (!this.inactive()) {
this.oCrea.bold();
this.isFWBold(!this.isFWBold());
}
return false;
};
CHtmlEditorView.prototype.italic = function () {
if (!this.inactive()) {
this.oCrea.italic();
this.isFSItalic(!this.isFSItalic());
}
return false;
};
CHtmlEditorView.prototype.underline = function () {
if (!this.inactive()) {
this.oCrea.underline();
this.isTDUnderline(!this.isTDUnderline());
}
return false;
};
CHtmlEditorView.prototype.strikeThrough = function () {
if (!this.inactive()) {
this.oCrea.strikeThrough();
this.isTDStrikeThrough(!this.isTDStrikeThrough());
}
return false;
};
CHtmlEditorView.prototype.numbering = function () {
if (!this.inactive()) {
this.oCrea.numbering();
this.isBullets(false);
this.isEnumeration(!this.isEnumeration());
}
return false;
};
CHtmlEditorView.prototype.bullets = function () {
if (!this.inactive()) {
this.oCrea.bullets();
this.isEnumeration(false);
this.isBullets(!this.isBullets());
}
return false;
};
CHtmlEditorView.prototype.insertHorizontalLine = function () {
if (!this.inactive()) {
this.oCrea.insertHorizontalLine();
}
return false;
};
CHtmlEditorView.prototype.blockquote = function () {
if (!this.inactive()) {
this.oCrea.blockquote();
}
return false;
};
CHtmlEditorView.prototype.removeFormat = function () {
if (!this.inactive()) {
this.oCrea.removeFormat();
}
return false;
};
CHtmlEditorView.prototype.setRtlDirection = function () {
if (!this.inactive()) {
this.oCrea.setRtlDirection();
}
return false;
};
CHtmlEditorView.prototype.setLtrDirection = function () {
if (!this.inactive()) {
this.oCrea.setLtrDirection();
}
return false;
};
/**
* Changes text mode - html or plain text.
*/
CHtmlEditorView.prototype.changeTextMode = function () {
var _this3 = this;
var changeTextModeHandler = function changeTextModeHandler() {
if (_this3.plainTextMode()) {
var plainText = '<div>' + TextUtils.plainToHtml(_this3.getText()) + '</div>';
_this3.setText(plainText, false);
} else {
_this3.setText(_this3.getPlainText(), true);
}
};
if (this.plainTextMode()) {
changeTextModeHandler();
} else {
var confirmText = TextUtils.i18n('MAILWEBCLIENT/CONFIRM_HTML_TO_PLAIN_FORMATTING');
Popups.showPopup(ConfirmPopup, [confirmText, function (changeConfirmed) {
if (changeConfirmed) {
changeTextModeHandler();
}
}]);
}
};
/**
* Turns on/off plain text mode.
* @param {boolean} bPlainTextMode
*/
CHtmlEditorView.prototype.setPlainTextMode = function (bPlainTextMode) {
this.plainTextMode(bPlainTextMode);
};
CHtmlEditorView.prototype.toggleSourceEdit = function () {
if (this.editSourceMode()) {
this.setText(sourceEditor.getText());
this.editSourceMode(false);
} else {
sourceEditor.setText(this.getText());
this.editSourceMode(true);
}
};
CHtmlEditorView.prototype.getHotKeysDescriptions = function () {
return [{
value: 'Ctrl+Z',
action: TextUtils.i18n('MAILWEBCLIENT/LABEL_UNDO_HOTKEY'),
visible: ko.observable(true)
}, {
value: 'Ctrl+Y',
action: TextUtils.i18n('MAILWEBCLIENT/LABEL_REDO_HOTKEY'),
visible: ko.observable(true)
}, {
value: 'Ctrl+K',
action: TextUtils.i18n('MAILWEBCLIENT/LABEL_LINK_HOTKEY'),
visible: ko.observable(true)
}, {
value: 'Ctrl+B',
action: TextUtils.i18n('MAILWEBCLIENT/LABEL_BOLD_HOTKEY'),
visible: ko.observable(true)
}, {
value: 'Ctrl+I',
action: TextUtils.i18n('MAILWEBCLIENT/LABEL_ITALIC_HOTKEY'),
visible: ko.observable(true)
}, {
value: 'Ctrl+U',
action: TextUtils.i18n('MAILWEBCLIENT/LABEL_UNDERLINE_HOTKEY'),
visible: ko.observable(true)
}];
};
module.exports = CHtmlEditorView;
/***/ }),
/***/ "NM3O":
/*!****************************************************!*\
!*** ./modules/MailWebclient/js/SenderSelector.js ***!
\****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
SendingUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Sending.js */ "yHWv"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m");
function CSenderSelector() {
this.senderList = ko.observableArray([]);
this.senderAccountId = ko.observable(AccountList.currentId());
this.selectedFetcherOrIdentity = ko.observable(null);
this.lockSelectedSender = ko.observable(false);
this.selectedSender = ko.observable('');
this.selectedSender.subscribe(function () {
if (!this.lockSelectedSender()) {
var oAccount = AccountList.getAccount(this.senderAccountId()),
sId = this.selectedSender(),
oFetcherOrIdentity = null;
if (Types.isNonEmptyString(sId)) {
if (sId.indexOf('fetcher') === 0) {
sId = sId.replace('fetcher', '');
oFetcherOrIdentity = _.find(oAccount.fetchers(), function (oFetcher) {
return oFetcher.id() === Types.pInt(sId);
});
} else if (sId.indexOf('alias') === 0) {
sId = sId.replace('alias', '');
oFetcherOrIdentity = _.find(oAccount.aliases(), function (oAlias) {
return oAlias.id() === Types.pInt(sId);
});
} else {
oFetcherOrIdentity = _.find(oAccount.identities(), function (oIdnt) {
return oIdnt.id() === Types.pInt(sId);
});
}
}
if (oFetcherOrIdentity) {
this.selectedFetcherOrIdentity(oFetcherOrIdentity);
}
}
}, this);
}
CSenderSelector.prototype.changeSelectedSender = function (oFetcherOrIdentity) {
if (oFetcherOrIdentity) {
var sSelectedSenderId = Types.pString(oFetcherOrIdentity.id());
if (oFetcherOrIdentity.FETCHER) {
sSelectedSenderId = 'fetcher' + sSelectedSenderId;
} else if (oFetcherOrIdentity.ALIAS) {
sSelectedSenderId = 'alias' + sSelectedSenderId;
}
if (_.find(this.senderList(), function (oItem) {
return oItem.id === sSelectedSenderId;
})) {
this.lockSelectedSender(true);
this.selectedSender(sSelectedSenderId);
this.selectedFetcherOrIdentity(oFetcherOrIdentity);
this.lockSelectedSender(false);
}
}
};
/**
* @param {number} iId
* @param {string=} oFetcherOrIdentity
*/
CSenderSelector.prototype.changeSenderAccountId = function (iId, oFetcherOrIdentity) {
var bChanged = false;
if (this.senderAccountId() !== iId) {
if (AccountList.hasAccountWithId(iId)) {
this.senderAccountId(iId);
bChanged = true;
} else if (!AccountList.hasAccountWithId(this.senderAccountId())) {
this.senderAccountId(AccountList.currentId());
bChanged = true;
}
}
if (bChanged || this.senderList().length === 0) {
this.fillSenderList(oFetcherOrIdentity);
bChanged = true;
}
if (!bChanged && oFetcherOrIdentity) {
this.changeSelectedSender(oFetcherOrIdentity);
}
};
/**
* @param {string=} oFetcherOrIdentity
*/
CSenderSelector.prototype.fillSenderList = function (oFetcherOrIdentity) {
var aSenderList = [],
oAccount = AccountList.getAccount(this.senderAccountId());
if (oAccount) {
if (_.isArray(oAccount.identities())) {
_.each(oAccount.identities(), function (oIdentity) {
aSenderList.push({
fullEmail: oIdentity.fullEmail(),
id: Types.pString(oIdentity.id())
});
}, this);
}
if (oAccount.identitiesSubscribtion) {
oAccount.identitiesSubscribtion.dispose();
}
oAccount.identitiesSubscribtion = oAccount.identities.subscribe(function () {
this.fillSenderList(oFetcherOrIdentity);
this.changeSelectedSender(oAccount.getDefaultIdentity());
}, this);
_.each(oAccount.fetchers(), function (oFetcher) {
var sFullEmail = oFetcher.fullEmail();
if (oFetcher.isEnabled() && oFetcher.isOutgoingEnabled() && sFullEmail.length > 0) {
aSenderList.push({
fullEmail: sFullEmail,
id: 'fetcher' + oFetcher.id()
});
}
}, this);
if (oAccount.fetchersSubscribtion) {
oAccount.fetchersSubscribtion.dispose();
}
oAccount.fetchersSubscribtion = oAccount.fetchers.subscribe(function () {
this.fillSenderList(oFetcherOrIdentity);
}, this);
_.each(oAccount.aliases(), function (oAlias) {
var sFullEmail = oAlias.fullEmail();
if (sFullEmail.length > 0) {
aSenderList.push({
fullEmail: sFullEmail,
id: 'alias' + oAlias.id()
});
}
}, this);
}
this.senderList(aSenderList);
this.changeSelectedSender(oFetcherOrIdentity);
};
/**
* @param {Object} oMessage
*/
CSenderSelector.prototype.setFetcherOrIdentityByReplyMessage = function (oMessage) {
var aRecipients = oMessage.oTo.aCollection.concat(oMessage.oCc.aCollection),
oFetcherOrIdentity = SendingUtils.getFirstFetcherOrIdentityByRecipientsOrDefault(aRecipients, oMessage.accountId());
if (oFetcherOrIdentity) {
if (oFetcherOrIdentity.accountId() !== this.senderAccountId()) {
this.changeSenderAccountId(oFetcherOrIdentity.accountId(), oFetcherOrIdentity);
} else {
this.changeSelectedSender(oFetcherOrIdentity);
}
}
};
module.exports = new CSenderSelector();
/***/ }),
/***/ "P7bQ":
/*!******************************************!*\
!*** ./modules/MailWebclient/js/Ajax.js ***!
\******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO");
var TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Ajax = __webpack_require__(/*! modules/CoreWebclient/js/Ajax.js */ "8QQh"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Screens = __webpack_require__(/*! modules/CoreWebclient/js/Screens.js */ "D2Gh");
var Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z");
Ajax.registerAbortRequestHandler(Settings.ServerModuleName, function (oRequest, oOpenedRequest) {
var oParameters = oRequest.Parameters,
oOpenedParameters = oOpenedRequest.Parameters;
switch (oRequest.Method) {
case 'MoveMessages':
case 'DeleteMessages':
return oOpenedRequest.Method === 'GetRelevantFoldersInformation' || oOpenedRequest.Method === 'GetUnifiedRelevantFoldersInformation' || oOpenedRequest.Method === 'GetMessage' || oOpenedRequest.Method === 'GetUnifiedMailboxMessages' || oOpenedRequest.Method === 'GetMessagesByFolders' || oOpenedRequest.Method === 'GetMessages' && oOpenedParameters.Folder === oParameters.Folder;
case 'GetMessages':
case 'GetUnifiedMailboxMessages':
return oOpenedRequest.Method === 'GetUnifiedMailboxMessages' || oOpenedRequest.Method === 'GetMessagesByFolders' || oOpenedRequest.Method === 'GetMessages' && oOpenedParameters.Folder === oParameters.Folder;
case 'SetMessagesSeen':
case 'SetMessageFlagged':
return oOpenedRequest.Method === 'GetRelevantFoldersInformation' || oOpenedRequest.Method === 'GetUnifiedRelevantFoldersInformation' || oOpenedRequest.Method === 'GetUnifiedMailboxMessages' || oOpenedRequest.Method === 'GetMessagesByFolders' || oOpenedRequest.Method === 'GetMessages' && oOpenedParameters.Folder === oParameters.Folder;
case 'SetAllMessagesSeen':
return oOpenedRequest.Method === 'GetRelevantFoldersInformation' || oOpenedRequest.Method === 'GetUnifiedRelevantFoldersInformation' || oOpenedRequest.Method === 'GetMessages' && oOpenedParameters.Folder === oParameters.Folder;
case 'ClearFolder':
// GetRelevantFoldersInformation-request aborted during folder cleaning, not to get the wrong information.
return oOpenedRequest.Method === 'GetRelevantFoldersInformation' || oOpenedRequest.Method === 'GetUnifiedRelevantFoldersInformation' || oOpenedRequest.Method === 'GetMessages' && oOpenedParameters.Folder === oParameters.Folder;
case 'GetRelevantFoldersInformation':
return oOpenedRequest.Method === 'GetRelevantFoldersInformation' && oParameters.AccountID === oOpenedParameters.AccountID || oOpenedRequest.Method === 'GetUnifiedRelevantFoldersInformation';
case 'GetMessagesFlags':
return oOpenedRequest.Method === 'GetMessagesFlags';
}
return false;
});
module.exports = {
getOpenedRequest: function getOpenedRequest(sMethod) {
Ajax.getOpenedRequest('Mail', sMethod);
},
hasOpenedRequests: function hasOpenedRequests(sMethod) {
return Ajax.hasOpenedRequests('Mail', sMethod || '');
},
hasInternetConnectionProblem: function hasInternetConnectionProblem() {
return Ajax.hasInternetConnectionProblem();
},
registerOnAllRequestsClosedHandler: Ajax.registerOnAllRequestsClosedHandler,
send: function send(sMethod, oParameters, fResponseHandler, oContext) {
var MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8"),
fBaseResponseHandler = function fBaseResponseHandler(oResponse, oRequest) {
if (!oResponse.Result && oResponse.ErrorCode === 4002 && App.getUserRole() !== Enums.UserRole.Anonymous) {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
aErrorMessageParts = oResponse.ErrorMessage.split(':'),
iAccountId = Types.pInt(aErrorMessageParts.shift()),
oAccount = AccountList.getAccount(iAccountId),
sErrorMessage = aErrorMessageParts.join(':');
if (oAccount && oAccount.bDefault) {
oResponse = {
Result: false,
ErrorCode: Enums.Errors.AuthError
};
App.logoutAndGotoLogin();
} else if (oAccount) {
oAccount.passwordMightBeIncorrect(true);
var sResultError = TextUtils.i18n('MAILWEBCLIENT/ERROR_CREDENTIALS_INCORRECT', {
EMAIL: oAccount.email()
});
if (sErrorMessage) {
sResultError += ' (' + sErrorMessage + ')';
}
Screens.showError(sResultError, true);
oResponse = {
Result: false,
ErrorCode: Enums.Errors.NotDisplayedError
};
}
}
if (_.isFunction(fResponseHandler)) {
fResponseHandler.apply(oContext, [oResponse, oRequest]);
}
};
if (oParameters && !oParameters.AccountID && !['GetUnifiedMailboxMessages', 'CreateAccount'].includes(sMethod)) {
oParameters.AccountID = MailCache.currentAccountId();
}
Ajax.send(Settings.ServerModuleName, sMethod, oParameters, fBaseResponseHandler, null);
}
};
/***/ }),
/***/ "PV2F":
/*!**************************************************!*\
!*** ./modules/MailWebclient/js/utils/Editor.js ***!
\**************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
CHtmlEditorView = __webpack_require__(/*! modules/MailWebclient/js/views/CHtmlEditorView.js */ "Jd7T");
module.exports = {
getCHtmlEditorView: function getCHtmlEditorView() {
var params = {
CHtmlEditorView: null
};
App.broadcastEvent('MailWebclient::GetCHtmlEditorView', params);
return params.CHtmlEditorView || CHtmlEditorView;
}
};
/***/ }),
/***/ "Panx":
/*!************************************************!*\
!*** ./modules/MailWebclient/js/utils/Mail.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
UrlUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Url.js */ "3cxN"),
Storage = __webpack_require__(/*! modules/CoreWebclient/js/Storage.js */ "oJUS"),
UserSettings = __webpack_require__(/*! modules/CoreWebclient/js/Settings.js */ "KIwC"),
Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
ConfirmPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/ConfirmPopup.js */ "MYiO"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8"),
MailUtils = {};
MailUtils.isPermanentDelete = function () {
if (!MailCache.isSearchInMultiFolders()) {
var oFolderList = MailCache.folderList(),
sCurrFolder = oFolderList.currentFolderFullName(),
oTrash = oFolderList.trashFolder(),
bInTrash = oTrash && sCurrFolder === oTrash.fullName(),
oSpam = oFolderList.spamFolder(),
bInSpam = oSpam && sCurrFolder === oSpam.fullName();
return bInSpam || bInTrash;
}
return false;
};
/**
* Moves the specified messages in the current folder to the Trash or delete permanently
* if the current folder is Trash or Spam.
*
* @param {Array} aLongUids
* @param {Function=} fAfterDelete
*/
MailUtils.deleteMessages = function (aLongUids, fAfterDelete) {
if (!_.isFunction(fAfterDelete)) {
fAfterDelete = function fAfterDelete() {};
}
var bPermanentDelete = MailUtils.isPermanentDelete(),
fDeleteMessages = function fDeleteMessages(bResult) {
if (bResult) {
MailUtils.actualDeleteMessages(aLongUids, bPermanentDelete, fAfterDelete);
}
};
if (bPermanentDelete) {
Popups.showPopup(ConfirmPopup, [TextUtils.i18n('MAILWEBCLIENT/CONFIRM_DELETE_MESSAGES_PLURAL', {}, null, aLongUids.length), fDeleteMessages, '', TextUtils.i18n('COREWEBCLIENT/ACTION_DELETE')]);
} else {
fDeleteMessages(true);
}
};
MailUtils.actualDeleteMessages = function (aLongUids, bPermanentDelete, fAfterDelete) {
var bDeleted = false,
bDeleteAsked = false,
oUidsByFolders = MailCache.getUidsSeparatedByFolders(aLongUids),
fPermanentDeleteMessages = function fPermanentDeleteMessages(oAccFolder, aUids, bResult) {
if (bResult) {
MailCache.deleteMessagesFromFolder(oAccFolder, aUids);
fAfterDelete();
}
};
_.each(oUidsByFolders, function (oData) {
var iAccountId = oData.iAccountId,
oFolderList = MailCache.oFolderListItems[iAccountId],
oAccount = AccountList.getAccount(iAccountId),
oAccTrash = oFolderList ? oFolderList.trashFolder() : null,
oAccFolder = oFolderList ? oFolderList.getFolderByFullName(oData.sFolder) : null;
if (oAccFolder) {
if (bPermanentDelete) {
fPermanentDeleteMessages(oAccFolder, oData.aUids, true);
bDeleted = true;
} else if (oAccTrash) {
MailCache.moveMessagesToFolder(oAccFolder, oAccTrash, oData.aUids);
bDeleted = true;
} else {
Popups.showPopup(ConfirmPopup, [TextUtils.i18n('MAILWEBCLIENT/CONFIRM_MESSAGES_DELETE_NO_TRASH_FOLDER'), fPermanentDeleteMessages.bind(null, oAccFolder, oData.aUids), oAccount ? oAccount.fullEmail() : '']);
bDeleteAsked = true;
}
}
});
if (bDeleted && !bDeleteAsked) {
fAfterDelete();
}
};
MailUtils.isAvailableRegisterMailto = function () {
return window.navigator && _.isFunction(window.navigator.registerProtocolHandler);
};
MailUtils.registerMailto = function (bRegisterOnce) {
if (MailUtils.isAvailableRegisterMailto() && (!bRegisterOnce || Storage.getData('aurora_mail_is-mailto-asked') !== true)) {
window.navigator.registerProtocolHandler('mailto', UrlUtils.getAppPath() + '#mail/compose/to/%s', UserSettings.SiteName !== '' ? UserSettings.SiteName : 'WebMail');
Storage.setData('aurora_mail_is-mailto-asked', true);
}
};
module.exports = MailUtils;
/***/ }),
/***/ "Ssud":
/*!********************************************************!*\
!*** ./modules/MailWebclient/js/views/CComposeView.js ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
$ = __webpack_require__(/*! jquery */ "M4cL"),
ko = __webpack_require__(/*! knockout */ "p09A");
var AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "rBrp"),
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"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Browser = __webpack_require__(/*! modules/CoreWebclient/js/Browser.js */ "/Odb"),
CJua = __webpack_require__(/*! modules/CoreWebclient/js/CJua.js */ "hr1f"),
CoreAjax = __webpack_require__(/*! modules/CoreWebclient/js/Ajax.js */ "8QQh"),
ModulesManager = __webpack_require__(/*! modules/CoreWebclient/js/ModulesManager.js */ "5D2l"),
Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "ioSH"),
Screens = __webpack_require__(/*! modules/CoreWebclient/js/Screens.js */ "D2Gh"),
UserSettings = __webpack_require__(/*! modules/CoreWebclient/js/Settings.js */ "KIwC"),
WindowOpener = __webpack_require__(/*! modules/CoreWebclient/js/WindowOpener.js */ "zVyH"),
CAbstractScreenView = __webpack_require__(/*! modules/CoreWebclient/js/views/CAbstractScreenView.js */ "db2p"),
Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
AlertPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/AlertPopup.js */ "Rjyw");
var SelectFilesPopup = ModulesManager.run('FilesWebclient', 'getSelectFilesPopup');
var LinksUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Links.js */ "dpSB"),
SendingUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Sending.js */ "yHWv"),
EditorUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Editor.js */ "PV2F"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ"),
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8"),
MainTabExtMethods = __webpack_require__(/*! modules/MailWebclient/js/MainTabExtMethods.js */ "fcI1"),
SenderSelector = __webpack_require__(/*! modules/MailWebclient/js/SenderSelector.js */ "NM3O"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
CMessageModel = __webpack_require__(/*! modules/MailWebclient/js/models/CMessageModel.js */ "WzKm"),
CAttachmentModel = __webpack_require__(/*! modules/MailWebclient/js/models/CAttachmentModel.js */ "3boL"),
CComposeViewAutoEncrypt = __webpack_require__(/*! modules/MailWebclient/js/views/CComposeViewAutoEncrypt.js */ "1uL4");
var CHtmlEditorView = EditorUtils.getCHtmlEditorView(),
MainTab = App.isNewTab() && window.opener && window.opener.MainTabMailMethods,
$html = $('html');
/**
* @constructor
*/
function CComposeView() {
CAbstractScreenView.call(this, 'MailWebclient');
CComposeViewAutoEncrypt.call(this);
this.browserTitle = ko.computed(function () {
return AccountList.getEmail() + ' - ' + TextUtils.i18n('MAILWEBCLIENT/HEADING_COMPOSE_BROWSER_TAB');
});
var self = this;
this.toAddrDom = ko.observable();
this.toAddrDom.subscribe(function () {
this.initInputosaurus(this.toAddrDom, this.toAddr, this.lockToAddr, 'to');
}, this);
this.ccAddrDom = ko.observable();
this.ccAddrDom.subscribe(function () {
this.initInputosaurus(this.ccAddrDom, this.ccAddr, this.lockCcAddr, 'cc');
}, this);
this.bccAddrDom = ko.observable();
this.bccAddrDom.subscribe(function () {
this.initInputosaurus(this.bccAddrDom, this.bccAddr, this.lockBccAddr, 'bcc');
}, this);
this.folderList = MailCache.folderList;
this.folderList.subscribe(function () {
this.getMessageOnRoute();
}, this);
this.bNewTab = App.isNewTab();
this.bDemo = UserSettings.IsDemo;
this.sending = ko.observable(false);
this.saving = ko.observable(false);
this.oHtmlEditor = new CHtmlEditorView(false, Settings.AllowComposePlainText, this);
this.visibleBcc = ko.observable(false);
this.visibleBcc.subscribe(function () {
$html.toggleClass('screen-compose-bcc', this.visibleCc());
_.defer(_.bind(function () {
$(this.bccAddrDom()).inputosaurus('resizeInput');
}, this));
}, this);
this.visibleCc = ko.observable(false);
this.visibleCc.subscribe(function () {
$html.toggleClass('screen-compose-cc', this.visibleCc());
_.defer(_.bind(function () {
$(this.ccAddrDom()).inputosaurus('resizeInput');
}, this));
}, this);
this.sendReadingConfirmation = ko.observable(false).extend({
reversible: true
});
this.composeUploaderButton = ko.observable(null);
this.composeUploaderButton.subscribe(function () {
this.initUploader();
}, this);
this.composeUploaderDropPlace = ko.observable(null);
this.composeUploaderBodyDragOver = ko.observable(false);
this.composeUploaderDragOver = ko.observable(false);
this.allowDragNDrop = ko.observable(false);
this.uploaderBodyDragOver = ko.computed(function () {
return this.allowDragNDrop() && this.composeUploaderBodyDragOver();
}, this);
this.uploaderDragOver = ko.computed(function () {
return this.allowDragNDrop() && this.composeUploaderDragOver();
}, this);
this.selectedImportance = ko.observable(Enums.Importance.Normal).extend({
reversible: true
});
this.senderAccountId = SenderSelector.senderAccountId;
this.senderList = SenderSelector.senderList;
this.visibleFrom = ko.computed(function () {
return App.isNewTab() || this.senderList().length > 1 || this.senderAccountId() !== MailCache.currentAccountId();
}, this);
this.selectedSender = SenderSelector.selectedSender;
this.selectedFetcherOrIdentity = SenderSelector.selectedFetcherOrIdentity;
this.selectedFetcherOrIdentity.subscribe(function () {
this.oHtmlEditor.clearUndoRedo();
this.oHtmlEditor.commit();
}, this);
this.signature = ko.observable('');
this.prevSignature = ko.observable(null);
ko.computed(function () {
var sSignature = SendingUtils.getClearSignature(this.senderAccountId(), this.selectedFetcherOrIdentity());
if (this.prevSignature() === null) {
this.prevSignature(sSignature);
this.signature(sSignature);
} else {
this.prevSignature(this.signature());
this.signature(sSignature);
this.oHtmlEditor.changeSignatureContent(this.signature(), this.prevSignature());
}
}, this);
this.lockToAddr = ko.observable(false);
this.toAddr = ko.observable('').extend({
reversible: true
});
this.toAddr.subscribe(function () {
if (!this.lockToAddr()) {
$(this.toAddrDom()).val(this.toAddr());
$(this.toAddrDom()).inputosaurus('refresh');
}
}, this);
this.lockCcAddr = ko.observable(false);
this.ccAddr = ko.observable('').extend({
reversible: true
});
this.ccAddr.subscribe(function () {
if (!this.lockCcAddr()) {
$(this.ccAddrDom()).val(this.ccAddr());
$(this.ccAddrDom()).inputosaurus('refresh');
}
}, this);
this.lockBccAddr = ko.observable(false);
this.bccAddr = ko.observable('').extend({
reversible: true
});
this.bccAddr.subscribe(function () {
if (!this.lockBccAddr()) {
$(this.bccAddrDom()).val(this.bccAddr());
$(this.bccAddrDom()).inputosaurus('refresh');
}
}, this);
this.recipientEmails = ko.computed(function () {
var aRecip = [this.toAddr(), this.ccAddr(), this.bccAddr()].join(',').split(','),
aEmails = [];
_.each(aRecip, function (sRecip) {
var sTrimmedRecip = $.trim(sRecip),
oRecip = null;
if (sTrimmedRecip !== '') {
oRecip = AddressUtils.getEmailParts(sTrimmedRecip);
if (oRecip.email) {
aEmails.push(oRecip.email);
}
}
});
return aEmails;
}, this);
this.subject = ko.observable('').extend({
reversible: true
});
this.textBody = ko.observable('');
this.textBody.subscribe(function (value) {
this.oHtmlEditor.setText(this.textBody(), this.oHtmlEditor.plainTextMode());
this.oHtmlEditor.commit();
}, this);
this.focusedField = ko.observable();
this.oHtmlEditor.textFocused.subscribe(function (val) {
if (this.oHtmlEditor.textFocused()) {
this.focusedField('text');
}
}, this);
this.subjectFocused = ko.observable(false);
this.subjectFocused.subscribe(function () {
if (this.subjectFocused()) {
this.focusedField('subject');
}
}, this);
this.templateUid = ko.observable('');
this.templateFolderName = ko.observable(MailCache.getTemplateFolder());
this.draftUid = ko.observable('');
this.draftUid.subscribe(function () {
MailCache.editedDraftUid(this.draftUid());
}, this);
this.draftInfo = ko.observableArray([]);
this.routeType = ko.observable('');
this.routeParams = ko.observableArray([]);
this.inReplyTo = ko.observable('');
this.references = ko.observable('');
this.bUploadStatus = false;
this.iUploadAttachmentsTimer = 0;
this.messageUploadAttachmentsStarted = ko.observable(false);
this.messageUploadAttachmentsStarted.subscribe(function (bValue) {
window.clearTimeout(self.iUploadAttachmentsTimer);
if (bValue) {
self.iUploadAttachmentsTimer = window.setTimeout(function () {
self.bUploadStatus = true;
Screens.showLoading(TextUtils.i18n('MAILWEBCLIENT/INFO_ATTACHMENTS_LOADING'));
}, 4000);
} else {
if (self.bUploadStatus) {
self.iUploadAttachmentsTimer = window.setTimeout(function () {
self.bUploadStatus = false;
Screens.hideLoading();
}, 1000);
} else {
Screens.hideLoading();
}
}
}, this);
this.attachments = ko.observableArray([]);
this.attachmentsChanged = ko.observable(false);
this.attachments.subscribe(function () {
this.attachmentsChanged(true);
}, this);
this.notUploadedAttachments = ko.computed(function () {
return _.filter(this.attachments(), function (oAttach) {
return !oAttach.uploaded();
});
}, this);
this.allAttachmentsUploaded = ko.computed(function () {
return this.notUploadedAttachments().length === 0 && !this.messageUploadAttachmentsStarted();
}, this);
this.notInlineAttachments = ko.computed(function () {
return _.filter(this.attachments(), function (oAttach) {
return !oAttach.linked();
});
}, this);
this.notInlineAttachments.subscribe(function () {
$html.toggleClass('screen-compose-attachments', this.notInlineAttachments().length > 0);
}, this);
this.allowStartSending = ko.computed(function () {
return !this.saving();
}, this);
this.allowStartSending.subscribe(function () {
if (this.allowStartSending() && this.requiresPostponedSending()) {
SendingUtils.sendPostponedMail(this.draftUid());
this.requiresPostponedSending(false);
}
}, this);
this.requiresPostponedSending = ko.observable(false);
// file uploader
this.oJua = null;
this.isDraftsCleared = ko.observable(false);
this.backToListOnSendOrSave = ko.observable(false);
this.composeShown = ko.computed(function () {
return !!this.opened && this.opened() || !!this.shown && this.shown();
}, this);
this.toolbarControllers = ko.observableArray([]);
this.messageRowControllers = ko.observableArray([]);
this.uploadAttachmentsController = ko.observableArray([]);
this.allControllers = ko.computed(function () {
return _.union(this.toolbarControllers(), this.messageRowControllers(), this.uploadAttachmentsController());
}, this);
this.disableHeadersEdit = ko.computed(function () {
var bDisableHeadersEdit = false;
_.each(this.allControllers(), function (oController) {
bDisableHeadersEdit = bDisableHeadersEdit || !!oController.disableHeadersEdit && oController.disableHeadersEdit();
});
return bDisableHeadersEdit;
}, this);
this.disableFromEdit = ko.computed(function () {
var bDisableFromEdit = false;
_.each(this.allControllers(), function (oController) {
bDisableFromEdit = bDisableFromEdit || !!oController.disableFromEdit && oController.disableFromEdit();
});
return bDisableFromEdit;
}, this);
this.messageSignedOrEncrypted = ko.computed(function () {
var bSignedOrEncrypted = false;
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.pgpEncrypted) && _.isFunction(oController.pgpSecured)) {
bSignedOrEncrypted = bSignedOrEncrypted || oController.pgpEncrypted() || oController.pgpSecured();
}
});
return bSignedOrEncrypted;
}, this);
ko.computed(function () {
var bDisableBodyEdit = false;
_.each(this.allControllers(), function (oController) {
bDisableBodyEdit = bDisableBodyEdit || !!oController.disableBodyEdit && oController.disableBodyEdit();
});
this.oHtmlEditor.setDisableEdit(bDisableBodyEdit);
}, this);
this.draftFolderIsAvailable = ko.computed(function () {
return !!MailCache.folderList().draftsFolder();
}, this);
this.disableAutosave = ko.observable(false);
// Autosave interval is automatically cleared when compose is not shown or message is sending/saving or
// it's disabled by compose screen or one of controllers. After changins these parameters autosave
// interval might be started again.
if (Settings.AllowAutosaveInDrafts && Settings.AutoSaveIntervalSeconds > 0) {
this.iAutosaveInterval = -1;
ko.computed(function () {
var bAllowAutosave = this.draftFolderIsAvailable() && this.composeShown() && !this.sending() && !this.saving() && !this.disableAutosave() && !MailCache.disableComposeAutosave();
_.each(this.allControllers(), function (oController) {
bAllowAutosave = bAllowAutosave && !(!!oController.disableAutosave && oController.disableAutosave());
});
window.clearInterval(this.iAutosaveInterval);
if (bAllowAutosave) {
this.iAutosaveInterval = window.setInterval(_.bind(this.executeSave, this, true), Settings.AutoSaveIntervalSeconds * 1000);
}
}, this);
}
this.backToListCommand = Utils.createCommand(this, this.executeBackToList);
this.sendCommand = Utils.createCommand(this, this.executeSend, this.isEnableSending);
this.saveCommand = Utils.createCommand(this, this.executeSaveCommand, this.isEnableSaving);
this.visibleSaveTemplateControl = ko.observable(false);
this.saveTemplateCommand = Utils.createCommand(this, this.executeTemplateSaveCommand, this.isEnableSaving);
this.messageFields = ko.observable(null);
this.bottomPanel = ko.observable(null);
this.sHotkeysHintsViewTemplate = !Browser.mobileDevice ? 'MailWebclient_Compose_HotkeysHintsView' : '';
this.sPopupButtonsViewTemplate = !App.isNewTab() ? 'MailWebclient_Compose_PopupButtonsView' : '';
this.aHotkeys = [{
value: 'Ctrl+S',
action: TextUtils.i18n('MAILWEBCLIENT/LABEL_SAVE_HOTKEY'),
visible: this.draftFolderIsAvailable
}].concat(this.oHtmlEditor.getHotKeysDescriptions());
if (Settings.AllowQuickSendOnCompose) {
this.aHotkeys.unshift({
value: 'Ctrl+Enter',
action: TextUtils.i18n('MAILWEBCLIENT/LABEL_SEND_HOTKEY'),
visible: ko.observable(true)
});
}
this.bAllowFiles = !!SelectFilesPopup;
this.ignoreHasUnsavedChanges = ko.observable(false);
this.changedInPreviousWindow = ko.observable(false);
this.hasUnsavedChanges = ko.computed(function () {
return !this.ignoreHasUnsavedChanges() && this.isChanged() && this.isEnableSaving();
}, this);
this.saveAndCloseTooltip = ko.computed(function () {
return this.draftFolderIsAvailable() && this.hasUnsavedChanges() ? TextUtils.i18n('MAILWEBCLIENT/ACTION_SAVE_CLOSE') : TextUtils.i18n('MAILWEBCLIENT/ACTION_CLOSE');
}, this);
this.splitterDom = ko.observable();
this.headersCompressed = ko.observable(false);
this.allowCcBccSwitchers = ko.computed(function () {
return !this.disableHeadersEdit() && !this.headersCompressed();
}, this);
this.registerOwnToolbarControllers();
this.setAutoEncryptSubscribes();
App.broadcastEvent('MailWebclient::ConstructView::after', {
Name: this.ViewConstructorName,
View: this
});
}
_.extendOwn(CComposeView.prototype, CAbstractScreenView.prototype);
_.extendOwn(CComposeView.prototype, CComposeViewAutoEncrypt.prototype);
CComposeView.prototype.ViewTemplate = App.isNewTab() ? 'MailWebclient_ComposeScreenView' : 'MailWebclient_ComposeView';
CComposeView.prototype.ViewConstructorName = 'CComposeView';
/**
* Determines if sending a message is allowed.
*/
CComposeView.prototype.isEnableSending = function () {
var bRecipientIsEmpty = this.toAddr().length === 0 && this.ccAddr().length === 0 && this.bccAddr().length === 0,
bFoldersLoaded = this.folderList() && this.folderList().iAccountId !== 0;
return bFoldersLoaded && !this.sending() && !bRecipientIsEmpty && this.allAttachmentsUploaded();
};
/**
* Determines if saving a message is allowed.
*/
CComposeView.prototype.isEnableSaving = function () {
var bFoldersLoaded = this.folderList() && this.folderList().iAccountId !== 0;
return this.composeShown() && bFoldersLoaded && !this.sending() && !this.saving();
};
/**
* @param {Object} koAddrDom
* @param {Object} koAddr
* @param {Object} koLockAddr
* @param {string} sFocusedField
*/
CComposeView.prototype.initInputosaurus = function (koAddrDom, koAddr, koLockAddr, sFocusedField) {
if (koAddrDom() && $(koAddrDom()).length > 0) {
var suggestParameters = {
storage: 'all',
addContactGroups: true,
addUserGroups: Settings.AllowUserGroupsInComposeAutocomplete,
addEmailsToGroups: true,
exceptEmail: '',
withoutEmptyEmails: true
},
autoCompleteSource = ModulesManager.run('ContactsWebclient', 'getSuggestionsAutocompleteCallback', [suggestParameters]);
var oOptions = {
width: 'auto',
parseOnBlur: true,
autoCompleteSource: _.isFunction(autoCompleteSource) ? autoCompleteSource : function () {},
autoCompleteDeleteItem: ModulesManager.run('ContactsWebclient', 'getSuggestionsAutocompleteDeleteHandler') || function () {},
autoCompleteAppendTo: $(koAddrDom()).closest('td'),
change: _.bind(function (ev) {
koLockAddr(true);
this.setRecipient(koAddr, ev.target.value);
koLockAddr(false);
}, this),
copy: _.bind(function (sVal) {
this.inputosaurusBuffer = sVal;
}, this),
paste: _.bind(function () {
var sInputosaurusBuffer = this.inputosaurusBuffer || '';
this.inputosaurusBuffer = '';
return sInputosaurusBuffer;
}, this),
focus: _.bind(this.focusedField, this, sFocusedField),
mobileDevice: Browser.mobileDevice
};
$(koAddrDom()).inputosaurus(_.extendOwn(oOptions, this.getInputosaurusMethods()));
}
};
/**
* Colapse from to table.
*/
CComposeView.prototype.changeHeadersCompressed = function () {
this.headersCompressed(!this.headersCompressed());
};
/**
* Executes after applying bindings.
*/
CComposeView.prototype.onBind = function () {
ModulesManager.run('SessionTimeoutWeblient', 'registerFunction', [_.bind(this.executeSave, this, false)]);
if (!App.isMobile()) {
this.hotKeysBind();
}
};
CComposeView.prototype.hotKeysBind = function () {
;
(this.$popupDom || this.$viewDom).on('keydown', $.proxy(function (ev) {
if (ev && ev.ctrlKey && !ev.altKey && !ev.shiftKey) {
var nKey = ev.keyCode,
bComputed = this.composeShown() && (!this.minimized || !this.minimized()) && ev && ev.ctrlKey;
if (bComputed && nKey === Enums.Key.s) {
ev.preventDefault();
ev.returnValue = false;
if (this.isEnableSaving()) {
this.saveCommand();
}
} else if (Settings.AllowQuickSendOnCompose && bComputed && nKey === Enums.Key.Enter && this.toAddr() !== '') {
this.sendCommand();
}
}
}, this));
};
CComposeView.prototype.getMessageOnRoute = function () {
var oParams = LinksUtils.parseCompose(this.routeParams()),
oAccount = AccountList.getAccountByHash(oParams.AccountHash);
if (oAccount && this.routeType() !== '' && oParams.MessageFolderName && oParams.MessageUid) {
MailCache.getMessage(oAccount.id(), oParams.MessageFolderName, oParams.MessageUid, this.onMessageResponse, this);
}
};
/**
* Executes if the view model shows. Requests a folder list from the server to know the full names
* of the folders Drafts and Sent Items.
*/
CComposeView.prototype.onShow = function () {
// onShow is called before onRoute so reset is called here before anything else
this.reset();
var sFocusedField = this.focusedField();
$(this.splitterDom()).trigger('resize');
$(this.bottomPanel()).trigger('resize');
// if (!this.oHtmlEditor.isInitialized())
// {
// Crea $container must be recreated because compose popup is destroyed after it is closed
this.oHtmlEditor.init(this.textBody(), this.oHtmlEditor.plainTextMode(), '7');
this.oHtmlEditor.commit();
// }
this.initUploader();
this.backToListOnSendOrSave(false);
this.focusedField(sFocusedField); //oHtmlEditor initialization puts focus on it and changes the variable focusedField
$html.addClass('screen-compose');
if (this.oJua) {
this.oJua.setDragAndDropEnabledStatus(true);
}
this.visibleSaveTemplateControl(MailCache.getCurrentTemplateFolders().length > 0);
};
CComposeView.prototype.reset = function () {
this.setTextBody('', false);
this.bUploadStatus = false;
window.clearTimeout(this.iUploadAttachmentsTimer);
this.messageUploadAttachmentsStarted(false);
this.templateUid('');
this.templateFolderName(MailCache.getTemplateFolder());
this.draftUid('');
this.draftInfo.removeAll();
this.setDataFromMessage(new CMessageModel());
this.isDraftsCleared(false);
this.ignoreHasUnsavedChanges(false);
};
CComposeView.prototype.setTextBody = function (textBody, isPlain) {
this.oHtmlEditor.plainTextMode(isPlain);
this.textBody(textBody);
};
/**
* Executes if routing was changed.
*
* @param {Array} aParams
*/
CComposeView.prototype.onRoute = function (aParams) {
this.setDataFromMessage(new CMessageModel()); // clear before filling up
var oParams = LinksUtils.parseCompose(aParams);
if (App.isNewTab()) {
// should be the first action to set right account id in new tab
AccountList.changeCurrentAccountByHash(oParams.AccountHash);
}
this.routeType(oParams.RouteType);
switch (this.routeType()) {
case Enums.ReplyType.ForwardAsAttach:
this.routeParams(aParams);
this.fillDefault(oParams);
case Enums.ReplyType.Reply:
case Enums.ReplyType.ReplyAll:
case Enums.ReplyType.Resend:
case Enums.ReplyType.Forward:
case 'drafts':
this.routeParams(aParams);
if (this.folderList().iAccountId !== 0) {
this.getMessageOnRoute();
}
break;
case 'data':
var oData = oParams.Object;
if (oData) {
if (oData.to) {
this.setRecipient(this.toAddr, oData.to);
}
if (oData.subject) {
this.subject(oData.subject);
}
if (oData.selectedSenderId) {
this.selectedSender(oData.selectedSenderId);
}
var isPlain = !oData.isHtml;
var bodyText = '<div></div>';
if (oData.body) {
bodyText = oData.isHtml ? '<div>' + oData.body + '</div>' : oData.body;
}
if (oData.replyToMessage) {
var oReplyData = SendingUtils.getReplyDataFromMessage(oData.replyToMessage, Enums.ReplyType.Reply, App.currentAccountId(), null, true);
this.draftInfo(oReplyData.DraftInfo);
this.draftUid(oReplyData.DraftUid);
this.setRecipient(this.toAddr, oReplyData.To);
this.setRecipient(this.ccAddr, oReplyData.Cc);
this.setRecipient(this.bccAddr, oReplyData.Bcc);
this.subject(oReplyData.Subject);
isPlain = false;
bodyText = oReplyData.Text;
this.attachments(oReplyData.Attachments);
this.inReplyTo(oReplyData.InReplyTo);
this.references(oReplyData.References);
this.requestAttachmentsTempName();
}
if (oData.attachments) {
this.addAttachments(oData.attachments);
}
this.setTextBody(bodyText, isPlain);
this.triggerToolbarControllersAfterPopulatingMessage(true, isPlain, bodyText);
this.commit(true);
}
break;
default:
this.routeParams(aParams);
this.fillDefault(oParams);
break;
}
};
CComposeView.prototype.fillDefault = function (oParams) {
var sSignature = SendingUtils.getSignatureText(this.senderAccountId(), this.selectedFetcherOrIdentity(), true),
oComposedMessage = MainTab ? MainTab.getComposedMessage(window.name) : null,
oToAddr = oParams.ToAddr;
if (oComposedMessage) {
this.setMessageDataInNewTab(oComposedMessage);
if (this.changedInPreviousWindow()) {
_.defer(_.bind(this.executeSave, this, true));
}
} else if (sSignature !== '') {
this.setTextBody('<br /><br />' + sSignature + '<br />', false);
}
if (oToAddr) {
this.setRecipient(this.toAddr, oToAddr.to);
if (oToAddr.hasMailto) {
this.subject(oToAddr.subject);
this.setRecipient(this.ccAddr, oToAddr.cc);
this.setRecipient(this.bccAddr, oToAddr.bcc);
if (oToAddr.body !== '') {
this.setTextBody('<div>' + oToAddr.body + '</div>', false);
}
}
}
if (this.routeType() === Enums.ReplyType.ForwardAsAttach && oParams.Object) {
this.addMessageAsAttachment(oParams.Object);
}
if (this.routeType() === 'attachments' && oParams.Object) {
this.addAttachments(oParams.Object);
}
_.defer(_.bind(function () {
this.focusAfterFilling();
}, this));
this.visibleCc(this.ccAddr() !== '');
this.visibleBcc(this.bccAddr() !== '');
this.commit(true);
};
CComposeView.prototype.focusToAddr = function () {
$(this.toAddrDom()).inputosaurus('focus');
};
CComposeView.prototype.focusCcAddr = function () {
$(this.ccAddrDom()).inputosaurus('focus');
};
CComposeView.prototype.focusBccAddr = function () {
$(this.bccAddrDom()).inputosaurus('focus');
};
CComposeView.prototype.focusAfterFilling = function () {
switch (this.focusedField()) {
case 'to':
this.focusToAddr();
break;
case 'cc':
this.visibleCc(true);
this.focusCcAddr();
break;
case 'bcc':
this.visibleBcc(true);
this.focusBccAddr();
break;
case 'subject':
this.subjectFocused(true);
break;
case 'text':
this.oHtmlEditor.setFocus();
break;
default:
if (this.toAddr().length === 0) {
this.focusToAddr();
} else if (this.subject().length === 0) {
this.subjectFocused(true);
} else {
this.oHtmlEditor.setFocus();
}
break;
}
};
/**
* Executes if view model was hidden.
*/
CComposeView.prototype.onHide = function () {
if (!_.isFunction(this.closePopup) && this.hasUnsavedChanges()) {
this.executeSave(true);
}
this.headersCompressed(false);
this.routeParams([]);
this.subjectFocused(false);
this.focusedField('');
this.messageUploadAttachmentsStarted(false);
$html.removeClass('screen-compose').removeClass('screen-compose-cc').removeClass('screen-compose-bcc').removeClass('screen-compose-attachments');
if (this.oJua) {
this.oJua.setDragAndDropEnabledStatus(false);
}
this.recipientsInfo({});
this.recipientsInfo.valueHasMutated();
};
/**
* @param {Object} koRecipient
* @param {string} sRecipient
*/
CComposeView.prototype.setRecipient = function (koRecipient, sRecipient) {
if (koRecipient() === sRecipient) {
koRecipient.valueHasMutated();
} else {
koRecipient(sRecipient);
}
};
/**
* @param {Object} oMessage
*/
CComposeView.prototype.onMessageResponse = function (oMessage) {
var oReplyData = null;
if (oMessage === null) {
this.setDataFromMessage(new CMessageModel());
} else {
switch (this.routeType()) {
case Enums.ReplyType.Reply:
case Enums.ReplyType.ReplyAll:
SenderSelector.setFetcherOrIdentityByReplyMessage(oMessage);
oReplyData = SendingUtils.getReplyDataFromMessage(oMessage, this.routeType(), this.senderAccountId(), this.selectedFetcherOrIdentity(), true);
this.draftInfo(oReplyData.DraftInfo);
this.draftUid(oReplyData.DraftUid);
this.setRecipient(this.toAddr, oReplyData.To);
this.setRecipient(this.ccAddr, oReplyData.Cc);
this.setRecipient(this.bccAddr, oReplyData.Bcc);
this.subject(oReplyData.Subject);
this.setTextBody(oReplyData.Text, false);
this.attachments(oReplyData.Attachments);
this.inReplyTo(oReplyData.InReplyTo);
this.references(oReplyData.References);
break;
case Enums.ReplyType.ForwardAsAttach:
oReplyData = SendingUtils.getReplyDataFromMessage(oMessage, this.routeType(), this.senderAccountId(), this.selectedFetcherOrIdentity(), true);
this.draftInfo(oReplyData.DraftInfo);
this.draftUid(oReplyData.DraftUid);
this.inReplyTo(oReplyData.InReplyTo);
this.references(oReplyData.References);
break;
case Enums.ReplyType.Forward:
SenderSelector.setFetcherOrIdentityByReplyMessage(oMessage);
oReplyData = SendingUtils.getReplyDataFromMessage(oMessage, this.routeType(), this.senderAccountId(), this.selectedFetcherOrIdentity(), true);
this.draftInfo(oReplyData.DraftInfo);
this.draftUid(oReplyData.DraftUid);
this.setRecipient(this.toAddr, oReplyData.To);
this.setRecipient(this.ccAddr, oReplyData.Cc);
this.subject(oReplyData.Subject);
this.setTextBody(oReplyData.Text, false);
this.attachments(oReplyData.Attachments);
this.inReplyTo(oReplyData.InReplyTo);
this.references(oReplyData.References);
break;
case Enums.ReplyType.Resend:
this.setDataFromMessage(oMessage);
break;
case 'drafts':
if (-1 !== $.inArray(oMessage.folder(), MailCache.getCurrentTemplateFolders())) {
this.templateUid(oMessage.uid());
this.templateFolderName(oMessage.folder());
} else {
var oFolderList = MailCache.oFolderListItems[oMessage.accountId()],
sDraftFolder = oFolderList ? oFolderList.draftsFolderFullName() : '';
if (sDraftFolder === oMessage.folder()) {
this.draftUid(oMessage.uid());
}
}
this.setDataFromMessage(oMessage);
break;
}
if (this.routeType() !== Enums.ReplyType.ForwardAsAttach && this.attachments().length > 0) {
this.requestAttachmentsTempName();
}
this.routeType('');
}
this.visibleCc(this.ccAddr() !== '');
this.visibleBcc(this.bccAddr() !== '');
this.commit(true);
_.defer(_.bind(function () {
this.focusAfterFilling();
}, this));
if (oMessage) {
var oParams = {
AccountId: oMessage.accountId(),
FolderFullName: oMessage.folder(),
MessageUid: oMessage.uid(),
Compose: this
};
if (this.allAttachmentsUploaded()) {
App.broadcastEvent('MailWebclient::ComposeMessageLoaded', oParams);
} else {
var oSubscription = this.allAttachmentsUploaded.subscribe(function () {
if (this.allAttachmentsUploaded()) {
App.broadcastEvent('MailWebclient::ComposeMessageLoaded', oParams);
}
oSubscription.dispose();
}, this);
}
}
};
/**
* @param {Object} oMessage
*/
CComposeView.prototype.setDataFromMessage = function (oMessage) {
var sTextBody = '',
oFetcherOrIdentity = SendingUtils.getFirstFetcherOrIdentityByRecipientsOrDefault(oMessage.oFrom.aCollection, oMessage.accountId());
SenderSelector.changeSenderAccountId(oMessage.accountId(), oFetcherOrIdentity);
if (oMessage.isPlain()) {
sTextBody = oMessage.textRaw();
} else {
sTextBody = oMessage.getConvertedHtml();
}
this.draftInfo(oMessage.draftInfo());
this.inReplyTo(oMessage.inReplyTo());
this.references(oMessage.references());
this.setRecipient(this.toAddr, oMessage.oTo.getFull());
this.setRecipient(this.ccAddr, oMessage.oCc.getFull());
this.setRecipient(this.bccAddr, oMessage.oBcc.getFull());
this.subject(oMessage.subject());
this.attachments(oMessage.attachments());
this.setTextBody(sTextBody, oMessage.isPlain());
this.selectedImportance(oMessage.importance());
this.sendReadingConfirmation(oMessage.readingConfirmationAddressee() !== '');
var bDraft = !!oMessage.folderObject() && oMessage.folderObject().type() === Enums.FolderTypes.Drafts;
this.triggerToolbarControllersAfterPopulatingMessage(bDraft, oMessage.isPlain(), oMessage.textRaw(), oMessage.sensitivity());
};
CComposeView.prototype.triggerToolbarControllersAfterPopulatingMessage = function (bDraft, bPlain, sRawText, iSensitivity) {
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.doAfterPopulatingMessage)) {
oController.doAfterPopulatingMessage({
bDraft: bDraft,
bPlain: bPlain,
sRawText: sRawText,
iSensitivity: iSensitivity
});
}
}.bind(this));
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CComposeView.prototype.onDataAsAttachmentUpload = function (oResponse, oRequest) {
var oParameters = oRequest.Parameters,
oResult = oResponse.Result,
sHash = oParameters.Hash,
oAttachment = _.find(this.attachments(), function (oAttach) {
return oAttach.hash() === sHash;
});
this.messageUploadAttachmentsStarted(false);
if (oAttachment) {
if (oResult && oResult.Attachment) {
oAttachment.parseFromUpload(oResult.Attachment);
} else {
oAttachment.errorFromUpload();
}
}
};
CComposeView.prototype.addAttachments = function (aFiles) {
_.each(aFiles, _.bind(function (oFileData) {
var oAttach = new CAttachmentModel(this.senderAccountId());
oAttach.parseFromUpload(oFileData);
this.attachments.push(oAttach);
}, this));
};
/**
* @param {Array} aFiles
*/
CComposeView.prototype.addFilesAsAttachment = function (aFiles) {
var oAttach = null,
aHashes = [];
_.each(aFiles, function (oFile) {
oAttach = new CAttachmentModel(this.senderAccountId());
oAttach.fileName(oFile.fileName());
oAttach.hash(oFile.hash());
oAttach.thumbUrlInQueue(oFile.thumbUrlInQueue());
oAttach.uploadStarted(true);
this.attachments.push(oAttach);
aHashes.push(oFile.hash());
}, this);
if (aHashes.length > 0) {
this.messageUploadAttachmentsStarted(true);
CoreAjax.send('Files', 'GetFilesForUpload', {
Hashes: aHashes
}, this.onFilesUpload, this);
}
};
/**
* @param {array} attachments
*/
CComposeView.prototype.addUploadingAttachments = function (attachments) {
var _this = this;
if (Array.isArray(attachments) && attachments.length > 0) {
attachments.forEach(function (attachment) {
_this.attachments.push(attachment);
});
this.messageUploadAttachmentsStarted(true);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CComposeView.prototype.onFilesUpload = function (oResponse, oRequest) {
var oParameters = oRequest.Parameters,
aResult = oResponse.Result,
aHashes = oParameters.Hashes;
this.messageUploadAttachmentsStarted(false);
if (_.isArray(aResult)) {
_.each(aResult, function (oFileData) {
var oAttachment = _.find(this.attachments(), function (oAttach) {
return oAttach.hash() === oFileData.Hash;
});
if (oAttachment) {
oAttachment.parseFromUpload(oFileData);
oAttachment.hash(oFileData.NewHash);
}
}, this);
} else {
_.each(aHashes, function (sHash) {
var oAttachment = _.find(this.attachments(), function (oAttach) {
return oAttach.hash() === sHash;
});
if (oAttachment) {
oAttachment.errorFromUpload();
}
}, this);
}
};
/**
* @param {Object} oMessage
*/
CComposeView.prototype.addMessageAsAttachment = function (oMessage) {
var oAttach = new CAttachmentModel(oMessage.accountId()),
oParameters = null;
if (oMessage) {
oAttach.fileName(oMessage.subject() + '.eml');
oAttach.uploadStarted(true);
this.attachments.push(oAttach);
oParameters = {
AccountID: oMessage.accountId(),
MessageFolder: oMessage.folder(),
MessageUid: oMessage.uid(),
FileName: oAttach.fileName()
};
this.messageUploadAttachmentsStarted(true);
Ajax.send('SaveMessageAsTempFile', oParameters, this.onSaveMessageAsTempFile, this);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CComposeView.prototype.onSaveMessageAsTempFile = function (oResponse, oRequest) {
var oResult = oResponse.Result,
sFileName = oRequest.Parameters.FileName,
oAttach = null;
this.messageUploadAttachmentsStarted(false);
if (oResult) {
oAttach = _.find(this.attachments(), function (oAttach) {
return oAttach.fileName() === sFileName && oAttach.uploadStarted();
});
if (oAttach) {
oAttach.parseFromUpload(oResult, oRequest.Parameters.MessageFolder, oRequest.Parameters.MessageUid);
}
} else {
oAttach = _.find(this.attachments(), function (oAttach) {
return oAttach.fileName() === sFileName && oAttach.uploadStarted();
});
if (oAttach) {
oAttach.errorFromUpload();
}
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CComposeView.prototype.onContactVCardUpload = function (oResponse, oRequest) {
var oParameters = oRequest.Parameters,
oResult = oResponse.Result,
oAttach = null;
this.messageUploadAttachmentsStarted(false);
if (oResult) {
oAttach = _.find(this.attachments(), function (oAttach) {
return oAttach.fileName() === oResult.Name && oAttach.uploadStarted();
});
if (oAttach) {
oAttach.parseFromUpload(oResult);
}
} else {
oAttach = _.find(this.attachments(), function (oAttach) {
return oAttach.fileName() === oParameters.Name && oAttach.uploadStarted();
});
if (oAttach) {
oAttach.errorFromUpload();
}
}
};
CComposeView.prototype.requestAttachmentsTempName = function () {
var aHash = _.map(this.attachments(), function (oAttach) {
oAttach.uploadUid(oAttach.hash());
oAttach.uploadStarted(true);
return oAttach.hash();
});
if (aHash.length > 0) {
this.messageUploadAttachmentsStarted(true);
Ajax.send('SaveAttachmentsAsTempFiles', {
AccountID: this.senderAccountId(),
Attachments: aHash
}, this.onMessageUploadAttachmentsResponse, this);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CComposeView.prototype.onMessageUploadAttachmentsResponse = function (oResponse, oRequest) {
var aHashes = oRequest.Parameters.Attachments;
this.messageUploadAttachmentsStarted(false);
if (oResponse.Result) {
_.each(oResponse.Result, _.bind(this.setAttachTempNameByHash, this));
} else {
_.each(aHashes, function (sHash) {
var oAttachment = _.find(this.attachments(), function (oAttach) {
return oAttach.hash() === sHash;
});
if (oAttachment) {
oAttachment.errorFromUpload();
}
}, this);
Screens.showError(TextUtils.i18n('MAILWEBCLIENT/ERROR_UPLOAD_FORWARD_ATTACHMENTS'));
}
};
/**
* @param {string} sHash
* @param {string} sTempName
*/
CComposeView.prototype.setAttachTempNameByHash = function (sHash, sTempName) {
_.each(this.attachments(), function (oAttach) {
if (oAttach.hash() === sHash) {
oAttach.tempName(sTempName);
oAttach.uploadStarted(false);
}
});
};
/**
* @param {Object} oParameters
*/
CComposeView.prototype.setMessageDataInNewTab = function (oParameters) {
this.templateUid(oParameters.templateUid);
this.templateFolderName(oParameters.templateFolderName);
this.draftInfo(oParameters.draftInfo);
this.draftUid(oParameters.draftUid);
this.inReplyTo(oParameters.inReplyTo);
this.references(oParameters.references);
this.setRecipient(this.toAddr, oParameters.toAddr);
this.setRecipient(this.ccAddr, oParameters.ccAddr);
this.setRecipient(this.bccAddr, oParameters.bccAddr);
this.subject(oParameters.subject);
this.attachments(_.map(oParameters.attachments, function (oRawAttach) {
var oAttach = new CAttachmentModel(oParameters.senderAccountId);
oAttach.parse(oRawAttach);
return oAttach;
}, this));
this.setTextBody(oParameters.textBody, oParameters.plainTextMode);
this.selectedImportance(oParameters.selectedImportance);
this.sendReadingConfirmation(oParameters.sendReadingConfirmation);
this.changedInPreviousWindow(oParameters.changedInPreviousWindow);
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.doAfterApplyingMainTabParameters)) {
oController.doAfterApplyingMainTabParameters(oParameters);
}
});
SenderSelector.changeSenderAccountId(oParameters.senderAccountId, oParameters.selectedFetcherOrIdentity);
this.focusedField(oParameters.focusedField);
};
/**
* @param {boolean=} bOnlyCurrentWindow = false
*/
CComposeView.prototype.commit = function (bOnlyCurrentWindow) {
this.toAddr.commit();
this.ccAddr.commit();
this.bccAddr.commit();
this.subject.commit();
this.selectedImportance.commit();
this.sendReadingConfirmation.commit();
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.commit)) {
oController.commit();
}
});
this.oHtmlEditor.commit();
this.attachmentsChanged(false);
if (!bOnlyCurrentWindow) {
this.changedInPreviousWindow(false);
}
};
CComposeView.prototype.isChanged = function () {
var bToAddrChanged = this.toAddr.changed(),
bCcAddrChanged = this.ccAddr.changed(),
bBccAddrChanged = this.bccAddr.changed(),
bSubjectChanged = this.subject.changed(),
bImportanceChanged = this.selectedImportance.changed(),
bReadConfChanged = this.sendReadingConfirmation.changed(),
bControllersChanged = false,
bHtmlChanged = this.oHtmlEditor.textChanged(),
bAttachmentsChanged = this.attachmentsChanged(),
bChangedInPreviousWindow = this.changedInPreviousWindow();
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.isChanged)) {
bControllersChanged = bControllersChanged || oController.isChanged();
}
});
return bToAddrChanged || bCcAddrChanged || bBccAddrChanged || bSubjectChanged || bImportanceChanged || bReadConfChanged || bControllersChanged || bHtmlChanged || bAttachmentsChanged || bChangedInPreviousWindow;
};
CComposeView.prototype.executeBackToList = function () {
if (App.isNewTab()) {
window.close();
} else if (!!this.shown && this.shown()) {
Routing.setPreviousHash();
}
this.backToListOnSendOrSave(false);
};
/**
* Creates new attachment for upload.
*
* @param {string} sFileUid
* @param {Object} oFileData
*/
CComposeView.prototype.onFileUploadSelect = function (sFileUid, oFileData) {
var oAttach;
if (FilesUtils.showErrorIfAttachmentSizeLimit(oFileData.FileName, Types.pInt(oFileData.Size))) {
return false;
}
oAttach = new CAttachmentModel(this.senderAccountId());
oAttach.onUploadSelect(sFileUid, oFileData);
this.attachments.push(oAttach);
return true;
};
/**
* Returns attachment found by uid.
*
* @param {string} sFileUid
*/
CComposeView.prototype.getAttachmentByUid = function (sFileUid) {
return _.find(this.attachments(), function (oAttach) {
return oAttach.uploadUid() === sFileUid;
});
};
/**
* Finds attachment by uid. Calls it's function to start upload.
*
* @param {string} sFileUid
*/
CComposeView.prototype.onFileUploadStart = function (sFileUid) {
var oAttach = this.getAttachmentByUid(sFileUid);
if (oAttach) {
oAttach.onUploadStart();
}
};
/**
* Finds attachment by uid. Calls it's function to progress upload.
*
* @param {string} sFileUid
* @param {number} iUploadedSize
* @param {number} iTotalSize
*/
CComposeView.prototype.onFileUploadProgress = function (sFileUid, iUploadedSize, iTotalSize) {
var oAttach = this.getAttachmentByUid(sFileUid);
if (oAttach) {
oAttach.onUploadProgress(iUploadedSize, iTotalSize);
}
};
/**
* Finds attachment by uid. Calls it's function to complete upload.
*
* @param {string} sFileUid
* @param {boolean} bResponseReceived
* @param {Object} oResult
*/
CComposeView.prototype.onFileUploadComplete = function (sFileUid, bResponseReceived, oResult) {
var oAttach = this.getAttachmentByUid(sFileUid);
if (oAttach) {
oAttach.onUploadComplete(sFileUid, bResponseReceived, oResult);
}
};
/**
* Finds attachment by uid. Calls it's function to cancel upload.
*
* @param {string} sFileUid
*/
CComposeView.prototype.onFileRemove = function (sFileUid) {
var oAttach = this.getAttachmentByUid(sFileUid);
if (this.oJua) {
this.oJua.cancel(sFileUid);
}
this.attachments.remove(oAttach);
};
/**
* Initializes file uploader.
*/
CComposeView.prototype.initUploader = function () {
// this.oJua must be re-initialized because compose popup is destroyed after it is closed
if (this.composeShown() && this.composeUploaderButton()) {
this.oJua = new CJua({
action: '?/Api/',
name: 'jua-uploader',
queueSize: 2,
clickElement: this.composeUploaderButton(),
hiddenElementsPosition: UserSettings.IsRTL ? 'right' : 'left',
dragAndDropElement: this.composeUploaderDropPlace(),
disableAjaxUpload: false,
disableFolderDragAndDrop: false,
disableDragAndDrop: false,
hidden: _.extendOwn({
Module: Settings.ServerModuleName,
Method: 'UploadAttachment',
Parameters: function Parameters() {
return JSON.stringify({
AccountID: MailCache.currentAccountId()
});
}
}, App.getCommonRequestParameters())
});
this.oJua.on('onDragEnter', _.bind(this.composeUploaderDragOver, this, true)).on('onDragLeave', _.bind(this.composeUploaderDragOver, this, false)).on('onBodyDragEnter', _.bind(this.composeUploaderBodyDragOver, this, true)).on('onBodyDragLeave', _.bind(this.composeUploaderBodyDragOver, this, false)).on('onProgress', _.bind(this.onFileUploadProgress, this)).on('onSelect', _.bind(this.onFileUploadSelect, this)).on('onStart', _.bind(this.onFileUploadStart, this)).on('onComplete', _.bind(this.onFileUploadComplete, this));
this.allowDragNDrop(this.oJua.isDragAndDropSupported());
}
};
/**
* @param {boolean} bRemoveSignatureAnchor
* @param {boolean} bSaveTemplate
*/
CComposeView.prototype.getSendSaveParameters = function (bRemoveSignatureAnchor, bSaveTemplate) {
var oAttachments = SendingUtils.convertAttachmentsForSending(this.attachments()),
oParameters = null;
_.each(this.oHtmlEditor.getUploadedImagesData(), function (oAttach) {
oAttachments[oAttach.TempName] = [oAttach.Name, oAttach.CID, '1', '1'];
});
oParameters = {
AccountID: this.senderAccountId(),
IdentityID: this.selectedFetcherOrIdentity() && this.selectedFetcherOrIdentity().IDENTITY ? this.selectedFetcherOrIdentity().id() : '',
AliasID: this.selectedFetcherOrIdentity() && this.selectedFetcherOrIdentity().ALIAS ? this.selectedFetcherOrIdentity().id() : '',
FetcherID: this.selectedFetcherOrIdentity() && this.selectedFetcherOrIdentity().FETCHER ? this.selectedFetcherOrIdentity().id() : '',
DraftInfo: this.draftInfo(),
DraftUid: this.draftUid(),
To: this.toAddr(),
Cc: this.ccAddr(),
Bcc: this.bccAddr(),
Subject: this.subject(),
Text: this.oHtmlEditor.getText(bRemoveSignatureAnchor),
IsHtml: !this.oHtmlEditor.plainTextMode(),
Importance: this.selectedImportance(),
SendReadingConfirmation: this.sendReadingConfirmation(),
Attachments: oAttachments,
InReplyTo: this.inReplyTo(),
References: this.references()
};
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.doAfterPreparingSendMessageParameters)) {
oController.doAfterPreparingSendMessageParameters(oParameters);
}
});
if (this.templateFolderName() !== '' && bSaveTemplate) {
oParameters.DraftFolder = this.templateFolderName();
oParameters.DraftUid = this.templateUid();
}
return oParameters;
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CComposeView.prototype.onSendOrSaveMessageResponse = function (oResponse, oRequest) {
var oResData = SendingUtils.onSendOrSaveMessageResponse(oResponse, oRequest, this.requiresPostponedSending()),
oParameters = oRequest.Parameters;
this.commit();
switch (oResData.Method) {
case 'SaveMessage':
if (oResData.Result && oParameters.DraftUid === this.templateUid() && oParameters.DraftFolder === this.templateFolderName()) {
this.templateUid(Types.pString(oResData.NewUid));
if (this.composeShown() && this instanceof CComposeView) {
// it is screen, not popup
Routing.replaceHashDirectly(LinksUtils.getComposeFromMessage('drafts', MailCache.currentAccountId(), oParameters.DraftFolder, this.templateUid()));
}
} else if (oResData.Result && oParameters.DraftUid === this.draftUid()) {
this.draftUid(Types.pString(oResData.NewUid));
if (this.composeShown() && this instanceof CComposeView) {
// it is screen, not popup
Routing.replaceHashDirectly(LinksUtils.getComposeFromMessage('drafts', MailCache.currentAccountId(), oParameters.DraftFolder, this.draftUid()));
}
}
this.saving(false);
break;
case 'SendMessage':
if (oResData.Result) {
if (this.backToListOnSendOrSave()) {
if (_.isFunction(this.closePopup)) {
this.closePopup();
} else {
this.executeBackToList();
}
}
}
this.sending(false);
break;
}
};
CComposeView.prototype.verifyDataForSending = function () {
var aToIncorrect = AddressUtils.getIncorrectEmailsFromAddressString(this.toAddr()),
aCcIncorrect = AddressUtils.getIncorrectEmailsFromAddressString(this.ccAddr()),
aBccIncorrect = AddressUtils.getIncorrectEmailsFromAddressString(this.bccAddr()),
aIncorrect = _.union(aToIncorrect, aCcIncorrect, aBccIncorrect),
aEncodedIncorrect = _.map(aIncorrect, function (sIncorrect) {
return TextUtils.encodeHtml(sIncorrect);
}),
sWarning = TextUtils.i18n('MAILWEBCLIENT/ERROR_INPUT_CORRECT_EMAILS') + aEncodedIncorrect.join(', ');
if (aIncorrect.length > 0) {
Popups.showPopup(AlertPopup, [sWarning]);
return false;
}
return true;
};
/**
* @param {mixed} mParam
*/
CComposeView.prototype.executeSend = function (mParam) {
var bCancelSend = false,
fContinueSending = _.bind(function () {
this.sending(true);
this.requiresPostponedSending(!this.allowStartSending());
SendingUtils.send('SendMessage', this.getSendSaveParameters(true), true, this.onSendOrSaveMessageResponse, this, this.requiresPostponedSending());
this.backToListOnSendOrSave(true);
}, this);
if (this.autoEncryptSignMessage()) {
this.encryptSignAndSend();
} else if (this.isEnableSending() && this.verifyDataForSending()) {
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.doBeforeSend)) {
bCancelSend = bCancelSend || oController.doBeforeSend(fContinueSending);
}
});
if (!bCancelSend) {
fContinueSending();
}
}
};
CComposeView.prototype.executeSaveCommand = function () {
if (this.draftFolderIsAvailable()) {
this.executeSave(false);
}
};
CComposeView.prototype.executeTemplateSaveCommand = function () {
this.executeSave(false, true, true);
};
/**
* @param {boolean=} bAutosave = false
* @param {boolean=} bWaitResponse = true
* @param {boolean=} bSaveTemplate = false
*/
CComposeView.prototype.executeSave = function (bAutosave, bWaitResponse, bSaveTemplate) {
bAutosave = !!bAutosave;
bWaitResponse = bWaitResponse === undefined ? true : bWaitResponse;
bSaveTemplate = !!bSaveTemplate;
var fOnSaveMessageResponse = bWaitResponse ? this.onSendOrSaveMessageResponse : SendingUtils.onSendOrSaveMessageResponse,
oContext = bWaitResponse ? this : SendingUtils,
fSave = _.bind(function (bSave) {
if (bSave) {
this.saving(bWaitResponse);
SendingUtils.send('SaveMessage', this.getSendSaveParameters(false, bSaveTemplate), !bAutosave, fOnSaveMessageResponse, oContext);
}
}, this),
bCancelSaving = false;
if (this.isEnableSaving()) {
if (!bAutosave || this.isChanged()) {
if (!bAutosave) {
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.doBeforeSave)) {
bCancelSaving = bCancelSaving || oController.doBeforeSave(fSave);
}
}, this);
}
if (!bCancelSaving) {
fSave(true);
}
}
this.backToListOnSendOrSave(true);
}
};
/**
* Changes visibility of bcc field.
*/
CComposeView.prototype.changeBccVisibility = function () {
this.visibleBcc(!this.visibleBcc());
if (this.visibleBcc()) {
this.focusBccAddr();
} else {
this.focusToAddr();
}
};
/**
* Changes visibility of bcc field.
*/
CComposeView.prototype.changeCcVisibility = function () {
this.visibleCc(!this.visibleCc());
if (this.visibleCc()) {
this.focusCcAddr();
} else {
this.focusToAddr();
}
};
CComposeView.prototype.getMessageDataForNewTab = function () {
var aAttachments = _.map(this.attachments(), function (oAttach) {
return {
FileName: oAttach.fileName(),
TempName: oAttach.tempName(),
MimeType: oAttach.mimeType(),
MimePartIndex: oAttach.mimePartIndex(),
EstimatedSize: oAttach.size(),
CID: oAttach.cid(),
ContentLocation: oAttach.contentLocation(),
IsInline: oAttach.inline(),
IsLinked: oAttach.linked(),
Hash: oAttach.hash()
};
}),
oParameters = null;
oParameters = {
accountId: this.senderAccountId(),
templateUid: this.templateUid(),
templateFolderName: this.templateFolderName(),
draftInfo: this.draftInfo(),
draftUid: this.draftUid(),
inReplyTo: this.inReplyTo(),
references: this.references(),
senderAccountId: this.senderAccountId(),
selectedFetcherOrIdentity: this.selectedFetcherOrIdentity(),
toAddr: this.toAddr(),
ccAddr: this.ccAddr(),
bccAddr: this.bccAddr(),
subject: this.subject(),
attachments: aAttachments,
plainTextMode: this.oHtmlEditor.plainTextMode(),
textBody: this.oHtmlEditor.getText(),
selectedImportance: this.selectedImportance(),
sendReadingConfirmation: this.sendReadingConfirmation(),
changedInPreviousWindow: this.isChanged(),
focusedField: this.focusedField()
};
_.each(this.allControllers(), function (oController) {
if (_.isFunction(oController.doAfterPreparingMainTabParameters)) {
oController.doAfterPreparingMainTabParameters(oParameters);
}
});
return oParameters;
};
CComposeView.prototype.openInNewWindow = function () {
var sWinName = 'id' + Math.random().toString(),
oMessageParametersFromCompose = {},
oWin = null,
sHash = Routing.buildHashFromArray(LinksUtils.getCompose());
this.ignoreHasUnsavedChanges(true);
oMessageParametersFromCompose = this.getMessageDataForNewTab();
if (this.draftUid().length > 0 && !this.isChanged()) {
sHash = Routing.buildHashFromArray(LinksUtils.getComposeFromMessage('drafts', MailCache.currentAccountId(), MailCache.folderList().draftsFolderFullName(), this.draftUid(), true));
oWin = WindowOpener.openTab('?message-newtab' + sHash);
} else if (this.templateUid().length > 0 && !this.isChanged()) {
sHash = Routing.buildHashFromArray(LinksUtils.getComposeFromMessage('drafts', MailCache.currentAccountId(), this.templateFolderName(), this.templateUid(), true));
oWin = WindowOpener.openTab('?message-newtab' + sHash);
} else if (!this.isChanged()) {
if (this.routeParams().length > 0) {
sHash = Routing.buildHashFromArray(_.union([Settings.HashModuleName + '-compose'], this.routeParams()));
}
oWin = WindowOpener.openTab('?message-newtab' + sHash);
} else {
MainTabExtMethods.passComposedMessage(sWinName, oMessageParametersFromCompose);
oWin = WindowOpener.openTab('?message-newtab' + sHash, sWinName);
}
this.commit();
if (_.isFunction(this.closePopup)) {
this.closePopup();
} else {
this.executeBackToList();
}
};
CComposeView.prototype.onShowFilesPopupClick = function () {
if (this.bAllowFiles) {
Popups.showPopup(SelectFilesPopup, [_.bind(this.addFilesAsAttachment, this)]);
}
};
CComposeView.prototype.registerOwnToolbarControllers = function () {
this.registerToolbarController({
ViewTemplate: 'MailWebclient_Compose_BackButtonView',
sId: 'back',
bOnlyMobile: true,
backToListCommand: this.backToListCommand
});
this.registerToolbarController({
ViewTemplate: 'MailWebclient_Compose_SendButtonView',
sId: 'send',
bAllowMobile: true,
sendCommand: this.sendCommand,
toolbarControllers: ko.computed(function () {
return _.filter(this.toolbarControllers(), function (oController) {
return oController.bSendButton;
});
}, this)
});
this.registerToolbarController({
ViewTemplate: 'MailWebclient_Compose_SaveButtonView',
sId: 'save',
bAllowMobile: true,
visible: this.draftFolderIsAvailable,
saveCommand: this.saveCommand
});
this.registerToolbarController({
ViewTemplate: 'MailWebclient_Compose_SaveTemplateButtonView',
sId: 'save-template',
bAllowMobile: false,
visible: this.visibleSaveTemplateControl,
saveTemplateCommand: this.saveTemplateCommand
});
this.registerToolbarController({
ViewTemplate: 'MailWebclient_Compose_ImportanceDropdownView',
sId: 'importance',
selectedImportance: this.selectedImportance
});
this.registerToolbarController({
ViewTemplate: 'MailWebclient_Compose_ConfirmationCheckboxView',
sId: 'confirmation',
sendReadingConfirmation: this.sendReadingConfirmation
});
};
/**
* @param {Object} oController
*/
CComposeView.prototype.registerToolbarController = function (oController) {
var bAllowRegister = App.isMobile() ? oController.bAllowMobile : !oController.bOnlyMobile,
iLastIndex = Settings.ComposeToolbarOrder.length;
if (bAllowRegister) {
oController.bSendButton = !!oController.bSendButton;
this.toolbarControllers.push(oController);
this.toolbarControllers(_.sortBy(this.toolbarControllers(), function (oContr) {
var iIndex = _.indexOf(Settings.ComposeToolbarOrder, oContr.sId);
return iIndex !== -1 ? iIndex : iLastIndex;
}));
if (_.isFunction(oController.assignComposeExtInterface)) {
oController.assignComposeExtInterface(this.getExtInterface());
}
}
};
CComposeView.prototype.registerMessageRowController = function (oController) {
var bAllowRegister = App.isMobile() ? oController.bAllowMobile : !oController.bOnlyMobile;
if (bAllowRegister) {
this.messageRowControllers.push(oController);
if (_.isFunction(oController.assignComposeExtInterface)) {
oController.assignComposeExtInterface(this.getExtInterface());
}
}
};
CComposeView.prototype.registerUploadAttachmentsController = function (controller) {
var allowRegister = App.isMobile() ? controller.bAllowMobile : !controller.bOnlyMobile;
if (allowRegister) {
this.uploadAttachmentsController.push(controller);
if (_.isFunction(controller.assignComposeExtInterface)) {
controller.assignComposeExtInterface(this.getExtInterface());
}
}
};
/**
* @returns {Object}
*/
CComposeView.prototype.getExtInterface = function () {
return {
isHtml: _.bind(function () {
return !this.oHtmlEditor.plainTextMode();
}, this),
hasAttachments: _.bind(function () {
return this.notInlineAttachments().length > 0;
}, this),
getPlainText: _.bind(this.oHtmlEditor.getPlainText, this.oHtmlEditor),
koTextChange: this.oHtmlEditor.textChanged,
getFromEmail: _.bind(function () {
return this.selectedFetcherOrIdentity() ? this.selectedFetcherOrIdentity().email() : AccountList.getEmail();
}, this),
getRecipientEmails: _.bind(function () {
return this.recipientEmails();
}, this),
getRecipientsInfo: _.bind(function () {
return _.values(this.recipientsInfo());
}, this),
getSelectedSender: _.bind(this.selectedSender, this),
saveSilently: _.bind(this.executeSave, this, true),
setPlainTextMode: _.bind(this.oHtmlEditor.plainTextMode, this, true),
setPlainText: _.bind(function (sText) {
this.setTextBody(sText, true);
}, this),
setHtmlTextMode: _.bind(this.oHtmlEditor.plainTextMode, this, false),
setHtmlText: _.bind(function (sHtml) {
this.setTextBody(sHtml, false);
}, this),
undoHtml: _.bind(this.oHtmlEditor.undoAndClearRedo, this.oHtmlEditor),
getSubject: _.bind(function () {
return this.subject();
}, this),
koSubject: this.subject,
getAutoEncryptSignMessage: function () {
return this.autoEncryptSignMessage();
}.bind(this),
getRecipientsEmpty: function () {
return this.toAddr().length === 0 && this.ccAddr().length === 0 && this.bccAddr().length === 0;
}.bind(this),
getSendSaveParameters: function () {
return this.getSendSaveParameters();
}.bind(this),
isEnableSending: function () {
return this.isEnableSending();
}.bind(this),
isEnableSaving: function () {
return this.isEnableSaving();
}.bind(this),
getDraftFolderFullName: function getDraftFolderFullName(iAccountID) {
var oFolderList = MailCache.oFolderListItems[iAccountID];
return oFolderList ? oFolderList.draftsFolderFullName() : '';
},
addUploadingAttachments: _.bind(this.addUploadingAttachments, this),
onFilesUpload: _.bind(this.onFilesUpload, this),
koSenderAccountId: this.senderAccountId,
koAllAttachmentsUploaded: this.allAttachmentsUploaded,
clearFolderCache: function clearFolderCache(iAccountId, sDraftFolder) {
if (MainTab) {
MainTab.removeMessagesFromCacheForFolder(iAccountId, sDraftFolder);
} else {
MailCache.removeMessagesFromCacheForFolder(iAccountId, sDraftFolder);
}
},
commitAndClose: function () {
this.commit();
if (_.isFunction(this.closePopup)) {
this.closePopup();
} else {
this.executeBackToList();
}
}.bind(this)
};
};
module.exports = CComposeView;
/***/ }),
/***/ "TmsQ":
/*!********************************************************!*\
!*** ./modules/MailWebclient/js/MessagesDictionary.js ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var CHECK_AND_CLEAR_DICT_EVERY_MINUTES = 30,
DESTROY_NOT_USED_LAST_HOURS = 4;
var _ = __webpack_require__(/*! underscore */ "C3HO"),
moment = __webpack_require__(/*! moment */ "sdEb"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC"),
Logger = __webpack_require__(/*! modules/CoreWebclient/js/utils/Logger.js */ "IWyd"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
MailCache = null;
function GetMessagesLimitToStore() {
return Settings.MailsPerPage * 8 + 700;
}
function CMessagesDictionary() {
this.oMessages = {};
// Clears dictionary from old messages every 30 minutes
setInterval(this.checkAndClear.bind(this), 1000 * 60 * CHECK_AND_CLEAR_DICT_EVERY_MINUTES);
}
/**
* Obtains message from dictionary.
* @param {array} aKey
* @returns {object}
*/
CMessagesDictionary.prototype.get = function (aKey) {
var sKey = JSON.stringify(aKey);
return this.oMessages[sKey];
};
/**
* Adds message to dictionary.
* @param {array} aKey
* @param {object} oMessage
*/
CMessagesDictionary.prototype.set = function (aKey, oMessage) {
var sKey = JSON.stringify(aKey);
this.oMessages[sKey] = oMessage;
};
/**
* Requires MailCache. It cannot be required earlier because it is not initialized yet.
*/
CMessagesDictionary.prototype.requireMailCache = function () {
if (MailCache === null) {
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8");
}
};
/**
* Checks the number of messages in the dictionary.
* If the number is over 1000 destroys messages that have not been used for 4 hours.
*/
CMessagesDictionary.prototype.checkAndClear = function () {
this.requireMailCache();
// Do not check if the current folder has not been synchronized for the last 30 minutes.
// This may be first moments after computer wakes up.
var oIndicatorFolder = MailCache.getCurrentFolder();
if (!oIndicatorFolder && MailCache.folderList()) {
oIndicatorFolder = MailCache.folderList().inboxFolder();
}
if (!oIndicatorFolder || moment().diff(oIndicatorFolder.oRelevantInformationLastMoment) > 1000 * 60 * CHECK_AND_CLEAR_DICT_EVERY_MINUTES) {
return;
}
var iCount = _.size(this.oMessages),
iPrevNow = moment().add(-DESTROY_NOT_USED_LAST_HOURS, 'hours').unix(),
iMessagesLimitToStore = GetMessagesLimitToStore();
if (iCount > iMessagesLimitToStore) {
Logger.log('checkAndClear', iCount, Settings.MailsPerPage, iMessagesLimitToStore);
// Update last access time for messages on the current page.
_.each(MailCache.messages(), function (oMessage) {
oMessage.updateLastAccessTime();
});
// Update last access time for the current message.
if (MailCache.currentMessage()) {
MailCache.currentMessage().updateLastAccessTime();
}
// Destroy old messages.
_.each(this.oMessages, function (oMessage, sKey) {
if (oMessage.iLastAccessTime !== 0 && oMessage.iLastAccessTime < iPrevNow) {
Utils.destroyObjectWithObservables(this.oMessages, sKey);
}
}.bind(this));
Logger.log('checkAndClear', _.size(this.oMessages));
}
};
/**
* Removes message from the dictionary.
* @param {Array} aKey
*/
CMessagesDictionary.prototype.remove = function (aKey) {
var sKey = JSON.stringify(aKey);
Utils.destroyObjectWithObservables(this.oMessages, sKey);
};
// Updates all messages dates if current date has been just changed.
CMessagesDictionary.prototype.updateMomentDates = function () {
_.each(this.oMessages, function (oMessage) {
oMessage.updateMomentDate();
}, this);
};
module.exports = new CMessagesDictionary();
/***/ }),
/***/ "UVn1":
/*!*********************************************************!*\
!*** ./modules/MailWebclient/js/models/CServerModel.js ***!
\*********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9");
function CServerModel(oServer) {
this.iId = oServer ? Types.pInt(oServer.EntityId) || Types.pInt(oServer.ServerId) : 0;
this.iTenantId = oServer ? Types.pInt(oServer.TenantId) : 0;
this.sName = oServer ? Types.pString(oServer.Name) : '';
this.sIncomingServer = oServer ? Types.pString(oServer.IncomingServer) : '';
this.iIncomingPort = oServer ? Types.pInt(oServer.IncomingPort) : 143;
this.bIncomingUseSsl = oServer ? !!oServer.IncomingUseSsl : false;
this.sOutgoingServer = oServer ? Types.pString(oServer.OutgoingServer) : '';
this.iOutgoingPort = oServer ? Types.pInt(oServer.OutgoingPort) : 25;
this.bOutgoingUseSsl = oServer ? !!oServer.OutgoingUseSsl : false;
this.sDomains = oServer ? Types.pString(oServer.Domains) : '';
this.sSmtpAuthType = oServer ? Types.pString(oServer.SmtpAuthType) : window.Enums.SmtpAuthType.UseUserCredentials;
this.sSmtpLogin = oServer ? Types.pString(oServer.SmtpLogin) : '';
this.sSmtpPassword = oServer ? Types.pString(oServer.SmtpPassword) : '';
this.bEnableSieve = oServer ? !!oServer.EnableSieve : false;
this.iSievePort = oServer && oServer.SievePort ? Types.pInt(oServer.SievePort) : 4190;
this.bEnableThreading = oServer ? !!oServer.EnableThreading : false;
this.bUseFullEmailAddressAsLogin = oServer ? !!oServer.UseFullEmailAddressAsLogin : true;
this.bSetExternalAccessServers = Types.pBool(oServer && oServer.SetExternalAccessServers, false);
this.sExternalAccessImapServer = Types.pString(oServer && oServer.ExternalAccessImapServer, '');
this.iExternalAccessImapPort = Types.pInt(oServer && oServer.ExternalAccessImapPort, 143);
this.iExternalAccessImapAlterPort = Types.pInt(oServer && oServer.ExternalAccessImapAlterPort, 0);
this.bExternalAccessImapUseSsl = Types.pBool(oServer && oServer.ExternalAccessImapUseSsl, false);
this.sExternalAccessPop3Server = Types.pString(oServer && oServer.ExternalAccessPop3Server, '');
this.iExternalAccessPop3Port = Types.pInt(oServer && oServer.ExternalAccessPop3Port, 110);
this.iExternalAccessPop3AlterPort = Types.pInt(oServer && oServer.ExternalAccessPop3AlterPort, 0);
this.bExternalAccessPop3UseSsl = Types.pBool(oServer && oServer.ExternalAccessPop3UseSsl, false);
this.sExternalAccessSmtpServer = Types.pString(oServer && oServer.ExternalAccessSmtpServer, '');
this.iExternalAccessSmtpPort = Types.pInt(oServer && oServer.ExternalAccessSmtpPort, 25);
this.iExternalAccessSmtpAlterPort = Types.pInt(oServer && oServer.ExternalAccessSmtpAlterPort, 0);
this.bExternalAccessSmtpUseSsl = Types.pBool(oServer && oServer.ExternalAccessSmtpUseSsl, false);
this.bAllowToDelete = Types.pBool(oServer && oServer.AllowToDelete, true);
this.bAllowEditDomains = Types.pBool(oServer && oServer.AllowEditDomains, true);
this.sOwnerType = oServer ? Types.pString(oServer.OwnerType) : '';
this.bOauthEnable = Types.pBool(oServer && oServer.OAuthEnable, false);
this.sOauthName = Types.pString(oServer && oServer.OAuthName, '');
this.sOauthType = Types.pString(oServer && oServer.OAuthType, '');
this.sOauthIconUrl = Types.pString(oServer && oServer.OAuthIconUrl, '');
}
module.exports = CServerModel;
/***/ }),
/***/ "Ua3z":
/*!**********************************************!*\
!*** ./modules/MailWebclient/js/Settings.js ***!
\**********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ko = __webpack_require__(/*! knockout */ "p09A"),
_ = __webpack_require__(/*! underscore */ "C3HO"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o");
module.exports = {
ServerModuleName: 'Mail',
HashModuleName: 'mail',
FetchersServerModuleName: 'MtaConnector',
AliasesServerModuleName: 'CpanelIntegrator',
// from Core module
EnableMultiTenant: false,
// from Mail module
AllowAddAccounts: false,
AllowAutosaveInDrafts: true,
AllowChangeMailQuotaOnMailServer: false,
AllowDefaultAccountForUser: true,
AllowEditDomainsInServer: true,
AllowFetchers: false,
AllowIdentities: false,
AllowAliases: false,
OnlyUserEmailsInIdentities: false,
AllowInsertImage: true,
AllowMultiAccounts: false,
AutoSaveIntervalSeconds: 60,
AllowTemplateFolders: false,
AllowInsertTemplateOnCompose: false,
MaxTemplatesCountOnCompose: 100,
AllowAlwaysRefreshFolders: false,
AutocreateMailAccountOnNewUserFirstLogin: false,
IgnoreImapSubscription: false,
ImageUploadSizeLimit: 0,
AllowUnifiedInbox: true,
AllowScheduledAutoresponder: false,
// from MailWebclient module
AllowAppRegisterMailto: false,
AllowChangeInputDirection: true,
FoldersExpandedByDefault: false,
AllowSpamFolder: true,
AllowAddNewFolderOnMainScreen: false,
ComposeToolbarOrder: ['back', 'send', 'save', 'importance', 'MailSensitivity', 'confirmation', 'OpenPgp'],
DefaultFontName: 'Tahoma',
DefaultFontSize: 3,
AlwaysTryUseImageWhilePasting: true,
AllowHorizontalLineButton: false,
AllowComposePlainText: false,
AllowEditHtmlSource: false,
JoinReplyPrefixes: true,
MailsPerPage: 20,
AllowChangeStarredMessagesSource: false,
StarredMessagesSource: Enums.StarredMessagesSource.InboxOnly,
MaxMessagesBodiesSizeToPrefetch: 50000,
MessageBodyTruncationThreshold: 650000,
// in bytes
MessagesSortBy: {},
ShowEmailAsTabName: true,
AllowOtherModulesToReplaceTabsbarHeader: false,
AllowShowMessagesCountInFolderList: false,
showMessagesCountInFolderList: ko.observable(false),
AllowSearchMessagesBySubject: false,
PrefixesToRemoveBeforeSearchMessagesBySubject: [],
AllowHorizontalLayout: false,
HorizontalLayout: false,
HorizontalLayoutByDefault: false,
DisableRtlRendering: false,
AllowQuickReply: false,
AllowQuickSendOnCompose: false,
AllowUserGroupsInComposeAutocomplete: true,
MarkMessageSeenWhenViewing: true,
MarkMessageSeenWhenAnswerForward: false,
UserLoginPartInAccountDropdown: false,
UseMeRecipientForMessages: true,
userMailAccountsCount: ko.observable(0),
mailAccountsEmails: ko.observableArray([]),
ImageResizerOptions: {
"MailWebclient/ACTION_MAKE_IMAGE_SMALL": "300px",
"MailWebclient/ACTION_MAKE_IMAGE_MEDIUM": "600px",
"MailWebclient/ACTION_MAKE_IMAGE_LARGE": "1200px",
"MailWebclient/ACTION_MAKE_IMAGE_ORIGINAL": ""
},
/**
* Initializes settings from AppData object sections.
*
* @param {Object} oAppData Object contained modules settings.
*/
init: function init(oAppData) {
var oCoreDataSection = oAppData['Core'],
oAppDataMailSection = oAppData[this.ServerModuleName],
oAppDataMailWebclientSection = oAppData['MailWebclient'],
oAppDataFetchersSection = oAppData[this.FetchersServerModuleName],
oAppDataAliasesSection = oAppData[this.AliasesServerModuleName];
if (!_.isEmpty(oCoreDataSection)) {
this.EnableMultiTenant = Types.pBool(oCoreDataSection.EnableMultiTenant, this.EnableMultiTenant);
}
if (!_.isEmpty(oAppDataMailSection)) {
this.AllowAddAccounts = Types.pBool(oAppDataMailSection.AllowAddAccounts, this.AllowAddAccounts);
this.AllowAutosaveInDrafts = Types.pBool(oAppDataMailSection.AllowAutosaveInDrafts, this.AllowAutosaveInDrafts);
this.AllowChangeMailQuotaOnMailServer = Types.pBool(oAppDataMailSection.AllowChangeMailQuotaOnMailServer, this.AllowChangeMailQuotaOnMailServer);
this.AllowDefaultAccountForUser = Types.pBool(oAppDataMailSection.AllowDefaultAccountForUser, this.AllowDefaultAccountForUser);
this.AllowEditDomainsInServer = Types.pBool(oAppDataMailSection.AllowEditDomainsInServer, this.AllowEditDomainsInServer);
this.AllowIdentities = Types.pBool(oAppDataMailSection.AllowIdentities, this.AllowIdentities);
this.OnlyUserEmailsInIdentities = Types.pBool(oAppDataMailSection.OnlyUserEmailsInIdentities, this.OnlyUserEmailsInIdentities);
this.AllowInsertImage = Types.pBool(oAppDataMailSection.AllowInsertImage, this.AllowInsertImage);
this.AllowMultiAccounts = Types.pBool(oAppDataMailSection.AllowMultiAccounts, this.AllowMultiAccounts);
this.AutoSaveIntervalSeconds = Types.pNonNegativeInt(oAppDataMailSection.AutoSaveIntervalSeconds, this.AutoSaveIntervalSeconds);
this.AllowTemplateFolders = Types.pBool(oAppDataMailSection.AllowTemplateFolders, this.AllowTemplateFolders);
this.AllowInsertTemplateOnCompose = Types.pBool(oAppDataMailSection.AllowInsertTemplateOnCompose, this.AllowInsertTemplateOnCompose);
this.MaxTemplatesCountOnCompose = Types.pPositiveInt(oAppDataMailSection.MaxTemplatesCountOnCompose, this.MaxTemplatesCountOnCompose);
this.AllowAlwaysRefreshFolders = Types.pBool(oAppDataMailSection.AllowAlwaysRefreshFolders, this.AllowAlwaysRefreshFolders);
this.AutocreateMailAccountOnNewUserFirstLogin = Types.pBool(oAppDataMailSection.AutocreateMailAccountOnNewUserFirstLogin, this.AutocreateMailAccountOnNewUserFirstLogin);
this.IgnoreImapSubscription = Types.pBool(oAppDataMailSection.IgnoreImapSubscription, this.IgnoreImapSubscription);
this.ImageUploadSizeLimit = Types.pNonNegativeInt(oAppDataMailSection.ImageUploadSizeLimit, this.ImageUploadSizeLimit);
this.AllowUnifiedInbox = Types.pBool(oAppDataMailSection.AllowUnifiedInbox, this.AllowUnifiedInbox);
this.AllowScheduledAutoresponder = Types.pBool(oAppDataMailSection.AllowScheduledAutoresponder, this.AllowScheduledAutoresponder);
window.Enums.SmtpAuthType = Types.pObject(oAppDataMailSection.SmtpAuthType);
this.MessagesSortBy = _.clone(Types.pObject(oAppDataMailSection.MessagesSortBy, this.MessagesSortBy));
this.MessagesSortBy.Allow = Types.pBool(this.MessagesSortBy.Allow, false);
this.MessagesSortBy.List = Types.pArray(this.MessagesSortBy.List, []);
this.MessagesSortBy.DefaultSortBy = Types.pString(this.MessagesSortBy.DefaultSortBy, 'arrival');
var sOrder = Types.pString(this.MessagesSortBy.DefaultSortOrder, 'desc');
this.MessagesSortBy.DefaultSortOrder = sOrder === 'desc' ? Enums.SortOrder.Desc : Enums.SortOrder.Asc;
}
if (!_.isEmpty(oAppDataMailWebclientSection)) {
this.AllowAppRegisterMailto = Types.pBool(oAppDataMailWebclientSection.AllowAppRegisterMailto, this.AllowAppRegisterMailto);
this.AllowChangeInputDirection = Types.pBool(oAppDataMailWebclientSection.AllowChangeInputDirection, this.AllowChangeInputDirection);
this.FoldersExpandedByDefault = Types.pBool(oAppDataMailWebclientSection.FoldersExpandedByDefault, this.FoldersExpandedByDefault);
this.AllowSpamFolder = Types.pBool(oAppDataMailWebclientSection.AllowSpamFolder, this.AllowSpamFolder);
this.AllowAddNewFolderOnMainScreen = Types.pBool(oAppDataMailWebclientSection.AllowAddNewFolderOnMainScreen, this.AllowAddNewFolderOnMainScreen);
this.ComposeToolbarOrder = Types.pArray(oAppDataMailWebclientSection.ComposeToolbarOrder, this.ComposeToolbarOrder);
this.DefaultFontName = Types.pString(oAppDataMailWebclientSection.DefaultFontName, this.DefaultFontName);
this.DefaultFontSize = Types.pPositiveInt(oAppDataMailWebclientSection.DefaultFontSize, this.DefaultFontSize);
this.AlwaysTryUseImageWhilePasting = Types.pBool(oAppDataMailWebclientSection.AlwaysTryUseImageWhilePasting, this.AlwaysTryUseImageWhilePasting);
this.AllowHorizontalLineButton = Types.pBool(oAppDataMailWebclientSection.AllowHorizontalLineButton, this.AllowHorizontalLineButton);
this.AllowComposePlainText = Types.pBool(oAppDataMailWebclientSection.AllowComposePlainText, this.AllowComposePlainText);
this.AllowEditHtmlSource = Types.pBool(oAppDataMailWebclientSection.AllowEditHtmlSource, this.AllowEditHtmlSource);
this.JoinReplyPrefixes = Types.pBool(oAppDataMailWebclientSection.JoinReplyPrefixes, this.JoinReplyPrefixes);
this.MailsPerPage = Types.pPositiveInt(oAppDataMailWebclientSection.MailsPerPage, this.MailsPerPage);
this.AllowChangeStarredMessagesSource = Types.pBool(oAppDataMailWebclientSection.AllowChangeStarredMessagesSource, this.AllowChangeStarredMessagesSource);
if (this.AllowChangeStarredMessagesSource) {
this.StarredMessagesSource = Types.pEnum(oAppDataMailWebclientSection.StarredMessagesSource, Enums.StarredMessagesSource, Enums.StarredMessagesSource.InboxOnly);
}
this.MaxMessagesBodiesSizeToPrefetch = Types.pNonNegativeInt(oAppDataMailWebclientSection.MaxMessagesBodiesSizeToPrefetch, this.MaxMessagesBodiesSizeToPrefetch);
this.MessageBodyTruncationThreshold = Types.pNonNegativeInt(oAppDataMailWebclientSection.MessageBodyTruncationThreshold, this.MessageBodyTruncationThreshold);
this.ShowEmailAsTabName = Types.pBool(oAppDataMailWebclientSection.ShowEmailAsTabName, this.ShowEmailAsTabName);
this.AllowOtherModulesToReplaceTabsbarHeader = Types.pBool(oAppDataMailWebclientSection.AllowOtherModulesToReplaceTabsbarHeader, this.AllowOtherModulesToReplaceTabsbarHeader);
this.AllowShowMessagesCountInFolderList = Types.pBool(oAppDataMailWebclientSection.AllowShowMessagesCountInFolderList, this.AllowShowMessagesCountInFolderList);
this.showMessagesCountInFolderList(Types.pBool(oAppDataMailWebclientSection.ShowMessagesCountInFolderList, this.showMessagesCountInFolderList()));
this.AllowSearchMessagesBySubject = Types.pBool(oAppDataMailWebclientSection.AllowSearchMessagesBySubject, this.AllowSearchMessagesBySubject);
this.PrefixesToRemoveBeforeSearchMessagesBySubject = Types.pArray(oAppDataMailWebclientSection.PrefixesToRemoveBeforeSearchMessagesBySubject, this.PrefixesToRemoveBeforeSearchMessagesBySubject);
this.AllowHorizontalLayout = Types.pBool(oAppDataMailWebclientSection.AllowHorizontalLayout, this.AllowHorizontalLayout);
this.HorizontalLayoutByDefault = this.AllowHorizontalLayout && Types.pBool(oAppDataMailWebclientSection.HorizontalLayoutByDefault, this.HorizontalLayoutByDefault);
this.HorizontalLayout = this.AllowHorizontalLayout && Types.pBool(oAppDataMailWebclientSection.HorizontalLayout, this.HorizontalLayoutByDefault);
this.DisableRtlRendering = Types.pBool(oAppDataMailWebclientSection.DisableRtlRendering, this.DisableRtlRendering);
this.AllowQuickReply = Types.pBool(oAppDataMailWebclientSection.AllowQuickReply, this.AllowQuickReply);
this.AllowQuickSendOnCompose = Types.pBool(oAppDataMailWebclientSection.AllowQuickSendOnCompose, this.AllowQuickSendOnCompose);
this.AllowUserGroupsInComposeAutocomplete = Types.pBool(oAppDataMailWebclientSection.AllowUserGroupsInComposeAutocomplete, this.AllowUserGroupsInComposeAutocomplete);
this.MarkMessageSeenWhenViewing = Types.pBool(oAppDataMailWebclientSection.MarkMessageSeenWhenViewing, this.MarkMessageSeenWhenViewing);
this.MarkMessageSeenWhenAnswerForward = Types.pBool(oAppDataMailWebclientSection.MarkMessageSeenWhenAnswerForward, this.MarkMessageSeenWhenAnswerForward);
this.UserLoginPartInAccountDropdown = Types.pBool(oAppDataMailWebclientSection.UserLoginPartInAccountDropdown, this.UserLoginPartInAccountDropdown);
this.UseMeRecipientForMessages = Types.pBool(oAppDataMailWebclientSection.UseMeRecipientForMessages, this.UseMeRecipientForMessages);
this.ImageResizerOptions = Types.pObject(oAppDataMailWebclientSection.TextEditorImageResizerOptions, this.ImageResizerOptions);
}
if (!_.isEmpty(oAppDataFetchersSection)) {
this.AllowFetchers = Types.pBool(oAppDataFetchersSection.AllowFetchers, this.AllowFetchers);
}
if (!_.isEmpty(oAppDataAliasesSection)) {
this.AllowAliases = Types.pBool(oAppDataAliasesSection.AllowAliases, this.AllowAliases);
}
App.registerUserAccountsCount(this.userMailAccountsCount);
App.registerAccountsWithPass(this.mailAccountsEmails);
},
/**
* Updates new settings values after saving on server.
*
* @param {object} parameters
*/
update: function update(parameters) {
this.AllowAutosaveInDrafts = Types.pBool(parameters.AllowAutosaveInDrafts, this.AllowAutosaveInDrafts);
this.AllowChangeInputDirection = Types.pBool(parameters.AllowChangeInputDirection, this.AllowChangeInputDirection);
this.MailsPerPage = Types.pPositiveInt(parameters.MailsPerPage, this.MailsPerPage);
this.showMessagesCountInFolderList(Types.pBool(parameters.ShowMessagesCountInFolderList, this.showMessagesCountInFolderList()));
this.StarredMessagesSource = Types.pEnum(parameters.StarredMessagesSource, Enums.StarredMessagesSource, Enums.StarredMessagesSource.InboxOnly);
},
/**
* Updates new admin settings values after saving on server.
*
* @param {boolean} bAutocreateMailAccountOnNewUserFirstLogin
* @param {boolean} bAllowAddAccounts
* @param {boolean} bHorizontalLayoutByDefault
*/
updateAdmin: function updateAdmin(bAutocreateMailAccountOnNewUserFirstLogin, bAllowAddAccounts, bHorizontalLayoutByDefault) {
this.AutocreateMailAccountOnNewUserFirstLogin = Types.pBool(bAutocreateMailAccountOnNewUserFirstLogin, this.AutocreateMailAccountOnNewUserFirstLogin);
this.AllowAddAccounts = Types.pBool(bAllowAddAccounts, this.AllowAddAccounts);
this.HorizontalLayoutByDefault = Types.pBool(bHorizontalLayoutByDefault, this.HorizontalLayoutByDefault);
},
disableEditDomainsInServer: function disableEditDomainsInServer() {
this.AllowEditDomainsInServer = false;
}
};
/***/ }),
/***/ "V8Bf":
/*!*********************************************************!*\
!*** ./modules/MailWebclient/js/models/CFolderModel.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"),
Logger = __webpack_require__(/*! modules/CoreWebclient/js/utils/Logger.js */ "IWyd"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ"),
Api = __webpack_require__(/*! modules/CoreWebclient/js/Api.js */ "Z9uT"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "ioSH"),
Storage = __webpack_require__(/*! modules/CoreWebclient/js/Storage.js */ "oJUS"),
Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
ConfirmPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/ConfirmPopup.js */ "MYiO"),
LinksUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Links.js */ "dpSB"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
MailCache = null,
MessagesDictionary = __webpack_require__(/*! modules/MailWebclient/js/MessagesDictionary.js */ "TmsQ"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
CMessageModel = __webpack_require__(/*! modules/MailWebclient/js/models/CMessageModel.js */ "WzKm"),
CUidListModel = __webpack_require__(/*! modules/MailWebclient/js/models/CUidListModel.js */ "eL/8");
/**
* @constructor
* @param {number} iAccountId
* @param {boolean} bIsUnifiedInbox
*/
function CFolderModel(iAccountId, bIsUnifiedInbox) {
this.iAccountId = iAccountId;
this.bIsUnifiedInbox = !!bIsUnifiedInbox;
this.oUnifiedInboxes = {};
this.bNamespace = false;
this.iDisplayedLevel = 0;
this.bIgnoreImapSubscription = Settings.IgnoreImapSubscription;
this.bAllowTemplateFolders = Settings.AllowTemplateFolders;
this.isTemplateStorage = ko.observable(false);
this.bAllowAlwaysRefreshFolders = Settings.AllowAlwaysRefreshFolders;
this.isAlwaysRefresh = ko.observable(false);
/** From server **/
this.sDelimiter = '';
this.bExists = true;
/** Extended **/
this.sUidNext = '';
this.sHash = '';
this.messageCount = ko.observable(0);
this.unseenMessageCount = ko.observable(0);
this.iRealUnseenMessageCount = 0;
this.hasExtendedInfo = ko.observable(false);
/** Extended **/
this.fullName = ko.observable('');
this.fullNameHash = ko.observable('');
this.parentFullName = ko.observable('');
this.parentDisplayFullName = ko.observable('');
this.bSelectable = true;
this.subscribed = ko.observable(true);
this.name = ko.observable('');
this.nameForEdit = ko.observable('');
this.subfolders = ko.observableArray([]);
this.subfoldersMessagesCount = ko.observable(0);
this.type = ko.observable(Enums.FolderTypes.User);
/** From server **/
this.bVirtual = false; // Indicates if the folder does not exist on mail server and uses as place for filtered message list.
// At the moment the application supports only one type of virtual folders - for starred messages.
this.selected = ko.observable(false); // Indicates if the folder is selected on mail screen.
this.expanded = ko.observable(false); // Indicates if subfolders are shown on mail screen.
this.recivedAnim = ko.observable(false).extend({
'autoResetToFalse': 500
}); // Starts the animation for displaying moving messages to the folder on mail screen.
this.edited = ko.observable(false); // Indicates if the folder name is edited now on settings screen.
this.aMessagesDictionaryUids = [];
this.oUids = {};
this.aResponseHandlers = [];
this.aRequestedUids = [];
this.aRequestedThreadUids = [];
this.requestedLists = [];
this.hasChanges = ko.observable(false);
this.oRelevantInformationLastMoment = null;
this.bSubscribtionsInitialized = false;
this.disableMoveTo = ko.observable(this.bVirtual || this.bIsUnifiedInbox);
this.disableMoveFrom = ko.observable(this.bIsUnifiedInbox);
}
CFolderModel.prototype.setDisableMoveTo = function (bDisable) {
this.disableMoveTo(this.bVirtual || this.bIsUnifiedInbox || bDisable);
};
CFolderModel.prototype.setDisableMoveFrom = function (bDisable) {
this.disableMoveFrom(this.bIsUnifiedInbox || bDisable);
};
CFolderModel.prototype.requireMailCache = function () {
if (MailCache === null) {
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8");
}
};
/**
* @param {number} iLevel
*/
CFolderModel.prototype.setDisplayedLevel = function (iLevel) {
this.iDisplayedLevel = iLevel;
};
CFolderModel.prototype.getDisplayedLevel = function () {
return this.iDisplayedLevel;
};
CFolderModel.prototype.getUnifiedInbox = function (iAccountId) {
var oInbox = this.oUnifiedInboxes[iAccountId];
if (!oInbox) {
this.requireMailCache();
var oFolderList = MailCache.oFolderListItems[iAccountId];
oInbox = oFolderList ? oFolderList.inboxFolder() : null;
this.oUnifiedInboxes[iAccountId] = oInbox;
}
return oInbox;
};
/**
* @param {string} sUid
* @returns {Object}
*/
CFolderModel.prototype.getMessageByUid = function (sUid) {
this.requireMailCache();
var oIdentifiers = MailCache.getMessageActualIdentifiers(this.iAccountId, this.fullName(), sUid);
return MessagesDictionary.get([oIdentifiers.iAccountId, oIdentifiers.sFolder, oIdentifiers.sUid]);
};
/**
* Removes message uid from the dictionary.
* @param {string} sUid
* @returns {Object}
*/
CFolderModel.prototype.removeMessageFromDict = function (sUid) {
MessagesDictionary.remove([this.iAccountId, this.fullName(), sUid]);
this.aMessagesDictionaryUids = _.without(this.aMessagesDictionaryUids, sUid);
this.aRequestedUids = _.without(this.aRequestedUids, sUid);
this.aRequestedThreadUids = _.without(this.aRequestedThreadUids, sUid);
App.broadcastEvent('MailWebclient::removeMessageFromDict::after', [this.iAccountId, this.fullName(), sUid]);
};
/**
* Update last access time for messages with specified uids.
* @param {array} aUids
*/
CFolderModel.prototype.updateLastAccessTime = function (aUids) {
_.each(aUids, function (sUid) {
var oMessage = this.getMessageByUid(sUid);
if (oMessage) {
oMessage.updateLastAccessTime();
}
}, this);
};
/**
* Executes some function for all uids of messages from the folder in the dictionary.
* Removes invalid uids from lists.
* @param {function} fDoForAllMessages
*/
CFolderModel.prototype.doForAllMessages = function (fDoForAllMessages) {
var aInvalidUids = [];
_.each(this.aMessagesDictionaryUids, function (sUidInDict) {
var oMessage = this.getMessageByUid(sUidInDict);
if (oMessage) {
fDoForAllMessages(oMessage);
} else {
aInvalidUids.push(sUidInDict);
}
}, this);
if (aInvalidUids.length > 0) {
this.aMessagesDictionaryUids = _.difference(this.aMessagesDictionaryUids, aInvalidUids);
this.aRequestedUids = _.difference(this.aRequestedUids, aInvalidUids);
this.aRequestedThreadUids = _.difference(this.aRequestedThreadUids, aInvalidUids);
}
};
/**
* @returns {Array}
*/
CFolderModel.prototype.getFlaggedMessageUids = function () {
var aUids = [];
this.doForAllMessages(function (oMessage) {
if (oMessage.flagged()) {
aUids.push(oMessage.uid());
}
});
return aUids;
};
/**
* @param {string} sUid
*/
CFolderModel.prototype.setMessageUnflaggedByUid = function (sUid) {
var oMessage = this.getMessageByUid(sUid);
if (oMessage) {
oMessage.flagged(false);
}
};
/**
* @param {Object} oMessage
*/
CFolderModel.prototype.hideThreadMessages = function (oMessage) {
_.each(oMessage.threadUids(), function (sThreadUid) {
var oThreadMessage = this.getMessageByUid(sThreadUid);
if (oThreadMessage) {
if (!oThreadMessage.deleted()) {
oThreadMessage.threadShowAnimation(false);
oThreadMessage.threadHideAnimation(true);
setTimeout(function () {
oThreadMessage.threadHideAnimation(false);
}, 1000);
}
}
}, this);
};
/**
* @param {Object} oMessage
*/
CFolderModel.prototype.getThreadMessages = function (oMessage) {
var aLoadedMessages = [],
aUidsForLoad = [],
aChangedThreadUids = [],
iCount = 0,
oLastMessage = null,
iShowThrottle = 50;
_.each(oMessage.threadUids(), function (sThreadUid) {
if (iCount < oMessage.threadCountForLoad()) {
var oThreadMessage = this.getMessageByUid(sThreadUid);
if (oThreadMessage) {
if (!oThreadMessage.deleted()) {
oThreadMessage.markAsThreadPart(iShowThrottle, oMessage.uid());
aLoadedMessages.push(oThreadMessage);
aChangedThreadUids.push(oThreadMessage.uid());
iCount++;
oLastMessage = oThreadMessage;
}
} else {
aUidsForLoad.push(sThreadUid);
aChangedThreadUids.push(sThreadUid);
iCount++;
}
} else {
aChangedThreadUids.push(sThreadUid);
}
}, this);
if (!oMessage.threadLoading()) {
this.loadThreadMessages(aUidsForLoad);
}
oMessage.changeThreadUids(aChangedThreadUids, aLoadedMessages.length);
if (oLastMessage && aLoadedMessages.length < oMessage.threadUids().length) {
oLastMessage.showNextLoadingLink(_.bind(oMessage.increaseThreadCountForLoad, oMessage));
}
return aLoadedMessages;
};
/**
* @param {Object} oMessage
*/
CFolderModel.prototype.computeThreadData = function (oMessage) {
var iUnreadCount = 0,
bPartialFlagged = false,
aSenders = [],
aEmails = [],
sMainEmail = oMessage.oFrom.getFirstEmail();
_.each(oMessage.threadUids(), function (sThreadUid) {
var oInbox = this.bIsUnifiedInbox ? this.getUnifiedInbox(oMessage.accountId()) : null,
oThreadMessage = oInbox ? oInbox.getMessageByUid(sThreadUid) : this.getMessageByUid(sThreadUid),
sThreadEmail = '';
if (oThreadMessage && !oThreadMessage.deleted()) {
if (!oThreadMessage.seen()) {
iUnreadCount++;
}
if (oThreadMessage.flagged()) {
bPartialFlagged = true;
}
sThreadEmail = oThreadMessage.oFrom.getFirstEmail();
if (sThreadEmail !== sMainEmail && -1 === $.inArray(sThreadEmail, aEmails)) {
aEmails.push(sThreadEmail);
if (sThreadEmail === AccountList.getEmail()) {
aSenders.push(TextUtils.i18n('MAILWEBCLIENT/LABEL_ME_SENDER'));
} else {
aSenders.push(oThreadMessage.oFrom.getFirstDisplay());
}
}
}
}, this);
oMessage.threadUnreadCount(iUnreadCount);
oMessage.partialFlagged(bPartialFlagged);
};
/**
* @param {Array} aUidsForLoad
*/
CFolderModel.prototype.loadThreadMessages = function (aUidsForLoad) {
if (aUidsForLoad.length > 0) {
var oParameters = {
'AccountID': this.iAccountId,
'Folder': this.fullName(),
'Uids': aUidsForLoad
};
Ajax.send('GetMessagesByUids', oParameters, this.onGetMessagesByUidsResponse, this);
}
};
/**
* @param {Array} aMessages
*/
CFolderModel.prototype.getThreadCheckedUidsFromList = function (aMessages) {
var aThreadUids = [];
_.each(aMessages, function (oMessage) {
if (oMessage.threadCount() > 0 && !oMessage.threadOpened()) {
_.each(oMessage.threadUids(), function (sUid) {
var oInbox = this.bIsUnifiedInbox ? this.getUnifiedInbox(oMessage.accountId()) : null,
oThreadMessage = oInbox ? oInbox.getMessageByUid(sUid) : this.getMessageByUid(sUid);
if (oThreadMessage && !oThreadMessage.deleted() && oThreadMessage.checked()) {
aThreadUids.push(oThreadMessage.longUid());
}
}, this);
}
}, this);
return aThreadUids;
};
/**
* @param {Object} oRawMessage
* @param {boolean} bThreadPart
* @param {boolean} bTrustThreadInfo
*/
CFolderModel.prototype.parseAndCacheMessage = function (oRawMessage, bThreadPart, bTrustThreadInfo) {
var sUid = oRawMessage.Uid.toString(),
bNewMessage = false,
oMessage = this.getMessageByUid(sUid);
if (!oMessage) {
bNewMessage = true;
oMessage = new CMessageModel();
}
oMessage.parse(oRawMessage, this.iAccountId, bThreadPart, bTrustThreadInfo);
if (this.type() === Enums.FolderTypes.Inbox && bNewMessage && oMessage.flagged()) {
this.requireMailCache();
MailCache.increaseStarredCount();
}
MessagesDictionary.set([oMessage.accountId(), oMessage.folder(), sUid], oMessage);
if (bNewMessage) {
this.aRequestedUids = _.without(this.aRequestedUids, sUid);
if (-1 === _.indexOf(this.aMessagesDictionaryUids, sUid)) {
this.aMessagesDictionaryUids.push(sUid);
}
}
return oMessage;
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CFolderModel.prototype.onGetMessagesByUidsResponse = function (oResponse, oRequest) {
var oResult = oResponse.Result;
if (oResult && oResult['@Object'] === 'Collection/MessageCollection') {
_.each(oResult['@Collection'], function (oRawMessage) {
this.parseAndCacheMessage(oRawMessage, true, true);
}, this);
this.requireMailCache();
MailCache.showOpenedThreads(this.fullName());
}
};
/**
* Adds uids of requested messages.
*
* @param {Array} aUids
*/
CFolderModel.prototype.addRequestedUids = function (aUids) {
this.aRequestedUids = _.union(this.aRequestedUids, aUids);
};
/**
* @param {string} sUid
*/
CFolderModel.prototype.hasUidBeenRequested = function (sUid) {
return _.indexOf(this.aRequestedUids, sUid) !== -1;
};
/**
* Adds uids of requested thread message headers.
*
* @param {Array} aUids
*/
CFolderModel.prototype.addRequestedThreadUids = function (aUids) {
this.aRequestedThreadUids = _.union(this.aRequestedThreadUids, aUids);
};
/**
* @param {string} sUid
*/
CFolderModel.prototype.hasThreadUidBeenRequested = function (sUid) {
return _.indexOf(this.aRequestedThreadUids, sUid) !== -1;
};
/**
* @param {Object} oParams
*/
CFolderModel.prototype.hasListBeenRequested = function (oParams) {
var aFoundParams = _.where(this.requestedLists, oParams),
bHasParams = aFoundParams.length > 0;
if (!bHasParams) {
this.requestedLists.push(oParams);
}
return bHasParams;
};
/**
* @param {string} sUid
* @param {string} sReplyType
*/
CFolderModel.prototype.markMessageReplied = function (sUid, sReplyType) {
var oMessage = this.getMessageByUid(sUid),
oFolder = oMessage ? MailCache.getFolderByFullName(oMessage.accountId(), oMessage.folder()) : null;
;
if (oMessage) {
switch (sReplyType) {
case Enums.ReplyType.Reply:
case Enums.ReplyType.ReplyAll:
oMessage.answered(true);
if (Settings.MarkMessageSeenWhenAnswerForward && oFolder && !oMessage.seen()) {
MailCache.executeGroupOperationForFolder('SetMessagesSeen', oFolder, [oMessage.longUid()], 'seen', true);
}
break;
case Enums.ReplyType.Forward:
case Enums.ReplyType.ForwardAsAttach:
oMessage.forwarded(true);
if (Settings.MarkMessageSeenWhenAnswerForward && oFolder && !oMessage.seen()) {
MailCache.executeGroupOperationForFolder('SetMessagesSeen', oFolder, [oMessage.longUid()], 'seen', true);
}
break;
}
}
};
CFolderModel.prototype.removeAllMessages = function () {
var oUidListsToRemove = this.oUids,
aMessagesUidsToRemove = this.aMessagesDictionaryUids,
oUidList = null;
this.aMessagesDictionaryUids = [];
this.aRequestedUids = [];
this.aRequestedThreadUids = [];
this.requestedLists = [];
this.oUids = {};
this.messageCount(0);
this.unseenMessageCount(0);
this.iRealUnseenMessageCount = 0;
oUidList = this.getUidList('', '', Settings.MessagesSortBy.DefaultSortBy, Settings.MessagesSortBy.DefaultSortOrder);
oUidList.resultCount(0);
if (MailCache.currentMessage() && MailCache.currentMessage().accountId() === this.iAccountId && MailCache.currentMessage().folder() === this.fullName()) {
Logger.log('removeAllMessages, the current message is in the list to remove', MailCache.currentMessage() ? {
'accountId': MailCache.currentMessage().accountId(),
'folder': MailCache.currentMessage().folder(),
'uid': MailCache.currentMessage().uid()
} : null);
aMessagesUidsToRemove = _.without(aMessagesUidsToRemove, MailCache.currentMessage().longUid());
}
_.each(aMessagesUidsToRemove, function (sUid) {
this.removeMessageFromDict(sUid);
}, this);
aMessagesUidsToRemove = null;
_.each(oUidListsToRemove, function (oUidList) {
// clear the UID list because it is outdated
// Do not remove it from the cache to prevent the creation of a new oUidList object
// because the old oUidList object will remain in the browser's memory
oUidList.clearData();
});
oUidListsToRemove = null;
};
CFolderModel.prototype.removeAllMessageListsFromCacheIfHasChanges = function () {
if (this.hasChanges()) {
this.oUids = {};
this.requestedLists = [];
this.aRequestedThreadUids = [];
this.hasChanges(false);
}
};
CFolderModel.prototype.removeMultiFoldersMessageListsFromCache = function () {
_.each(this.oUids, function (oUidList) {
if (MailCache.isSearchInMultiFolders(oUidList.search())) {
this.requestedLists = _.filter(this.requestedLists, function (oParams) {
return oParams.search !== oUidList.search();
});
// clear the UID list because it is outdated
// Do not remove it from the cache to prevent the creation of a new oUidList object
// because the old oUidList object will remain in the browser's memory
oUidList.clearData();
}
}, this);
};
CFolderModel.prototype.removeFlaggedMessageListsFromCache = function () {
_.each(this.oUids, function (oUidList) {
if (oUidList.filters() === Enums.FolderFilter.Flagged) {
// clear the UID list because it is outdated
// Do not remove it from the cache to prevent the creation of a new oUidList object
// because the old oUidList object will remain in the browser's memory
oUidList.clearData();
}
}, this);
};
CFolderModel.prototype.removeUnseenMessageListsFromCache = function () {
_.each(this.oUids, function (oUidList) {
if (oUidList.filters() === Enums.FolderFilter.Unseen) {
// clear the UID list because it is outdated
// Do not remove it from the cache to prevent the creation of a new oUidList object
// because the old oUidList object will remain in the browser's memory
oUidList.clearData();
}
}, this);
};
/**
* @param {string} sUidNext
* @param {string} sHash
* @param {number} iMsgCount
* @param {number} iMsgUnseenCount
* @param {boolean} bNotApplyInfoToUI
*/
CFolderModel.prototype.setRelevantInformation = function (sUidNext, sHash, iMsgCount, iMsgUnseenCount, bNotApplyInfoToUI) {
var bHasChanges = this.hasExtendedInfo() && (this.sHash !== sHash || this.iRealUnseenMessageCount !== iMsgUnseenCount || this.unseenMessageCount() !== iMsgUnseenCount);
// If different, either new messages appeared or some messages were deleted
this.sHash = sHash;
this.iRealUnseenMessageCount = iMsgUnseenCount;
// New info of the folder shouldn't be applied to UI for current message list before the list is received from the server.
if (!this.hasExtendedInfo() || !bNotApplyInfoToUI) {
// If sUidNext is always updated, some of desktop notifications are shown twice
this.sUidNext = sUidNext;
// If messages counts are always updated, new message appears in the list with significant delay
this.messageCount(iMsgCount);
this.unseenMessageCount(iMsgUnseenCount);
// Fix for folder count summing
if (iMsgUnseenCount === 0) {
this.unseenMessageCount.valueHasMutated();
}
}
this.hasExtendedInfo(true);
if (bHasChanges) {
this.markHasChanges();
}
// Date and time of last updating of the folder information.
this.oRelevantInformationLastMoment = moment();
return bHasChanges;
};
CFolderModel.prototype.increaseCountIfHasNotInfo = function () {
if (!this.hasExtendedInfo()) {
this.messageCount(this.messageCount() + 1);
}
};
CFolderModel.prototype.markHasChanges = function () {
this.hasChanges(true);
};
/**
* @param {number} iDiff
* @param {number} iUnseenDiff
*/
CFolderModel.prototype.addMessagesCountsDiff = function (iDiff, iUnseenDiff) {
var iCount = this.messageCount() + iDiff,
iUnseenCount = this.unseenMessageCount() + iUnseenDiff;
if (iCount < 0) {
iCount = 0;
}
this.messageCount(iCount);
if (iUnseenCount < 0) {
iUnseenCount = 0;
}
if (iUnseenCount > iCount) {
iUnseenCount = iCount;
}
this.unseenMessageCount(iUnseenCount);
};
/**
* @param {Array} aUids
*/
CFolderModel.prototype.markDeletedByUids = function (aUids) {
var iMinusDiff = 0,
iUnseenMinusDiff = 0;
_.each(aUids, function (sUid) {
var oMessage = this.getMessageByUid(sUid);
if (oMessage) {
iMinusDiff++;
if (!oMessage.seen()) {
iUnseenMinusDiff++;
}
oMessage.deleted(true);
}
}, this);
this.addMessagesCountsDiff(-iMinusDiff, -iUnseenMinusDiff);
MailCache.setUnifiedInboxUnseenChanges(this.iAccountId, this.fullName(), -iMinusDiff, -iUnseenMinusDiff);
return {
MinusDiff: iMinusDiff,
UnseenMinusDiff: iUnseenMinusDiff
};
};
/**
* @param {Array} aUids
*/
CFolderModel.prototype.revertDeleted = function (aUids) {
var iPlusDiff = 0,
iUnseenPlusDiff = 0;
_.each(aUids, function (sUid) {
var oMessage = this.getMessageByUid(sUid);
if (oMessage && oMessage.deleted()) {
iPlusDiff++;
if (!oMessage.seen()) {
iUnseenPlusDiff++;
}
oMessage.deleted(false);
}
}, this);
this.addMessagesCountsDiff(iPlusDiff, iUnseenPlusDiff);
return {
PlusDiff: iPlusDiff,
UnseenPlusDiff: iUnseenPlusDiff
};
};
/**
* @param {Array} aUids
*/
CFolderModel.prototype.commitDeleted = function (aUids) {
_.each(aUids, _.bind(function (sUid) {
var bCurrentMessageIsBeingDeleted = MailCache.currentMessage() && MailCache.currentMessage().accountId() === this.iAccountId && MailCache.currentMessage().folder() === this.fullName() && MailCache.currentMessage().uid() === sUid;
if (bCurrentMessageIsBeingDeleted) {
Logger.log('commitDeleted, the current message is to remove', MailCache.currentMessage() ? {
'accountId': MailCache.currentMessage().accountId(),
'folder': MailCache.currentMessage().folder(),
'uid': MailCache.currentMessage().uid()
} : null);
} else {
this.removeMessageFromDict(sUid);
}
this.aMessagesDictionaryUids = _.without(this.aMessagesDictionaryUids, sUid);
this.aRequestedUids = _.without(this.aRequestedUids, sUid);
this.aRequestedThreadUids = _.without(this.aRequestedThreadUids, sUid);
}, this));
_.each(this.oUids, function (oUidList) {
oUidList.deleteUids(aUids);
});
};
/**
* @param {string} sSearch
* @param {string} sFilters
* @param {string} sSortBy
* @param {number} iSortOrder
*/
CFolderModel.prototype.getUidList = function (sSearch, sFilters, sSortBy, iSortOrder) {
var sIndex = JSON.stringify([sSearch, sFilters, sSortBy, iSortOrder]),
oUidList = null;
if (this.oUids[sIndex] === undefined) {
oUidList = new CUidListModel();
oUidList.iAccountId = this.iAccountId;
oUidList.sFullName = this.fullName();
oUidList.search(sSearch);
oUidList.filters(sFilters);
oUidList.sortBy(sSortBy);
oUidList.sortOrder(iSortOrder);
this.oUids[sIndex] = oUidList;
}
return this.oUids[sIndex];
};
/**
* @param {number} iLevel
* @param {string} sFullName
*/
CFolderModel.prototype.initStarredFolder = function (iLevel, sFullName) {
this.bVirtual = true;
this.setDisplayedLevel(iLevel);
this.fullName(sFullName);
this.name(TextUtils.i18n('MAILWEBCLIENT/LABEL_FOLDER_STARRED'));
this.type(Enums.FolderTypes.Starred);
this.initSubscriptions('');
this.initComputedFields(true);
};
/**
* @param {Object} oData
* @param {string} sParentFullName
* @param {string} sNamespaceFolder
* @param {string} sParentDisplayFullName
*/
CFolderModel.prototype.parse = function (oData, sParentFullName, sNamespaceFolder, sParentDisplayFullName) {
var sName = '',
iType = Enums.FolderTypes.User;
if (oData['@Object'] === 'Object/Folder') {
sName = Types.pString(oData.Name);
this.name(sName);
this.nameForEdit(sName);
this.fullName(Types.pString(oData.FullNameRaw));
this.fullNameHash(Types.pString(oData.FullNameHash));
this.parentFullName(Types.pString(sParentFullName));
this.parentDisplayFullName(Types.pString(sParentDisplayFullName));
this.sDelimiter = oData.Delimiter;
iType = Types.pInt(oData.Type);
if (!Settings.AllowTemplateFolders && iType === Enums.FolderTypes.Template) {
iType = Enums.FolderTypes.User;
}
if (Settings.AllowSpamFolder || iType !== Enums.FolderTypes.Spam) {
this.type(iType);
}
this.isTemplateStorage(this.type() === Enums.FolderTypes.Template);
this.bNamespace = sNamespaceFolder === this.fullName();
this.isAlwaysRefresh(Settings.AllowAlwaysRefreshFolders && !!oData.AlwaysRefresh);
this.subscribed(Settings.IgnoreImapSubscription ? true : oData.IsSubscribed);
this.bSelectable = oData.IsSelectable;
this.bExists = oData.Exists;
if (oData.Extended) {
this.setRelevantInformation(oData.Extended.UidNext.toString(), oData.Extended.Hash, oData.Extended.MessageCount, oData.Extended.MessageUnseenCount, false);
}
this.initSubscriptions(sParentFullName);
this.initComputedFields();
App.broadcastEvent('MailWebclient::ParseFolder::after', this);
return oData.SubFolders;
}
return null;
};
/**
* @param {string} sParentFullName
*/
CFolderModel.prototype.initSubscriptions = function (sParentFullName) {
if (!this.bSubscribtionsInitialized) {
this.requireMailCache();
this.unseenMessageCount.subscribe(function () {
_.delay(_.bind(function () {
MailCache.countMessages(this);
}, this), 1000);
}, this);
this.subscribed.subscribe(function () {
if (sParentFullName) {
var oParentFolder = MailCache.folderList().getFolderByFullName(sParentFullName);
if (oParentFolder) {
MailCache.countMessages(oParentFolder);
}
}
}, this);
this.edited.subscribe(function (bEdited) {
if (bEdited === false) {
this.nameForEdit(this.name());
}
}, this);
this.hasChanges.subscribe(function () {
this.requestedLists = [];
}, this);
this.bSubscribtionsInitialized = true;
}
};
CFolderModel.prototype.initComputedFields = function () {
this.routingHash = ko.computed(function () {
// At the moment the application supports only one type of virtual folders - for starred messages.
if (this.bVirtual) {
var search = '';
if (Settings.AllowChangeStarredMessagesSource && Settings.StarredMessagesSource === Enums.StarredMessagesSource.AllFolders) {
search = 'folders:all';
}
return Routing.buildHashFromArray(LinksUtils.getMailbox(this.fullName(), 1, '', search, Enums.FolderFilter.Flagged));
} else {
return Routing.buildHashFromArray(LinksUtils.getMailbox(this.fullName()));
}
}, this);
this.isSystem = ko.computed(function () {
return this.type() !== Enums.FolderTypes.User;
}, this);
this.withoutThreads = ko.computed(function () {
return this.type() === Enums.FolderTypes.Drafts || this.type() === Enums.FolderTypes.Spam || this.type() === Enums.FolderTypes.Trash;
}, this);
this.enableEmptyFolder = ko.computed(function () {
return (this.type() === Enums.FolderTypes.Spam || this.type() === Enums.FolderTypes.Trash) && this.messageCount() > 0;
}, this);
this.virtualEmpty = ko.computed(function () {
return this.bVirtual && this.messageCount() === 0;
}, this);
// indicates if folder has at least one subscribed subfolder
this.hasSubscribedSubfolders = ko.computed(function () {
return _.any(this.subfolders(), function (oFolder) {
return oFolder.subscribed();
});
}, this);
// indicates if folder can be expanded, i.e. folder is not namespace and has at least one subscribed subfolder
this.canExpand = ko.computed(function () {
return !this.bNamespace && this.hasSubscribedSubfolders();
}, this);
this.unseenMessagesCountToShow = ko.computed(function () {
return !App.isMobile() && this.canExpand() ? this.unseenMessageCount() + this.subfoldersMessagesCount() : this.unseenMessageCount();
}, this);
this.showTotalInsteadUnseenCount = ko.observable(false);
this.showUnseenMessagesCount = ko.computed(function () {
return this.unseenMessagesCountToShow() > 0 && this.type() !== Enums.FolderTypes.Drafts && !this.showTotalInsteadUnseenCount();
}, this);
this.showMessagesCount = ko.computed(function () {
return this.messageCount() > 0 && (this.type() === Enums.FolderTypes.Drafts || this.showTotalInsteadUnseenCount() || Settings.AllowShowMessagesCountInFolderList && Settings.showMessagesCountInFolderList());
}, this);
this.visible = ko.computed(function () {
return this.subscribed() || this.isSystem() || this.hasSubscribedSubfolders();
}, this);
this.canBeSelected = ko.computed(function () {
return this.bExists && this.bSelectable && this.subscribed();
}, this);
this.canSubscribe = ko.computed(function () {
return !Settings.IgnoreImapSubscription && !this.isSystem() && this.bExists && this.bSelectable;
}, this);
this.canDelete = ko.computed(function () {
return !this.isSystem() && this.hasExtendedInfo() && this.messageCount() === 0 && this.subfolders().length === 0;
}, this);
this.canRename = ko.computed(function () {
return !this.isSystem() && this.bExists;
}, this);
this.visibleTemplateTrigger = ko.computed(function () {
return Settings.AllowTemplateFolders && (this.bSelectable && !this.isSystem() || this.isTemplateStorage());
}, this);
this.templateButtonHint = ko.computed(function () {
if (this.visibleTemplateTrigger()) {
return this.isTemplateStorage() ? TextUtils.i18n('MAILWEBCLIENT/ACTION_TURN_TEMPLATE_FOLDER_OFF') : TextUtils.i18n('MAILWEBCLIENT/ACTION_TURN_TEMPLATE_FOLDER_ON');
}
return '';
}, this);
this.alwaysRefreshButtonHint = ko.computed(function () {
if (Settings.AllowAlwaysRefreshFolders) {
return this.isAlwaysRefresh() ? TextUtils.i18n('MAILWEBCLIENT/ACTION_TURN_ALWAYS_REFRESH_OFF') : TextUtils.i18n('MAILWEBCLIENT/ACTION_TURN_ALWAYS_REFRESH_ON');
}
return '';
}, this);
this.subscribeButtonHint = ko.computed(function () {
if (this.canSubscribe()) {
return this.subscribed() ? TextUtils.i18n('MAILWEBCLIENT/ACTION_HIDE_FOLDER') : TextUtils.i18n('MAILWEBCLIENT/ACTION_SHOW_FOLDER');
}
return '';
}, this);
this.deleteButtonHint = ko.computed(function () {
return this.canDelete() ? TextUtils.i18n('MAILWEBCLIENT/ACTION_DELETE_FOLDER') : '';
}, this);
this.editButtonHint = ko.computed(function () {
return !this.isSystem() && this.bSelectable ? TextUtils.i18n('MAILWEBCLIENT/LABEL_EDIT_FOLDER') : '';
}, this);
this.usedAs = ko.computed(function () {
switch (this.type()) {
case Enums.FolderTypes.Inbox:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_USED_AS_INBOX');
case Enums.FolderTypes.Sent:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_USED_AS_SENT');
case Enums.FolderTypes.Drafts:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_USED_AS_DRAFTS');
case Enums.FolderTypes.Trash:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_USED_AS_TRASH');
case Enums.FolderTypes.Spam:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_USED_AS_SPAM');
}
return '';
}, this);
this.displayName = ko.computed(function () {
if (this.bIsUnifiedInbox) {
return TextUtils.i18n('MAILWEBCLIENT/LABEL_FOLDER_ALL_INBOXES');
}
switch (this.type()) {
case Enums.FolderTypes.Inbox:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_FOLDER_INBOX');
case Enums.FolderTypes.Sent:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_FOLDER_SENT');
case Enums.FolderTypes.Drafts:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_FOLDER_DRAFTS');
case Enums.FolderTypes.Trash:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_FOLDER_TRASH');
case Enums.FolderTypes.Spam:
return TextUtils.i18n('MAILWEBCLIENT/LABEL_FOLDER_SPAM');
}
return this.name();
}, this);
this.displayFullName = ko.computed(function () {
if (this.parentDisplayFullName() !== '') {
return this.parentDisplayFullName() + this.sDelimiter + this.displayName();
}
return this.displayName();
}, this);
this.setDisableMoveTo(false);
this.setDisableMoveFrom(false);
};
CFolderModel.prototype.setShowTotalInsteadUnseenCount = function (bShowTotalInsteadUnseenCount) {
this.showTotalInsteadUnseenCount(bShowTotalInsteadUnseenCount);
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CFolderModel.prototype.onGetMessageResponse = function (oResponse, oRequest) {
var oResult = oResponse.Result,
oParameters = oRequest.Parameters,
oHand = null,
sUid = oResult ? oResult.Uid.toString() : oParameters.Uid.toString(),
oMessage = this.getMessageByUid(sUid),
bSelected = oMessage ? oMessage.selected() : false,
bPassResponse = false;
if (!oResult) {
if (bSelected) {
Api.showErrorByCode(oResponse, TextUtils.i18n('COREWEBCLIENT/ERROR_UNKNOWN'));
}
if (oMessage) {
Routing.replaceHashWithoutMessageUid(oMessage.longUid());
if (!bSelected && !oMessage.deleted()) {
this.removeMessageFromDict(sUid);
}
}
oMessage = null;
bPassResponse = true;
} else {
oMessage = this.parseAndCacheMessage(oResult, false, false);
}
oHand = this.aResponseHandlers[sUid];
if (oHand) {
oHand.handler.call(oHand.context, oMessage, sUid, bPassResponse ? oResponse : null);
delete this.aResponseHandlers[sUid];
}
};
/**
* @param {string} sUid
* @param {Function} fResponseHandler
* @param {Object} oContext
* @param {boolean} bForceAjaxRequest
*/
CFolderModel.prototype.getCompletelyFilledMessage = function (sUid, fResponseHandler, oContext, bForceAjaxRequest) {
var oMessage = this.getMessageByUid(sUid),
oParameters = {
'AccountID': oMessage ? oMessage.accountId() : 0,
'Folder': this.fullName(),
'Uid': sUid,
'MessageBodyTruncationThreshold': Settings.MessageBodyTruncationThreshold
};
if (sUid.length > 0) {
if (!oMessage || !oMessage.completelyFilled() || oMessage.truncated() || bForceAjaxRequest) {
if (fResponseHandler && oContext) {
this.aResponseHandlers[sUid] = {
handler: fResponseHandler,
context: oContext
};
}
Ajax.send('GetMessage', oParameters, this.onGetMessageResponse, this);
} else if (fResponseHandler && oContext) {
fResponseHandler.call(oContext, oMessage, sUid);
}
}
};
/**
* @param {string} sUid
*/
CFolderModel.prototype.showExternalPictures = function (sUid) {
var oMessage = this.getMessageByUid(sUid);
if (oMessage !== undefined) {
oMessage.showExternalPictures();
}
};
/**
* @param {string} sEmail
*/
CFolderModel.prototype.alwaysShowExternalPicturesForSender = function (sEmail) {
this.doForAllMessages(function (oMessage) {
var aFrom = oMessage.oFrom.aCollection;
if (aFrom.length > 0 && aFrom[0].sEmail === sEmail) {
oMessage.alwaysShowExternalPicturesForSender();
}
});
};
/**
* @param {string} sField
* @param {Array} aUids
* @param {boolean} bSetAction
*/
CFolderModel.prototype.executeGroupOperation = function (sField, aUids, bSetAction) {
var iUnseenDiff = 0;
this.doForAllMessages(function (oMessage) {
if (aUids.length > 0) {
_.each(aUids, function (sUid) {
if (oMessage.uid() === sUid && oMessage[sField]() !== bSetAction) {
oMessage[sField](bSetAction);
iUnseenDiff++;
}
});
} else {
oMessage[sField](bSetAction);
}
});
if (aUids.length === 0) {
iUnseenDiff = bSetAction ? this.unseenMessageCount() : this.messageCount() - this.unseenMessageCount();
}
if (sField === 'seen' && iUnseenDiff > 0) {
if (bSetAction) {
this.addMessagesCountsDiff(0, -iUnseenDiff);
MailCache.setUnifiedInboxUnseenChanges(this.iAccountId, this.fullName(), 0, -iUnseenDiff);
} else {
this.addMessagesCountsDiff(0, iUnseenDiff);
MailCache.setUnifiedInboxUnseenChanges(this.iAccountId, this.fullName(), 0, iUnseenDiff);
}
this.markHasChanges();
this.requireMailCache();
}
};
CFolderModel.prototype.emptyFolder = function () {
var sWarning = TextUtils.i18n('MAILWEBCLIENT/CONFIRM_EMPTY_FOLDER'),
fCallBack = _.bind(this.clearFolder, this);
if (this.enableEmptyFolder()) {
Popups.showPopup(ConfirmPopup, [sWarning, fCallBack]);
}
};
/**
* @param {boolean} bOkAnswer
*/
CFolderModel.prototype.clearFolder = function (bOkAnswer) {
if (this.enableEmptyFolder() && bOkAnswer) {
Ajax.send('ClearFolder', {
'Folder': this.fullName()
});
this.requireMailCache();
MailCache.onClearFolder(this);
// remove all messages from cache should be done after clearing current message in MailCache
this.removeAllMessages();
}
};
/**
* @param {Object} oFolder
* @param {Object} oEvent
*/
CFolderModel.prototype.onAccordion = function (oFolder, oEvent) {
var expandedFoldersStorageKey = "aurora_mail_account_".concat(this.iAccountId, "_expanded-folders"),
bExpanded = !this.expanded(),
aFolders = Storage.getData(expandedFoldersStorageKey) || [];
if (bExpanded) {
aFolders.push(this.fullName());
} else {
// remove current folder from expanded folders
aFolders = _.reject(aFolders, function (sFolder) {
return sFolder === this.name();
}, this);
}
Storage.setData(expandedFoldersStorageKey, aFolders);
this.expanded(bExpanded);
this.requireMailCache();
MailCache.countMessages(this);
if (oEvent) {
oEvent.stopPropagation();
}
};
CFolderModel.prototype.executeUnseenFilter = function () {
var bNotChanged = false;
if (this.unseenMessagesCountToShow() > this.unseenMessageCount()) {
this.onAccordion();
}
if (this.unseenMessageCount() > 0) {
this.requireMailCache();
MailCache.waitForUnseenMessages(true);
bNotChanged = Routing.setHash(LinksUtils.getMailbox(this.fullName(), 1, '', '', Enums.FolderFilter.Unseen));
if (bNotChanged) {
MailCache.changeCurrentMessageList(this.fullName(), 1, '', Enums.FolderFilter.Unseen, Settings.MessagesSortBy.DefaultSortBy, Settings.MessagesSortBy.DefaultSortOrder);
}
return false;
}
return true;
};
CFolderModel.prototype.onDeleteClick = function () {
var sWarning = TextUtils.i18n('MAILWEBCLIENT/CONFIRM_DELETE_FOLDER'),
fCallBack = _.bind(this.deleteAfterConfirm, this);
if (this.canDelete()) {
Popups.showPopup(ConfirmPopup, [sWarning, fCallBack]);
} else {
App.broadcastEvent('MailWebclient::AttemptDeleteNonemptyFolder');
}
};
/**
* @param {boolean} bOkAnswer
*/
CFolderModel.prototype.deleteAfterConfirm = function (bOkAnswer) {
if (bOkAnswer) {
var oFolderList = MailCache.editedFolderList(),
sFolderFullName = this.fullName(),
_fRemoveFolder = function fRemoveFolder(oFolder) {
if (sFolderFullName === oFolder.fullName()) {
return true;
}
oFolder.subfolders.remove(_fRemoveFolder);
return false;
};
oFolderList.collection.remove(_fRemoveFolder);
Ajax.send('DeleteFolder', {
'AccountID': AccountList.editedId(),
'Folder': this.fullName()
}, function (oResponse) {
if (!oResponse.Result) {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_DELETE_FOLDER'));
MailCache.getFolderList(AccountList.editedId());
}
}, this);
}
};
CFolderModel.prototype.onSubscribeClick = function () {
if (this.canSubscribe()) {
var oParameters = {
'AccountID': AccountList.editedId(),
'Folder': this.fullName(),
'SetAction': !this.subscribed()
};
this.subscribed(!this.subscribed());
Ajax.send('SubscribeFolder', oParameters, function (oResponse) {
if (!oResponse.Result) {
if (this.subscribed()) {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_SUBSCRIBE_FOLDER'));
} else {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_UNSUBSCRIBE_FOLDER'));
}
MailCache.getFolderList(AccountList.editedId());
}
}, this);
}
};
CFolderModel.prototype.afterMove = function (aParents) {
_.each(aParents, function (oParent) {
if (_.isFunction(oParent.afterMove)) {
oParent.afterMove();
}
});
};
CFolderModel.prototype.cancelNameEdit = function () {
this.edited(false);
};
CFolderModel.prototype.applyNameEdit = function () {
if (this.name() !== this.nameForEdit()) {
var oParameters = {
'AccountID': AccountList.editedId(),
'PrevFolderFullNameRaw': this.fullName(),
'NewFolderNameInUtf8': this.nameForEdit()
};
Ajax.send('RenameFolder', oParameters, _.bind(this.onResponseFolderRename, this), this);
this.name(this.nameForEdit());
}
this.edited(false);
};
CFolderModel.prototype.onResponseFolderRename = function (oResponse, oRequest) {
if (!oResponse || !oResponse.Result) {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_RENAME_FOLDER'));
MailCache.getFolderList(AccountList.editedId());
} else if (oResponse && oResponse.Result && oResponse.Result.FullName) {
var oFolderList = MailCache.editedFolderList();
oFolderList.renameFolder(this.fullName(), oResponse.Result.FullName, oResponse.Result.FullNameHash);
}
};
CFolderModel.prototype.triggerTemplateState = function () {
if (this.visibleTemplateTrigger()) {
if (this.isTemplateStorage()) {
this.type(Enums.FolderTypes.User);
this.isTemplateStorage(false);
} else {
this.type(Enums.FolderTypes.Template);
this.isTemplateStorage(true);
}
MailCache.changeTemplateFolder(this.fullName(), this.isTemplateStorage());
var oParameters = {
'AccountID': this.iAccountId,
'FolderFullName': this.fullName(),
'SetTemplate': this.isTemplateStorage()
};
Ajax.send('SetTemplateFolderType', oParameters, this.onSetTemplateFolderType, this);
}
};
CFolderModel.prototype.onSetTemplateFolderType = function (oResponse) {
if (!oResponse.Result) {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_SETUP_SPECIAL_FOLDERS'));
MailCache.getFolderList(AccountList.editedId());
}
};
CFolderModel.prototype.openEditFolderPopup = function () {
if (!this.isSystem() && this.bSelectable) {
var EditFolderPopup = __webpack_require__(/*! modules/MailWebclient/js/popups/EditFolderPopup.js */ "68+x");
Popups.showPopup(EditFolderPopup, [this]);
}
};
CFolderModel.prototype.triggerAlwaysRefreshState = function () {
if (Settings.AllowAlwaysRefreshFolders) {
this.isAlwaysRefresh(!this.isAlwaysRefresh());
var oParameters = {
'AccountID': this.iAccountId,
'FolderFullName': this.fullName(),
'AlwaysRefresh': this.isAlwaysRefresh()
};
Ajax.send('SetAlwaysRefreshFolder', oParameters, this.onSetAlwaysRefreshFolder, this);
}
};
CFolderModel.prototype.onSetAlwaysRefreshFolder = function (oResponse) {
if (!oResponse.Result) {
Api.showErrorByCode(oResponse);
MailCache.getFolderList(AccountList.editedId());
}
};
module.exports = CFolderModel;
/***/ }),
/***/ "Vbjo":
/*!**********************************************************!*\
!*** ./modules/MailWebclient/js/models/CFetcherModel.js ***!
\**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ko = __webpack_require__(/*! knockout */ "p09A"),
AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "rBrp"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC");
/**
* @constructor
*/
function CFetcherModel() {
this.FETCHER = true; // constant
this.id = ko.observable(0);
this.accountId = ko.observable(0);
this.hash = ko.computed(function () {
return Utils.getHash(this.accountId() + 'fetcher' + this.id());
}, this);
this.isEnabled = ko.observable(false);
this.isLocked = ko.observable(false).extend({
'autoResetToFalse': 1000
});
this.email = ko.observable('');
this.userName = ko.observable('');
this.folder = ko.observable('');
this.useSignature = ko.observable(false);
this.signature = ko.observable('');
this.incomingServer = ko.observable('');
this.incomingPort = ko.observable(0);
this.incomingUseSsl = ko.observable(false);
this.incomingLogin = ko.observable('');
this.leaveMessagesOnServer = ko.observable('');
this.isOutgoingEnabled = ko.observable(false);
this.outgoingServer = ko.observable('');
this.outgoingPort = ko.observable(0);
this.outgoingUseSsl = ko.observable(false);
this.outgoingUseAuth = ko.observable(false);
this.iCheckIntervalMinutes = 0;
this.fullEmail = ko.computed(function () {
return AddressUtils.getFullEmail(this.userName(), this.email());
}, this);
}
/**
* @param {Object} oData
*/
CFetcherModel.prototype.parse = function (oData) {
this.id(Types.pInt(oData.EntityId));
this.accountId(Types.pInt(oData.IdAccount));
this.isEnabled(!!oData.IsEnabled);
this.isLocked(!!oData.IsLocked);
this.email(Types.pString(oData.Email));
this.userName(Types.pString(oData.Name));
this.folder(Types.pString(oData.Folder));
this.useSignature(!!oData.UseSignature);
var sSignature = Types.pString(oData.Signature);
if (sSignature.indexOf('<') !== 0) {
sSignature = '<div>' + sSignature + '</div>';
}
this.signature = ko.observable(sSignature);
this.incomingServer(Types.pString(oData.IncomingServer));
this.incomingPort(Types.pInt(oData.IncomingPort));
this.incomingUseSsl(!!oData.IncomingUseSsl);
this.incomingLogin(Types.pString(oData.IncomingLogin));
this.leaveMessagesOnServer(!!oData.LeaveMessagesOnServer);
this.isOutgoingEnabled(!!oData.IsOutgoingEnabled);
this.outgoingServer(Types.pString(oData.OutgoingServer));
this.outgoingPort(Types.pInt(oData.OutgoingPort));
this.outgoingUseSsl(!!oData.OutgoingUseSsl);
this.outgoingUseAuth(!!oData.OutgoingUseAuth);
this.iCheckIntervalMinutes = Types.pInt(oData.CheckInterval, 0);
};
module.exports = CFetcherModel;
/***/ }),
/***/ "WzKm":
/*!**********************************************************!*\
!*** ./modules/MailWebclient/js/models/CMessageModel.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"),
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"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Screens = __webpack_require__(/*! modules/CoreWebclient/js/Screens.js */ "D2Gh"),
CAddressListModel = __webpack_require__(/*! modules/CoreWebclient/js/models/CAddressListModel.js */ "lZd5"),
CDateModel = __webpack_require__(/*! modules/CoreWebclient/js/models/CDateModel.js */ "ebd4"),
MessageUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Message.js */ "wXcN"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
MailCache = null,
MessagesDictionary = __webpack_require__(/*! modules/MailWebclient/js/MessagesDictionary.js */ "TmsQ"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
CAttachmentModel = __webpack_require__(/*! modules/MailWebclient/js/models/CAttachmentModel.js */ "3boL");
/**
* @constructor
*/
function CMessageModel() {
this.accountId = ko.observable(AccountList.currentId());
this.accountEmail = ko.computed(function () {
var oAccount = AccountList.getAccount(this.accountId());
return oAccount ? oAccount.email() : '';
}, this);
this.showUnifiedMailboxLabel = ko.observable('');
this.unifiedMailboxLabelText = ko.observable('');
this.unifiedMailboxLabelColor = ko.observable('');
ko.computed(function () {
var oAccount = this.accountId ? AccountList.getAccount(this.accountId()) : null;
if (oAccount) {
this.showUnifiedMailboxLabel(oAccount.showUnifiedMailboxLabel());
this.unifiedMailboxLabelText(oAccount.unifiedMailboxLabelText() || oAccount.email());
this.unifiedMailboxLabelColor(oAccount.unifiedMailboxLabelColor());
}
}, this);
this.folder = ko.observable('');
this.uid = ko.observable('');
this.longUid = ko.observable('');
this.subject = ko.observable('');
this.emptySubject = ko.computed(function () {
return $.trim(this.subject()) === '';
}, this);
this.subjectForDisplay = ko.computed(function () {
return this.emptySubject() ? TextUtils.i18n('MAILWEBCLIENT/LABEL_NO_SUBJECT') : this.subject();
}, this);
this.messageId = ko.observable('');
this.size = ko.observable(0);
this.friendlySize = ko.computed(function () {
return TextUtils.getFriendlySize(this.size());
}, this);
this.textSize = ko.observable(0);
this.oDateModel = new CDateModel();
this.fullDate = ko.observable('');
this.oFrom = new CAddressListModel();
this.fullFrom = ko.observable('');
this.oTo = new CAddressListModel();
this.to = ko.observable('');
this.fromOrToText = ko.observable('');
this.oCc = new CAddressListModel();
this.cc = ko.observable('');
this.oBcc = new CAddressListModel();
this.bcc = ko.observable('');
this.oReplyTo = new CAddressListModel();
this.seen = ko.observable(false);
this.flagged = ko.observable(false);
this.partialFlagged = ko.observable(false);
this.answered = ko.observable(false);
this.forwarded = ko.observable(false);
this.hasAttachments = ko.observable(false);
this.hasIcalAttachment = ko.observable(false);
this.hasVcardAttachment = ko.observable(false);
this.folderObject = ko.computed(function () {
this.requireMailCache();
return MailCache.getFolderByFullName(this.accountId(), this.folder());
}, this);
this.threadsAllowed = ko.computed(function () {
var oAccount = AccountList.getAccount(this.accountId()),
oFolder = this.folderObject(),
bFolderWithoutThreads = oFolder && (oFolder.type() === Enums.FolderTypes.Drafts || oFolder.type() === Enums.FolderTypes.Spam || oFolder.type() === Enums.FolderTypes.Trash);
return oAccount && oAccount.threadingIsAvailable() && !bFolderWithoutThreads;
}, this);
this.otherSendersAllowed = ko.computed(function () {
var oFolder = this.folderObject();
return oFolder && oFolder.type() !== Enums.FolderTypes.Drafts && oFolder.type() !== Enums.FolderTypes.Sent;
}, this);
this.threadPart = ko.observable(false);
this.threadPart.subscribe(function () {
if (this.threadPart()) {
this.partialFlagged(false);
}
}, this);
this.threadParentUid = ko.observable('');
this.threadUids = ko.observableArray([]);
this.threadCount = ko.computed(function () {
return this.threadUids().length;
}, this);
this.threadUnreadCount = ko.observable(0);
this.threadOpened = ko.observable(false);
this.threadLoading = ko.observable(false);
this.threadLoadingVisible = ko.computed(function () {
return this.threadsAllowed() && this.threadOpened() && this.threadLoading();
}, this);
this.threadCountVisible = ko.computed(function () {
return this.threadsAllowed() && this.threadCount() > 0 && !this.threadLoading();
}, this);
this.threadCountHint = ko.computed(function () {
if (this.threadCount() > 0) {
if (this.threadOpened()) {
return TextUtils.i18n('MAILWEBCLIENT/ACTION_FOLD_THREAD');
} else {
if (this.threadUnreadCount() > 0) {
return TextUtils.i18n('MAILWEBCLIENT/ACTION_UNFOLD_THREAD_WITH_UNREAD', {}, null, this.threadUnreadCount());
} else {
return TextUtils.i18n('MAILWEBCLIENT/ACTION_UNFOLD_THREAD');
}
}
}
return '';
}, this);
this.threadCountForLoad = ko.observable(5);
this.threadNextLoadingVisible = ko.observable(false);
this.threadNextLoadingLinkVisible = ko.observable(false);
this.threadFunctionLoadNext = null;
this.threadShowAnimation = ko.observable(false);
this.threadHideAnimation = ko.observable(false);
this.importance = ko.observable(Enums.Importance.Normal);
this.draftInfo = ko.observableArray([]);
this.hash = ko.observable('');
this.sDownloadAsEmlUrl = '';
this.completelyFilled = ko.observable(false);
this.iLastAccessTime = 0;
this.updateLastAccessTime();
this.checked = ko.observable(false);
this.checked.subscribe(function (bChecked) {
this.requireMailCache();
if (!this.threadOpened() && MailCache.useThreadingInCurrentList()) {
var oFolder = MailCache.getFolderByFullName(this.accountId(), this.folder());
_.each(this.threadUids(), function (sUid) {
var oMessage = MessagesDictionary.get([oFolder.iAccountId, oFolder.fullName(), sUid]);
if (oMessage) {
oMessage.checked(bChecked);
}
});
}
}, this);
this.selected = ko.observable(false);
this.deleted = ko.observable(false); // temporary removal until it was confirmation from the server to delete
this.truncated = ko.observable(false);
this.inReplyTo = ko.observable('');
this.references = ko.observable('');
this.readingConfirmationAddressee = ko.observable('');
this.sensitivity = ko.observable(Enums.Sensitivity.Nothing);
this.isPlain = ko.observable(false);
this.text = ko.observable('');
this.textBodyForNewWindow = ko.observable('');
this.$text = null;
this.rtl = ko.observable(false);
this.hasExternals = ko.observable(false);
this.isExternalsShown = ko.observable(false);
this.isExternalsAlwaysShown = ko.observable(false);
this.foundCids = ko.observableArray([]);
this.attachments = ko.observableArray([]);
this.safety = ko.observable(false);
this.sourceHeaders = ko.observable('');
this.unsubscribe = {};
this.date = ko.observable('');
this.textRaw = ko.observable('');
this.domMessageForPrint = ko.observable(null);
this.notInlineAttachments = ko.computed(function () {
return _.filter(this.attachments(), function (oAttach) {
return !oAttach.linked();
});
}, this);
this.Custom = {};
this.customLabels = ko.observableArray([]);
}
CMessageModel.prototype.isEqual = function (message) {
return this.accountId() === message.accountId() && this.folder() === message.folder() && this.uid() === message.uid();
};
CMessageModel.prototype.setCustomLabel = function (sId, sText, sCssClass) {
if (Types.isString(sId) && Types.isNonEmptyString(sText) && Types.isString(sCssClass)) {
var oCustomLabel = _.find(this.customLabels(), function (oCustomLabel) {
return oCustomLabel.id === sId;
});
if (oCustomLabel) {
oCustomLabel.text = sText;
oCustomLabel.cssClass = sCssClass;
} else {
this.customLabels.push({
id: sId,
text: sText,
cssClass: sCssClass
});
}
}
};
CMessageModel.prototype.removeCustomLabel = function (sId) {
this.customLabels(_.filter(this.customLabels(), function (oCustomLabel) {
return oCustomLabel.id !== sId;
}));
};
CMessageModel.prototype.requireMailCache = function () {
if (MailCache === null) {
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8");
}
};
/**
* Updates last access time of the message and last access time of all messages in thread.
*/
CMessageModel.prototype.updateLastAccessTime = function () {
this.iLastAccessTime = moment().unix();
_.each(this.threadUids(), function (sUid) {
var oMessage = MessagesDictionary.get([this.accountId(), this.folder(), sUid]);
if (oMessage) {
oMessage.updateLastAccessTime();
}
}, this);
};
/**
* @param {Object} oWin
*/
CMessageModel.prototype.viewMessage = function (oWin) {
var oDomText = this.getDomText(UrlUtils.getAppPath()),
sHtml = '';
this.textBodyForNewWindow(oDomText.html());
sHtml = $(this.domMessageForPrint()).html();
if (oWin) {
$(oWin.document.body).html(sHtml);
oWin.focus();
_.each(this.attachments(), function (oAttach) {
var oLink = $(oWin.document.body).find("[data-hash='download-" + oAttach.hash() + "']");
if (oAttach.hasAction('download')) {
oLink.on('click', _.bind(oAttach.executeAction, oAttach, 'download'));
} else {
oLink.hide();
}
oLink = $(oWin.document.body).find("[data-hash='view-" + oAttach.hash() + "']");
if (oAttach.hasAction('view')) {
oLink.on('click', _.bind(oAttach.executeAction, oAttach, 'view'));
} else {
oLink.hide();
}
}, this);
}
};
/**
* Fields accountId, folder, oTo & oFrom should be filled.
*/
CMessageModel.prototype.fillFromOrToText = function () {
this.requireMailCache();
var oFolder = MailCache.getFolderByFullName(this.accountId(), this.folder());
if (oFolder && (oFolder.type() === Enums.FolderTypes.Drafts || oFolder.type() === Enums.FolderTypes.Sent)) {
var sMeRecipientReplacement = Settings.UseMeRecipientForMessages ? TextUtils.i18n('MAILWEBCLIENT/LABEL_ME_RECIPIENT') : null,
sToDisplay = this.oTo.getDisplay(sMeRecipientReplacement, this.accountEmail()),
sCcDisplay = this.oCc.getDisplay(sMeRecipientReplacement, this.accountEmail()),
sBccDisplay = this.oBcc.getDisplay(sMeRecipientReplacement, this.accountEmail()),
aDisplay = [];
if (Types.isNonEmptyString(sToDisplay)) {
aDisplay.push(sToDisplay);
}
if (Types.isNonEmptyString(sCcDisplay)) {
aDisplay.push(sCcDisplay);
}
if (Types.isNonEmptyString(sBccDisplay)) {
aDisplay.push(sBccDisplay);
}
this.fromOrToText(aDisplay);
} else {
var sMeSenderReplacement = Settings.UseMeRecipientForMessages ? TextUtils.i18n('MAILWEBCLIENT/LABEL_ME_SENDER') : null;
this.fromOrToText(this.oFrom.getDisplay(sMeSenderReplacement, this.accountEmail()));
}
};
/**
* @param {Array} aChangedThreadUids
* @param {number} iLoadedMessagesCount
*/
CMessageModel.prototype.changeThreadUids = function (aChangedThreadUids, iLoadedMessagesCount) {
this.threadUids(aChangedThreadUids);
this.threadLoading(iLoadedMessagesCount < Math.min(this.threadUids().length, this.threadCountForLoad()));
};
/**
* @param {Function} fLoadNext
*/
CMessageModel.prototype.showNextLoadingLink = function (fLoadNext) {
if (this.threadNextLoadingLinkVisible()) {
this.threadNextLoadingVisible(true);
this.threadFunctionLoadNext = fLoadNext;
}
};
CMessageModel.prototype.increaseThreadCountForLoad = function () {
this.threadCountForLoad(this.threadCountForLoad() + 5);
this.requireMailCache();
MailCache.showOpenedThreads(this.folder());
};
CMessageModel.prototype.loadNextMessages = function () {
if (this.threadFunctionLoadNext) {
this.threadFunctionLoadNext();
this.threadNextLoadingLinkVisible(false);
this.threadFunctionLoadNext = null;
}
};
/**
* @param {number} iShowThrottle
* @param {string} sParentUid
*/
CMessageModel.prototype.markAsThreadPart = function (iShowThrottle, sParentUid) {
var self = this;
this.threadPart(true);
this.threadParentUid(sParentUid);
this.threadUids([]);
this.threadNextLoadingVisible(false);
this.threadNextLoadingLinkVisible(true);
this.threadFunctionLoadNext = null;
this.threadHideAnimation(false);
setTimeout(function () {
self.threadShowAnimation(true);
}, iShowThrottle);
};
/**
* @param {AjaxMessageResponse} oData
* @param {number} iAccountId
* @param {boolean} bThreadPart
* @param {boolean} bTrustThreadInfo
*/
CMessageModel.prototype.parse = function (oData, iAccountId, bThreadPart, bTrustThreadInfo) {
var sHtml = '',
sPlain = '';
if (bTrustThreadInfo) {
this.threadPart(bThreadPart);
}
if (!this.threadPart()) {
this.threadParentUid('');
}
if (oData['@Object'] === 'Object/MessageListItem') {
this.seen(!!oData.IsSeen);
this.flagged(!!oData.IsFlagged);
this.answered(!!oData.IsAnswered);
this.forwarded(!!oData.IsForwarded);
if (oData.Custom) {
this.Custom = oData.Custom;
}
}
if (oData['@Object'] === 'Object/Message' || oData['@Object'] === 'Object/MessageListItem') {
this.Custom.Sensitivity = oData.Sensitivity;
this.accountId(iAccountId);
this.folder(oData.Folder);
this.uid(Types.pString(oData.Uid));
if (Types.isNonEmptyString(oData.UnifiedUid)) {
this.longUid(oData.UnifiedUid);
var oIdentifiers = MailCache.getMessageActualIdentifiers(this.accountId(), this.folder(), this.longUid());
this.accountId(oIdentifiers.iAccountId);
} else {
this.longUid(this.accountId() + ':' + this.folder() + ':' + Types.pString(oData.Uid));
}
this.subject(Types.pString(oData.Subject));
this.messageId(Types.pString(oData.MessageId));
this.size(oData.Size);
this.textSize(oData.TextSize);
this.oDateModel.parse(oData.TimeStampInUTC);
this.oFrom.parse(oData.From);
this.oTo.parse(oData.To);
this.oCc.parse(oData.Cc);
this.oBcc.parse(oData.Bcc);
this.oReplyTo.parse(oData.ReplyTo);
this.fillFromOrToText();
this.fullDate(this.oDateModel.getFullDate());
this.fullFrom(this.oFrom.getFull());
this.to(this.oTo.getFull());
this.cc(this.oCc.getFull());
this.bcc(this.oBcc.getFull());
this.hasAttachments(!!oData.HasAttachments);
this.hasIcalAttachment(!!oData.HasIcalAttachment);
this.hasVcardAttachment(!!oData.HasVcardAttachment);
if (oData['@Object'] === 'Object/MessageListItem' && bTrustThreadInfo) {
this.threadUids(_.map(oData.Threads, function (iUid) {
return iUid.toString();
}, this));
}
this.importance(Types.pInt(oData.Importance));
if (!Enums.has('Importance', this.importance())) {
this.importance(Enums.Importance.Normal);
}
this.sensitivity(Types.pInt(oData.Sensitivity));
if (!Enums.has('Sensitivity', this.sensitivity())) {
this.sensitivity(Enums.Sensitivity.Nothing);
}
if (_.isArray(oData.DraftInfo)) {
this.draftInfo(oData.DraftInfo);
}
this.hash(Types.pString(oData.Hash));
this.sDownloadAsEmlUrl = Types.pString(oData.DownloadAsEmlUrl);
if (oData['@Object'] === 'Object/Message') {
this.truncated(oData.Truncated);
this.inReplyTo(oData.InReplyTo);
this.references(oData.References);
this.readingConfirmationAddressee(Types.pString(oData.ReadingConfirmationAddressee));
sHtml = Types.pString(oData.Html);
sPlain = Types.pString(oData.Plain);
if (sHtml !== '') {
this.textRaw(oData.HtmlRaw);
this.text(sHtml);
this.isPlain(false);
} else {
this.textRaw(oData.PlainRaw);
this.text(sPlain !== '' ? '<div>' + sPlain + '</div>' : '');
this.isPlain(true);
}
this.$text = null;
this.isExternalsShown(false);
this.rtl(oData.Rtl);
this.hasExternals(!!oData.HasExternals);
this.foundCids(oData.FoundedCIDs);
this.parseAttachments(oData.Attachments, iAccountId);
this.safety(oData.Safety);
this.sourceHeaders(oData.Headers);
this.unsubscribe = Types.pObject(oData.Unsubscribe);
this.aExtend = oData.Extend;
this.completelyFilled(true);
App.broadcastEvent('MailWebclient::ParseMessage::after', {
msg: this
});
} else {
App.broadcastEvent('MailWebclient::ParseMessageListItem::after', {
msg: this
});
}
this.updateMomentDate();
}
};
CMessageModel.prototype.changeText = function (sNewText) {
this.text(sNewText);
this.$text = null;
};
CMessageModel.prototype.updateMomentDate = function () {
this.date(this.oDateModel.getShortDate(moment().clone().subtract(1, 'days').format('L') === moment.unix(this.oDateModel.getTimeStampInUTC()).format('L')));
};
/**
* @param {string=} sAppPath = ''
* @param {boolean=} bForcedShowPictures
*
* return {Object}
*/
CMessageModel.prototype.getDomText = function (sAppPath, bForcedShowPictures) {
var $text = this.$text;
sAppPath = sAppPath || '';
if (this.$text === null || sAppPath !== '') {
if (this.completelyFilled()) {
this.$text = $(this.text());
this.showInlinePictures(sAppPath);
if (this.safety() === true) {
this.alwaysShowExternalPicturesForSender(bForcedShowPictures);
} else if (bForcedShowPictures && this.isExternalsShown() || this.isExternalsAlwaysShown()) {
this.showExternalPictures();
}
$text = this.$text;
} else {
$text = $('');
}
}
//returns a clone, because it uses both in the parent window and the new
return $text.clone();
};
/**
* @param {string=} sAppPath = ''
* @param {boolean=} bForcedShowPictures
*
* return {string}
*/
CMessageModel.prototype.getConvertedHtml = function (sAppPath, bForcedShowPictures) {
var oDomText = this.getDomText(sAppPath, bForcedShowPictures);
return oDomText.length > 0 ? oDomText.wrap('<p>').parent().html() : '';
};
/**
* Parses attachments.
*
* @param {object} oData
* @param {number} iAccountId
*/
CMessageModel.prototype.parseAttachments = function (oData, iAccountId) {
var aCollection = oData ? oData['@Collection'] : [];
this.attachments([]);
if (Types.isNonEmptyArray(aCollection)) {
this.attachments(_.map(aCollection, function (oRawAttach) {
var oAttachment = new CAttachmentModel(iAccountId);
oAttachment.setMessageData(this.folder(), this.uid());
oAttachment.parse(oRawAttach, this.folder(), this.longUid());
return oAttachment;
}, this));
}
};
/**
* Parses an array of email addresses.
*
* @param {Array} aData
* @return {Array}
*/
CMessageModel.prototype.parseAddressArray = function (aData) {
var aAddresses = [];
if (_.isArray(aData)) {
aAddresses = _.map(aData, function (oRawAddress) {
var oAddress = new CAddressModel();
oAddress.parse(oRawAddress);
return oAddress;
});
}
return aAddresses;
};
/**
* Displays embedded images, which have cid on the list.
*
* @param {string} sAppPath
*/
CMessageModel.prototype.showInlinePictures = function (sAppPath) {
var aAttachments = _.map(this.attachments(), function (oAttachment) {
return {
CID: oAttachment.cid(),
ContentLocation: oAttachment.contentLocation(),
ViewLink: oAttachment.getActionUrl('view')
};
});
MessageUtils.showInlinePictures(this.$text, aAttachments, this.foundCids(), sAppPath);
};
/**
* Displays external images.
*/
CMessageModel.prototype.showExternalPictures = function () {
MessageUtils.showExternalPictures(this.$text);
this.isExternalsShown(true);
};
/**
* Sets a flag that external images are always displayed.
* @param {boolean} bForcedShowPictures
*/
CMessageModel.prototype.alwaysShowExternalPicturesForSender = function () {
var bForcedShowPictures = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
this.isExternalsAlwaysShown(true);
if (this.completelyFilled() && (bForcedShowPictures || !this.isExternalsShown())) {
this.showExternalPictures();
}
};
CMessageModel.prototype.openThread = function () {
if (this.threadCountVisible()) {
var sFolder = this.folder();
this.threadOpened(!this.threadOpened());
this.requireMailCache();
if (this.threadOpened()) {
MailCache.showOpenedThreads(sFolder);
} else {
MailCache.hideThreads(this);
setTimeout(function () {
MailCache.showOpenedThreads(sFolder);
}, 500);
}
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMessageModel.prototype.onSaveAttachmentsToFilesResponse = function (oResponse, oRequest) {
var oParameters = oRequest.Parameters,
iSavedCount = 0,
iTotalCount = oParameters.Attachments.length;
if (oResponse.Result) {
_.each(oParameters.Attachments, function (sHash) {
if (oResponse.Result[sHash] !== undefined) {
iSavedCount++;
}
});
}
if (iSavedCount === 0) {
Screens.showError(TextUtils.i18n('MAILWEBCLIENT/ERROR_CANT_SAVE_ATTACHMENTS_TO_FILES'));
} else if (iSavedCount < iTotalCount) {
Screens.showError(TextUtils.i18n('MAILWEBCLIENT/ERROR_SOME_ATTACHMENTS_WERE_NOT_SAVED', {
'SAVED_COUNT': iSavedCount,
'TOTAL_COUNT': iTotalCount
}));
} else {
Screens.showReport(TextUtils.i18n('MAILWEBCLIENT/REPORT_ATTACHMENTS_SAVED_TO_FILES'));
}
};
CMessageModel.prototype.downloadAllAttachmentsSeparately = function () {
_.each(this.attachments(), function (oAttach) {
if (!oAttach.linked()) {
oAttach.executeAction('download');
}
});
};
/**
* Uses for logging.
*
* @returns {Object}
*/
CMessageModel.prototype.toJSON = function () {
return {
uid: this.uid(),
longUid: this.longUid(),
accountId: this.accountId(),
to: this.to(),
subject: this.subject(),
threadPart: this.threadPart(),
threadUids: this.threadUids(),
threadOpened: this.threadOpened()
};
};
CMessageModel.prototype.getHeaderValue = function (sHeaderName) {
var reg = new RegExp(sHeaderName + ':\s*(.+)(\n|$)', 'gm'),
aResult = reg.exec(this.sourceHeaders());
return $.trim(Types.pString(aResult && aResult[1]));
};
module.exports = CMessageModel;
/***/ }),
/***/ "YmTJ":
/*!**********************************************************!*\
!*** ./modules/MailWebclient/js/models/CAccountModel.js ***!
\**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "rBrp"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC"),
Ajax = null,
Api = __webpack_require__(/*! modules/CoreWebclient/js/Api.js */ "Z9uT"),
App = null,
UserSettings = __webpack_require__(/*! modules/CoreWebclient/js/Settings.js */ "KIwC"),
Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
ConfirmPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/ConfirmPopup.js */ "MYiO"),
CFiltersModel = __webpack_require__(/*! modules/MailWebclient/js/models/CFiltersModel.js */ "sHZb"),
CServerModel = __webpack_require__(/*! modules/MailWebclient/js/models/CServerModel.js */ "UVn1"),
AccountList = null,
Cache = null,
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z");
/**
* @constructor
* @param {object} oData
*/
function CAccountModel(oData) {
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o");
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ");
this.id = ko.observable(Types.pInt(oData.AccountID));
this.email = ko.observable(Types.pString(oData.Email));
this.friendlyName = ko.observable(Types.pString(oData.FriendlyName));
this.incomingLogin = ko.observable(Types.pString(oData.IncomingLogin));
this.passwordMightBeIncorrect = ko.observable(false);
this.passwordMightBeIncorrect.subscribe(function () {
if (!this.passwordMightBeIncorrect()) {
this.requireCache();
Cache.getFolderList(this.id());
}
}, this);
var sSignature = Types.pString(oData.Signature);
if (sSignature.indexOf('<') !== 0) {
sSignature = '<div>' + sSignature + '</div>';
}
this.signature = ko.observable(sSignature);
this.useSignature = ko.observable(!!oData.UseSignature);
this.bAllowEditSignature = Types.pBool(oData.AllowEditSignature, true);
this.bAllowUseIdentities = Types.pBool(oData.AllowUseIdentities, true);
this.serverId = ko.observable(Types.pInt(oData.ServerId));
this.oServer = new CServerModel(oData.Server);
this.useToAuthorize = ko.observable(!!oData.UseToAuthorize);
this.canBeUsedToAuthorize = ko.observable(!!oData.CanBeUsedToAuthorize);
this.useThreading = ko.observable(!!oData.UseThreading);
this.useThreading.subscribe(function () {
this.requireCache();
Cache.clearMessagesCache(this.id());
}, this);
this.bSaveRepliesToCurrFolder = !!oData.SaveRepliesToCurrFolder;
this.isCurrent = ko.observable(false);
this.isEdited = ko.observable(false);
this.hash = ko.computed(function () {
return Utils.getHash(this.id() + this.email());
}, this);
this.fetchers = ko.observableArray([]);
this.identities = ko.observable(null);
this.aliases = ko.observableArray([]);
this.allowAutoresponder = ko.observable(Types.pBool(oData.AllowAutoresponder, false));
this.autoresponder = ko.observable(null);
this.allowForward = ko.observable(Types.pBool(oData.AllowForward, false));
this.forward = ko.observable(null);
this.allowFilters = ko.observable(Types.pBool(oData.AllowFilters, false));
this.filters = ko.observable(null);
this.enableAllowBlockLists = ko.observable(Types.pBool(oData.EnableAllowBlockLists));
// This property is not sent by Mail module but other modules can add it to response with 'Mail::Account::ToResponseArray' event
this.allowManageFolders = ko.observable(Types.pBool(oData.AllowManageFolders, true));
this.quota = ko.observable(0);
this.usedSpace = ko.observable(0);
this.quotaRecieved = ko.observable(false);
this.fullEmail = ko.computed(function () {
return AddressUtils.getFullEmail(this.friendlyName(), this.email());
}, this);
this.bDefault = Settings.AllowDefaultAccountForUser && this.email() === App.getUserPublicId();
this.aExtend = Types.pObject(oData.Extend);
this.includeInUnifiedMailbox = ko.observable(Settings.AllowUnifiedInbox && !!oData.IncludeInUnifiedMailbox);
this.showUnifiedMailboxLabel = ko.observable(Settings.AllowUnifiedInbox && !!oData.ShowUnifiedMailboxLabel);
this.unifiedMailboxLabelText = ko.observable(Types.pString(oData.UnifiedMailboxLabelText));
this.unifiedMailboxLabelColor = ko.observable(Types.pString(oData.UnifiedMailboxLabelColor));
// it's needed to update signature of bAccountPart identity, beacause this identity is loaded in edit form, not account object
ko.computed(function () {
var sSignature = this.signature();
var bUseSignature = this.useSignature();
var sFriendlyName = this.friendlyName();
var oIdentity = _.find(this.identities(), function (oIdentity) {
return oIdentity.bAccountPart;
});
if (oIdentity) {
oIdentity.signature(sSignature);
oIdentity.useSignature(bUseSignature);
oIdentity.friendlyName(sFriendlyName);
}
}, this);
App.broadcastEvent('MailWebclient::ParseAccount::after', {
account: this,
data: oData
});
}
CAccountModel.prototype.threadingIsAvailable = function () {
return this.oServer.bEnableThreading && this.useThreading();
};
CAccountModel.prototype.updateFromServer = function (oData) {
this.email(Types.pString(oData.Email));
this.friendlyName(Types.pString(oData.FriendlyName));
this.incomingLogin(Types.pString(oData.IncomingLogin));
this.serverId(Types.pInt(oData.ServerId));
this.oServer = new CServerModel(oData.Server);
this.useToAuthorize(!!oData.UseToAuthorize);
this.useThreading(!!oData.UseThreading);
this.bSaveRepliesToCurrFolder = !!oData.SaveRepliesToCurrFolder;
this.includeInUnifiedMailbox(!!oData.IncludeInUnifiedMailbox);
this.showUnifiedMailboxLabel(!!oData.ShowUnifiedMailboxLabel);
this.unifiedMailboxLabelText(Types.pString(oData.UnifiedMailboxLabelText));
this.unifiedMailboxLabelColor(Types.pString(oData.UnifiedMailboxLabelColor));
};
CAccountModel.prototype.requireAccounts = function () {
if (AccountList === null) {
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m");
}
};
CAccountModel.prototype.requireCache = function () {
if (Cache === null) {
Cache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8");
}
};
/**
* @param {Object} oResult
* @param {Object} oRequest
*/
CAccountModel.prototype.onGetQuotaResponse = function (oResult, oRequest) {
if (_.isArray(oResult.Result) && 1 < oResult.Result.length) {
this.quota(Types.pInt(oResult.Result[1]));
this.usedSpace(Types.pInt(oResult.Result[0]));
this.requireCache();
Cache.quotaChangeTrigger(!Cache.quotaChangeTrigger());
}
this.quotaRecieved(true);
};
CAccountModel.prototype.updateQuotaParams = function () {
if (UserSettings.ShowQuotaBar) {
Ajax.send('GetQuota', {
'AccountID': this.id()
}, this.onGetQuotaResponse, this);
}
};
/**
* @param {string} sFriendlyName
*/
CAccountModel.prototype.updateFriendlyName = function (sFriendlyName) {
this.friendlyName(sFriendlyName);
};
CAccountModel.prototype.changeAccount = function () {
this.requireAccounts();
AccountList.changeCurrentAccount(this.id(), true);
};
CAccountModel.prototype.getDefaultIdentity = function () {
return _.find(this.identities() || [], function (oIdentity) {
return oIdentity.isDefault();
});
};
/**
* @returns {Array}
*/
CAccountModel.prototype.getFetchersIdentitiesEmails = function () {
var aIdentities = this.identities() || [],
aEmails = [];
_.each(this.fetchers(), function (oFetcher) {
aEmails.push(oFetcher.email());
});
_.each(aIdentities, function (oIdentity) {
aEmails.push(oIdentity.email());
});
return aEmails;
};
/**
* Shows popup to confirm removing if it can be removed.
*/
CAccountModel.prototype.remove = function () {
var fCallBack = _.bind(this.confirmedRemove, this);
if (!this.bDefault) {
Popups.showPopup(ConfirmPopup, [TextUtils.i18n('MAILWEBCLIENT/CONFIRM_REMOVE_ACCOUNT'), fCallBack, this.email()]);
}
};
/**
* Sends a request to the server for deletion account if received confirmation from the user.
*
* @param {boolean} bOkAnswer
*/
CAccountModel.prototype.confirmedRemove = function (bOkAnswer) {
if (bOkAnswer) {
Ajax.send('DeleteAccount', {
'AccountID': this.id()
}, this.onAccountDeleteResponse, this);
}
};
/**
* Receives response from the server and removes account from js-application if removal operation on the server was successful.
*
* @param {Object} oResponse Response obtained from the server.
* @param {Object} oRequest Parameters has been transferred to the server.
*/
CAccountModel.prototype.onAccountDeleteResponse = function (oResponse, oRequest) {
if (!oResponse.Result) {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_REMOVE_ACCOUNT'));
} else {
var ComposeUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Compose.js */ "sXLm");
if (_.isFunction(ComposeUtils.closeComposePopup)) {
ComposeUtils.closeComposePopup(oRequest.Parameters.AccountID);
}
this.requireAccounts();
AccountList.deleteAccount(this.id());
}
};
CAccountModel.prototype.requestFilters = function () {
Ajax.send('GetFilters', {
'AccountID': this.id()
}, this.onGetFiltersResponse, this);
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CAccountModel.prototype.onGetFiltersResponse = function (oResponse, oRequest) {
var oFilters = new CFiltersModel();
if (oResponse.Result) {
oFilters.parse(this.id(), oResponse.Result);
}
this.filters(oFilters);
};
module.exports = CAccountModel;
/***/ }),
/***/ "ZXeO":
/*!************************************************!*\
!*** ./modules/MailWebclient/js/utils/Crea.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/* provided dependency */ var $ = __webpack_require__(/*! jquery */ "M4cL");
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function getExelStyles(html, className) {
var re = new RegExp(".".concat(className, "\\s*{([^}]*)}"), 'gm');
var matches = _toConsumableArray(html.matchAll(re));
if (matches.length === 1 && matches[0].length === 2) {
var styles = matches[0][1].replaceAll('\r', '').replaceAll('\n', '').replaceAll('\t', '').split(';');
var stylesProperties = {};
styles.forEach(function (style) {
if (style) {
var styleParts = style.split(':');
stylesProperties[styleParts[0]] = styleParts[1];
}
});
return stylesProperties;
}
return false;
}
module.exports = {
/**
* Fragments pasted from MS Excel contain a bunch of styles in the style tag, the browser cuts them out.
* This method finds the MS Excel class names in the fragment and, if found, places the styles from the classes as inline styles to the elements.
*/
preparePastedHtml: function preparePastedHtml(html) {
var regex = /class=["']{0,1}(xl\d+)["']{0,1}/gm;
var matches = _toConsumableArray(html.matchAll(regex));
if (matches.length > 0) {
var fragment = $("<div>".concat(html, "</div>"));
matches.forEach(function (group) {
var className = group[1];
var styles = getExelStyles(html, className);
if (styles) {
var elem = fragment.find(".".concat(className));
elem.css(styles);
}
});
return fragment.html();
}
return false;
}
};
/***/ }),
/***/ "Zm5i":
/*!*************************************************************!*\
!*** ./modules/MailWebclient/js/models/CFolderListModel.js ***!
\*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC"),
Storage = __webpack_require__(/*! modules/CoreWebclient/js/Storage.js */ "oJUS"),
MailCache = null,
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
CFolderModel = __webpack_require__(/*! modules/MailWebclient/js/models/CFolderModel.js */ "V8Bf");
/**
* @constructor
*/
function CFolderListModel() {
this.iAccountId = 0;
this.initialized = ko.observable(false);
this.collection = ko.observableArray([]);
this.options = ko.observableArray([]);
this.sNamespaceFolder = '';
this.oStarredFolder = null;
this.oNamedCollection = {};
this.aLinedCollection = [];
var self = this,
fSetSystemType = function fSetSystemType(iType) {
return function (oFolder) {
if (oFolder) {
oFolder.type(iType);
}
};
},
fFullNameHelper = function fFullNameHelper(fFolder) {
return {
'read': function read() {
this.collection();
return fFolder() ? fFolder().fullName() : '';
},
'write': function write(sValue) {
fFolder(this.getFolderByFullName(sValue));
},
'owner': self
};
};
this.currentFolder = ko.observable(null);
this.inboxFolder = ko.observable(null);
this.sentFolder = ko.observable(null);
this.draftsFolder = ko.observable(null);
this.spamFolder = ko.observable(null);
this.trashFolder = ko.observable(null);
this.aTemplateFolders = [];
this.countsCompletelyFilled = ko.observable(false);
this.inboxFolder.subscribe(fSetSystemType(Enums.FolderTypes.User), this, 'beforeChange');
this.sentFolder.subscribe(fSetSystemType(Enums.FolderTypes.User), this, 'beforeChange');
this.draftsFolder.subscribe(fSetSystemType(Enums.FolderTypes.User), this, 'beforeChange');
this.spamFolder.subscribe(fSetSystemType(Enums.FolderTypes.User), this, 'beforeChange');
this.trashFolder.subscribe(fSetSystemType(Enums.FolderTypes.User), this, 'beforeChange');
this.inboxFolder.subscribe(fSetSystemType(Enums.FolderTypes.Inbox));
this.sentFolder.subscribe(fSetSystemType(Enums.FolderTypes.Sent));
this.draftsFolder.subscribe(fSetSystemType(Enums.FolderTypes.Drafts));
this.spamFolder.subscribe(fSetSystemType(Enums.FolderTypes.Spam));
this.trashFolder.subscribe(fSetSystemType(Enums.FolderTypes.Trash));
this.inboxFolderFullName = ko.computed(fFullNameHelper(this.inboxFolder));
this.sentFolderFullName = ko.computed(fFullNameHelper(this.sentFolder));
this.draftsFolderFullName = ko.computed(fFullNameHelper(this.draftsFolder));
this.spamFolderFullName = ko.computed(fFullNameHelper(this.spamFolder));
this.trashFolderFullName = ko.computed(fFullNameHelper(this.trashFolder));
this.currentFolderFullName = ko.computed(fFullNameHelper(this.currentFolder));
this.currentFolderType = ko.computed(function () {
return this.currentFolder() ? this.currentFolder().type() : Enums.FolderTypes.User;
}, this);
this.sDelimiter = '';
}
/**
* Requires MailCache. It cannot be required earlier because it is not initialized yet.
*/
CFolderListModel.prototype.requireMailCache = function () {
if (MailCache === null) {
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8");
}
};
CFolderListModel.prototype.getFoldersCount = function () {
return this.aLinedCollection.length;
};
CFolderListModel.prototype.getTotalMessageCount = function () {
var iCount = 0;
_.each(this.oNamedCollection, function (oFolder) {
iCount += oFolder.messageCount();
}, this);
return iCount;
};
/**
* @returns {Array}
*/
CFolderListModel.prototype.getFoldersWithoutCountInfo = function () {
var aFolders = _.compact(_.map(this.oNamedCollection, function (oFolder, sFullName) {
if (oFolder.canBeSelected() && !oFolder.hasExtendedInfo()) {
return sFullName;
}
return null;
}));
return aFolders;
};
CFolderListModel.prototype.getNamesOfFoldersToRefresh = function () {
var aFolders = [this.inboxFolderFullName(), this.spamFolderFullName(), this.currentFolderFullName()];
_.each(this.oNamedCollection, function (oFolder) {
if (oFolder.isAlwaysRefresh()) {
aFolders.push(oFolder.fullName());
}
});
return _.uniq(aFolders);
};
/**
* @param {string} sFolderFullName
* @param {string} sFilters
*/
CFolderListModel.prototype.setCurrentFolder = function (sFolderFullName, sFilters) {
this.requireMailCache();
var oFolder = this.getFolderByFullName(sFolderFullName);
if (oFolder === null || !oFolder.canBeSelected()) {
oFolder = this.inboxFolder();
}
if (oFolder !== null) {
if (this.currentFolder()) {
this.currentFolder().selected(false);
if (this.oStarredFolder) {
this.oStarredFolder.selected(false);
}
}
if (sFolderFullName === MailCache.oUnifiedInbox.fullName()) {
this.currentFolder(null);
} else {
this.currentFolder(oFolder);
if (sFilters === Enums.FolderFilter.Flagged) {
if (this.oStarredFolder) {
this.oStarredFolder.selected(true);
}
} else {
this.currentFolder().selected(true);
}
}
}
};
/**
* Returns a folder, found by the full name.
*
* @param {string} sFolderFullName
* @returns {CFolderModel|null}
*/
CFolderListModel.prototype.getFolderByFullName = function (sFolderFullName) {
var oFolder = this.oNamedCollection[sFolderFullName];
return oFolder ? oFolder : null;
};
CFolderListModel.prototype.renameFolder = function (sFullName, sNewFullName, sNewFullNameHash) {
var oFolder = this.oNamedCollection[sFullName];
oFolder.fullName(sNewFullName);
oFolder.fullNameHash(sNewFullNameHash);
this.oNamedCollection[sNewFullName] = oFolder;
delete this.oNamedCollection[sFullName];
};
CFolderListModel.prototype.changeTemplateFolder = function (sFolderName, bTemplate) {
if (Settings.AllowTemplateFolders) {
if (bTemplate) {
this.aTemplateFolders.push(sFolderName);
} else {
this.aTemplateFolders = _.without(this.aTemplateFolders, sFolderName);
}
}
};
CFolderListModel.prototype.expandFolders = function () {
var _this = this;
var expandedFoldersStorageKey = "aurora_mail_account_".concat(this.iAccountId, "_expanded-folders");
var expandedFolders = [];
if (Settings.FoldersExpandedByDefault && !Storage.hasData(expandedFoldersStorageKey)) {
expandedFolders = this.aLinedCollection.filter(function (folder) {
return folder.subfolders().length > 0;
});
} else if (Storage.hasData(expandedFoldersStorageKey)) {
expandedFolders = Storage.getData(expandedFoldersStorageKey).map(function (folderFullName) {
return _this.oNamedCollection[folderFullName];
}).filter(function (folder) {
return !!folder;
});
}
expandedFolders.forEach(function (folder) {
folder.expanded(true);
});
Storage.setData(expandedFoldersStorageKey, expandedFolders.map(function (folder) {
return folder.name();
}));
};
/**
* Calls a recursive parsing of the folder tree.
*
* @param {number} iAccountId
* @param {Object} oData
* @param {Object} oNamedFolderListOld
*/
CFolderListModel.prototype.parse = function (iAccountId, oData, oNamedFolderListOld) {
var sNamespace = Types.pString(oData.Namespace),
aCollection = oData.Folders['@Collection'];
if (sNamespace.length > 0) {
this.sNamespaceFolder = sNamespace.substring(0, sNamespace.length - 1);
}
this.iAccountId = iAccountId;
this.initialized(true);
this.oNamedCollection = {};
this.aLinedCollection = [];
this.collection(this.parseRecursively(aCollection, oNamedFolderListOld));
this.expandFolders();
};
/**
* Destroys all the remaining folders before the list will be destroyed itself.
*/
CFolderListModel.prototype.destroyFolders = function () {
Utils.destroyObjectWithObservables(this, 'oStarredFolder');
this.collection.removeAll();
this.aLinedCollection = [];
for (var sKey in this.oNamedCollection) {
Utils.destroyObjectWithObservables(this.oNamedCollection, sKey);
}
};
/**
* Recursively parses the folder tree.
*
* @param {Array} aRawCollection
* @param {Object} oNamedFolderListOld
* @param {number=} iLevel
* @param {string=} sParentFullName
* @param {string=} sParentDisplayFullName
* @returns {Array}
*/
CFolderListModel.prototype.parseRecursively = function (aRawCollection, oNamedFolderListOld, iLevel, sParentFullName, sParentDisplayFullName) {
var aParsedCollection = [],
iIndex = 0,
iLen = 0,
oFolder = null,
oFolderOld = null,
sFolderFullName = '',
oSubFolders = null,
aSubfolders = [];
sParentFullName = sParentFullName || '';
if (iLevel === undefined) {
iLevel = -1;
}
iLevel++;
if (_.isArray(aRawCollection)) {
for (iLen = aRawCollection.length; iIndex < iLen; iIndex++) {
sFolderFullName = Types.pString(aRawCollection[iIndex].FullNameRaw);
oFolderOld = oNamedFolderListOld[sFolderFullName];
// Do not create a new folder object if possible. A new object will use memory that is difficult to free.
oFolder = oFolderOld ? oFolderOld : new CFolderModel(this.iAccountId);
oSubFolders = oFolder.parse(aRawCollection[iIndex], sParentFullName, this.sNamespaceFolder, sParentDisplayFullName);
// Remove from the old folder list reference to the folder. The remaining folders will be destroyed.
delete oNamedFolderListOld[sFolderFullName];
oFolder.setDisplayedLevel(iLevel);
switch (oFolder.type()) {
case Enums.FolderTypes.Inbox:
this.inboxFolder(oFolder);
this.sDelimiter = oFolder.sDelimiter;
break;
case Enums.FolderTypes.Sent:
this.sentFolder(oFolder);
break;
case Enums.FolderTypes.Drafts:
this.draftsFolder(oFolder);
break;
case Enums.FolderTypes.Trash:
this.trashFolder(oFolder);
break;
case Enums.FolderTypes.Spam:
this.spamFolder(oFolder);
break;
case Enums.FolderTypes.Template:
this.aTemplateFolders.push(oFolder.fullName());
break;
}
this.oNamedCollection[oFolder.fullName()] = oFolder;
this.aLinedCollection.push(oFolder);
aParsedCollection.push(oFolder);
if (oSubFolders === null && oFolder.type() === Enums.FolderTypes.Inbox) {
oFolder.subfolders([]);
this.createStarredFolder(oFolder.fullName(), iLevel);
if (this.oStarredFolder) {
aParsedCollection.push(this.oStarredFolder);
}
} else if (oSubFolders !== null) {
if (oFolder.bNamespace && oFolder.type() === Enums.FolderTypes.Inbox) {
aSubfolders = this.parseRecursively(oSubFolders['@Collection'], oNamedFolderListOld, iLevel - 1, oFolder.fullName(), oFolder.displayFullName());
} else {
aSubfolders = this.parseRecursively(oSubFolders['@Collection'], oNamedFolderListOld, iLevel, oFolder.fullName(), oFolder.displayFullName());
}
if (oFolder.type() === Enums.FolderTypes.Inbox) {
this.createStarredFolder(oFolder.fullName(), iLevel);
if (oFolder.bNamespace) {
if (this.oStarredFolder) {
aSubfolders.unshift(this.oStarredFolder);
}
} else {
if (this.oStarredFolder) {
aParsedCollection.push(this.oStarredFolder);
}
}
}
oFolder.subfolders(aSubfolders);
} else {
oFolder.subfolders([]);
}
}
}
return aParsedCollection;
};
/**
* @param {string} sFullName
* @param {number} iLevel
*/
CFolderListModel.prototype.createStarredFolder = function (sFullName, iLevel) {
this.oStarredFolder = new CFolderModel(this.iAccountId);
this.oStarredFolder.initStarredFolder(iLevel, sFullName);
};
CFolderListModel.prototype.repopulateLinedCollection = function () {
var self = this;
function fPopuplateLinedCollection(aFolders) {
_.each(aFolders, function (oFolder) {
self.aLinedCollection.push(oFolder);
if (oFolder.subfolders().length > 0) {
fPopuplateLinedCollection(oFolder.subfolders());
}
});
}
this.aLinedCollection = [];
fPopuplateLinedCollection(this.collection());
return this.aLinedCollection;
};
/**
* @param {string} sFirstItem
* @param {boolean=} bEnableSystem = false
* @param {boolean=} bHideInbox = false
* @param {boolean=} bIgnoreCanBeSelected = false
* @param {boolean=} bIgnoreUnsubscribed = false
* @param {array=} aIgnoreFoldersFullNames = []
* @returns {Array}
*/
CFolderListModel.prototype.getOptions = function (sFirstItem, bEnableSystem, bHideInbox, bIgnoreCanBeSelected, bIgnoreUnsubscribed, aIgnoreFoldersFullNames) {
bEnableSystem = !!bEnableSystem;
bHideInbox = !!bHideInbox;
bIgnoreCanBeSelected = !!bIgnoreCanBeSelected;
bIgnoreUnsubscribed = !!bIgnoreUnsubscribed;
aIgnoreFoldersFullNames = Types.pArray(aIgnoreFoldersFullNames);
var sDeepPrefix = "\xA0\xA0\xA0\xA0",
aCollection = [];
_.each(this.aLinedCollection, function (oFolder) {
if (oFolder && !oFolder.bVirtual && (!bHideInbox || Enums.FolderTypes.Inbox !== oFolder.type()) && (!bIgnoreUnsubscribed || oFolder.subscribed())) {
var sPrefix = new Array(oFolder.getDisplayedLevel() + 1).join(sDeepPrefix);
var bDisable = false;
if (!bEnableSystem && oFolder.isSystem()) {
bDisable = true;
}
if (!bIgnoreCanBeSelected && !oFolder.canBeSelected()) {
bDisable = true;
}
if (_.indexOf(aIgnoreFoldersFullNames, oFolder.fullName()) !== -1) {
bDisable = true;
}
aCollection.push({
'name': oFolder.name(),
'fullName': oFolder.fullName(),
'displayName': sPrefix + oFolder.name(),
'translatedDisplayName': sPrefix + oFolder.displayName(),
'disable': bDisable
});
}
});
if (sFirstItem !== '') {
aCollection.unshift({
'name': sFirstItem,
'fullName': '',
'displayName': sFirstItem,
'translatedDisplayName': sFirstItem,
'disable': false
});
}
return aCollection;
};
module.exports = CFolderListModel;
/***/ }),
/***/ "bpAE":
/*!********************************************************************!*\
!*** ./modules/MailWebclient/js/views/html-editor/SourceEditor.js ***!
\********************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var codemirror = __webpack_require__(/*! codemirror */ "VJBI"),
langHtml = __webpack_require__(/*! @codemirror/lang-html */ "7ymw"),
parserHtml = __webpack_require__(/*! prettier/parser-html */ "leQx"),
prettier = __webpack_require__(/*! prettier/standalone */ "/M09");
function formatHtml(text) {
try {
return prettier.format(text, {
parser: 'html',
plugins: [parserHtml]
});
} catch (error) {
return text;
}
}
module.exports = {
view: null,
htmlSourceDom: null,
onChangeHandler: function onChangeHandler() {},
setHtmlSourceDom: function setHtmlSourceDom(htmlSourceDom) {
this.htmlSourceDom = htmlSourceDom;
},
setOnChangeHandler: function setOnChangeHandler(onChangeHandler) {
this.onChangeHandler = onChangeHandler;
},
clear: function clear() {
this.view = null;
},
isInitialized: function isInitialized() {
return this.view !== null;
},
getText: function getText() {
return this.view && this.view.viewState && this.view.viewState.state && this.view.viewState.state.doc ? this.view.viewState.state.doc.toString() : null;
},
setText: function setText(text) {
var _this = this;
var doc = formatHtml(text);
if (this.view && this.view.viewState && this.view.viewState.state && this.view.viewState.state.doc) {
this.view.dispatch({
changes: {
from: 0,
to: this.view.viewState.state.doc.length,
insert: doc
}
});
} else {
var parent = this.htmlSourceDom && this.htmlSourceDom.length ? this.htmlSourceDom[0] : null;
if (parent) {
var EditorView = codemirror.EditorView,
basicSetup = codemirror.basicSetup;
var html = langHtml.html;
this.view = new EditorView({
doc: doc,
extensions: [basicSetup, html(), EditorView.updateListener.of(function () {
_this.onChangeHandler(/*e.state.doc.toString()*/);
})],
parent: parent
});
}
}
}
};
/***/ }),
/***/ "dpSB":
/*!*************************************************!*\
!*** ./modules/MailWebclient/js/utils/Links.js ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "ioSH"),
MailCache = null,
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
LinksUtils = {};
/**
* @param {string} sTemp
*
* @return {boolean}
*/
function IsPageParam(sTemp) {
return 'p' === sTemp.substr(0, 1) && /^[1-9][\d]*$/.test(sTemp.substr(1));
}
;
/**
* @param {string} sTemp
*
* @return {boolean}
*/
function IsMsgParam(sTemp) {
if ('msg' === sTemp.substr(0, 3)) {
var aParts = sTemp.substr(3).split(':');
if (aParts.length === 1) {
return /^[1-9][\d:]*$/.test(aParts[0]);
}
if (aParts.length >= 3) {
return /^[1-9][\d:]*$/.test(aParts[0]) && /^[1-9][\d:]*$/.test(aParts[aParts.length - 1]);
}
}
return false;
}
;
/**
* @param {string} sTemp
*
* @return {boolean}
*/
function IsServerParam(sTemp) {
return 's' === sTemp.substr(0, 1) && /^[1-9][\d]*$/.test(sTemp.substr(1));
}
;
/**
* @param {string=} sFolder = 'INBOX'
* @param {number=} iPage = 1
* @param {string=} sUid = ''
* @param {string=} sSearch = ''
* @param {string=} sFilters = ''
* @param {string=} sSortBy = ''
* @param {string=} iSortOrder = 0
* @param {string=} sCustom = ''
* @return {Array}
*/
LinksUtils.getMailbox = function (sFolder, iPage, sUid, sSearch, sFilters, sSortBy, iSortOrder, sCustom) {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
oCurrAccount = AccountList.getCurrent(),
aResult = [Settings.HashModuleName, oCurrAccount ? oCurrAccount.hash() : ''];
iPage = Types.pInt(iPage, 1);
sUid = Types.pString(sUid);
sSearch = Types.pString(sSearch);
sFilters = Types.pString(sFilters);
sSortBy = Types.pString(sSortBy, Settings.MessagesSortBy.DefaultSortBy);
iSortOrder = Types.pInt(iSortOrder, Settings.MessagesSortBy.DefaultSortOrder);
sCustom = Types.pString(sCustom);
if (Types.isNonEmptyString(sFolder)) {
aResult.push(sFolder);
}
if ('' !== sFilters) {
aResult.push('filter:' + sFilters);
}
if ('' !== sSortBy && Settings.MessagesSortBy.DefaultSortBy !== sSortBy) {
aResult.push('sortby:' + sSortBy);
}
if (Settings.MessagesSortBy.DefaultSortOrder !== iSortOrder) {
aResult.push('sortorder:' + iSortOrder);
}
if (1 < iPage) {
aResult.push('p' + iPage);
}
if ('' !== sUid) {
aResult.push('msg' + sUid);
}
if ('' !== sSearch) {
aResult.push(sSearch);
}
if ('' !== sCustom) {
aResult.push('custom:' + sCustom);
}
return aResult;
};
/**
* Requires MailCache. It cannot be required earlier because it is not initialized yet.
*/
LinksUtils.requireMailCache = function () {
if (MailCache === null) {
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8");
}
};
/**
* @param {Array} aParamsToParse
*
* @return {Object}
*/
LinksUtils.parseMailbox = function (aParamsToParse) {
this.requireMailCache();
var bMailtoCompose = aParamsToParse.length > 0 && aParamsToParse[0] === 'compose' && aParamsToParse[1] === 'to',
aParams = bMailtoCompose ? [] : aParamsToParse,
sAccountHash = '',
sFolder = '',
sInboxFullName = MailCache.folderList().inboxFolderFullName() || 'INBOX',
iPage = 1,
sUid = '',
sSearch = '',
sFilters = '',
sSortBy = Settings.MessagesSortBy.DefaultSortBy,
iSortOrder = Settings.MessagesSortBy.DefaultSortOrder,
sCustom = '',
sTemp = '',
iIndex = 0;
if (Types.isNonEmptyArray(aParams)) {
sAccountHash = Types.pString(aParams[iIndex]);
iIndex++;
}
if (Types.isNonEmptyArray(aParams)) {
sFolder = Types.pString(aParams[iIndex]);
iIndex++;
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if (sTemp === 'filter:' + Enums.FolderFilter.Flagged) {
sFilters = Enums.FolderFilter.Flagged;
iIndex++;
}
if (sTemp === 'filter:' + Enums.FolderFilter.Unseen) {
sFilters = Enums.FolderFilter.Unseen;
iIndex++;
}
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if (sTemp.substr(0, 7) === 'sortby:') {
if (Settings.MessagesSortBy.Allow) {
sSortBy = sTemp.substr(7);
}
iIndex++;
}
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if (sTemp.substr(0, 10) === 'sortorder:') {
if (Settings.MessagesSortBy.Allow) {
iSortOrder = Types.pEnum(Types.pInt(sTemp.substr(10)), Enums.SortOrder, Settings.MessagesSortBy.DefaultSortOrder);
}
iIndex++;
}
}
if (!_.find(Settings.MessagesSortBy.List, function (oSortData) {
return oSortData.SortBy === sSortBy;
})) {
sSortBy = Settings.MessagesSortBy.DefaultSortBy;
iSortOrder = Settings.MessagesSortBy.DefaultSortOrder;
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if (IsPageParam(sTemp)) {
iPage = Types.pInt(sTemp.substr(1));
if (iPage <= 0) {
iPage = 1;
}
iIndex++;
}
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if (IsMsgParam(sTemp)) {
sUid = sTemp.substr(3);
iIndex++;
}
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if ('custom:' !== sTemp.substr(0, 7)) {
sSearch = sTemp;
iIndex++;
}
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if ('custom:' === sTemp.substr(0, 7)) {
sCustom = sTemp.substr(7);
}
}
}
return {
'MailtoCompose': bMailtoCompose,
'AccountHash': sAccountHash,
'Folder': sFolder === '' ? sInboxFullName : sFolder,
'Page': iPage,
'Uid': sUid,
'Search': sSearch,
'Filters': sFilters,
'SortBy': sSortBy,
'SortOrder': iSortOrder,
'Custom': sCustom
};
};
/**
* @param {number} iAccountId
* @param {string} sFolder
* @param {string} sUid
* @return {Array}
*/
LinksUtils.getViewMessage = function (iAccountId, sFolder, sUid) {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
oAccount = AccountList.getAccount(iAccountId),
sAccountHash = oAccount ? oAccount.hash() : '';
return [Settings.HashModuleName + '-view', sAccountHash, sFolder, 'msg' + sUid];
};
/**
* @return {Array}
*/
LinksUtils.getCompose = function () {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
oCurrAccount = AccountList.getCurrent(),
sAccountHash = oCurrAccount ? oCurrAccount.hash() : '';
return [Settings.HashModuleName + '-compose', sAccountHash];
};
/**
* @param {string} sType
* @param {int} iAccountId
* @param {string} sFolder
* @param {string} sUid
*
* @return {Array}
*/
LinksUtils.getComposeFromMessage = function (sType, iAccountId, sFolder, sUid) {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
oAccount = AccountList.getAccount(iAccountId),
sAccountHash = oAccount ? oAccount.hash() : '';
return [Settings.HashModuleName + '-compose', sAccountHash, sType, sFolder, sUid];
};
/**
* @param {string} sTo
*
* @return {Array}
*/
LinksUtils.getComposeWithToField = function (sTo) {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
oCurrAccount = AccountList.getCurrent(),
sAccountHash = oCurrAccount ? oCurrAccount.hash() : '';
return [Settings.HashModuleName + '-compose', sAccountHash, 'to', sTo];
};
LinksUtils.getComposeWithData = function (oData) {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
oCurrAccount = AccountList.getCurrent(),
sAccountHash = oCurrAccount ? oCurrAccount.hash() : '';
return [Settings.HashModuleName + '-compose', sAccountHash, 'data', oData];
};
/**
* @param {string} sType
* @param {Object} oObject
* @returns {Array}
*/
LinksUtils.getComposeWithObject = function (sType, oObject) {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
oCurrAccount = AccountList.getCurrent(),
sAccountHash = oCurrAccount ? oCurrAccount.hash() : '';
return [Settings.HashModuleName + '-compose', sAccountHash, sType, oObject];
};
/**
* @param {int} iAccountId
* @param {string} sFolderName
* @param {string} sUid
* @param {object} oObject
* @returns {Array}
*/
LinksUtils.getComposeWithEmlObject = function (iAccountId, sFolderName, sUid, oObject) {
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
oAccount = AccountList.getAccount(iAccountId),
sAccountHash = oAccount ? oAccount.hash() : '';
return [Settings.HashModuleName + '-compose', sAccountHash, Enums.ReplyType.ForwardAsAttach, sFolderName, sUid, oObject];
};
/**
* @param {array} aParams
* @returns {object}
*/
LinksUtils.parseCompose = function (aParams) {
this.requireMailCache();
var AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
sAccountHash = aParams.length > 0 ? aParams[0] : '',
sRouteType = aParams.length > 1 ? aParams[1] : '',
oObject = (sRouteType === Enums.ReplyType.ForwardAsAttach || sRouteType === 'attachments' || sRouteType === 'data') && aParams.length > 2 ? sRouteType === Enums.ReplyType.ForwardAsAttach ? aParams[4] : aParams[2] : null,
oToAddr = sRouteType === 'to' && aParams.length > 2 ? LinksUtils.parseToAddr(aParams[2]) : null,
bMessage = (sRouteType === Enums.ReplyType.Reply || sRouteType === Enums.ReplyType.ReplyAll || sRouteType === Enums.ReplyType.Resend || sRouteType === Enums.ReplyType.Forward || sRouteType === 'drafts' || sRouteType === Enums.ReplyType.ForwardAsAttach) && aParams.length > 2,
sFolderName = bMessage ? aParams[2] : '',
sLongUid = bMessage ? aParams[3] : '',
oAccount = AccountList.getAccountByHash(sAccountHash),
iAccountId = oAccount ? oAccount.id() : AccountList.currentId(),
oIdentifiers = MailCache.getMessageActualIdentifiers(iAccountId, sFolderName, sLongUid);
return {
'AccountHash': sAccountHash,
'RouteType': sRouteType,
'ToAddr': oToAddr,
'Object': oObject,
'MessageFolderName': oIdentifiers.sFolder,
'MessageUid': oIdentifiers.sUid
};
};
/**
* @param {?} mToAddr
* @returns {Object}
*/
LinksUtils.parseToAddr = function (mToAddr) {
var sToAddr = Types.pString(mToAddr),
bHasMailTo = sToAddr.indexOf('mailto:') !== -1,
aMailto = [],
aMessageParts = [],
sSubject = '',
sCcAddr = '',
sBccAddr = '',
sBody = '';
if (bHasMailTo) {
aMailto = sToAddr.replace(/^mailto:/, '').split('?');
sToAddr = aMailto[0];
if (aMailto.length === 2) {
aMessageParts = aMailto[1].split('&');
_.each(aMessageParts, function (sPart) {
var aParts = sPart.split('=');
if (aParts.length === 2) {
switch (aParts[0].toLowerCase()) {
case 'subject':
sSubject = decodeURIComponent(aParts[1]);
break;
case 'cc':
sCcAddr = decodeURIComponent(aParts[1]);
break;
case 'bcc':
sBccAddr = decodeURIComponent(aParts[1]);
break;
case 'body':
sBody = decodeURIComponent(aParts[1]);
break;
}
}
});
}
}
return {
'to': sToAddr,
'hasMailto': bHasMailTo,
'subject': sSubject,
'cc': sCcAddr,
'bcc': sBccAddr,
'body': sBody
};
};
/**
* @param {array} aParams
* @returns {Object}
*/
LinksUtils.parseMailServers = function (aParams) {
var iIndex = 0,
sTemp = '',
iPage = 1,
sSearch = '',
bCreate = false,
iEditServerId = 0;
if (Types.isNonEmptyArray(aParams)) {
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if (IsPageParam(sTemp)) {
iPage = Types.pInt(sTemp.substr(1));
if (iPage <= 0) {
iPage = 1;
}
iIndex++;
}
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if (!IsServerParam(sTemp) && sTemp !== 'create') {
sSearch = sTemp;
iIndex++;
}
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
if (IsServerParam(sTemp)) {
iEditServerId = Types.pInt(sTemp.substr(1), iEditServerId);
if (iEditServerId <= 0) {
iEditServerId = 1;
}
iIndex++;
}
}
if (aParams.length > iIndex) {
sTemp = Types.pString(aParams[iIndex]);
bCreate = sTemp === 'create';
}
}
return {
'Page': iPage,
'Search': sSearch,
'Create': bCreate,
'EditServerId': iEditServerId
};
};
module.exports = LinksUtils;
/***/ }),
/***/ "eGl8":
/*!*******************************************!*\
!*** ./modules/MailWebclient/js/Cache.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"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC"),
Logger = __webpack_require__(/*! modules/CoreWebclient/js/utils/Logger.js */ "IWyd"),
Api = __webpack_require__(/*! modules/CoreWebclient/js/Api.js */ "Z9uT"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Pulse = __webpack_require__(/*! modules/CoreWebclient/js/Pulse.js */ "jIlg"),
Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "ioSH"),
UserSettings = __webpack_require__(/*! modules/CoreWebclient/js/Settings.js */ "KIwC"),
WindowOpener = __webpack_require__(/*! modules/CoreWebclient/js/WindowOpener.js */ "zVyH"),
Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
ConfirmPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/ConfirmPopup.js */ "MYiO"),
LinksUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Links.js */ "dpSB"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ"),
MessagesDictionary = __webpack_require__(/*! modules/MailWebclient/js/MessagesDictionary.js */ "TmsQ"),
Prefetcher = null,
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
CFolderModel = __webpack_require__(/*! modules/MailWebclient/js/models/CFolderModel.js */ "V8Bf"),
CFolderListModel = __webpack_require__(/*! modules/MailWebclient/js/models/CFolderListModel.js */ "Zm5i"),
CUidListModel = __webpack_require__(/*! modules/MailWebclient/js/models/CUidListModel.js */ "eL/8"),
MainTab = App.isNewTab() && window.opener && window.opener.MainTabMailMethods;
/**
* @constructor
*/
function CMailCache() {
this.currentAccountId = AccountList.currentId;
this.currentAccountId.subscribe(function (iCurrAccountId) {
var oAccount = AccountList.getAccount(iCurrAccountId),
oFolderList = this.oFolderListItems[iCurrAccountId];
if (oAccount) {
oAccount.quotaRecieved(false);
this.messagesLoadingError(false);
if (oFolderList) {
this.folderList(oFolderList);
} else {
this.messagesLoading(true);
this.folderList(new CFolderListModel());
this.messages([]);
this.currentMessage(null);
this.getFolderList(iCurrAccountId);
}
} else {
this.folderList(new CFolderListModel());
}
}, this);
this.editedAccountId = AccountList.editedId;
this.editedAccountId.subscribe(function (iEditedAccountId) {
var oFolderList = this.oFolderListItems[iEditedAccountId];
if (oFolderList) {
this.editedFolderList(oFolderList);
} else {
this.editedFolderList(new CFolderListModel());
if (this.currentAccountId() !== iEditedAccountId) {
this.getFolderList(iEditedAccountId);
}
}
}, this);
this.oFolderListItems = {};
this.quotaChangeTrigger = ko.observable(false);
this.checkMailStarted = ko.observable(false);
this.checkMailStartedAccountId = ko.observable(0);
this.folderList = ko.observable(new CFolderListModel());
this.folderListLoading = ko.observableArray([]);
this.oUnifiedInbox = new CFolderModel(0, true);
this.getCurrentFolder = ko.computed(function () {
if (this.oUnifiedInbox.selected()) {
return this.oUnifiedInbox;
}
return this.folderList().currentFolder();
}, this);
this.getCurrentFolderFullname = ko.computed(function () {
if (this.oUnifiedInbox.selected()) {
return this.oUnifiedInbox.fullName();
}
return this.folderList().currentFolderFullName();
}, this);
this.getCurrentFolderType = ko.computed(function () {
if (this.oUnifiedInbox.selected()) {
return this.oUnifiedInbox.type();
}
return this.folderList().currentFolderType();
}, this);
this.editedFolderList = ko.observable(new CFolderListModel());
this.newMessagesCount = ko.computed(function () {
if (this.oUnifiedInbox.selected()) {
return this.oUnifiedInbox.unseenMessageCount();
} else {
var oInbox = this.folderList().inboxFolder();
return oInbox ? oInbox.unseenMessageCount() : 0;
}
}, this);
this.messages = ko.observableArray([]);
this.messages.subscribe(function () {
if (this.messages().length > 0) {
this.messagesLoadingError(false);
}
if (this.currentMessage()) {
var oCurrMessage = _.find(this.messages(), function (oMessage) {
return oMessage.longUid() === this.currentMessage().longUid();
}.bind(this)),
oFolder = oCurrMessage ? this.getFolderByFullName(oCurrMessage.accountId(), oCurrMessage.folder()) : null;
if (oFolder && !oCurrMessage) {
oFolder.getCompletelyFilledMessage(this.currentMessage().longUid(), null, null, true);
}
}
}, this);
this.uidList = ko.observable(new CUidListModel());
this.page = ko.observable(1);
this.messagesLoading = ko.observable(false);
this.messagesLoadingError = ko.observable(false);
this.currentMessage = ko.observable(null);
this.nextMessageUid = ko.observable('');
this.prevMessageUid = ko.observable('');
this.savingDraftUid = ko.observable('');
this.editedDraftUid = ko.observable('');
this.disableComposeAutosave = ko.observable(false);
this.aResponseHandlers = [];
this.iAutoCheckMailTimer = -1;
this.waitForUnseenMessages = ko.observable(true);
this.iSetMessagesSeenCount = 0;
App.subscribeEvent('ReceiveAjaxResponse::after', _.bind(function (oParams) {
// restart autorefresh after restoring Internet connection
if (!this.checkMailStarted() && oParams.Response.Method === 'Ping' && oParams.Response.Module === 'Core' && oParams.Response.Result) {
this.executeCheckMail();
}
}, this));
}
CMailCache.prototype.requirePrefetcher = function () {
Prefetcher = __webpack_require__(/*! modules/MailWebclient/js/Prefetcher.js */ "qG1F");
};
/**
* @public
*/
CMailCache.prototype.init = function () {
Ajax.registerOnAllRequestsClosedHandler(function () {
// Delay not to reset these flags between two related requests (e.g. 'GetRelevantFoldersInformation' and 'GetMessages')
_.delay(function () {
if (!Ajax.hasOpenedRequests()) {
MailCache.checkMailStarted(false);
MailCache.folderListLoading.removeAll();
}
}, 10);
if (!Ajax.hasOpenedRequests()) {
// All messages can not be selected from message list if message saving is done
MailCache.savingDraftUid('');
}
});
if (MainTab) {
this.oFolderListItems = MainTab.getFolderListItems();
this.uidList(MainTab.getUidList());
if (window.name) {
var iAccountId = Types.pInt(window.name);
if (iAccountId === 0) {
iAccountId = MainTab.getComposedMessageAccountId(window.name);
}
if (iAccountId !== 0) {
this.currentAccountId(iAccountId);
}
}
this.currentAccountId.valueHasMutated();
this.initPrevNextSubscribes();
} else {
this.currentAccountId.valueHasMutated();
this.initPrevNextSubscribes();
}
this.oUnifiedInbox.parse({
'@Object': 'Object/Folder',
'Name': TextUtils.i18n('MAILWEBCLIENT/LABEL_FOLDER_ALL_INBOXES'),
'FullNameRaw': '__unified__inbox__',
'FullNameHash': '',
'Delimiter': '/',
'Type': Enums.FolderTypes.AllInboxes,
'AlwaysRefresh': true,
'IsSubscribed': true,
'IsSelectable': true,
'Exists': true,
'SubFolders': []
}, '', '');
};
CMailCache.prototype.initPrevNextSubscribes = function () {
this.bInThreadLevel = false;
this.currentMessage.subscribe(this.calcNextMessageUid, this);
this.uidList.subscribe(this.calcNextMessageUid, this);
this.currentMessage.subscribe(this.calcPrevMessageUid, this);
this.uidList.subscribe(this.calcPrevMessageUid, this);
};
CMailCache.prototype.calcNextMessageUid = function () {
var sNextUid = '',
oFolder = null,
oParentMessage = null,
bThreadLevel = false;
if (this.currentMessage() && _.isFunction(this.currentMessage().longUid)) {
var sCurrentUid = this.currentMessage().uid(),
iMessageIndex = _.indexOf(this.uidList().collection(), sCurrentUid);
if (iMessageIndex === -1) {
sCurrentUid = this.currentMessage().longUid();
iMessageIndex = _.indexOf(this.uidList().collection(), sCurrentUid);
}
bThreadLevel = this.currentMessage().threadPart() && this.currentMessage().threadParentUid() !== '';
oFolder = this.getFolderByFullName(this.currentMessage().accountId(), this.currentMessage().folder());
if (this.bInThreadLevel || bThreadLevel) {
this.bInThreadLevel = !!MainTab;
if (bThreadLevel) {
oParentMessage = oFolder.getMessageByUid(this.currentMessage().threadParentUid());
if (oParentMessage) {
_.each(oParentMessage.threadUids(), function (sUid, iIndex, aCollection) {
if (sUid === sCurrentUid && iIndex > 0) {
sNextUid = aCollection[iIndex - 1];
}
});
if (!Types.isNonEmptyString(sNextUid)) {
sNextUid = oParentMessage.longUid();
}
}
}
} else {
_.each(this.uidList().collection(), function (sUid, iIndex, aCollection) {
if (sUid === sCurrentUid && iIndex > 0) {
sNextUid = aCollection[iIndex - 1] || '';
}
});
if (sNextUid === '' && MainTab && iMessageIndex !== -1) {
this.requirePrefetcher();
Prefetcher.prefetchNextPage(iMessageIndex);
}
}
}
this.nextMessageUid(sNextUid);
};
CMailCache.prototype.calcPrevMessageUid = function () {
var sPrevUid = '',
oFolder = null,
oParentMessage = null,
bThreadLevel = false;
if (this.currentMessage() && _.isFunction(this.currentMessage().longUid)) {
var sCurrentUid = this.currentMessage().uid(),
iMessageIndex = _.indexOf(this.uidList().collection(), sCurrentUid);
if (iMessageIndex === -1) {
sCurrentUid = this.currentMessage().longUid();
iMessageIndex = _.indexOf(this.uidList().collection(), sCurrentUid);
}
bThreadLevel = this.currentMessage().threadPart() && this.currentMessage().threadParentUid() !== '';
oFolder = this.getFolderByFullName(this.currentMessage().accountId(), this.currentMessage().folder());
if (this.bInThreadLevel || bThreadLevel) {
this.bInThreadLevel = true;
if (bThreadLevel) {
oParentMessage = oFolder.getMessageByUid(this.currentMessage().threadParentUid());
if (oParentMessage) {
_.each(oParentMessage.threadUids(), function (sUid, iIndex, aCollection) {
if (sUid === sCurrentUid && iIndex + 1 < aCollection.length) {
sPrevUid = aCollection[iIndex + 1] || '';
}
});
}
} else if (this.currentMessage().threadCount() > 0) {
sPrevUid = this.currentMessage().threadUids()[0];
}
} else {
_.each(this.uidList().collection(), function (sUid, iIndex, aCollection) {
if (sUid === sCurrentUid && iIndex + 1 < aCollection.length) {
sPrevUid = aCollection[iIndex + 1] || '';
}
});
if (sPrevUid === '' && MainTab && iMessageIndex !== -1) {
this.requirePrefetcher();
Prefetcher.prefetchPrevPage(iMessageIndex);
}
}
}
this.prevMessageUid(sPrevUid);
};
/**
* @param {number} iAccountId
* @param {string} sFolderFullName
*/
CMailCache.prototype.getFolderByFullName = function (iAccountId, sFolderFullName) {
if (sFolderFullName === this.oUnifiedInbox.fullName()) {
return this.oUnifiedInbox;
}
var oFolderList = this.oFolderListItems[iAccountId];
if (oFolderList) {
return oFolderList.getFolderByFullName(sFolderFullName);
}
return null;
};
CMailCache.prototype.checkCurrentFolderList = function () {
var oCurrAccount = AccountList.getCurrent(),
oFolderList = oCurrAccount ? this.oFolderListItems[oCurrAccount.id()] : null;
if (oCurrAccount && !oFolderList && !this.messagesLoading()) {
this.messagesLoading(true);
this.messagesLoadingError(false);
this.getFolderList(oCurrAccount.id());
}
};
/**
* @param {number} iAccountID
*/
CMailCache.prototype.getFolderList = function (iAccountID) {
var oAccount = AccountList.getAccount(iAccountID);
if (oAccount) {
this.folderListLoading.push(iAccountID);
Ajax.send('GetFolders', {
'AccountID': iAccountID
}, this.onGetFoldersResponse, this);
} else if (iAccountID === this.currentAccountId()) {
this.messagesLoading(false);
}
};
/**
* @param {number} iAccountId
* @param {string} sFullName
* @param {string} sUid
* @param {string} sReplyType
*/
CMailCache.prototype.markMessageReplied = function (iAccountId, sFullName, sUid, sReplyType) {
var oFolder = this.getFolderByFullName(iAccountId, sFullName);
if (oFolder) {
oFolder.markMessageReplied(sUid, sReplyType);
}
};
/**
* @param {Object} oMessage
*/
CMailCache.prototype.hideThreads = function (oMessage) {
var oAccount = AccountList.getCurrent();
if (oAccount && oAccount.threadingIsAvailable() && oMessage.folder() === this.getCurrentFolderFullname() && !oMessage.threadOpened()) {
this.getCurrentFolder().hideThreadMessages(oMessage);
}
};
/**
* @param {string} sFolderFullName
*/
CMailCache.prototype.showOpenedThreads = function (sFolderFullName) {
this.messages(this.getMessagesWithThreads(sFolderFullName, this.uidList(), this.messages()));
};
/**
* @param {Object} oUidList
* @returns {Boolean}
*/
CMailCache.prototype.useThreadingInCurrentList = function (oUidList) {
oUidList = oUidList || this.uidList();
var oAccount = AccountList.getCurrent(),
oCurrFolder = this.getCurrentFolder(),
bFolderWithoutThreads = oCurrFolder && oCurrFolder.withoutThreads(),
bNotSearchOrFilters = oUidList.search() === '' && oUidList.filters() === '';
return oAccount && oAccount.threadingIsAvailable() && !bFolderWithoutThreads && bNotSearchOrFilters;
};
/**
* @param {string} sFolderFullName
* @param {Object} oUidList
* @param {Array} aOrigMessages
*/
CMailCache.prototype.getMessagesWithThreads = function (sFolderFullName, oUidList, aOrigMessages) {
var aExtMessages = [],
aMessages = [],
oCurrFolder = this.getCurrentFolder();
if (oCurrFolder && (sFolderFullName === oCurrFolder.fullName() || this.oUnifiedInbox.selected() && sFolderFullName === 'INBOX') && this.useThreadingInCurrentList(oUidList)) {
aMessages = _.filter(aOrigMessages, function (oMess) {
return !oMess.threadPart();
});
_.each(aMessages, function (oMess) {
var aThreadMessages = [];
aExtMessages.push(oMess);
if (oMess.threadCount() > 0) {
if (oMess.threadOpened()) {
var oFolder = this.getFolderByFullName(oMess.accountId(), oMess.folder());
aThreadMessages = oFolder.getThreadMessages(oMess);
aExtMessages = _.union(aExtMessages, aThreadMessages);
}
oCurrFolder.computeThreadData(oMess);
}
}, this);
return aExtMessages;
}
return aOrigMessages;
};
CMailCache.prototype.getMessageActualIdentifiers = function (iAccountId, sFolder, mUid) {
var sUid = Types.pString(mUid),
aParts = sUid.split(':');
if (aParts.length >= 3) {
var iAccountId = Types.pInt(aParts[0]),
aFolderParts = aParts.slice(1, aParts.length - 1),
sFolder = aFolderParts.join(':'),
sUid = aParts[aParts.length - 1];
return {
iAccountId: iAccountId,
sFolder: sFolder,
sUid: sUid
};
}
return {
iAccountId: iAccountId,
sFolder: sFolder,
sUid: sUid
};
};
/**
* @param {Object} oUidList
* @param {number} iOffset
* @param {boolean} bFillMessages
*/
CMailCache.prototype.setMessagesFromUidList = function (oUidList, iOffset, bFillMessages) {
var aUids = oUidList.getUidsForOffset(iOffset),
aMessages = _.map(aUids, function (sUid) {
var iAccountId = oUidList.iAccountId,
sFolder = oUidList.sFullName,
oIdentifiers = this.getMessageActualIdentifiers(iAccountId, sFolder, sUid);
return MessagesDictionary.get([oIdentifiers.iAccountId, oIdentifiers.sFolder, oIdentifiers.sUid]);
}, this),
iMessagesCount = aMessages.length;
if (bFillMessages) {
this.messages(this.getMessagesWithThreads(this.getCurrentFolderFullname(), oUidList, aMessages));
if (iOffset + iMessagesCount < oUidList.resultCount() && iMessagesCount < Settings.MailsPerPage && (oUidList.filters() !== Enums.FolderFilter.Unseen || this.waitForUnseenMessages())) {
this.messagesLoading(true);
}
if (this.currentMessage() && this.currentMessage().deleted()) {
this.currentMessage(null);
}
}
return aUids;
};
CMailCache.prototype.getNamesOfFoldersToRefresh = function (iAccountId) {
var oFolderList = this.oFolderListItems[iAccountId],
aFolders = oFolderList ? oFolderList.getNamesOfFoldersToRefresh() : [],
aFoldersFromAccount = AccountList.getCurrentFetchersAndFiltersFolderNames();
aFolders = _.uniq(_.compact(_.union(aFolders, aFoldersFromAccount)));
return aFolders;
};
/**
* Checks if LIST-STATUS command should be used if it's supported by IMAP server.
* @param {int} iAccountId
* @param {int} iFoldersToRequestCount
*/
CMailCache.prototype.getUseListStatusIfPossibleValue = function (iAccountId, iFoldersToRequestCount) {
var oFolderList = this.oFolderListItems[iAccountId],
iFoldersCount = oFolderList ? oFolderList.getFoldersCount() : 0;
return iFoldersCount < 100 || iFoldersToRequestCount > 50;
};
/**
* @param {boolean} bAbortPrevious
*/
CMailCache.prototype.executeCheckMail = function (bAbortPrevious) {
clearTimeout(this.iAutoCheckMailTimer);
var iCurrentAccountId = this.currentAccountId(),
aFolders = [],
aAccountsData = [],
bCurrentAccountCheckmailStarted = this.checkMailStarted() && this.checkMailStartedAccountId() === iCurrentAccountId,
bCheckmailAllowed = bAbortPrevious || !Ajax.hasOpenedRequests('GetRelevantFoldersInformation') || !Ajax.hasOpenedRequests('GetUnifiedRelevantFoldersInformation') || !bCurrentAccountCheckmailStarted,
oParameters = null;
if (App.getUserRole() !== Enums.UserRole.Anonymous && bCheckmailAllowed) {
if (AccountList.unifiedInboxReady()) {
_.each(AccountList.collection(), function (oAccount) {
if (iCurrentAccountId === oAccount.id() || oAccount.includeInUnifiedMailbox()) {
aFolders = this.getNamesOfFoldersToRefresh(oAccount.id());
if (aFolders.length > 0) {
aAccountsData.push({
'AccountID': oAccount.id(),
'Folders': aFolders,
'UseListStatusIfPossible': this.getUseListStatusIfPossibleValue(oAccount.id(), aFolders.length)
});
}
}
}, this);
if (aAccountsData.length > 0) {
oParameters = {
'AccountsData': aAccountsData
};
this.checkMailStarted(true);
this.checkMailStartedAccountId(iCurrentAccountId);
Ajax.send('GetUnifiedRelevantFoldersInformation', oParameters, this.onGetRelevantFoldersInformationResponse, this);
}
} else {
aFolders = this.getNamesOfFoldersToRefresh(this.currentAccountId());
if (aFolders.length > 0) {
oParameters = {
'AccountID': iCurrentAccountId,
'Folders': aFolders,
'UseListStatusIfPossible': this.getUseListStatusIfPossibleValue(iCurrentAccountId, aFolders.length)
};
this.checkMailStarted(true);
this.checkMailStartedAccountId(iCurrentAccountId);
Ajax.send('GetRelevantFoldersInformation', oParameters, this.onGetRelevantFoldersInformationResponse, this);
}
}
}
};
CMailCache.prototype.setAutocheckmailTimer = function () {
clearTimeout(this.iAutoCheckMailTimer);
if (!App.isNewTab() && UserSettings.AutoRefreshIntervalMinutes > 0) {
this.iAutoCheckMailTimer = setTimeout(function () {
if (!MailCache.isSearchExecuting()) {
MailCache.checkMessageFlags();
MailCache.executeCheckMail(false);
}
}, UserSettings.AutoRefreshIntervalMinutes * 60 * 1000);
}
};
CMailCache.prototype.isSearchExecuting = function () {
var oRequest = Ajax.getOpenedRequest('GetMessages'),
oParameters = oRequest && oRequest.Parameters;
return oParameters && oParameters.Search !== '';
};
CMailCache.prototype.checkMessageFlags = function () {
var oInbox = this.folderList().inboxFolder(),
aUids = oInbox ? oInbox.getFlaggedMessageUids() : [],
oParameters = {
'Folder': this.folderList().inboxFolderFullName(),
'Uids': aUids
};
if (aUids.length > 0) {
Ajax.send('GetMessagesFlags', oParameters, this.onGetMessagesFlagsResponse, this);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.onGetMessagesFlagsResponse = function (oResponse, oRequest) {
var oParameters = oRequest.Parameters,
oFolderList = this.oFolderListItems[oParameters.AccountID],
oInbox = oFolderList ? oFolderList.inboxFolder() : null;
if (oInbox) {
if (oResponse.Result) {
_.each(oResponse.Result, function (aFlags, sUid) {
if (_.indexOf(aFlags, '\\flagged') === -1) {
oInbox.setMessageUnflaggedByUid(sUid);
}
});
}
oInbox.removeFlaggedMessageListsFromCache();
this.requirePrefetcher();
Prefetcher.prefetchStarredMessageList();
}
};
/**
* @param {string} sFolder
* @param {number} iPage
* @param {string} sSearch
* @param {string=} sFilter
* @param {string} sSortBy
* @param {int} iSortOrder
*/
CMailCache.prototype.changeCurrentMessageList = function (sFolder, iPage, sSearch, sFilter, sSortBy, iSortOrder) {
this.requestCurrentMessageList(sFolder, iPage, sSearch, sFilter, sSortBy, iSortOrder, true);
};
/**
* @param {string} sFolder
* @param {number} iPage
* @param {string} sSearch
* @param {string} sFilter
* @param {string} sSortBy
* @param {int} iSortOrder
* @param {boolean} bFillMessages
*/
CMailCache.prototype.requestCurrentMessageList = function (sFolder, iPage, sSearch, sFilter, sSortBy, iSortOrder, bFillMessages) {
var oRequestData = this.requestMessageList(sFolder, iPage, sSearch, sFilter || '', sSortBy, iSortOrder, true, bFillMessages || false);
if (oRequestData) {
var iCheckmailIntervalMilliseconds = UserSettings.AutoRefreshIntervalMinutes * 60 * 1000,
iFolderUpdateDiff = oRequestData.Folder.oRelevantInformationLastMoment ? moment().diff(oRequestData.Folder.oRelevantInformationLastMoment) : iCheckmailIntervalMilliseconds + 1;
this.uidList(oRequestData.UidList);
this.page(iPage);
this.messagesLoading(oRequestData.RequestStarted);
this.messagesLoadingError(false);
if (!oRequestData.RequestStarted && iCheckmailIntervalMilliseconds > 0 && iFolderUpdateDiff > iCheckmailIntervalMilliseconds) {
this.executeCheckMail(true);
}
}
};
CMailCache.prototype.isSearchInMultiFolders = function (sSearch) {
sSearch = Types.pString(sSearch, this.uidList().search());
return /(^|\s)folders:(all|sub)(\s|$)/.test(sSearch);
};
/**
* @param {string} sFolder
* @param {number} iPage
* @param {string} sSearch
* @param {string} sFilters
* @param {string} sSortBy
* @param {int} iSortOrder
* @param {boolean} bCurrent
* @param {boolean} bFillMessages
* @param {boolean} bDoNotRequest
*/
CMailCache.prototype.requestMessageList = function (sFolder, iPage, sSearch, sFilters, sSortBy, iSortOrder, bCurrent, bFillMessages, bDoNotRequest) {
// Parameter is true if method was called only to update last access time of messages for specified page.
// This case is used for Prefetcher work.
bDoNotRequest = Types.pBool(bDoNotRequest, false);
var oFolder = this.getFolderByFullName(this.currentAccountId(), sFolder);
if (!oFolder) {
Logger.log('requestMessageList, error: folder not found ', JSON.stringify({
'currentAccountId': this.currentAccountId(),
'sFolder': sFolder,
'iPage': iPage,
'sSearch': sSearch,
'sFilters': sFilters,
'sSortBy': sSortBy,
'iSortOrder': iSortOrder,
'bCurrent': bCurrent,
'bFillMessages': bFillMessages
}));
return null;
}
var bFolderWithoutThreads = oFolder && oFolder.withoutThreads(),
oAccount = AccountList.getCurrent(),
bUseThreading = oAccount && oAccount.threadingIsAvailable() && !bFolderWithoutThreads && sSearch === '' && sFilters === '',
oUidList = oFolder ? oFolder.getUidList(sSearch, sFilters, sSortBy, iSortOrder) : null,
bCacheIsEmpty = oUidList && oUidList.resultCount() === -1,
iOffset = (iPage - 1) * Settings.MailsPerPage,
oParameters = {
'Folder': sFolder,
'Offset': iOffset,
'Limit': Settings.MailsPerPage,
'Search': sSearch,
'Filters': sFilters,
'SortBy': sSortBy,
'SortOrder': iSortOrder,
'UseThreading': bUseThreading
},
bStartRequest = false,
bDataExpected = false,
fCallBack = bCurrent ? this.onCurrentGetMessagesResponse : this.onGetMessagesResponse,
aUids = [];
if (sFolder === this.getTemplateFolder() && iOffset === 0 && Settings.MailsPerPage < Settings.MaxTemplatesCountOnCompose && sSearch === '' && sFilters === '' && sSortBy === Settings.MessagesSortBy.DefaultSortBy && iSortOrder === Settings.MessagesSortBy.DefaultSortOrder) {
oParameters.Limit = Settings.MaxTemplatesCountOnCompose;
}
if (oFolder.type() === Enums.FolderTypes.Inbox && sFilters === '') {
oParameters['InboxUidnext'] = oFolder.sUidNext;
} else {
oParameters['InboxUidnext'] = '';
}
if (bCacheIsEmpty && oUidList.iAccountId === this.uidList().iAccountId && oUidList.sFullName === this.uidList().sFullName && oUidList.search() === this.uidList().search() && oUidList.filters() === this.uidList().filters() && oUidList.sortBy() === this.uidList().sortBy() && oUidList.sortOrder() === this.uidList().sortOrder()) {
oUidList = this.uidList();
}
if (oUidList) {
aUids = this.setMessagesFromUidList(oUidList, iOffset, bFillMessages);
oFolder.updateLastAccessTime(aUids);
}
if (oUidList) {
bDataExpected = bCacheIsEmpty || iOffset + aUids.length < oUidList.resultCount() && aUids.length < Settings.MailsPerPage;
bStartRequest = !bDoNotRequest && (oFolder.hasChanges() || bDataExpected);
}
if (bStartRequest) {
if (oParameters.Folder === this.oUnifiedInbox.fullName()) {
delete oParameters.Folder;
Ajax.send('GetUnifiedMailboxMessages', oParameters, fCallBack, this);
} else if (this.isSearchInMultiFolders(oParameters.Search)) {
Ajax.send('GetMessagesByFolders', oParameters, fCallBack, this);
} else {
Ajax.send('GetMessages', oParameters, fCallBack, this);
}
} else if (bFillMessages && !bDoNotRequest) {
this.waitForUnseenMessages(false);
}
return {
UidList: oUidList,
RequestStarted: bStartRequest,
DataExpected: bDataExpected,
Folder: oFolder
};
};
CMailCache.prototype.executeEmptyTrash = function () {
var oFolder = this.folderList().trashFolder();
if (oFolder) {
oFolder.emptyFolder();
}
};
CMailCache.prototype.executeEmptySpam = function () {
var oFolder = this.folderList().spamFolder();
if (oFolder) {
oFolder.emptyFolder();
}
};
/**
* @param {Object} oFolder
*/
CMailCache.prototype.onClearFolder = function (oFolder) {
if (oFolder && oFolder.selected()) {
this.messages.removeAll();
this.currentMessage(null);
var oUidList = oFolder ? oFolder.getUidList(this.uidList().search(), this.uidList().filters(), this.uidList().sortBy(), this.uidList().sortOrder()) : null;
if (oUidList) {
oUidList.resultCount(0);
this.uidList(oUidList);
} else {
this.uidList(new CUidListModel());
}
// GetRelevantFoldersInformation-request aborted during folder cleaning, not to get the wrong information.
// So here indicates that chekmail is over.
this.checkMailStarted(false);
this.setAutocheckmailTimer();
}
};
CMailCache.prototype.getOpenedDraftUids = function () {
var aOpenedWins = WindowOpener.getOpenedWindows(),
aDraftUids = _.map(aOpenedWins, function (oWin) {
return oWin.SlaveTabMailMethods ? oWin.SlaveTabMailMethods.getEditedDraftUid() : '';
});
if (Popups.hasOpenedMinimizedPopups()) {
aDraftUids.push(this.editedDraftUid());
}
return _.uniq(_.compact(aDraftUids));
};
/*
* @param {array} aUids
*/
CMailCache.prototype.closeComposesWithDraftUids = function (aUids) {
var aOpenedWins = WindowOpener.getOpenedWindows();
_.each(aOpenedWins, function (oWin) {
if (oWin.SlaveTabMailMethods && -1 !== $.inArray(oWin.SlaveTabMailMethods.getEditedDraftUid(), aUids)) {
oWin.close();
}
});
if (-1 !== $.inArray(this.editedDraftUid(), aUids)) {
var ComposeUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Compose.js */ "sXLm");
if (_.isFunction(ComposeUtils.closeComposePopup)) {
ComposeUtils.closeComposePopup();
}
}
};
/**
* @param {object} oFromFolder
* @param {object} oToFolder
* @param {Array} aUids
*/
CMailCache.prototype.moveMessagesToFolder = function (oFromFolder, oToFolder, aUids) {
if (Types.isNonEmptyArray(aUids)) {
var bDraftsFolder = oFromFolder && oFromFolder.type() === Enums.FolderTypes.Drafts,
aOpenedDraftUids = bDraftsFolder && this.getOpenedDraftUids(),
bTryToDeleteEditedDraft = bDraftsFolder && _.find(aUids, _.bind(function (sUid) {
return -1 !== $.inArray(sUid, aOpenedDraftUids);
}, this)),
oParameters = {
'AccountID': oFromFolder ? oFromFolder.iAccountId : 0,
'Folder': oFromFolder ? oFromFolder.fullName() : '',
'ToFolder': oToFolder.fullName(),
'Uids': aUids.join(',')
},
oDiffs = null,
fMoveMessages = _.bind(function () {
if (this.uidList().filters() === Enums.FolderFilter.Unseen && (this.uidList().resultCount() > Settings.MailsPerPage || this.uidList().resultCount() === -1)) {
this.waitForUnseenMessages(true);
}
oDiffs = oFromFolder.markDeletedByUids(aUids);
oToFolder.addMessagesCountsDiff(oDiffs.MinusDiff, oDiffs.UnseenMinusDiff);
this.setUnifiedInboxUnseenChanges(oToFolder.iAccountId, oToFolder.fullName(), oDiffs.MinusDiff, oDiffs.UnseenMinusDiff);
oToFolder.recivedAnim(true);
this.excludeDeletedMessages();
oToFolder.markHasChanges();
Ajax.send('MoveMessages', oParameters, this.onMoveMessagesResponse, this);
}, this);
if (oFromFolder && oToFolder) {
if (bTryToDeleteEditedDraft) {
this.disableComposeAutosave(true);
Popups.showPopup(ConfirmPopup, [TextUtils.i18n('MAILWEBCLIENT/CONFIRM_MESSAGE_FOR_DELETE_IS_EDITED'), _.bind(function (bOk) {
if (bOk) {
this.closeComposesWithDraftUids(aUids);
fMoveMessages();
}
this.disableComposeAutosave(false);
}, this), '', TextUtils.i18n('MAILWEBCLIENT/ACTION_CLOSE_DELETE_DRAFT')]);
} else {
fMoveMessages();
}
}
}
};
CMailCache.prototype.copyMessagesToFolder = function (fromFolder, toFolder, uids) {
if (fromFolder && toFolder && uids.length > 0) {
var parameters = {
'Folder': fromFolder.fullName(),
'ToFolder': toFolder.fullName(),
'Uids': uids.join(',')
};
toFolder.recivedAnim(true);
toFolder.markHasChanges();
Ajax.send('CopyMessages', parameters, this.onCopyMessagesResponse, this);
}
};
CMailCache.prototype.excludeDeletedMessages = function () {
_.delay(_.bind(function () {
var iOffset = (this.page() - 1) * Settings.MailsPerPage;
this.setMessagesFromUidList(this.uidList(), iOffset, true);
}, this), 500);
};
/**
* @param {number} iAccountID
* @param {string} sFolderFullName
* @param {string} sDraftUid
*/
CMailCache.prototype.removeOneMessageFromCacheForFolder = function (iAccountID, sFolderFullName, sDraftUid) {
var oFolder = this.getFolderByFullName(iAccountID, sFolderFullName);
if (oFolder && oFolder.type() === Enums.FolderTypes.Drafts) {
if (this.currentMessage() && this.currentMessage().folder() === sFolderFullName && this.currentMessage().longUid() === sDraftUid) {
this.currentMessage(null);
}
oFolder.markDeletedByUids([sDraftUid]);
oFolder.commitDeleted([sDraftUid]);
}
};
/**
* @param {number} iAccountID
* @param {string} sFolderFullName
*/
CMailCache.prototype.startMessagesLoadingWhenDraftSaving = function (iAccountID, sFolderFullName) {
var oFolder = this.getFolderByFullName(iAccountID, sFolderFullName);
if (oFolder && oFolder.type() === Enums.FolderTypes.Drafts && oFolder.selected()) {
this.messagesLoading(true);
}
};
/**
* @param {number} iAccountID
* @param {string} sFolderFullName
*/
CMailCache.prototype.removeMessagesFromCacheForFolder = function (iAccountID, sFolderFullName) {
var oFolder = this.getFolderByFullName(iAccountID, sFolderFullName),
sCurrFolderFullName = this.getCurrentFolderFullname();
if (oFolder) {
oFolder.markHasChanges();
if (this.currentAccountId() === iAccountID && sFolderFullName === sCurrFolderFullName) {
this.requestCurrentMessageList(sCurrFolderFullName, this.page(), this.uidList().search(), '', this.uidList().sortBy(), this.uidList().sortOrder(), true);
}
}
};
/**
* @param {Array} aUids
*/
CMailCache.prototype.deleteMessages = function (aUids) {
var oCurrFolder = this.getCurrentFolder();
if (oCurrFolder) {
this.deleteMessagesFromFolder(oCurrFolder, aUids);
}
};
/**
* @param {Object} oFolder
* @param {Array} aUids
*/
CMailCache.prototype.deleteMessagesFromFolder = function (oFolder, aUids) {
var oParameters = {
'AccountID': oFolder.iAccountId,
'Folder': oFolder.fullName(),
'Uids': aUids.join(',')
};
oFolder.markDeletedByUids(aUids);
this.excludeDeletedMessages();
Ajax.send('DeleteMessages', oParameters, this.onMoveMessagesResponse, this);
};
/**
* @param {boolean} bAlwaysForSender
*/
CMailCache.prototype.showExternalPictures = function (bAlwaysForSender) {
var oCurrMsg = this.currentMessage(),
aFrom = oCurrMsg ? oCurrMsg.oFrom.aCollection : [],
oFolder = oCurrMsg ? this.getFolderByFullName(oCurrMsg.accountId(), oCurrMsg.folder()) : null;
if (oFolder) {
if (bAlwaysForSender && aFrom.length > 0) {
oFolder.alwaysShowExternalPicturesForSender(aFrom[0].sEmail);
} else {
oFolder.showExternalPictures(oCurrMsg.longUid());
}
}
};
/**
* @param {string} sFolder
* @param {string} sFilters
*/
CMailCache.prototype.setCurrentFolder = function (sFolder, sFilters) {
if (!AccountList.unifiedInboxAllowed() && sFolder === this.oUnifiedInbox.fullName()) {
sFolder = this.folderList().inboxFolderFullName();
}
this.oUnifiedInbox.selected(sFolder === this.oUnifiedInbox.fullName());
this.folderList().setCurrentFolder(sFolder, sFilters);
};
/**
* @param {number} iAccountId
* @param {string} sFolder
* @param {string|null} sUid
*/
CMailCache.prototype.setCurrentMessage = function (iAccountId, sFolder, sUid) {
var oFolder = this.getFolderByFullName(iAccountId, sFolder),
oMessage = null;
if (oFolder && sUid && oFolder.fullName() === sFolder) {
oMessage = MessagesDictionary.get([oFolder.iAccountId, oFolder.fullName(), sUid]);
}
if (oMessage && !oMessage.deleted()) {
this.currentMessage(oMessage);
if (Settings.MarkMessageSeenWhenViewing && !this.currentMessage().seen()) {
this.executeGroupOperation('SetMessagesSeen', [this.currentMessage().longUid()], 'seen', true);
}
oFolder.getCompletelyFilledMessage(sUid, this.onCurrentMessageResponse, this);
} else {
this.currentMessage(null);
if (App.isNewTab() && oFolder) {
oFolder.getCompletelyFilledMessage(sUid, this.onCurrentMessageResponse, this);
}
}
};
/**
* @param {Object} oMessage
* @param {string} sUid
* @param {Object} oResponse
*/
CMailCache.prototype.onCurrentMessageResponse = function (oMessage, sUid, oResponse) {
var sCurrentUid = this.currentMessage() && this.currentMessage().longUid ? this.currentMessage().longUid() : '';
if (oMessage === null && MainTab && oResponse) {
Api.showErrorByCode(oResponse, '', true);
}
if (oMessage === null && sCurrentUid === sUid) {
this.currentMessage(null);
} else if (oMessage && sCurrentUid === sUid) {
this.currentMessage.valueHasMutated();
} else if (App.isNewTab() && oMessage && this.currentMessage() === null) {
this.currentMessage(oMessage);
}
};
/**
* @param {int} iAccountId
* @param {string} sFullName
* @param {string} sUid
* @param {Function} fResponseHandler
* @param {Object} oContext
*/
CMailCache.prototype.getMessage = function (iAccountId, sFullName, sUid, fResponseHandler, oContext) {
var oFolder = this.getFolderByFullName(iAccountId, sFullName);
if (oFolder) {
oFolder.getCompletelyFilledMessage(sUid, fResponseHandler, oContext);
}
};
CMailCache.prototype.setUnifiedInboxUnseenChanges = function (iAccountId, sFolderFullName, iDiff, iUnseenDiff) {
if (AccountList.unifiedInboxReady()) {
var oInbox = this.oUnifiedInbox.getUnifiedInbox(iAccountId);
if (oInbox && oInbox.fullName() === sFolderFullName) {
this.oUnifiedInbox.addMessagesCountsDiff(iDiff, iUnseenDiff);
this.oUnifiedInbox.markHasChanges();
}
}
};
CMailCache.prototype.getUidsSeparatedByFolders = function (aLongUids) {
var oUidsByFolders = {};
_.each(aLongUids, function (sLongUid) {
var oIdentifiers = this.getMessageActualIdentifiers(this.currentAccountId(), this.getCurrentFolderFullname(), sLongUid);
if (oIdentifiers.sUid !== '') {
if (!oUidsByFolders[oIdentifiers.iAccountId + ':' + oIdentifiers.sFolder]) {
oUidsByFolders[oIdentifiers.iAccountId + ':' + oIdentifiers.sFolder] = {
iAccountId: oIdentifiers.iAccountId,
sFolder: oIdentifiers.sFolder,
aUids: []
};
}
oUidsByFolders[oIdentifiers.iAccountId + ':' + oIdentifiers.sFolder].aUids.push(oIdentifiers.sUid);
}
}.bind(this));
return oUidsByFolders;
};
/**
* @param {string} sMethod
* @param {Array} aUids
* @param {string} sField
* @param {boolean} bSetAction
*/
CMailCache.prototype.executeGroupOperation = function (sMethod, aUids, sField, bSetAction) {
if (aUids.length === 0)
// Mark all read
{
if (this.oUnifiedInbox.selected()) {
_.each(AccountList.unifiedMailboxAccounts(), function (oAccount) {
var oInbox = this.oUnifiedInbox.getUnifiedInbox(oAccount.id());
if (oInbox) {
this.executeGroupOperationForFolder(sMethod, oInbox, aUids, sField, bSetAction);
}
}, this);
} else {
var oCurrFolder = this.getCurrentFolder();
if (oCurrFolder) {
this.executeGroupOperationForFolder(sMethod, oCurrFolder, aUids, sField, bSetAction);
}
}
} else {
var oUidsByFolders = this.getUidsSeparatedByFolders(aUids);
_.each(oUidsByFolders, function (oData) {
var oFolderList = this.oFolderListItems[oData.iAccountId],
oAccFolder = oFolderList ? oFolderList.getFolderByFullName(oData.sFolder) : null;
if (oAccFolder) {
this.executeGroupOperationForFolder(sMethod, oAccFolder, oData.aUids, sField, bSetAction);
}
}, this);
}
};
/**
* @param {string} sMethod
* @param {object} oFolder
* @param {Array} aUids
* @param {string} sField
* @param {boolean} bSetAction
*/
CMailCache.prototype.executeGroupOperationForFolder = function (sMethod, oFolder, aUids, sField, bSetAction) {
var iAccountId = oFolder.iAccountId,
oFolderList = this.oFolderListItems[iAccountId],
oParameters = {
'AccountID': iAccountId,
'Folder': oFolder.fullName(),
'Uids': aUids.join(','),
'SetAction': bSetAction
},
iOffset = (this.page() - 1) * Settings.MailsPerPage,
iUidsCount = aUids.length,
iStarredCount = oFolderList.oStarredFolder ? oFolderList.oStarredFolder.messageCount() : 0,
oStarredUidList = oFolder.getUidList('', Enums.FolderFilter.Flagged, Settings.MessagesSortBy.DefaultSortBy, Settings.MessagesSortBy.DefaultSortOrder),
fCallback = sMethod === 'SetMessagesSeen' ? this.onSetMessagesSeenResponse : function () {};
if (sMethod === 'SetMessagesSeen') {
this.iSetMessagesSeenCount++;
}
Ajax.send(sMethod, oParameters, fCallback, this);
oFolder.executeGroupOperation(sField, aUids, bSetAction);
if (oFolder.type() === Enums.FolderTypes.Inbox && sField === 'flagged') {
if (this.uidList().filters() === Enums.FolderFilter.Flagged) {
if (!bSetAction) {
this.uidList().deleteUids(aUids);
if (oFolderList.oStarredFolder) {
oFolderList.oStarredFolder.messageCount(oStarredUidList.resultCount());
}
}
} else {
oFolder.removeFlaggedMessageListsFromCache();
if (this.uidList().search() === '' && oFolderList.oStarredFolder) {
if (bSetAction) {
oFolderList.oStarredFolder.messageCount(iStarredCount + iUidsCount);
} else {
oFolderList.oStarredFolder.messageCount(iStarredCount - iUidsCount > 0 ? iStarredCount - iUidsCount : 0);
}
}
}
}
if (sField === 'seen') {
oFolder.removeUnseenMessageListsFromCache();
}
if (this.uidList().filters() !== Enums.FolderFilter.Unseen || this.waitForUnseenMessages()) {
this.setMessagesFromUidList(this.uidList(), iOffset, true);
}
};
/**
* private
*/
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.onSetMessagesSeenResponse = function (oResponse, oRequest) {
this.iSetMessagesSeenCount--;
if (this.iSetMessagesSeenCount < 0) {
this.iSetMessagesSeenCount = 0;
}
if (this.getCurrentFolder() && this.iSetMessagesSeenCount === 0 && (this.uidList().filters() !== Enums.FolderFilter.Unseen || this.waitForUnseenMessages())) {
this.requestCurrentMessageList(this.getCurrentFolder().fullName(), this.page(), this.uidList().search(), this.uidList().filters(), this.uidList().sortBy(), this.uidList().sortOrder(), false);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.onGetFoldersResponse = function (oResponse, oRequest) {
var oParameters = oRequest.Parameters,
oFolderList = new CFolderListModel(),
iAccountId = oParameters.AccountID,
oFolderListOld = this.oFolderListItems[iAccountId],
oNamedFolderListOld = oFolderListOld ? oFolderListOld.oNamedCollection : {};
if (oResponse.Result === false) {
Api.showErrorByCode(oResponse);
if (oParameters.AccountID === this.currentAccountId() && this.messages().length === 0) {
this.messagesLoading(false);
this.messagesLoadingError(true);
}
} else {
oFolderList.parse(iAccountId, oResponse.Result, oNamedFolderListOld);
if (oFolderListOld) {
oFolderList.oStarredFolder.messageCount(oFolderListOld.oStarredFolder.messageCount());
}
this.__oldFolderList = this.oFolderListItems[iAccountId];
this.oFolderListItems[iAccountId] = oFolderList;
// Destroy the old folder list to free up used memory.
if (this.__oldFolderList) {
this.__oldFolderList.destroyFolders();
Utils.destroyObjectWithObservables(this, '__oldFolderList');
}
if (this.currentAccountId() === iAccountId) {
this.folderList(oFolderList);
}
if (this.editedAccountId() === iAccountId) {
this.editedFolderList(oFolderList);
}
this.requirePrefetcher();
if (!Prefetcher.prefetchFolderLists()) {
setTimeout(_.bind(this.getAllFoldersRelevantInformation, this, iAccountId), 2000);
}
}
this.folderListLoading.remove(iAccountId);
};
/**
* @param {number} iAccountId
*/
CMailCache.prototype.getAllFoldersRelevantInformation = function (iAccountId) {
if (AccountList.unifiedInboxReady()) {
var aAccountsData = [];
_.each(AccountList.collection(), function (oAccount) {
var aFolders = [];
if (oAccount.id() === iAccountId) {
var _oFolderList = this.oFolderListItems[iAccountId];
aFolders = _oFolderList ? _oFolderList.getFoldersWithoutCountInfo() : [];
} else if (oAccount.includeInUnifiedMailbox()) {
aFolders = this.getNamesOfFoldersToRefresh(iAccountId);
}
if (aFolders.length > 0) {
aAccountsData.push({
'AccountID': oAccount.id(),
'Folders': aFolders,
'UseListStatusIfPossible': this.getUseListStatusIfPossibleValue(oAccount.id(), aFolders.length)
});
}
}, this);
if (aAccountsData.length > 0) {
oParameters = {
'AccountsData': aAccountsData
};
Ajax.send('GetUnifiedRelevantFoldersInformation', oParameters, this.onGetRelevantFoldersInformationResponse, this);
}
} else {
var oFolderList = this.oFolderListItems[iAccountId],
aFolders = oFolderList ? oFolderList.getFoldersWithoutCountInfo() : [],
oParameters = {
'AccountID': iAccountId,
'Folders': aFolders,
'UseListStatusIfPossible': this.getUseListStatusIfPossibleValue(iAccountId, aFolders.length)
};
if (aFolders.length > 0) {
Ajax.send('GetRelevantFoldersInformation', oParameters, this.onGetRelevantFoldersInformationResponse, this);
}
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.onGetRelevantFoldersInformationResponse = function (oResponse, oRequest) {
var bCheckMailStarted = false,
oParameters = oRequest.Parameters,
iAccountId = oParameters.AccountID,
oResult = oResponse.Result;
if (oResult === false) {
Api.showErrorByCode(oResponse);
if (Ajax.hasOpenedRequests('GetRelevantFoldersInformation') || Ajax.hasOpenedRequests('GetUnifiedRelevantFoldersInformation')) {
bCheckMailStarted = true;
}
} else {
if (oResult.Unified && oResult.Accounts) {
_.each(oResult.Accounts, function (oAccountData) {
this.onGetRelevantFoldersInformationResponseForAccount(oAccountData.AccountId, oAccountData.Counts);
}, this);
var bSameFolder = this.oUnifiedInbox.selected(),
aData = oResult.Unified,
iCount = aData[0],
iUnseenCount = aData[1],
sUidNext = aData[2],
sHash = aData[3],
bFolderHasChanges = this.oUnifiedInbox.setRelevantInformation(sUidNext, sHash, iCount, iUnseenCount, bSameFolder);
if (bSameFolder && bFolderHasChanges && this.uidList().filters() !== Enums.FolderFilter.Unseen) {
this.requestCurrentMessageList(this.getCurrentFolder().fullName(), this.page(), this.uidList().search(), this.uidList().filters(), this.uidList().sortBy(), this.uidList().sortOrder(), false);
bCheckMailStarted = true;
}
} else if (oResult.Counts) {
bCheckMailStarted = bCheckMailStarted || this.onGetRelevantFoldersInformationResponseForAccount(iAccountId, oResult.Counts);
}
}
this.checkMailStarted(bCheckMailStarted);
if (!this.checkMailStarted()) {
this.setAutocheckmailTimer();
}
};
CMailCache.prototype.onGetRelevantFoldersInformationResponseForAccount = function (iAccountId, oCounts) {
var bCheckMailStarted = false,
oFolderList = this.oFolderListItems[iAccountId],
bSameAccount = this.currentAccountId() === iAccountId,
sCurrentFolderName = this.getCurrentFolderFullname();
if (oFolderList) {
_.each(oCounts, function (aData, sFullName) {
if (_.isArray(aData) && aData.length > 3) {
var iCount = aData[0],
iUnseenCount = aData[1],
sUidNext = aData[2],
sHash = aData[3],
bFolderHasChanges = false,
bSameFolder = false,
oFolder = null;
oFolder = this.getFolderByFullName(iAccountId, sFullName);
if (oFolder) {
bSameFolder = bSameAccount && oFolder.fullName() === sCurrentFolderName;
bFolderHasChanges = oFolder.setRelevantInformation(sUidNext, sHash, iCount, iUnseenCount, bSameFolder && !this.isSearchInMultiFolders());
if (bSameFolder && bFolderHasChanges && this.uidList().filters() !== Enums.FolderFilter.Unseen) {
this.requestCurrentMessageList(oFolder.fullName(), this.page(), this.uidList().search(), this.uidList().filters(), this.uidList().sortBy(), this.uidList().sortOrder(), false);
bCheckMailStarted = true;
}
}
}
}, this);
oFolderList.countsCompletelyFilled(true);
}
return bCheckMailStarted;
};
/**
* @param {Object} oResponse
*/
CMailCache.prototype.showNotificationsForNewMessages = function (oResponse) {
var sCurrentFolderName = this.getCurrentFolderFullname(),
iNewLength = 0,
sUid = '',
oParameters = {},
sFrom = '',
aBody = [];
if (oResponse.Result.New && oResponse.Result.New.length > 0) {
iNewLength = oResponse.Result.New.length;
sUid = oResponse.Result.New[0].Uid;
var iAccountId = oResponse.Result.New[0].AccountId;
if (sCurrentFolderName === this.oUnifiedInbox.fullName()) {
sUid = iAccountId + ':' + sCurrentFolderName + ':' + sUid;
}
oParameters = {
action: 'show',
icon: 'static/styles/images/logo_140x140.png',
title: TextUtils.i18n('MAILWEBCLIENT/INFO_NEW_MESSAGES_PLURAL', {
'COUNT': iNewLength
}, null, iNewLength),
timeout: 5000,
callback: function callback() {
window.focus();
Routing.setHash(LinksUtils.getMailbox(sCurrentFolderName, 1, sUid, '', ''));
}
};
if (iNewLength === 1) {
if (Types.isNonEmptyString(oResponse.Result.New[0].Subject)) {
aBody.push(TextUtils.i18n('MAILWEBCLIENT/LABEL_SUBJECT') + ': ' + oResponse.Result.New[0].Subject);
}
sFrom = _.map(oResponse.Result.New[0].From, function (oFrom) {
return oFrom.DisplayName !== '' ? oFrom.DisplayName : oFrom.Email;
}).join(', ');
if (Types.isNonEmptyString(sFrom)) {
aBody.push(TextUtils.i18n('MAILWEBCLIENT/LABEL_FROM') + ': ' + sFrom);
}
oParameters.body = aBody.join('\r\n');
}
Utils.desktopNotify(oParameters);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.onCurrentGetMessagesResponse = function (oResponse, oRequest) {
this.checkMailStarted(false);
if (!oResponse.Result) {
Logger.log('onCurrentGetMessagesResponse, error ', JSON.stringify(oRequest).substr(0, 300), JSON.stringify(oResponse).substr(0, 300));
Api.showErrorByCode(oResponse);
if (this.messagesLoading() === true && (this.messages().length === 0 || oResponse.ErrorCode !== Enums.Errors.NotDisplayedError)) {
this.messagesLoadingError(true);
}
this.messagesLoading(false);
this.setAutocheckmailTimer();
} else {
this.messagesLoadingError(false);
this.parseMessageList(oResponse, oRequest);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.onGetMessagesResponse = function (oResponse, oRequest) {
if (oResponse && oResponse.Result) {
this.parseMessageList(oResponse, oRequest);
} else {
Logger.log('onGetMessagesResponse, error ', JSON.stringify(oRequest).substr(0, 300), JSON.stringify(oResponse).substr(0, 300));
}
};
CMailCache.prototype.parseAndCacheMessages = function (aMessagesCollection, oFolder, bTrustThreadInfo, aNewFolderMessages) {
var oFolders = {};
_.each(aMessagesCollection, function (oRawMessage) {
var oIdentifiers = this.getMessageActualIdentifiers(oFolder.iAccountId, oFolder.fullName(), oRawMessage.UnifiedUid || oRawMessage.Uid),
oActualFolder = oFolders[oIdentifiers.iAccountId + ':' + oIdentifiers.sFolder];
if (!oActualFolder) {
var oFolderList = this.oFolderListItems[oIdentifiers.iAccountId];
oActualFolder = oFolderList ? oFolderList.getFolderByFullName(oIdentifiers.sFolder) : null;
}
if (oActualFolder) {
var oFolderMessage = oActualFolder.parseAndCacheMessage(oRawMessage, false, bTrustThreadInfo);
aNewFolderMessages.push(oFolderMessage);
oFolders[oIdentifiers.iAccountId + ':' + oIdentifiers.sFolder] = oActualFolder;
}
}, this);
};
CMailCache.prototype.removeAllMessageListsFromCacheIfHasChanges = function (oFolder) {
if (oFolder && oFolder.hasChanges()) {
var oFolderList = this.oFolderListItems[oFolder.iAccountId],
oNamedCollection = oFolderList ? oFolderList.oNamedCollection : {};
_.each(oNamedCollection, function (oFolder) {
oFolder.removeMultiFoldersMessageListsFromCache();
}, this);
this.oUnifiedInbox.removeMultiFoldersMessageListsFromCache();
oFolder.removeAllMessageListsFromCacheIfHasChanges();
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.parseMessageList = function (oResponse, oRequest) {
if (oRequest.Parameters && !Types.isNonEmptyString(oRequest.Parameters.Folder)) {
oRequest.Parameters.Folder = this.oUnifiedInbox.fullName();
}
var oResult = oResponse.Result,
oParameters = oRequest.Parameters,
iAccountId = oParameters.AccountID,
oFolder = null,
oUidList = null,
bTrustThreadInfo = oParameters.UseThreading,
bHasFolderChanges = false,
bCurrentFolder = (this.currentAccountId() === iAccountId || oParameters.Folder === this.oUnifiedInbox.fullName()) && this.getCurrentFolderFullname() === oParameters.Folder,
bCurrentList = bCurrentFolder && this.uidList().search() === oResult.Search && this.uidList().filters() === oResult.Filters && this.uidList().sortBy() === oParameters.SortBy && this.uidList().sortOrder() === oParameters.SortOrder,
bCurrentPage = this.page() === oParameters.Offset / Settings.MailsPerPage + 1,
// !!!
aNewFolderMessages = [];
this.showNotificationsForNewMessages(oResponse);
if (oResult !== false && oResult['@Object'] === 'Collection/MessageCollection') {
oFolder = this.getFolderByFullName(iAccountId, oParameters.Folder);
if (!this.isSearchInMultiFolders(oParameters.Search)) {
var bMultiFolderSearchDisplayed = this.isSearchInMultiFolders(),
bNotApplyInfoToUI = bCurrentFolder && !bCurrentList && !bMultiFolderSearchDisplayed;
// perform before getUidList, because in case of a mismatch the uid list will be pre-cleaned
oFolder.setRelevantInformation(oResult.UidNext.toString(), oResult.FolderHash, oResult.MessageCount, oResult.MessageUnseenCount, bNotApplyInfoToUI);
}
bHasFolderChanges = oFolder.hasChanges();
this.removeAllMessageListsFromCacheIfHasChanges(oFolder);
oUidList = oFolder.getUidList(oResult.Search, oResult.Filters, oParameters.SortBy, oParameters.SortOrder);
oUidList.setUidsAndCount(oParameters.Offset, oResult);
this.parseAndCacheMessages(oResult['@Collection'], oFolder, bTrustThreadInfo, aNewFolderMessages);
if (bCurrentList) {
this.uidList(oUidList);
if (bCurrentPage && (oUidList.filters() !== Enums.FolderFilter.Unseen || this.waitForUnseenMessages())) {
this.messagesLoading(false);
this.waitForUnseenMessages(false);
this.setMessagesFromUidList(oUidList, oParameters.Offset, true);
if (!this.messagesLoading()) {
this.setAutocheckmailTimer();
}
}
}
if (bHasFolderChanges && bCurrentFolder && (!bCurrentList || !bCurrentPage) && this.uidList().filters() !== Enums.FolderFilter.Unseen) {
this.requestCurrentMessageList(this.getCurrentFolderFullname(), this.page(), this.uidList().search(), this.uidList().filters(), this.uidList().sortBy(), this.uidList().sortOrder(), false);
}
if (oFolder.type() === Enums.FolderTypes.Inbox && oUidList.filters() === Enums.FolderFilter.Flagged && oUidList.search() === '' && this.folderList().oStarredFolder) {
this.folderList().oStarredFolder.messageCount(oUidList.resultCount());
this.folderList().oStarredFolder.hasExtendedInfo(true);
}
}
};
CMailCache.prototype.increaseStarredCount = function () {
if (this.folderList().oStarredFolder) {
this.folderList().oStarredFolder.increaseCountIfHasNotInfo();
}
};
CMailCache.prototype.removeMessageFromCurrentList = function (iAccountId, sFolder, sUid) {
var oFolder = this.getFolderByFullName(iAccountId, sFolder),
oMessage = oFolder ? oFolder.getMessageByUid(sUid) : null;
if (oMessage) {
this.messages(_.filter(this.messages(), function (oTempMessage) {
return oTempMessage.longUid() !== sUid;
}));
Routing.replaceHashWithoutMessageUid(oMessage.longUid());
oFolder.markHasChanges();
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.onMoveMessagesResponse = function (oResponse, oRequest) {
var oResult = oResponse.Result,
oParameters = oRequest.Parameters,
aUids = oParameters.Uids.split(','),
oFolder = this.getFolderByFullName(oParameters.AccountID, oParameters.Folder),
oToFolder = this.getFolderByFullName(oParameters.AccountID, oParameters.ToFolder),
bToFolderTrash = oToFolder && oToFolder.type() === Enums.FolderTypes.Trash,
bToFolderSpam = oToFolder && oToFolder.type() === Enums.FolderTypes.Spam,
oDiffs = null,
sConfirm = bToFolderTrash ? TextUtils.i18n('MAILWEBCLIENT/CONFIRM_MESSAGES_DELETE_WITHOUT_TRASH') : TextUtils.i18n('MAILWEBCLIENT/CONFIRM_MESSAGES_MARK_SPAM_WITHOUT_SPAM'),
fDeleteMessages = _.bind(function (bResult) {
if (bResult && oFolder) {
this.deleteMessagesFromFolder(oFolder, aUids);
}
}, this),
oCurrFolder = this.getCurrentFolder(),
sCurrFolderFullName = oCurrFolder ? oCurrFolder.fullName() : '',
bFillMessages = false;
if (oResult === false) {
if (oFolder) {
oDiffs = oFolder.revertDeleted(aUids);
}
if (oToFolder) {
if (oDiffs) {
oToFolder.addMessagesCountsDiff(-oDiffs.PlusDiff, -oDiffs.UnseenPlusDiff);
}
if (oResponse.ErrorCode === Enums.MailErrors.CannotMoveMessageQuota && (bToFolderTrash || bToFolderSpam)) {
if (Types.isNonEmptyString(oResponse.ErrorMessage)) {
sConfirm += ' (' + oResponse.ErrorMessage + ')';
}
Popups.showPopup(ConfirmPopup, [sConfirm, fDeleteMessages]);
} else {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_MOVING_MESSAGES'));
}
} else {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_DELETING_MESSAGES'));
}
bFillMessages = true;
} else if (oFolder) {
var aLongUids = _.map(aUids, function (sUid) {
return oFolder.iAccountId + ':' + oFolder.fullName() + ':' + Types.pString(sUid);
});
this.messages(_.filter(this.messages(), function (oMessage) {
return _.indexOf(aLongUids, oMessage && oMessage.longUid && oMessage.longUid()) === -1;
}));
oFolder.commitDeleted(aUids);
_.each(aLongUids, function (sLongUid) {
Routing.replaceHashWithoutMessageUid(sLongUid);
});
}
if (oFolder && sCurrFolderFullName === oFolder.fullName() || oToFolder && sCurrFolderFullName === oToFolder.fullName() || this.isSearchInMultiFolders() || oCurrFolder.bIsUnifiedInbox && (oFolder && oFolder.type() === Enums.FolderTypes.Inbox || oToFolder && oToFolder.type() === Enums.FolderTypes.Inbox)) {
oCurrFolder.markHasChanges();
switch (this.uidList().filters()) {
case Enums.FolderFilter.Flagged:
break;
case Enums.FolderFilter.Unseen:
if (this.waitForUnseenMessages()) {
this.requestCurrentMessageList(sCurrFolderFullName, this.page(), this.uidList().search(), this.uidList().filters(), this.uidList().sortBy(), this.uidList().sortOrder(), bFillMessages);
}
break;
default:
this.requestCurrentMessageList(sCurrFolderFullName, this.page(), this.uidList().search(), this.uidList().filters(), this.uidList().sortBy(), this.uidList().sortOrder(), bFillMessages);
break;
}
} else if (oFolder && sCurrFolderFullName !== oFolder.fullName()) {
this.requirePrefetcher();
Prefetcher.startFolderPrefetch(oFolder);
} else if (oToFolder && sCurrFolderFullName !== oToFolder.fullName()) {
this.requirePrefetcher();
Prefetcher.startFolderPrefetch(oToFolder);
}
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
CMailCache.prototype.onCopyMessagesResponse = function (oResponse, oRequest) {
var oResult = oResponse.Result,
oParameters = oRequest.Parameters,
oFolder = this.getFolderByFullName(oParameters.AccountID, oParameters.Folder),
oToFolder = this.getFolderByFullName(oParameters.AccountID, oParameters.ToFolder),
oCurrFolder = this.getCurrentFolder(),
sCurrFolderFullName = oCurrFolder.fullName();
if (oResult === false) {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_COPYING_MESSAGES'));
}
if (sCurrFolderFullName === oFolder.fullName() || oToFolder && sCurrFolderFullName === oToFolder.fullName()) {
oCurrFolder.markHasChanges();
this.requestCurrentMessageList(sCurrFolderFullName, this.page(), this.uidList().search(), '', this.uidList().sortBy(), this.uidList().sortOrder(), false);
} else if (sCurrFolderFullName !== oFolder.fullName()) {
this.requirePrefetcher();
Prefetcher.startFolderPrefetch(oFolder);
} else if (oToFolder && sCurrFolderFullName !== oToFolder.fullName()) {
this.requirePrefetcher();
Prefetcher.startFolderPrefetch(oToFolder);
}
};
/**
* @param {string} sSearch
*/
CMailCache.prototype.searchMessagesInCurrentFolder = function (sSearch) {
var sFolder = this.getCurrentFolderFullname() || 'INBOX',
sUid = this.currentMessage() ? this.currentMessage().longUid() : '',
sFilters = this.uidList().filters();
Routing.setHash(LinksUtils.getMailbox(sFolder, 1, sUid, sSearch, sFilters));
};
/**
* @param {string} sSearch
*/
CMailCache.prototype.searchMessagesInInbox = function (sSearch) {
Routing.setHash(LinksUtils.getMailbox(this.folderList().inboxFolderFullName() || 'INBOX', 1, '', sSearch, ''));
};
CMailCache.prototype.getFolderHash = function (sFolder) {
return Routing.buildHashFromArray(LinksUtils.getMailbox(sFolder, 1, '', '', ''));
};
CMailCache.prototype.countMessages = function (oCountedFolder) {
var aSubfoldersMessagesCount = [],
_fCountRecursively = function fCountRecursively(oFolder) {
_.each(oFolder.subfolders(), function (oSubFolder, iKey) {
if (oSubFolder.subscribed()) {
aSubfoldersMessagesCount.push(oSubFolder.unseenMessageCount());
if (oSubFolder.subfolders().length && oSubFolder.subscribed()) {
_fCountRecursively(oSubFolder);
}
}
}, this);
};
if (oCountedFolder.expanded() || oCountedFolder.bNamespace) {
oCountedFolder.subfoldersMessagesCount(0);
} else {
_fCountRecursively(oCountedFolder);
oCountedFolder.subfoldersMessagesCount(_.reduce(aSubfoldersMessagesCount, function (memo, num) {
return memo + num;
}, 0));
}
};
CMailCache.prototype.changeDatesInMessages = function () {
MessagesDictionary.updateMomentDates();
};
/**
* Clears messages cache for specified account.
* @param {number} iAccountId
*/
CMailCache.prototype.clearMessagesCache = function (iAccountId) {
var oFolderList = this.oFolderListItems[iAccountId];
_.each(oFolderList.collection(), function (oFolder) {
oFolder.markHasChanges();
this.removeAllMessageListsFromCacheIfHasChanges(oFolder);
}, this);
if (iAccountId === this.currentAccountId()) {
this.messages([]);
}
};
CMailCache.prototype.getTemplateFolder = function () {
var oFolderList = this.folderList(),
sFolder = '',
sCurrentFolder = oFolderList.currentFolder() ? oFolderList.currentFolder().fullName() : '';
if (Types.isNonEmptyArray(this.getCurrentTemplateFolders())) {
if (-1 !== $.inArray(sCurrentFolder, this.getCurrentTemplateFolders())) {
sFolder = sCurrentFolder;
} else {
sFolder = _.find(this.getCurrentTemplateFolders(), function (sTempFolder) {
return !!oFolderList.oNamedCollection[sTempFolder];
});
}
}
return typeof sFolder === 'string' ? sFolder : '';
};
CMailCache.prototype.getCurrentTemplateFolders = function () {
return Settings.AllowTemplateFolders ? this.folderList().aTemplateFolders : [];
};
CMailCache.prototype.isTemplateFolder = function (folderFullName) {
return -1 !== $.inArray(folderFullName, this.getCurrentTemplateFolders());
};
CMailCache.prototype.changeTemplateFolder = function (sFolderName, bTemplate) {
if (Settings.AllowTemplateFolders) {
this.folderList().changeTemplateFolder(sFolderName, bTemplate);
}
};
var MailCache = new CMailCache();
Pulse.registerDayOfMonthFunction(_.bind(MailCache.changeDatesInMessages, MailCache));
UserSettings.timeFormat.subscribe(MailCache.changeDatesInMessages, MailCache);
UserSettings.dateFormat.subscribe(MailCache.changeDatesInMessages, MailCache);
module.exports = MailCache;
/***/ }),
/***/ "eL/8":
/*!**********************************************************!*\
!*** ./modules/MailWebclient/js/models/CUidListModel.js ***!
\**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
MailCache = null,
MessagesDictionary = __webpack_require__(/*! modules/MailWebclient/js/MessagesDictionary.js */ "TmsQ"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z");
/**
* @constructor
*
* !!!Attention!!!
* It is not used underscore, because the collection may contain undefined-elements.
* They have their own importance. But all underscore-functions removes them automatically.
*/
function CUidListModel() {
this.iAccountId = 0;
this.sFullName = '';
this.search = ko.observable('');
this.filters = ko.observable('');
this.sortBy = ko.observable(Settings.MessagesSortBy.DefaultSortBy);
this.sortOrder = ko.observable(Settings.MessagesSortBy.DefaultSortOrder);
this.resultCount = ko.observable(-1);
this.collection = ko.observableArray([]);
}
/**
* Requires MailCache. It cannot be required earlier because it is not initialized yet.
*/
CUidListModel.prototype.requireMailCache = function () {
if (MailCache === null) {
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8");
}
};
/**
* @param {int} iOffset
* @param {Object} oResult
*/
CUidListModel.prototype.setUidsAndCount = function (iOffset, oResult) {
if (oResult['@Object'] === 'Collection/MessageCollection') {
_.each(oResult.Uids, function (sUid, iIndex) {
this.collection()[iIndex + iOffset] = sUid.toString();
}, this);
this.resultCount(oResult.MessageResultCount);
}
};
/**
* @param {number} iOffset
*/
CUidListModel.prototype.getUidsForOffset = function (iOffset) {
this.requireMailCache();
var iIndex = 0,
iLen = this.collection().length,
sUid = '',
iAccountId = this.iAccountId,
sFullName = this.sFullName,
iExistsCount = 0,
aUids = [],
oMsg = null;
for (; iIndex < iLen; iIndex++) {
if (iIndex >= iOffset && iExistsCount < Settings.MailsPerPage) {
sUid = this.collection()[iIndex];
if (sUid !== undefined) {
var oIdentifiers = MailCache.getMessageActualIdentifiers(this.iAccountId, this.sFullName, sUid);
oMsg = MessagesDictionary.get([oIdentifiers.iAccountId, oIdentifiers.sFolder, oIdentifiers.sUid]);
}
if (oMsg && !oMsg.deleted() || sUid === undefined) {
iExistsCount++;
if (sUid !== undefined) {
aUids.push(sUid);
}
}
}
}
return aUids;
};
/**
* @param {Array} aUids
*/
CUidListModel.prototype.deleteUids = function (aUids) {
var iIndex = 0,
iLen = this.collection().length,
sUid = '',
aNewCollection = [],
iDiff = 0;
for (; iIndex < iLen; iIndex++) {
sUid = this.collection()[iIndex];
if (_.indexOf(aUids, sUid) === -1) {
aNewCollection.push(sUid);
} else {
iDiff++;
}
}
this.collection(aNewCollection);
this.resultCount(this.resultCount() - iDiff);
};
/**
* Clears data when cache should be cleared.
*/
CUidListModel.prototype.clearData = function () {
this.resultCount(-1);
this.collection([]);
};
module.exports = CUidListModel;
/***/ }),
/***/ "fcI1":
/*!*******************************************************!*\
!*** ./modules/MailWebclient/js/MainTabExtMethods.js ***!
\*******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Screens = __webpack_require__(/*! modules/CoreWebclient/js/Screens.js */ "D2Gh"),
Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "ioSH"),
MailUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Mail.js */ "Panx"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8"),
aComposedMessages = [],
aReplyData = [];
if (App.isNewTab()) {
var SlaveTabMailMethods = {
getEditedDraftUid: function getEditedDraftUid() {
return MailCache.editedDraftUid();
}
};
window.SlaveTabMailMethods = SlaveTabMailMethods;
module.exports = {};
} else {
var MainTabMailMethods = {
showReport: function showReport(sText) {
Screens.showReport(sText);
},
getAccountList: function getAccountList() {
return AccountList;
},
getFolderListItems: function getFolderListItems() {
return MailCache.oFolderListItems;
},
getUidList: function getUidList() {
return MailCache.uidList();
},
getComposedMessageAccountId: function getComposedMessageAccountId(sWindowName) {
var oComposedMessage = aComposedMessages[sWindowName];
return oComposedMessage ? oComposedMessage.accountId : 0;
},
getComposedMessage: function getComposedMessage(sWindowName) {
var oComposedMessage = aComposedMessages[sWindowName];
delete aComposedMessages[sWindowName];
return oComposedMessage;
},
removeOneMessageFromCacheForFolder: function removeOneMessageFromCacheForFolder(iAccountId, sDraftFolder, sDraftUid) {
MailCache.removeOneMessageFromCacheForFolder(iAccountId, sDraftFolder, sDraftUid);
},
replaceHashWithoutMessageUid: function replaceHashWithoutMessageUid(sDraftUid) {
Routing.replaceHashWithoutMessageUid(sDraftUid);
},
startMessagesLoadingWhenDraftSaving: function startMessagesLoadingWhenDraftSaving(iAccountId, sDraftFolder) {
MailCache.startMessagesLoadingWhenDraftSaving(iAccountId, sDraftFolder);
},
removeMessagesFromCacheForFolder: function removeMessagesFromCacheForFolder(iAccountID, sSentFolder) {
MailCache.removeMessagesFromCacheForFolder(iAccountID, sSentFolder);
},
searchMessagesInCurrentFolder: function searchMessagesInCurrentFolder(sSearch) {
MailCache.searchMessagesInCurrentFolder(sSearch);
},
getReplyData: function getReplyData(sUid) {
var oReplyData = aReplyData[sUid];
delete aReplyData[sUid];
return oReplyData;
},
deleteMessage: function deleteMessage(sUid, fAfterDelete) {
MailUtils.deleteMessages([sUid], fAfterDelete);
}
};
window.MainTabMailMethods = MainTabMailMethods;
module.exports = {
passReplyData: function passReplyData(sUid, oReplyData) {
aReplyData[sUid] = oReplyData;
},
passComposedMessage: function passComposedMessage(sWinName, oComposedMessage) {
aComposedMessages[sWinName] = oComposedMessage;
}
};
}
/***/ }),
/***/ "gbYw":
/*!************************************************************!*\
!*** ./modules/MailWebclient/js/views/CColorPickerView.js ***!
\************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
$ = __webpack_require__(/*! jquery */ "M4cL");
/**
* @constructor
* @param {string} sCaption
* @param {Function} fPickHandler
* @param {Object} oPickContext
*/
function CColorPickerView(sCaption, fPickHandler, oPickContext) {
this.aGreyColors = ['rgb(0, 0, 0)', 'rgb(68, 68, 68)', 'rgb(102, 102, 102)', 'rgb(153, 153, 153)', 'rgb(204, 204, 204)', 'rgb(238, 238, 238)', 'rgb(243, 243, 243)', 'rgb(255, 255, 255)'];
this.aBrightColors = ['rgb(255, 0, 0)', 'rgb(255, 153, 0)', 'rgb(255, 255, 0)', 'rgb(0, 255, 0)', 'rgb(0, 255, 255)', 'rgb(0, 0, 255)', 'rgb(153, 0, 255)', 'rgb(255, 0, 255)'];
this.aColorLines = [['rgb(244, 204, 204)', 'rgb(252, 229, 205)', 'rgb(255, 242, 204)', 'rgb(217, 234, 211)', 'rgb(208, 224, 227)', 'rgb(207, 226, 243)', 'rgb(217, 210, 233)', 'rgb(234, 209, 220)'], ['rgb(234, 153, 153)', 'rgb(249, 203, 156)', 'rgb(255, 229, 153)', 'rgb(182, 215, 168)', 'rgb(162, 196, 201)', 'rgb(159, 197, 232)', 'rgb(180, 167, 214)', 'rgb(213, 166, 189)'], ['rgb(224, 102, 102)', 'rgb(246, 178, 107)', 'rgb(255, 217, 102)', 'rgb(147, 196, 125)', 'rgb(118, 165, 175)', 'rgb(111, 168, 220)', 'rgb(142, 124, 195)', 'rgb(194, 123, 160)'], ['rgb(204, 0, 0)', 'rgb(230, 145, 56)', 'rgb(241, 194, 50)', 'rgb(106, 168, 79)', 'rgb(69, 129, 142)', 'rgb(61, 133, 198)', 'rgb(103, 78, 167)', 'rgb(166, 77, 121)'], ['rgb(153, 0, 0)', 'rgb(180, 95, 6)', 'rgb(191, 144, 0)', 'rgb(56, 118, 29)', 'rgb(19, 79, 92)', 'rgb(11, 83, 148)', 'rgb(53, 28, 117)', 'rgb(116, 27, 71)'], ['rgb(102, 0, 0)', 'rgb(120, 63, 4)', 'rgb(127, 96, 0)', 'rgb(39, 78, 19)', 'rgb(12, 52, 61)', 'rgb(7, 55, 99)', 'rgb(32, 18, 77)', 'rgb(76, 17, 48)']];
this.caption = sCaption;
this.pickHandler = fPickHandler;
this.pickContext = oPickContext;
this.colorPickerDom = ko.observable(null);
}
CColorPickerView.prototype.ViewTemplate = 'MailWebclient_ColorPickerView';
CColorPickerView.prototype.onShow = function () {
$(this.colorPickerDom()).find('span.color-item').on('click', _.bind(function (oEv) {
oEv.stopPropagation();
this.setColorFromPopup($(oEv.target).data('color'));
}, this));
};
/**
* @param {string} sColor
*/
CColorPickerView.prototype.setColorFromPopup = function (sColor) {
this.pickHandler.call(this.pickContext, sColor);
};
module.exports = CColorPickerView;
/***/ }),
/***/ "jqos":
/*!**********************************************************!*\
!*** ./modules/CoreWebclient/js/models/CAddressModel.js ***!
\**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ko = __webpack_require__(/*! knockout */ "p09A"),
AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "rBrp"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9");
/**
* @constructor
*/
function CAddressModel() {
this.sName = '';
/** @type {string} */
this.sEmail = '';
this.sDisplay = '';
this.sFull = '';
this.loaded = ko.observable(false);
this.found = ko.observable(false);
}
/**
* @param {Object} oData
*/
CAddressModel.prototype.parse = function (oData) {
if (oData !== null) {
this.sName = Types.pString(oData.DisplayName);
this.sEmail = Types.pString(oData.Email);
this.sDisplay = this.sName.length > 0 ? this.sName : this.sEmail;
this.sFull = AddressUtils.getFullEmail(this.sName, this.sEmail);
}
};
/**
* @return {string}
*/
CAddressModel.prototype.getEmail = function () {
return this.sEmail;
};
/**
* @return {string}
*/
CAddressModel.prototype.getName = function () {
return this.sName;
};
/**
* @return {string}
*/
CAddressModel.prototype.getDisplay = function () {
return this.sDisplay;
};
/**
* @return {string}
*/
CAddressModel.prototype.getFull = function () {
return this.sFull;
};
module.exports = CAddressModel;
/***/ }),
/***/ "lZd5":
/*!**************************************************************!*\
!*** ./modules/CoreWebclient/js/models/CAddressListModel.js ***!
\**************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
CAddressModel = __webpack_require__(/*! modules/CoreWebclient/js/models/CAddressModel.js */ "jqos");
/**
* @constructor
*/
function CAddressListModel() {
this.aCollection = [];
}
/**
* @param {object} oData
*/
CAddressListModel.prototype.parse = function (oData) {
var aCollection = oData ? oData['@Collection'] : [];
this.aCollection = [];
if (_.isArray(aCollection)) {
this.aCollection = _.map(aCollection, function (oItem) {
var oAddress = new CAddressModel();
oAddress.parse(oItem);
return oAddress;
});
}
};
/**
* @param {Array} aCollection
*/
CAddressListModel.prototype.addCollection = function (aCollection) {
_.each(aCollection, function (oAddress) {
var oFoundAddress = _.find(this.aCollection, function (oThisAddress) {
return oAddress.sEmail === oThisAddress.sEmail;
});
if (!oFoundAddress) {
this.aCollection.push(oAddress);
}
}, this);
};
/**
* @param {Array} aCollection
*/
CAddressListModel.prototype.excludeCollection = function (aCollection) {
_.each(aCollection, function (oAddress) {
this.aCollection = _.filter(this.aCollection, function (oThisAddress) {
return oAddress.sEmail.toLowerCase() !== oThisAddress.sEmail.toLowerCase();
});
}, this);
};
/**
* @return {string}
*/
CAddressListModel.prototype.getFirstEmail = function () {
if (this.aCollection.length > 0) {
return this.aCollection[0].getEmail();
}
return '';
};
/**
* @return {string}
*/
CAddressListModel.prototype.getFirstName = function () {
if (this.aCollection.length > 0) {
return this.aCollection[0].getName();
}
return '';
};
/**
* @return {string}
*/
CAddressListModel.prototype.getFirstDisplay = function () {
if (this.aCollection.length > 0) {
return this.aCollection[0].getDisplay();
}
return '';
};
/**
* @param {string=} sMeReplacement
* @param {string=} sMyAccountEmail
*
* @return {string}
*/
CAddressListModel.prototype.getDisplay = function (sMeReplacement, sMyAccountEmail) {
var aAddresses = _.map(this.aCollection, function (oAddress) {
if (sMeReplacement && sMyAccountEmail === oAddress.sEmail) {
return sMeReplacement;
}
return oAddress.getDisplay(sMeReplacement);
});
return aAddresses.join(', ');
};
/**
* @return {string}
*/
CAddressListModel.prototype.getFull = function () {
var aAddresses = _.map(this.aCollection, function (oAddress) {
return oAddress.getFull();
});
return aAddresses.join(', ');
};
/**
* @return {Array}
*/
CAddressListModel.prototype.getEmails = function () {
var aEmails = _.map(this.aCollection, function (oAddress) {
return oAddress.getEmail();
});
return aEmails;
};
module.exports = CAddressListModel;
/***/ }),
/***/ "njx6":
/*!********************************************************!*\
!*** ./modules/MailWebclient/js/utils/PopupCompose.js ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
LinksUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Links.js */ "dpSB"),
PopupComposeUtils = {};
function GetComposePopup() {
return __webpack_require__(/*! modules/MailWebclient/js/popups/ComposePopup.js */ "v4rC");
}
PopupComposeUtils.composeMessage = function () {
Popups.showPopup(GetComposePopup());
};
/**
* @param {int} iAccountId
* @param {string} sFolder
* @param {string} sUid
*/
PopupComposeUtils.composeMessageFromDrafts = function (iAccountId, sFolder, sUid) {
var aParams = LinksUtils.getComposeFromMessage('drafts', iAccountId, sFolder, sUid);
aParams.shift();
Popups.showPopup(GetComposePopup(), [aParams]);
};
/**
* @param {string} sReplyType
* @param {int} iAccountId
* @param {string} sFolder
* @param {string} sUid
*/
PopupComposeUtils.composeMessageAsReplyOrForward = function (sReplyType, iAccountId, sFolder, sUid) {
var aParams = LinksUtils.getComposeFromMessage(sReplyType, iAccountId, sFolder, sUid);
aParams.shift();
Popups.showPopup(GetComposePopup(), [aParams]);
};
/**
* @param {string} sToAddresses
*/
PopupComposeUtils.composeMessageToAddresses = function (sToAddresses) {
var aParams = LinksUtils.getComposeWithToField(sToAddresses);
aParams.shift();
Popups.showPopup(GetComposePopup(), [aParams]);
};
PopupComposeUtils.composeMessageWithData = function (oData) {
var aParams = LinksUtils.getComposeWithData(oData);
aParams.shift();
Popups.showPopup(GetComposePopup(), [aParams]);
};
/**
* @param {Object} oMessage
*/
PopupComposeUtils.composeMessageWithEml = function (oMessage) {
var aParams = LinksUtils.getComposeWithEmlObject(oMessage.accountId(), oMessage.folder(), oMessage.longUid(), oMessage);
aParams.shift();
Popups.showPopup(GetComposePopup(), [aParams]);
};
/**
* @param {Array} aFileItems
*/
PopupComposeUtils.composeMessageWithAttachments = function (aFileItems) {
var aParams = LinksUtils.getComposeWithObject('attachments', aFileItems);
aParams.shift();
Popups.showPopup(GetComposePopup(), [aParams]);
};
PopupComposeUtils.closeComposePopup = function (iAccountId) {
var ComposePopup = GetComposePopup();
if (ComposePopup.opened() && (!iAccountId || ComposePopup.senderAccountId() === iAccountId)) {
Popups.showPopup(ComposePopup, [['close']]);
}
};
module.exports = PopupComposeUtils;
/***/ }),
/***/ "p5xg":
/*!*******************************************************************************!*\
!*** ./modules/MailWebclient/js/popups/ConfirmAnotherMessageComposedPopup.js ***!
\*******************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
CAbstractPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/CAbstractPopup.js */ "69av");
/**
* @constructor
*/
function CConfirmAnotherMessageComposedPopup() {
CAbstractPopup.call(this);
this.fConfirmCallback = null;
this.shown = false;
}
_.extendOwn(CConfirmAnotherMessageComposedPopup.prototype, CAbstractPopup.prototype);
CConfirmAnotherMessageComposedPopup.prototype.PopupTemplate = 'MailWebclient_ConfirmAnotherMessageComposedPopup';
/**
* @param {Function} fConfirmCallback
*/
CConfirmAnotherMessageComposedPopup.prototype.onOpen = function (fConfirmCallback) {
this.fConfirmCallback = _.isFunction(fConfirmCallback) ? fConfirmCallback : null;
this.shown = true;
};
CConfirmAnotherMessageComposedPopup.prototype.onClose = function () {
this.shown = false;
};
CConfirmAnotherMessageComposedPopup.prototype.onDiscardClick = function () {
if (this.shown && this.fConfirmCallback) {
this.fConfirmCallback(Enums.AnotherMessageComposedAnswer.Discard);
}
this.closePopup();
};
CConfirmAnotherMessageComposedPopup.prototype.onSaveAsDraftClick = function () {
if (this.shown && this.fConfirmCallback) {
this.fConfirmCallback(Enums.AnotherMessageComposedAnswer.SaveAsDraft);
}
this.closePopup();
};
CConfirmAnotherMessageComposedPopup.prototype.cancelPopup = function () {
if (this.fConfirmCallback) {
this.fConfirmCallback(Enums.AnotherMessageComposedAnswer.Cancel);
}
this.closePopup();
};
CConfirmAnotherMessageComposedPopup.prototype.onEnterHandler = function () {
this.onSaveAsDraftClick();
};
module.exports = new CConfirmAnotherMessageComposedPopup();
/***/ }),
/***/ "qG1F":
/*!************************************************!*\
!*** ./modules/MailWebclient/js/Prefetcher.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
UserSettings = __webpack_require__(/*! modules/CoreWebclient/js/Settings.js */ "KIwC"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8"),
Prefetcher = {},
bFetchersIdentitiesPrefetched = false;
Prefetcher.prefetchFolderLists = function () {
if (AccountList.unifiedInboxAllowed() && !AccountList.unifiedInboxReady()) {
var oAccount = _.find(AccountList.collection(), function (oAcct) {
return oAcct.includeInUnifiedMailbox() && !MailCache.oFolderListItems[oAcct.id()];
}, this);
if (oAccount) {
MailCache.getFolderList(oAccount.id());
return true;
} else {
AccountList.unifiedInboxReady(true);
}
}
return false;
};
Prefetcher.prefetchFetchersIdentities = function () {
if (!App.isNewTab() && !bFetchersIdentitiesPrefetched && (Settings.AllowFetchers || Settings.AllowIdentities)) {
AccountList.populateFetchersIdentities();
bFetchersIdentitiesPrefetched = true;
return true;
}
return false;
};
Prefetcher.prefetchAccountFilters = function () {
var oAccount = AccountList.getCurrent(),
bFiltersRequested = false;
if (oAccount && oAccount.allowFilters() && !oAccount.filters()) {
oAccount.requestFilters();
bFiltersRequested = true;
}
return bFiltersRequested;
};
/**
* Prefetches message list with specified parameters. Checks if this list have already prefetched earlier.
* @param {Object} oFolder
* @param {number} iPage
* @param {string} sSearch
* @param {string} sFilters
* @returns {Boolean}
*/
Prefetcher.prefetchMessageList = function (oFolder, iPage, sSearch, sFilters) {
var oParams = {
page: iPage,
search: sSearch,
filters: sFilters
},
bDoNotRequest = oFolder.hasListBeenRequested(oParams),
oRequestData = null;
oRequestData = MailCache.requestMessageList(oFolder.fullName(), oParams.page, oParams.search, oParams.filters, Settings.MessagesSortBy.DefaultSortBy, Settings.MessagesSortBy.DefaultSortOrder, false, false, bDoNotRequest);
return !bDoNotRequest && !!oRequestData && oRequestData.RequestStarted;
};
Prefetcher.prefetchStarredMessageList = function () {
var oFolderList = MailCache.folderList(),
oInbox = oFolderList ? oFolderList.inboxFolder() : null,
bRequestStarted = false;
if (oInbox) {
bRequestStarted = this.prefetchMessageList(oInbox, 1, '', Enums.FolderFilter.Flagged);
}
return bRequestStarted;
};
Prefetcher.prefetchUnseenMessageList = function () {
var oFolderList = MailCache.folderList(),
oInbox = oFolderList ? oFolderList.inboxFolder() : null,
bRequestStarted = false;
if (oInbox) {
bRequestStarted = this.prefetchMessageList(oInbox, 1, '', Enums.FolderFilter.Unseen);
}
return bRequestStarted;
};
/**
* @param {number} iMessageIndex
*/
Prefetcher.prefetchNextPage = function (iMessageIndex) {
var iPage = Math.ceil(iMessageIndex / Settings.MailsPerPage) + 1;
this.startPagePrefetch(iPage - 1);
};
/**
* @param {number} iMessageIndex
*/
Prefetcher.prefetchPrevPage = function (iMessageIndex) {
var iPage = Math.ceil((iMessageIndex + 1) / Settings.MailsPerPage) + 1;
this.startPagePrefetch(iPage);
};
/**
* @param {number} iPage
*/
Prefetcher.startPagePrefetch = function (iPage) {
var oCurrFolder = MailCache.getCurrentFolder(),
oUidList = MailCache.uidList(),
iOffset = (iPage - 1) * Settings.MailsPerPage,
bPageExists = iPage > 0 && iOffset < oUidList.resultCount(),
bRequestStarted = false;
if (oCurrFolder && !oCurrFolder.hasChanges() && bPageExists) {
bRequestStarted = this.prefetchMessageList(oCurrFolder, iPage, oUidList.search(), '');
}
return bRequestStarted;
};
Prefetcher.startUnifiedInboxPrefetch = function () {
if (AccountList.unifiedInboxReady()) {
return this.startFolderPrefetch(MailCache.oUnifiedInbox);
}
return false;
};
Prefetcher.startOtherFoldersPrefetch = function () {
var oFolderList = MailCache.folderList(),
sCurrFolder = oFolderList.currentFolderFullName(),
aFoldersFromAccount = MailCache.getNamesOfFoldersToRefresh(MailCache.currentAccountId()),
aSystemFolders = oFolderList ? [oFolderList.inboxFolderFullName(), oFolderList.sentFolderFullName(), oFolderList.draftsFolderFullName(), oFolderList.spamFolderFullName()] : [],
aOtherFolders = aFoldersFromAccount.length < 5 ? this.getOtherFolderNames(5 - aFoldersFromAccount.length) : [],
aFolders = _.uniq(_.compact(_.union(aSystemFolders, aFoldersFromAccount, aOtherFolders))),
bPrefetchStarted = false;
_.each(aFolders, _.bind(function (sFolder) {
if (!bPrefetchStarted && sCurrFolder !== sFolder) {
bPrefetchStarted = this.startFolderPrefetch(oFolderList.getFolderByFullName(sFolder));
}
}, this));
return bPrefetchStarted;
};
/**
* @param {number} iCount
* @returns {Array}
*/
Prefetcher.getOtherFolderNames = function (iCount) {
var oInbox = MailCache.folderList().inboxFolder(),
aInboxSubFolders = oInbox ? oInbox.subfolders() : [],
aOtherFolders = _.filter(MailCache.folderList().collection(), function (oFolder) {
return !oFolder.isSystem();
}, this),
aFolders = _.first(_.union(aInboxSubFolders, aOtherFolders), iCount);
return _.map(aFolders, function (oFolder) {
return oFolder.fullName();
});
};
/**
* @param {Object} oFolder
*/
Prefetcher.startFolderPrefetch = function (oFolder) {
var bRequestStarted = false;
if (oFolder) {
bRequestStarted = this.prefetchMessageList(oFolder, 1, '', '');
}
return bRequestStarted;
};
Prefetcher.startThreadListPrefetch = function () {
var bPrefetchStarted = false,
oUidsForLoad = {};
_.each(MailCache.messages(), function (oCacheMess) {
if (oCacheMess && oCacheMess.threadCount && oCacheMess.threadCount() > 0) {
var iAccountId = oCacheMess.accountId(),
sFolderFullName = oCacheMess.folder(),
oFolder = MailCache.getFolderByFullName(iAccountId, sFolderFullName),
sFolderId = iAccountId + ':' + sFolderFullName;
if (!oUidsForLoad[sFolderId]) {
oUidsForLoad[sFolderId] = {
oFolder: oFolder,
aUids: []
};
}
_.each(oCacheMess.threadUids(), function (sThreadUid) {
if (!oFolder.hasThreadUidBeenRequested(sThreadUid)) {
oUidsForLoad[sFolderId].aUids.push(sThreadUid);
}
});
}
}, this);
_.each(oUidsForLoad, function (oUidsData, sFolderId) {
var oFolder = oUidsData.oFolder,
aUids = oUidsData.aUids;
if (oFolder && aUids.length > 0) {
aUids = aUids.slice(0, Settings.MailsPerPage);
oFolder.addRequestedThreadUids(aUids);
oFolder.loadThreadMessages(aUids);
bPrefetchStarted = true;
}
});
return bPrefetchStarted;
};
Prefetcher.startMessagesPrefetch = function (oFolder) {
var oPrefetchFolder = oFolder ? oFolder : MailCache.getCurrentFolder(),
bPrefetchStarted = false;
if (oPrefetchFolder) {
if (oPrefetchFolder.bIsUnifiedInbox) {
_.each(AccountList.unifiedMailboxAccounts(), function (oAccount) {
var oInbox = MailCache.oUnifiedInbox.getUnifiedInbox(oAccount.id());
if (oInbox) {
bPrefetchStarted = bPrefetchStarted || this.startMessagesPrefetchForFolder(oInbox, MailCache.oUnifiedInbox.selected());
}
}, this);
} else {
bPrefetchStarted = this.startMessagesPrefetchForFolder(oPrefetchFolder, oPrefetchFolder.selected());
}
}
return bPrefetchStarted;
};
Prefetcher.startMessagesPrefetchForFolder = function (oPrefetchFolder, bFolderSelected) {
var iTotalSize = 0,
iMaxSize = Settings.MaxMessagesBodiesSizeToPrefetch,
aUids = [],
oParameters = null,
iJsonSizeOf1Message = 2048,
fFillUids = function fFillUids(oMsg) {
if (oMsg && _.isFunction(oMsg.uid)) {
var
// might be not from this folder for unified inbox or multi search
bFromThisFolder = oMsg.accountId() === oPrefetchFolder.iAccountId && oMsg.folder() === oPrefetchFolder.fullName(),
bNotFilled = !oMsg.deleted() && !oMsg.completelyFilled(),
bUidNotAdded = !_.find(aUids, function (sUid) {
return sUid === oMsg.uid();
}, this),
bHasNotBeenRequested = !oPrefetchFolder.hasUidBeenRequested(oMsg.uid()),
iTextSize = oMsg.textSize() < Settings.MessageBodyTruncationThreshold ? oMsg.textSize() : Settings.MessageBodyTruncationThreshold;
if (iTotalSize < iMaxSize && bFromThisFolder && bNotFilled && bUidNotAdded && bHasNotBeenRequested) {
aUids.push(oMsg.uid());
iTotalSize += iTextSize + iJsonSizeOf1Message;
}
}
};
if (oPrefetchFolder) {
if (bFolderSelected) {
_.each(MailCache.messages(), fFillUids);
}
oPrefetchFolder.doForAllMessages(fFillUids);
if (aUids.length > 0) {
oPrefetchFolder.addRequestedUids(aUids);
oParameters = {
'AccountID': oPrefetchFolder.iAccountId,
'Folder': oPrefetchFolder.fullName(),
'Uids': aUids,
'MessageBodyTruncationThreshold': Settings.MessageBodyTruncationThreshold
};
Ajax.send('GetMessagesBodies', oParameters, this.onGetMessagesBodiesResponse, this);
return true;
}
}
return false;
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
*/
Prefetcher.onGetMessagesBodiesResponse = function (oResponse, oRequest) {
var oParameters = oRequest.Parameters,
oFolder = MailCache.getFolderByFullName(oParameters.AccountID, oParameters.Folder);
if (_.isArray(oResponse.Result)) {
_.each(oResponse.Result, function (oRawMessage) {
oFolder.parseAndCacheMessage(oRawMessage, false, false);
});
App.broadcastEvent('MailWebclient::ParseMessagesBodies::after', {
AccountID: oParameters.AccountID,
Folder: oParameters.Folder
});
}
};
Prefetcher.prefetchAccountQuota = function () {
var oAccount = AccountList.getCurrent(),
bNeedQuotaRequest = oAccount && !oAccount.quotaRecieved();
if (UserSettings.ShowQuotaBar && bNeedQuotaRequest) {
oAccount.updateQuotaParams();
return true;
}
return false;
};
/**
* Prefetches templates folder.
*/
Prefetcher.prefetchTemplateFolder = function () {
var oFolderList = MailCache.folderList(),
sTemplateFolder = MailCache.getTemplateFolder();
if (sTemplateFolder !== '') {
return this.startFolderPrefetch(oFolderList.getFolderByFullName(sTemplateFolder));
}
return false;
};
/**
* Prefetches template messages bodies.
*/
Prefetcher.prefetchTemplateMessages = function () {
var oFolderList = MailCache.folderList(),
sTemplateFolder = MailCache.getTemplateFolder(),
oTemplateFolder = sTemplateFolder ? oFolderList.getFolderByFullName(sTemplateFolder) : null;
if (oTemplateFolder) {
return this.startMessagesPrefetch(oTemplateFolder);
}
};
module.exports = {
startMin: function startMin() {
var bPrefetchStarted = false;
bPrefetchStarted = Prefetcher.prefetchFetchersIdentities();
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchFolderLists();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchTemplateFolder();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchTemplateMessages();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchAccountFilters();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchStarredMessageList();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchAccountQuota();
}
return bPrefetchStarted;
},
startAll: function startAll() {
var bPrefetchStarted = false;
bPrefetchStarted = Prefetcher.prefetchFetchersIdentities();
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchFolderLists();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchTemplateFolder();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchTemplateMessages();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchAccountFilters();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.startMessagesPrefetch();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.startThreadListPrefetch();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchStarredMessageList();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.startPagePrefetch(MailCache.page() + 1);
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.startPagePrefetch(MailCache.page() - 1);
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchUnseenMessageList();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.prefetchAccountQuota();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.startUnifiedInboxPrefetch();
}
if (!bPrefetchStarted) {
bPrefetchStarted = Prefetcher.startOtherFoldersPrefetch();
}
return bPrefetchStarted;
},
prefetchStarredMessageList: function prefetchStarredMessageList() {
Prefetcher.prefetchStarredMessageList();
},
prefetchFolderLists: function prefetchFolderLists() {
return Prefetcher.prefetchFolderLists();
},
startFolderPrefetch: function startFolderPrefetch(oFolder) {
Prefetcher.startFolderPrefetch(oFolder);
},
prefetchNextPage: function prefetchNextPage(sCurrentUid) {
Prefetcher.prefetchNextPage(sCurrentUid);
},
prefetchPrevPage: function prefetchPrevPage(sCurrentUid) {
Prefetcher.prefetchPrevPage(sCurrentUid);
}
};
/***/ }),
/***/ "sHZb":
/*!**********************************************************!*\
!*** ./modules/MailWebclient/js/models/CFiltersModel.js ***!
\**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
ko = __webpack_require__(/*! knockout */ "p09A"),
CFilterModel = __webpack_require__(/*! modules/MailWebclient/js/models/CFilterModel.js */ "0HIo");
/**
* @constructor
*/
function CFiltersModel() {
this.iAccountId = 0;
this.collection = ko.observableArray([]);
}
/**
* @param {number} iAccountId
* @param {Object} oData
*/
CFiltersModel.prototype.parse = function (iAccountId, oData) {
var iIndex = 0,
iLen = oData.length,
oSieveFilter = null;
this.iAccountId = iAccountId;
if (_.isArray(oData)) {
for (iLen = oData.length; iIndex < iLen; iIndex++) {
oSieveFilter = new CFilterModel(iAccountId);
oSieveFilter.parse(oData[iIndex]);
this.collection.push(oSieveFilter);
}
}
};
module.exports = CFiltersModel;
/***/ }),
/***/ "sXLm":
/*!***************************************************!*\
!*** ./modules/MailWebclient/js/utils/Compose.js ***!
\***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
ComposeUtils = App.isMobile() || App.isNewTab() ? __webpack_require__(/*! modules/MailWebclient/js/utils/ScreenCompose.js */ "J08i") : __webpack_require__(/*! modules/MailWebclient/js/utils/PopupCompose.js */ "njx6");
module.exports = ComposeUtils;
/***/ }),
/***/ "slJ3":
/*!********************************************************!*\
!*** ./modules/MailWebclient/js/models/CAliasModel.js ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ko = __webpack_require__(/*! knockout */ "p09A"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "uQaC"),
AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "rBrp");
/**
* @constructor
*/
function CAliasModel() {
this.ALIAS = true; // constant
this.email = ko.observable('');
this.friendlyName = ko.observable('');
this.fullEmail = ko.computed(function () {
return AddressUtils.getFullEmail(this.friendlyName(), this.email());
}, this);
this.accountId = ko.observable(-1);
this.id = ko.observable(-1);
this.signature = ko.observable('');
this.useSignature = ko.observable(false);
this.hash = ko.computed(function () {
return Utils.getHash(this.accountId() + 'alias' + this.id());
}, this);
}
/**
* @param {Object} oData
*/
CAliasModel.prototype.parse = function (oData) {
this.email(Types.pString(oData.Email));
this.friendlyName(Types.pString(oData.FriendlyName));
this.accountId(Types.pInt(oData.IdAccount));
this.id(Types.pInt(oData.EntityId));
var sSignature = Types.pString(oData.Signature);
if (sSignature.indexOf('<') !== 0) {
sSignature = '<div>' + sSignature + '</div>';
}
this.signature = ko.observable(sSignature);
this.useSignature(!!oData.UseSignature);
};
module.exports = CAliasModel;
/***/ }),
/***/ "v4rC":
/*!*********************************************************!*\
!*** ./modules/MailWebclient/js/popups/ComposePopup.js ***!
\*********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
$ = __webpack_require__(/*! jquery */ "M4cL"),
ko = __webpack_require__(/*! knockout */ "p09A"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Browser = __webpack_require__(/*! modules/CoreWebclient/js/Browser.js */ "/Odb"),
Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "PMEU"),
CAbstractPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/CAbstractPopup.js */ "69av"),
ConfirmAnotherMessageComposedPopup = __webpack_require__(/*! modules/MailWebclient/js/popups/ConfirmAnotherMessageComposedPopup.js */ "p5xg"),
CComposeView = __webpack_require__(/*! modules/MailWebclient/js/views/CComposeView.js */ "Ssud");
/**
* @constructor
* @extends CComposePopup
*/
function CComposePopup() {
CAbstractPopup.call(this);
CComposeView.call(this);
this.minimized = ko.observable(false);
this.fPreventBackspace = function (ev) {
var bBackspace = ev.which === $.ui.keyCode.BACKSPACE,
bInput = ev.target.tagName === 'INPUT' || ev.target.tagName === 'TEXTAREA',
bEditableDiv = ev.target.tagName === 'DIV' && $(ev.target).attr('contenteditable') === 'true';
if (bBackspace && !bInput && !bEditableDiv) {
ev.preventDefault();
ev.stopPropagation();
}
};
this.minimized.subscribe(function () {
if (this.minimized()) {
this.preventBackspaceOff();
} else if (this.shown()) {
this.preventBackspaceOn();
}
}, this);
this.minimizedTitle = ko.computed(function () {
return this.subject() || TextUtils.i18n('MAILWEBCLIENT/HEADING_MINIMIZED_NEW_MESSAGE');
}, this);
}
_.extendOwn(CComposePopup.prototype, CAbstractPopup.prototype);
_.extendOwn(CComposePopup.prototype, CComposeView.prototype);
CComposePopup.prototype.PopupTemplate = 'MailWebclient_ComposePopup';
CComposePopup.prototype.preventBackspaceOn = function () {
$(document).on('keydown', this.fPreventBackspace);
};
CComposePopup.prototype.preventBackspaceOff = function () {
$(document).off('keydown', this.fPreventBackspace);
};
CComposePopup.prototype.onClose = function () {
this.preventBackspaceOff();
this.minimized(false);
};
/**
* @param {Array} aParams
*/
CComposePopup.prototype.onOpen = function (aParams) {
aParams = aParams || [];
if (aParams.length === 1 && aParams[0] === 'close') {
this.closePopup();
} else {
var bOpeningSameDraft = aParams.length === 3 && aParams[0] === 'drafts' && aParams[2] === this.draftUid(),
bWasMinimized = this.minimized();
this.maximize();
if (this.shown() || bWasMinimized) {
if (aParams.length > 0 && !bOpeningSameDraft) {
if (this.hasUnsavedChanges()) {
this.disableAutosave(true);
Popups.showPopup(ConfirmAnotherMessageComposedPopup, [_.bind(function (sAnswer) {
switch (sAnswer) {
case Enums.AnotherMessageComposedAnswer.Discard:
this.onRoute(aParams);
break;
case Enums.AnotherMessageComposedAnswer.SaveAsDraft:
if (this.hasUnsavedChanges()) {
this.executeSave(true, false);
}
this.onRoute(aParams);
break;
case Enums.AnotherMessageComposedAnswer.Cancel:
break;
}
this.disableAutosave(false);
}, this)]);
} else {
this.onRoute(aParams);
}
} else if (!bWasMinimized) {
this.onRoute(aParams);
}
this.oHtmlEditor.clearUndoRedo();
} else {
this.onRoute(aParams);
}
this.preventBackspaceOn();
}
};
CComposePopup.prototype.minimize = function () {
this.minimized(true);
if (this.$popupDom) {
this.$popupDom.addClass('minimized');
}
};
CComposePopup.prototype.maximize = function () {
this.minimized(false);
if (this.$popupDom) {
this.$popupDom.removeClass('minimized');
}
};
CComposePopup.prototype.saveAndClose = function () {
if (this.hasUnsavedChanges()) {
this.saveCommand();
}
// closePopup method will remove the entire popup so click event for span.item.save_and_close won't be fired and tooltip won't be hidden.
// So we postpone it for a bit.
setTimeout(this.closePopup.bind(this), 0);
};
CComposePopup.prototype.cancelPopup = function () {
if (this.hasUnsavedChanges()) {
this.minimize();
} else {
this.closePopup();
}
};
/**
* @param {Object} oEvent
*/
CComposePopup.prototype.onEscHandler = function (oEvent) {
var bHtmlEditorHasOpenedPopup = this.oHtmlEditor.hasOpenedPopup(),
bOnFileInput = !Browser.ie && oEvent.target && oEvent.target.tagName.toLowerCase() === 'input' && oEvent.target.type.toLowerCase() === 'file';
if (bOnFileInput) {
oEvent.target.blur();
}
if (Popups.hasOnlyOneOpenedPopup() && !bHtmlEditorHasOpenedPopup && !bOnFileInput) {
this.minimize();
}
if (bHtmlEditorHasOpenedPopup) {
this.oHtmlEditor.closeAllPopups();
}
};
module.exports = new CComposePopup();
/***/ }),
/***/ "wXcN":
/*!***************************************************!*\
!*** ./modules/MailWebclient/js/utils/Message.js ***!
\***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
$ = __webpack_require__(/*! jquery */ "M4cL"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
MessageUtils = {};
/**
* Displays embedded images, which have cid on the list.
*
* @param {object} $html JQuery element containing message body html
* @param {array} aAttachments Array of objects having fields
* - CID
* - ContentLocation
* - ViewLink
* @param {array} aFoundCids Array of string cids
* @param {string=} sAppPath = '' Path to be connected to the ViewLink of every attachment
*/
MessageUtils.showInlinePictures = function ($html, aAttachments, aFoundCids, sAppPath) {
var fFindAttachmentByCid = function fFindAttachmentByCid(sCid) {
return _.find(aAttachments, function (oAttachment) {
return oAttachment.CID === sCid;
});
},
fFindAttachmentByContentLocation = function fFindAttachmentByContentLocation(sContentLocation) {
return _.find(aAttachments, function (oAttachment) {
return oAttachment.ContentLocation === sContentLocation;
});
};
if (typeof sAppPath !== 'string') {
sAppPath = '';
}
if (aFoundCids.length > 0) {
$('[data-x-src-cid]', $html).each(function () {
var sCid = $(this).attr('data-x-src-cid'),
oAttachment = fFindAttachmentByCid(sCid);
if (oAttachment && oAttachment.ViewLink.length > 0) {
$(this).attr('src', sAppPath + oAttachment.ViewLink);
}
});
$('[data-x-style-cid]', $html).each(function () {
var sStyle = '',
sName = $(this).attr('data-x-style-cid-name'),
sCid = $(this).attr('data-x-style-cid'),
oAttachment = fFindAttachmentByCid(sCid);
if (oAttachment && oAttachment.ViewLink.length > 0 && '' !== sName) {
sStyle = $.trim($(this).attr('style'));
sStyle = '' === sStyle ? '' : ';' === sStyle.substr(-1) ? sStyle + ' ' : sStyle + '; ';
$(this).attr('style', sStyle + sName + ': url(\'' + oAttachment.ViewLink + '\')');
}
});
}
$('[data-x-src-location]', $html).each(function () {
var sLocation = $(this).attr('data-x-src-location'),
oAttachment = fFindAttachmentByContentLocation(sLocation);
if (!oAttachment) {
oAttachment = fFindAttachmentByCid(sLocation);
}
if (oAttachment && oAttachment.ViewLink.length > 0) {
$(this).attr('src', sAppPath + oAttachment.ViewLink);
}
});
};
/**
* Displays external images.
*
* @param {object} $html JQuery element containing message body html
*/
MessageUtils.showExternalPictures = function ($html) {
$('[data-x-src]', $html).each(function () {
$(this).attr('src', $(this).attr('data-x-src')).removeAttr('data-x-src');
});
$('[data-x-style-url]', $html).each(function () {
var sStyle = $.trim($(this).attr('style'));
sStyle = '' === sStyle ? '' : ';' === sStyle.substr(-1) ? sStyle + ' ' : sStyle + '; ';
$(this).attr('style', sStyle + $(this).attr('data-x-style-url')).removeAttr('data-x-style-url');
});
};
/**
* Joins "Re" and "Fwd" prefixes in the message subject.
*
* @param {string} sSubject The message subject.
* @param {string} sRePrefix "Re" prefix translated into the language of the application.
* @param {string} sFwdPrefix "Fwd" prefix translated into the language of the application.
*/
MessageUtils.joinReplyPrefixesInSubject = function (sSubject, sRePrefix, sFwdPrefix) {
var aRePrefixes = [sRePrefix.toUpperCase()],
aFwdPrefixes = [sFwdPrefix.toUpperCase()],
sPrefixes = _.union(aRePrefixes, aFwdPrefixes).join('|'),
sReSubject = '',
aParts = sSubject.split(':'),
aResParts = [],
sSubjectEnd = '';
_.each(aParts, function (sPart) {
if (sSubjectEnd.length === 0) {
var sPartUpper = $.trim(sPart.toUpperCase()),
bRe = _.indexOf(aRePrefixes, sPartUpper) !== -1,
bFwd = _.indexOf(aFwdPrefixes, sPartUpper) !== -1,
iCount = 1,
oLastResPart = aResParts.length > 0 ? aResParts[aResParts.length - 1] : null;
if (!bRe && !bFwd) {
var oMatch = new window.RegExp('^\\s?(' + sPrefixes + ')\\s?[\\[\\(]([\\d]+)[\\]\\)]$', 'gi').exec(sPartUpper);
if (oMatch && oMatch.length === 3) {
bRe = _.indexOf(aRePrefixes, oMatch[1].toUpperCase()) !== -1;
bFwd = _.indexOf(aFwdPrefixes, oMatch[1].toUpperCase()) !== -1;
iCount = Types.pInt(oMatch[2]);
}
}
if (bRe) {
if (oLastResPart && oLastResPart.prefix === sRePrefix) {
oLastResPart.count += iCount;
} else {
aResParts.push({
prefix: sRePrefix,
count: iCount
});
}
} else if (bFwd) {
if (oLastResPart && oLastResPart.prefix === sFwdPrefix) {
oLastResPart.count += iCount;
} else {
aResParts.push({
prefix: sFwdPrefix,
count: iCount
});
}
} else {
sSubjectEnd = sPart;
}
} else {
sSubjectEnd += ':' + sPart;
}
});
_.each(aResParts, function (sResPart) {
if (sResPart.count === 1) {
sReSubject += sResPart.prefix + ': ';
} else {
sReSubject += sResPart.prefix + '[' + sResPart.count + ']: ';
}
});
sReSubject += $.trim(sSubjectEnd);
return sReSubject;
};
module.exports = MessageUtils;
/***/ }),
/***/ "y9oY":
/*!*******************************************!*\
!*** ./modules/MailWebclient/js/CCrea.js ***!
\*******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _ = __webpack_require__(/*! underscore */ "C3HO"),
$ = __webpack_require__(/*! jquery */ "M4cL");
var App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Browser = __webpack_require__(/*! modules/CoreWebclient/js/Browser.js */ "/Odb"),
ContenteditableUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Contenteditable.js */ "7VXH"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9");
var CreaUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Crea.js */ "ZXeO");
/**
* @constructor
*
* @param {Object} oOptions
*/
function CCrea(oOptions) {
this.oOptions = _.extend({
creaId: 'creaId',
fontNameArray: ['Tahoma'],
defaultFontName: 'Tahoma',
defaultFontSize: 3,
alwaysTryUseImageWhilePasting: true,
dropableArea: null,
isRtl: false,
onChange: function onChange() {},
onCursorMove: function onCursorMove() {},
onFocus: function onFocus() {},
onBlur: function onBlur() {},
onUrlIn: function onUrlIn() {},
onUrlOut: function onUrlOut() {},
onImageSelect: function onImageSelect() {},
onImageBlur: function onImageBlur() {},
onItemOver: null,
onItemOut: null,
openInsertLinkDialog: function openInsertLinkDialog() {},
onUrlClicked: false
}, typeof oOptions === 'undefined' ? {} : oOptions);
}
/**
* @type {Object}
*/
CCrea.prototype.oOptions = {};
/**
* @type {Object}
*/
CCrea.prototype.$container = null;
/**
* @type {Object}
*/
CCrea.prototype.$editableArea = null;
CCrea.prototype.aEditableAreaHtml = [];
CCrea.prototype.iUndoRedoPosition = 0;
CCrea.prototype.bEditable = false;
CCrea.prototype.bFocused = false;
/**
* @type {Array}
*/
CCrea.prototype.aSizes = [{
inNumber: 1,
inPixels: 10
}, {
inNumber: 2,
inPixels: 13
}, {
inNumber: 3,
inPixels: 16
}, {
inNumber: 4,
inPixels: 18
}, {
inNumber: 5,
inPixels: 24
}, {
inNumber: 6,
inPixels: 32
}, {
inNumber: 7,
inPixels: 48
}];
CCrea.prototype.bInUrl = false;
CCrea.prototype.oCurrLink = null;
CCrea.prototype.oCurrImage = null;
CCrea.prototype.bInImage = false;
CCrea.prototype.sBasicFontName = '';
CCrea.prototype.sBasicFontSize = '';
CCrea.prototype.sBasicDirection = '';
/**
* Creates editable area.
*
* @param {boolean} bEditable
*/
CCrea.prototype.start = function (bEditable) {
function isValidURL(sUrl) {
var oRegExp = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
return oRegExp.test(sUrl);
}
function isCorrectEmail(sValue) {
return !!sValue.match(/^[A-Z0-9\"!#\$%\^\{\}`~&'\+\-=_\.]+@[A-Z0-9\.\-]+$/i);
}
this.aRanges = null; // if this.aRanges is not null first focus doesn't work properly, then insert image doesn't work
this.$container = $('#' + this.oOptions.creaId);
this.$editableArea = $('<div></div>').addClass('crea-content-editable').prop('contentEditable', 'true').appendTo(this.$container);
var self = this;
this.$editableArea.on('focus', function () {
self.bFocused = true;
});
this.$editableArea.on('blur', function () {
self.bFocused = false;
//self.editableSave(); //Undo/Redo fix
});
this.$editableArea.on('click', 'img', function (ev) {
var oImage = $(this);
self.bInImage = true;
self.oCurrImage = oImage;
self.oOptions.onImageSelect(oImage, ev);
ev.stopPropagation();
});
this.$editableArea.on('click', function (ev) {
self.bInImage = false;
self.oCurrImage = null;
self.oOptions.onImageBlur();
});
if (self.oOptions.onItemOver !== null) {
this.$editableArea.on('mouseover', function (ev) {
self.oOptions.onItemOver(ev);
});
}
if (self.oOptions.onItemOver !== null) {
this.$editableArea.on('mouseout', function (ev) {
self.oOptions.onItemOut(ev);
});
}
this.$editableArea.on('cut paste', function () {
self.editableSave();
_.defer(function () {
self.editableSave();
});
});
this.$editableArea.on('paste', function (oEvent) {
oEvent = oEvent.originalEvent || oEvent;
if (oEvent.clipboardData) {
var sText = oEvent.clipboardData.getData('text/plain'),
sHtml = oEvent.clipboardData.getData('text/html');
if (self.oOptions.alwaysTryUseImageWhilePasting && self.pasteImage(oEvent)) {
oEvent.preventDefault();
} else {
if (isValidURL(sText)) {
oEvent.preventDefault();
self.execCom('insertHTML', '<a href="' + sText + '">' + sText.replaceAll('&', '&') + '</a>');
} else if (isCorrectEmail(sText)) {
oEvent.preventDefault();
self.execCom('insertHTML', '<a href="mailto:' + sText + '">' + sText.replaceAll('&', '&') + '</a>');
} else if (sHtml !== '') {
var preparedHtml = CreaUtils.preparePastedHtml(sHtml);
if (preparedHtml) {
oEvent.preventDefault();
self.execCom('insertHTML', preparedHtml);
}
}
}
}
});
this.$editableArea.on('keydown', function (oEvent) {
var iKey = oEvent.keyCode || oEvent.which || oEvent.charCode || 0,
bCtrlKey = oEvent.ctrlKey || oEvent.metaKey,
bAltKey = oEvent.altKey,
bShiftKey = oEvent.shiftKey,
sLink = '';
if (bShiftKey && bCtrlKey && iKey === Enums.Key.z || bCtrlKey && iKey === Enums.Key.y) {
oEvent.preventDefault();
self.editableRedo();
} else if (bCtrlKey && !bAltKey && iKey === Enums.Key.z) {
oEvent.preventDefault();
self.editableUndo();
} else if (bCtrlKey && (iKey === Enums.Key.k || iKey === Enums.Key.b || iKey === Enums.Key.i || iKey === Enums.Key.u)) {
oEvent.preventDefault();
switch (iKey) {
case Enums.Key.k:
sLink = self.getSelectedText();
if (isValidURL(sLink)) {
self.insertLink(sLink);
} else if (isCorrectEmail(sLink)) {
self.insertLink('mailto:' + sLink);
} else {
self.oOptions.openInsertLinkDialog();
}
break;
case Enums.Key.b:
self.bold();
break;
case Enums.Key.i:
self.italic();
break;
case Enums.Key.u:
self.underline();
break;
}
} else if (!bAltKey && !bShiftKey && !bCtrlKey) {
if (iKey === Enums.Key.Del || iKey === Enums.Key.Backspace) {
self.editableSave();
}
}
});
this.$editableArea.on('keyup', function (oEvent) {
var iKey = oEvent.keyCode || oEvent.which || oEvent.charCode || 0,
bCtrlKey = oEvent.ctrlKey || oEvent.metaKey,
bAltKey = oEvent.altKey,
bShiftKey = oEvent.shiftKey;
if (!bAltKey && !bShiftKey && !bCtrlKey) {
if (iKey === Enums.Key.Space || iKey === Enums.Key.Enter || iKey === Enums.Key.Del || iKey === Enums.Key.Backspace) {
self.editableSave();
} else {
self.oOptions.onChange();
}
}
});
this.initContentEditable();
this.setEditable(bEditable);
App.broadcastEvent('MailWebclient::StartCrea::after', {
EditableArea: this.$editableArea,
InsertHtmlHandler: this.insertHtml.bind(this)
});
};
CCrea.prototype.clearUndoRedo = function () {
this.aEditableAreaHtml = [];
this.iUndoRedoPosition = 0;
};
CCrea.prototype.isUndoAvailable = function () {
return this.iUndoRedoPosition > 0;
};
CCrea.prototype.clearRedo = function () {
this.aEditableAreaHtml = this.aEditableAreaHtml.slice(0, this.iUndoRedoPosition + 1);
};
CCrea.prototype.editableSave = function () {
var sEditableHtml = this.$editableArea.html(),
oLastSaved = _.last(this.aEditableAreaHtml),
sLastSaved = oLastSaved ? oLastSaved[0] : '';
if (sEditableHtml !== sLastSaved) {
this.clearRedo();
this.aEditableAreaHtml.push([sEditableHtml, this.getCaretPos(this.$editableArea[0])]);
this.iUndoRedoPosition = this.aEditableAreaHtml.length - 1;
this.oOptions.onChange();
}
};
CCrea.prototype.editableUndo = function () {
var sEditableHtml = this.$editableArea.html(),
oCurrSaved = this.aEditableAreaHtml[this.iUndoRedoPosition],
sCurrSaved = oCurrSaved ? oCurrSaved[0] : '';
if (sEditableHtml !== sCurrSaved) {
this.editableSave();
}
if (this.iUndoRedoPosition > 0) {
this.iUndoRedoPosition--;
this.$editableArea.html(this.aEditableAreaHtml[this.iUndoRedoPosition]);
this.setCaretPos(this.$editableArea[0], this.aEditableAreaHtml[this.iUndoRedoPosition][1]);
}
};
CCrea.prototype.editableRedo = function () {
if (this.iUndoRedoPosition < this.aEditableAreaHtml.length - 1) {
this.iUndoRedoPosition++;
this.$editableArea.html(this.aEditableAreaHtml[this.iUndoRedoPosition]);
this.setCaretPos(this.$editableArea[0], this.aEditableAreaHtml[this.iUndoRedoPosition] ? this.aEditableAreaHtml[this.iUndoRedoPosition][1] : {});
}
};
CCrea.prototype.getCaretPos = function (oContainerEl) {
var oSel = null,
oRange = {},
oPreSelectionRange = {},
iStart = 0,
oCaretPos = {};
if (window.getSelection && document.createRange) {
oSel = window.getSelection();
if (oSel.rangeCount > 0) {
oRange = oSel.getRangeAt(0);
oPreSelectionRange = oRange.cloneRange();
oPreSelectionRange.selectNodeContents(oContainerEl);
oPreSelectionRange.setEnd(oRange.startContainer, oRange.startOffset);
iStart = oPreSelectionRange.toString().length;
oCaretPos = {
start: iStart,
end: iStart + oRange.toString().length
};
}
} else if (document.selection && document.body.createTextRange) {
oRange = document.selection.createRange();
oPreSelectionRange = document.body.createTextRange();
oPreSelectionRange.moveToElementText(oContainerEl);
if (typeof oPreSelectionRange.setEndPoint === 'function') {
oPreSelectionRange.setEndPoint('EndToStart', oRange);
}
iStart = oPreSelectionRange.text.length;
oCaretPos = {
start: iStart,
end: iStart + oRange.text.length
};
}
return oCaretPos;
};
CCrea.prototype.setCaretPos = function (oContainerEl, oSavedSel) {
if (window.getSelection && document.createRange) {
var oNodeStack = [oContainerEl],
oNode = {},
oSel = {},
bFoundStart = false,
bStop = false,
iCharIndex = 0,
iNextCharIndex = 0,
iChildNodes = 0,
oRange = document.createRange();
oRange.setStart(oContainerEl, 0);
oRange.collapse(true);
oNode = oNodeStack.pop();
while (!bStop && oNode) {
if (oNode.nodeType === 3) {
iNextCharIndex = iCharIndex + oNode.length;
if (!bFoundStart && oSavedSel.start >= iCharIndex && oSavedSel.start <= iNextCharIndex) {
oRange.setStart(oNode, oSavedSel.start - iCharIndex);
bFoundStart = true;
}
if (bFoundStart && oSavedSel.end >= iCharIndex && oSavedSel.end <= iNextCharIndex) {
oRange.setEnd(oNode, oSavedSel.end - iCharIndex);
bStop = true;
}
iCharIndex = iNextCharIndex;
} else {
iChildNodes = oNode.childNodes.length;
while (iChildNodes--) {
oNodeStack.push(oNode.childNodes[iChildNodes]);
}
}
oNode = oNodeStack.pop();
}
oSel = window.getSelection();
oSel.removeAllRanges();
oSel.addRange(oRange);
} else if (document.selection && document.body.createTextRange) {
var oTextRange = document.body.createTextRange();
oTextRange.moveToElementText(oContainerEl);
oTextRange.collapse(true);
oTextRange.moveEnd('character', oSavedSel.end);
oTextRange.moveStart('character', oSavedSel.start);
oTextRange.select();
}
};
/**
* Sets tab index.
*
* @param {string} sTabIndex
*/
CCrea.prototype.setTabIndex = function (sTabIndex) {
if (sTabIndex) {
this.$editableArea.attr('tabindex', sTabIndex);
}
};
/**
* Initializes properties.
*/
CCrea.prototype.initContentEditable = function () {
this.$editableArea.bind({
mousemove: _.bind(this.storeSelectionPosition, this),
mouseup: _.bind(this.onCursorMove, this),
keydown: _.bind(this.onButtonPressed, this),
keyup: _.bind(this.onCursorMove, this),
click: _.bind(this.onClickWith, this),
focus: this.oOptions.onFocus,
blur: this.oOptions.onBlur
});
if (window.File && window.FileReader && window.FileList) {
if (this.oOptions.enableDrop) {
this.$editableArea.bind({
dragover: _.bind(this.onDragOver, this),
dragleave: _.bind(this.onDragLeave, this),
drop: _.bind(this.onFileSelect, this)
});
}
}
var self = this,
lazyScroll = _.debounce(function () {
self.oCurrLink = null;
self.bInUrl = false;
self.oOptions.onUrlOut();
}, 300);
$('html, body').on('scroll', lazyScroll);
};
/**
* Starts cursor move handlers.
* @param {Object} ev
*/
CCrea.prototype.onCursorMove = function (ev) {
var iKey = -1;
if (window.event) {
iKey = window.event.keyCode;
} else if (ev) {
iKey = ev.which;
}
if (iKey === 13) {
// Enter
this.breakQuotes(ev);
}
if (iKey === 17) {
// Cntr
this.$editableArea.find('a').css('cursor', 'inherit');
}
if (iKey === 8) {
// BackSpace
this.uniteWithNextQuote(ev);
}
if (iKey === 46 && Browser.chrome) {
// Delete
this.uniteWithPrevQuote(ev);
}
this.storeSelectionPosition();
this.oOptions.onCursorMove();
};
/**
* Starts when clicked.
* @param {Object} oEvent
*/
CCrea.prototype.onClickWith = function (oEvent) {
if (oEvent.ctrlKey) {
if (oEvent.target.nodeName === 'A') {
window.open(oEvent.target.href, '_blank');
}
}
this.checkAnchorNode();
};
/**
* Starts when key pressed.
* @param {Object} oEvent
*/
CCrea.prototype.onButtonPressed = function (oEvent) {
var iKey = -1;
if (window.event) {
iKey = window.event.keyCode;
} else if (oEvent) {
iKey = oEvent.which;
}
if (iKey === 17) {
// Cntr
this.$editableArea.find('a').css('cursor', 'pointer');
}
};
/**
* Starts cursor move handlers.
* @param {Object} oEvent
*/
CCrea.prototype.onFileSelect = function (oEvent) {
oEvent = (oEvent && oEvent.originalEvent ? oEvent.originalEvent : oEvent) || window.event;
if (oEvent) {
oEvent.stopPropagation();
oEvent.preventDefault();
var oReader = null,
oFile = null,
aFiles = oEvent.files || (oEvent.dataTransfer ? oEvent.dataTransfer.files : null),
self = this;
if (aFiles && 1 === aFiles.length && this.checkIsImage(aFiles[0])) {
oFile = aFiles[0];
oReader = new window.FileReader();
oReader.onload = function () {
return function (oEvent) {
self.insertImage(oEvent.target.result);
};
}();
oReader.readAsDataURL(oFile);
}
}
};
CCrea.prototype.onDragLeave = function () {
this.$editableArea.removeClass('editorDragOver');
};
/**
* @param {Object} oEvent
*/
CCrea.prototype.onDragOver = function (oEvent) {
oEvent.stopPropagation();
oEvent.preventDefault();
this.$editableArea.addClass('editorDragOver');
};
/**
* @param {Object} oEvent
* @returns {Boolean}
*/
CCrea.prototype.pasteImage = function (oEvent) {
var oClipboardItems = oEvent.clipboardData && oEvent.clipboardData.items,
self = this,
bImagePasted = false;
if (window.File && window.FileReader && window.FileList && oClipboardItems) {
_.each(oClipboardItems, function (oItem) {
if (self.checkIsImage(oItem) && oItem['getAsFile']) {
var oReader = null,
oFile = oItem['getAsFile']();
if (oFile) {
oReader = new window.FileReader();
oReader.onload = function () {
return function (oEvent) {
self.insertImage(oEvent.target.result);
};
}();
oReader.readAsDataURL(oFile);
bImagePasted = true;
}
}
});
}
return bImagePasted;
};
/**
* @param {Object} oItem
* @return {boolean}
*/
CCrea.prototype.checkIsImage = function (oItem) {
return oItem && oItem.type && 0 === oItem.type.indexOf('image/');
};
/**
* Sets plain text to rich editor.
*
* @param {string} sText
*/
CCrea.prototype.setPlainText = function (sText) {
if (typeof sText !== 'string') {
sText = '';
}
if (this.$editableArea) {
this.editableSave();
this.$editableArea.empty().text(sText).css('white-space', 'pre');
this.editableSave();
}
};
/**
* Sets text to rich editor.
*
* @param {string} sText
*/
CCrea.prototype.setText = function (sText) {
if (typeof sText !== 'string') {
sText = '';
}
if (this.$editableArea) {
if (sText.length === 0) {
sText = '<br />';
}
var preparedHtml = this.prepareHtmlWithoutWrappers(sText);
this.$editableArea.empty().append(preparedHtml).css('white-space', 'normal');
this.clearUndoRedo();
this.editableSave();
}
};
CCrea.prototype.prepareHtmlWithoutWrappers = function (html) {
var outerNode = $(html);
var isOuterElemChanged = false;
while (outerNode.length === 1 && (outerNode.data('x-div-type') === 'html' || outerNode.data('x-div-type') === 'body')) {
outerNode = outerNode.children();
isOuterElemChanged = true;
}
if (outerNode.length === 1 && outerNode.data('crea') === 'font-wrapper') {
this.setBasicStyles(outerNode.css('font-family'), outerNode.css('font-size'), outerNode.css('direction'));
return outerNode.html();
}
this.setBasicStyles(this.oOptions.defaultFontName, this.convertFontSizeToPixels(this.oOptions.defaultFontSize), this.oOptions.isRtl ? 'rtl' : 'ltr');
if (!isOuterElemChanged) {
return html;
} else {
var res = '';
outerNode.each(function (index, elem) {
res += elem.outerHTML;
});
return res;
}
};
/**
* @param {string} sFontName
* @param {string} sFontSize
* @param {string} sDirection
*/
CCrea.prototype.setBasicStyles = function (sFontName, sFontSize, sDirection) {
this.sBasicFontName = sFontName;
this.sBasicFontSize = sFontSize;
this.sBasicDirection = sDirection;
this.$editableArea.css({
'font-family': this.getFontNameWithFamily(this.sBasicFontName),
'font-size': this.sBasicFontSize,
direction: this.sBasicDirection
});
};
/**
* Gets plain text from rich editor.
*
* @return {string}
*/
CCrea.prototype.getPlainText = function () {
var sVal = '';
if (this.$editableArea) {
sVal = this.$editableArea.html().replace(/([^>]{1})<div>/gi, '$1\n').replace(/<style[^>]*>[^<]*<\/style>/gi, '\n').replace(/<br *\/{0,1}>/gi, '\n').replace(/<\/p>/gi, '\n').replace(/<\/div>/gi, '\n').replace(/<a [^>]*href="([^"]*?)"[^>]*>(.*?)<\/a>/gi, '$2 ($1)').replace(/<[^>]*>/g, '').replace(/ /g, ' ').replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&').replace(/"/g, '"');
}
return sVal;
};
/**
* Gets text from rich editor.
*
* @param {boolean=} bRemoveSignatureAnchor = false
* @return {string}
*/
CCrea.prototype.getText = function (bRemoveSignatureAnchor) {
var $Anchor = null,
sVal = '';
if (this.$editableArea && this.$editableArea.length > 0) {
if (bRemoveSignatureAnchor) {
$Anchor = this.$editableArea.find('div[data-anchor="signature"]');
$Anchor.removeAttr('data-anchor');
}
sVal = this.$editableArea.html();
sVal = '<div data-crea="font-wrapper" style="font-family: ' + this.getFontNameWithFamily(this.sBasicFontName) + '; font-size: ' + this.sBasicFontSize + '; direction: ' + this.sBasicDirection + '">' + sVal + '</div>';
}
return sVal;
};
/**
* @param {string} sNewSignatureContent
* @param {string} sOldSignatureContent
*/
CCrea.prototype.changeSignatureContent = function (sNewSignatureContent, sOldSignatureContent) {
var $Anchor = this.$editableArea.find('div[data-anchor="signature"]'),
$NewSignature = $(sNewSignatureContent).closest('div[data-crea="font-wrapper"]'),
$OldSignature = $(sOldSignatureContent).closest('div[data-crea="font-wrapper"]'),
sClearOldSignature,
sClearNewSignature,
sAnchorHtml,
$SignatureContainer,
$SignatureBlockquoteParent,
sFoundOldSignature,
$AnchorBlockquoteParent;
/*** there is a signature container in the message ***/
if ($Anchor.length > 0) {
sAnchorHtml = $Anchor.html();
/*** previous signature is empty -> append to the container a new signature ***/
if (sOldSignatureContent === '') {
$Anchor.html(sAnchorHtml + sNewSignatureContent);
} else if (sAnchorHtml.indexOf(sOldSignatureContent) !== -1) {
/*** previous signature was found in the container -> replace it with a new ***/
$Anchor.html(sAnchorHtml.replace(sOldSignatureContent, sNewSignatureContent));
} else if (sAnchorHtml.indexOf(sNewSignatureContent) !== -1) {
/*** new signature is found in the container -> do nothing ***/
} else {
sClearOldSignature = $NewSignature.length === 0 || $OldSignature.length === 0 ? sOldSignatureContent : $OldSignature.html();
sClearNewSignature = $NewSignature.length === 0 || $OldSignature.length === 0 ? sNewSignatureContent : $NewSignature.html();
/*** found a previous signature without wrapper -> replace it with a new ***/
if (sAnchorHtml.indexOf(sClearOldSignature) !== -1) {
$Anchor.html(sAnchorHtml.replace(sClearOldSignature, sNewSignatureContent));
} else if (sAnchorHtml.indexOf(sClearNewSignature) !== -1) {
/*** found a new signature without wrapper -> do nothing ***/
} else {
/*** append the new signature to the end of the container ***/
$Anchor.html(sAnchorHtml + sNewSignatureContent);
}
}
} else {
/*** there is NO signature container in the message ***/
sFoundOldSignature = sOldSignatureContent;
try {
$SignatureContainer = this.$editableArea.find('*:contains("' + sFoundOldSignature + '")');
} catch (oErr) {
$SignatureContainer = $('');
}
if ($SignatureContainer.length === 0 && $OldSignature.length > 0) {
sFoundOldSignature = $OldSignature.html();
try {
$SignatureContainer = this.$editableArea.find('*:contains("' + sFoundOldSignature + '")');
} catch (oErr) {
$SignatureContainer = $('');
}
}
if ($SignatureContainer.length > 0) {
$SignatureContainer = $($SignatureContainer[0]);
$SignatureBlockquoteParent = $SignatureContainer.closest('blockquote');
}
if ($SignatureBlockquoteParent && $SignatureBlockquoteParent.length === 0) {
$SignatureContainer.html($SignatureContainer.html().replace(sFoundOldSignature, sNewSignatureContent));
} else {
$Anchor = this.$editableArea.find('div[data-anchor="reply-title"]');
$AnchorBlockquoteParent = $Anchor.length > 0 ? $($Anchor[0]).closest('blockquote') : $Anchor;
if ($Anchor.length === 0 || $AnchorBlockquoteParent.length > 0) {
$Anchor = this.$editableArea.find('blockquote');
}
if ($Anchor.length > 0) {
$($Anchor[0]).before($('<br /><div data-anchor="signature">' + sNewSignatureContent + '</div><br />'));
} else {
this.$editableArea.append($('<br /><div data-anchor="signature">' + sNewSignatureContent + '</div><br />'));
}
}
}
this.editableSave();
};
/**
* @return {boolean}
*/
CCrea.prototype.isFocused = function () {
return this.bFocused;
};
/**
* Sets focus.
* @param {boolean} keepCurrent
* @param {string} restoreText
*/
CCrea.prototype.setFocus = function () {
var keepCurrent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var restoreText = arguments.length > 1 ? arguments[1] : undefined;
var contents = this.$editableArea.contents();
this.$editableArea.focus();
if (keepCurrent && _.isArray(this.aRanges) && this.aRanges.length > 0) {
this.restoreSelectionPosition(restoreText);
} else if (contents.length > 0) {
var TEXT_NODE_TYPE = 3;
var textNode = null;
if (contents[0].nodeType === TEXT_NODE_TYPE) {
textNode = $(contents[0]);
} else {
textNode = $(document.createTextNode(''));
$(contents[0]).before(textNode);
}
var nodeText = textNode.text();
this.setCursorPosition(textNode[0], nodeText.length);
}
};
CCrea.prototype.setBlur = function () {
this.$editableArea.blur();
};
/**
* @param {boolean} bEditable
*/
CCrea.prototype.setEditable = function (bEditable) {
if (bEditable) {
this.enableContentEditable();
} else {
this.disableContentEditable();
}
};
CCrea.prototype.disableContentEditable = function () {
this.bEditable = false;
this.$editableArea.prop('contentEditable', 'false');
};
CCrea.prototype.enableContentEditable = function () {
this.$editableArea.prop('contentEditable', 'true');
setTimeout(_.bind(function () {
this.bEditable = true;
}, this), 0);
};
CCrea.prototype.fixFirefoxCursorBug = function () {
if (Browser.firefox) {
this.disableContentEditable();
setTimeout(_.bind(function () {
this.enableContentEditable();
}, this), 0);
}
};
CCrea.prototype.setRtlDirection = function () {
this.setBasicStyles(this.sBasicFontName, this.sBasicFontSize, 'rtl');
};
CCrea.prototype.setLtrDirection = function () {
this.setBasicStyles(this.sBasicFontName, this.sBasicFontSize, 'ltr');
};
CCrea.prototype.pasteHtmlAtCaret = function (html) {
var sel, range;
if (window.getSelection) {
// IE9 and non-IE
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
// Range.createContextualFragment() would be useful here but is
// only relatively recently standardized and is not supported in
// some browsers (IE9, for one)
var el = document.createElement('div');
el.innerHTML = html;
var frag = document.createDocumentFragment(),
node,
lastNode;
while (node = el.firstChild) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
// Preserve the selection
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if (document.selection && document.selection.type !== 'Control') {
// IE < 9
range = document.selection.createRange();
if (range && range.pasteHTML) {
range.pasteHTML(html);
}
}
};
/**
* Executes command.
*
* @param {string} sCmd
* @param {string=} sParam
* @param {boolean=} bDontAddToHistory
* @return {boolean}
*/
CCrea.prototype.execCom = function (sCmd, sParam, bDontAddToHistory) {
var bRes = false,
oRange;
if (this.bEditable) {
this.editableSave();
if (Browser.opera) {
this.restoreSelectionPosition();
}
if ('insertHTML' === sCmd && Browser.ie) {
this.pasteHtmlAtCaret(sParam);
} else {
if (typeof sParam === 'undefined') {
bRes = window.document.execCommand(sCmd);
} else {
bRes = window.document.execCommand(sCmd, false, sParam);
}
}
if (Browser.chrome) {
// Chrome need to resave the selection after the operation.
this.storeSelectionPosition();
if (sCmd === 'insertHTML' && this.aRanges.length > 0) {
// Chrome selects line after inserted text. Disable do it.
oRange = this.aRanges[0];
oRange.setEnd(oRange.startContainer, oRange.startOffset);
this.restoreSelectionPosition();
}
}
if (!bDontAddToHistory) {
this.editableSave();
}
}
return bRes;
};
/**
* Inserts html.
*
* @param {string} sHtml
* @param {boolean} bDontAddToHistory
*/
CCrea.prototype.insertHtml = function (sHtml, bDontAddToHistory) {
this.execCom('insertHTML', sHtml, bDontAddToHistory);
};
/**
* @param {string} sId
* @param {string} sSrc
*/
CCrea.prototype.changeImageSource = function (sId, sSrc) {
this.$editableArea.find('img[id="' + sId + '"]').attr('src', sSrc);
this.editableSave();
};
/**
* Inserts link.
*
* @param {string} sLink
*/
CCrea.prototype.insertEmailLink = function (sLink) {
this.restoreSelectionPosition();
if (this.getSelectedText() === '') {
this.execCom('insertHTML', '<a href="mailto:' + sLink + '">' + sLink + '</a>');
} else {
this.insertLink('mailto:' + sLink);
}
};
/**
* Inserts link.
*
* @param {string} link
*/
CCrea.prototype.insertLink = function (link) {
var normalisedLink = this.normaliseURL(link);
if (!this.isFocused()) {
this.setFocus(true, normalisedLink);
} else {
this.restoreSelectionPosition(normalisedLink);
}
this.execCom('createlink', normalisedLink);
};
/**
* Removes link.
*/
CCrea.prototype.removeLink = function () {
var sCmd = Browser.ie8AndBelow ? 'Unlink' : 'unlink';
this.execCom(sCmd);
};
/**
* Inserts image.
*
* @param {string} sImage
* @return {boolean}
*/
CCrea.prototype.insertImage = function (sImage) {
var sCmd = Browser.ie8AndBelow ? 'InsertImage' : 'insertimage';
if (!this.isFocused()) {
this.setFocus(true);
} else {
this.restoreSelectionPosition();
}
return this.execCom(sCmd, sImage);
};
/**
* Inserts ordered list.
*/
CCrea.prototype.numbering = function () {
this.execCom('InsertOrderedList');
};
/**
* Inserts unordered list.
*/
CCrea.prototype.bullets = function () {
this.execCom('InsertUnorderedList');
};
/**
* Inserts horizontal line.
*/
CCrea.prototype.insertHorizontalLine = function () {
if (!this.isFocused()) {
this.setFocus(true);
} else {
this.restoreSelectionPosition();
}
this.execCom('InsertHorizontalRule');
};
/**
* @param {string} sFontName
*/
CCrea.prototype.getFontNameWithFamily = function (sFontName) {
var sFamily = '';
switch (sFontName) {
case 'Arial':
case 'Arial Black':
case 'Tahoma':
case 'Verdana':
sFamily = ', sans-serif';
break;
case 'Courier New':
sFamily = ', monospace';
break;
case 'Times New Roman':
sFamily = ', serif';
break;
}
return sFontName + sFamily;
};
/**
* Sets font name.
*
* @param {string} sFontName
*/
CCrea.prototype.fontName = function (sFontName) {
var bFirstTime = !this.aRanges;
this.setFocus(true);
this.execCom('FontName', this.getFontNameWithFamily(sFontName));
if (bFirstTime) {
this.setBasicStyles(sFontName, this.sBasicFontSize, this.sBasicDirection);
}
};
/**
* Sets font size.
*
* @param {string} sFontSize
*/
CCrea.prototype.fontSize = function (sFontSize) {
var bFirstTime = !this.aRanges;
this.setFocus(true);
this.execCom('FontSize', sFontSize);
if (bFirstTime) {
this.setBasicStyles(this.sBasicFontName, this.convertFontSizeToPixels(sFontSize), this.sBasicDirection);
}
};
/**
* Sets bold style.
*/
CCrea.prototype.bold = function () {
this.execCom('Bold');
this.$editableArea.focus();
};
/**
* Sets italic style.
*/
CCrea.prototype.italic = function () {
this.execCom('Italic');
this.$editableArea.focus();
};
/**
* Sets underline style.
*/
CCrea.prototype.underline = function () {
this.execCom('Underline');
this.$editableArea.focus();
};
/**
* Sets strikethrough style.
*/
CCrea.prototype.strikeThrough = function () {
this.execCom('StrikeThrough');
this.$editableArea.focus();
};
CCrea.prototype.undo = function () {
this.editableUndo();
};
CCrea.prototype.redo = function () {
this.editableRedo();
};
/**
* Sets left justify.
*/
CCrea.prototype.alignLeft = function () {
this.execCom('JustifyLeft');
};
/**
* Sets center justify.
*/
CCrea.prototype.center = function () {
this.execCom('JustifyCenter');
};
/**
* Sets right justify.
*/
CCrea.prototype.alignRight = function () {
this.execCom('JustifyRight');
};
/**
* Sets full justify.
*/
CCrea.prototype.justify = function () {
this.execCom('JustifyFull');
};
/**
* Sets text color.
*
* @param {string} sFontColor
*/
CCrea.prototype.textColor = function (sFontColor) {
this.execCom('ForeColor', sFontColor);
this.$editableArea.focus();
};
/**
* Sets background color.
*
* @param {string} sBackColor
*/
CCrea.prototype.backgroundColor = function (sBackColor) {
var sCmd = Browser.ie ? 'BackColor' : 'hilitecolor';
this.execCom(sCmd, sBackColor);
this.$editableArea.focus();
};
/**
* Wraps selection with the background tag.
*
* @param {string} sBackColor
*/
CCrea.prototype.blockquote = function (sBackColor) {
var sCmd = 'formatBlock';
this.execCom(sCmd, '<blockquote>');
this.$editableArea.focus();
};
/**
* Removes format.
*/
CCrea.prototype.removeFormat = function () {
this.execCom('removeformat');
this.$editableArea.focus();
};
/**
* Gets font name from selected text.
*
* @return {string}
*/
CCrea.prototype.getFontName = function () {
if (this.bEditable) {
var sFontName = window.document.queryCommandValue('FontName'),
sValidFontName = this.sBasicFontName,
sFoundFontName = '';
if (typeof sFontName === 'string') {
sFontName = sFontName.replace(/'/g, '');
$.each(this.oOptions.fontNameArray, function (iIndex, sFont) {
if (sFontName.indexOf(sFont) > -1 || sFontName.indexOf(sFont.toLowerCase()) > -1) {
sFoundFontName = sFont;
}
});
if (sFoundFontName !== '') {
sValidFontName = sFoundFontName;
}
}
}
return sValidFontName;
};
/**
* Gets is font-weight bold.
*
* @return {boolean}
*/
CCrea.prototype.getIsBold = function () {
if (this.bEditable) {
var bIsBold = window.document.queryCommandState('bold');
}
return bIsBold;
};
/**
* Gets is font-style italic.
*
* @return {boolean}
*/
CCrea.prototype.getIsItalic = function () {
if (this.bEditable) {
var bIsItalic = window.document.queryCommandState('italic');
}
return bIsItalic;
};
/**
* Gets is text-decoration underline.
*
* @return {boolean}
*/
CCrea.prototype.getIsUnderline = function () {
if (this.bEditable) {
var bIsUnderline = window.document.queryCommandState('underline');
}
return bIsUnderline;
};
/**
* Gets is ordered list active.
*
* @return {boolean}
*/
CCrea.prototype.getIsEnumeration = function () {
if (this.bEditable) {
var bIsEnumeration = window.document.queryCommandState('insertOrderedList');
}
return bIsEnumeration;
};
/**
* Gets is unordered list active.
*
* @return {boolean}
*/
CCrea.prototype.getIsBullets = function () {
if (this.bEditable) {
var bIsBullets = window.document.queryCommandState('insertUnorderedList');
}
return bIsBullets;
};
/**
* Gets is text-decoration strike-through.
*
* @return {boolean}
*/
CCrea.prototype.getIsStrikeThrough = function () {
if (this.bEditable) {
var bIsStrikeThrough = window.document.queryCommandState('StrikeThrough');
}
return bIsStrikeThrough;
};
/**
* @param {number} iFontSizeInNumber
*
* @return {string}
*/
CCrea.prototype.convertFontSizeToPixels = function (iFontSizeInNumber) {
var iFontSizeInPixels = 0;
$.each(this.aSizes, function (iIndex, oSize) {
if (iFontSizeInPixels === 0 && iFontSizeInNumber <= oSize.inNumber) {
iFontSizeInPixels = oSize.inPixels;
}
});
return iFontSizeInPixels + 'px';
};
/**
* @param {string} sFontSizeInPixels
*
* @return {number}
*/
CCrea.prototype.convertFontSizeToNumber = function (sFontSizeInPixels) {
var iFontSizeInPixels = Types.pInt(sFontSizeInPixels),
iFontSizeInNumber = 0;
if (iFontSizeInPixels > 0) {
$.each(this.aSizes, function (iIndex, oSize) {
if (iFontSizeInNumber === 0 && iFontSizeInPixels <= oSize.inPixels) {
iFontSizeInNumber = oSize.inNumber;
}
});
}
return iFontSizeInNumber;
};
/**
* Gets font size from selected text.
*
* @return {number}
*/
CCrea.prototype.getFontSizeInNumber = function () {
var sFontSizeInNumber = '',
iFontSizeInNumber = 0;
if (this.bEditable) {
sFontSizeInNumber = window.document.queryCommandValue('FontSize');
iFontSizeInNumber = Types.pInt(sFontSizeInNumber);
}
if (isNaN(iFontSizeInNumber) || iFontSizeInNumber <= 0) {
iFontSizeInNumber = this.convertFontSizeToNumber(this.sBasicFontSize);
}
return iFontSizeInNumber;
};
/**
* @param {string} sHref
*/
CCrea.prototype.changeLink = function (sHref) {
var sNormHref = this.normaliseURL(sHref),
oCurrLink = $(this.oCurrLink);
if (this.oCurrLink) {
if (oCurrLink.attr('href') === oCurrLink.text()) {
oCurrLink.text(sNormHref);
}
if (this.oCurrLink.tagName === 'A') {
oCurrLink.attr('href', sNormHref);
} else {
oCurrLink.parent().attr('href', sNormHref);
}
this.oCurrLink = null;
this.bInUrl = false;
}
};
CCrea.prototype.removeCurrentLink = function () {
if (this.oCurrLink && document.createRange && window.getSelection) {
var oRange = document.createRange(),
oSel = window.getSelection();
oRange.selectNodeContents(this.oCurrLink);
oSel.removeAllRanges();
oSel.addRange(oRange);
this.removeLink();
this.oCurrLink = null;
this.bInUrl = false;
this.oOptions.onUrlOut();
}
};
CCrea.prototype.removeCurrentImage = function () {
if (this.oCurrImage) {
this.oCurrImage.remove();
this.oCurrImage = null;
this.bInImage = false;
this.oOptions.onImageBlur();
}
this.setFocus(true);
};
CCrea.prototype.changeCurrentImage = function (aParams) {
if (this.oCurrImage && aParams !== undefined) {
var image = this.oCurrImage;
$.each(aParams, function (key, value) {
image.css(key, value);
});
}
this.setFocus(true);
};
CCrea.prototype.showImageTooltip = function (aParams) {
if (this.oCurrImage && aParams !== undefined) {
var image = this.oCurrImage;
$.each(aParams, function (key, value) {
image.css(key, value);
});
}
};
/**
* @param {string} sText
* @return {string}
*/
CCrea.prototype.normaliseURL = function (sText) {
return sText.search(/^https?:\/\/|^mailto:|^tel:/g) !== -1 ? sText : 'http://' + sText;
};
/**
* @return {string}
*/
CCrea.prototype.getSelectedText = function () {
var sText = '',
oSel = null;
if (window.getSelection) {
oSel = window.getSelection();
if (oSel.rangeCount > 0) {
sText = oSel.getRangeAt(0).toString();
}
}
return sText;
};
/**
* Stores selection position.
*/
CCrea.prototype.storeSelectionPosition = function () {
var aNewRanges = ContenteditableUtils.getSelectionRanges();
// check is selection is inside editable area
if (_.isArray(aNewRanges) && aNewRanges.length > 0 && this.$editableArea[0].contains(aNewRanges[0].commonAncestorContainer)) {
this.aRanges = [aNewRanges[0]];
}
};
/**
* @return {Array}
*/
CCrea.prototype.editableIsActive = function () {
return !!($(document.activeElement).hasClass('crea-content-editable') || $(document.activeElement).children().first().hasClass('crea-content-editable'));
};
CCrea.prototype.checkAnchorNode = function () {
if (window.getSelection && this.editableIsActive()) {
var oSel = window.getSelection(),
oCurrLink = null;
if (oSel.anchorNode && (oSel.anchorNode.parentElement || oSel.anchorNode.parentNode)) {
oCurrLink = oSel.anchorNode.parentElement || oSel.anchorNode.parentNode;
if (oCurrLink.parentNode.tagName === 'A') {
oCurrLink = oCurrLink.parentNode;
} else if (oCurrLink.parentElement.tagName === 'A') {
oCurrLink = oCurrLink.parentNode;
}
if (oCurrLink.tagName === 'A') {
if (!this.bInUrl || oCurrLink !== this.oCurrLink) {
this.oCurrLink = oCurrLink;
this.bInUrl = true;
this.oOptions.onUrlIn($(oCurrLink));
} else if (this.bInUrl && oCurrLink === this.oCurrLink) {
this.oCurrLink = null;
this.bInUrl = false;
this.oOptions.onUrlOut();
}
} else if (this.bInUrl) {
this.oCurrLink = null;
this.bInUrl = false;
this.oOptions.onUrlOut();
}
}
}
};
/**
* Restores selection position.
*
* @param {string} restoreText
*/
CCrea.prototype.restoreSelectionPosition = function () {
var restoreText = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var rangeText = ContenteditableUtils.setSelectionRanges(this.aRanges);
if (window.getSelection && _.isArray(this.aRanges)) {
if (Browser.firefox && rangeText === '' && restoreText !== '') {
if (window.getSelection && window.getSelection().getRangeAt) {
var selection = window.getSelection();
if (selection.getRangeAt && selection.rangeCount > 0) {
var range = selection.getRangeAt(0);
var node = range.createContextualFragment(restoreText);
range.insertNode(node);
}
} else if (document.selection && document.selection.createRange) {
document.selection.createRange().pasteHTML(restoreText);
}
}
}
};
CCrea.prototype.uniteWithNextQuote = function () {
var oSel = window.getSelection ? window.getSelection() : null,
eFocused = oSel ? oSel.focusNode : null,
eBlock = eFocused ? this.getLastBlockQuote(eFocused) : null,
oNext = eBlock ? $(eBlock).next() : null,
eNext = oNext && oNext.length > 0 && oNext[0].tagName === 'BLOCKQUOTE' ? oNext[0] : null,
aChildren = [],
iIndex = 0,
iLen = 0,
eChild = null;
if (eBlock && eNext) {
$('<br />').appendTo(eBlock);
aChildren = $(eNext).contents();
iLen = aChildren.length;
for (iIndex = 0; iIndex < iLen; iIndex++) {
eChild = aChildren[iIndex];
$(eChild).appendTo(eBlock);
}
$(eNext).remove();
}
};
CCrea.prototype.uniteWithPrevQuote = function () {
var oSel = window.getSelection ? window.getSelection() : null,
eFocused = oSel ? oSel.focusNode : null,
eBlock = eFocused ? this.getLastBlockQuote(eFocused) : null;
this.getPrevAndUnite(eBlock);
this.getPrevAndUnite(eBlock);
};
/**
* @param {Object} eBlock
*/
CCrea.prototype.getPrevAndUnite = function (eBlock) {
var oPrev = eBlock ? $(eBlock).prev() : null,
ePrev = oPrev && oPrev.length > 0 && oPrev[0].tagName === 'BLOCKQUOTE' ? oPrev[0] : null,
aChildren = [],
iIndex = 0,
iLen = 0,
eChild = null;
if (eBlock && ePrev) {
$('<br />').prependTo(eBlock);
aChildren = $(ePrev).contents();
iLen = aChildren.length;
for (iIndex = iLen - 1; iIndex > 0; iIndex--) {
eChild = aChildren[iIndex];
$(eChild).prependTo(eBlock);
}
$(ePrev).remove();
}
};
/**
* @param {Object} eFocused
* @return {Object}
*/
CCrea.prototype.getLastBlockQuote = function (eFocused) {
var eCurrent = eFocused,
eBlock = null;
while (eCurrent && eCurrent.parentNode) {
if (eCurrent.tagName === 'BLOCKQUOTE') {
eBlock = eCurrent;
}
eCurrent = eCurrent.parentNode;
}
return eBlock;
};
/**
* @param {Object} ev
*/
CCrea.prototype.breakQuotes = function (ev) {
var oSel = window.getSelection ? window.getSelection() : null,
eFocused = oSel ? oSel.focusNode : null,
eBlock = eFocused ? this.getLastBlockQuote(eFocused) : null;
if (eFocused && eBlock) {
this.breakBlocks(eFocused, eBlock, oSel.focusOffset);
}
};
/**
* @param {Object} eStart
* @param {number} iStartOffset
*/
CCrea.prototype.setCursorPosition = function (eStart, iStartOffset) {
if (document.createRange && window.getSelection) {
var oRange = document.createRange(),
oSel = window.getSelection();
oSel.removeAllRanges();
oRange.setStart(eStart, iStartOffset);
oRange.setEnd(eStart, iStartOffset);
oRange.collapse(true);
oSel.addRange(oRange);
this.aRanges = [oRange];
}
};
/**
* @param {Object} eNode
* @return {Object}
*/
CCrea.prototype.cloneNode = function (eNode) {
var $clonedNode = null,
sTagName = '';
try {
$clonedNode = $(eNode).clone();
} catch (er) {
sTagName = eNode.tagName;
$clonedNode = $('<' + sTagName + '></' + sTagName + '>');
}
return $clonedNode;
};
/**
* @param {Object} eFocused
* @param {Object} eBlock
* @param {number} iFocusOffset
*/
CCrea.prototype.breakBlocks = function (eFocused, eBlock, iFocusOffset) {
var eCurrent = eFocused,
eCurChild = null,
aChildren = [],
iIndex = 0,
iLen = 0,
eChild = null,
bBeforeCurrent = true,
$firstParent = null,
$secondParent = null,
$first = null,
$second = null,
bLast = false,
bContinue = true,
$span = null;
while (bContinue && eCurrent.parentNode) {
$first = $firstParent;
$second = $secondParent;
$firstParent = this.cloneNode(eCurrent).empty();
$secondParent = this.cloneNode(eCurrent).empty();
aChildren = $(eCurrent).contents();
iLen = aChildren.length;
bBeforeCurrent = true;
if (eCurChild === null) {
eCurChild = aChildren[iFocusOffset];
}
if (iLen === 0) {
$firstParent = null;
}
for (iIndex = 0; iIndex < iLen; iIndex++) {
eChild = aChildren[iIndex];
if (eChild === eCurChild) {
if ($first === null) {
if (!(iIndex === iFocusOffset && eChild.tagName === 'BR')) {
$(eChild).appendTo($secondParent);
}
} else {
if ($first.html().length > 0) {
$first.appendTo($firstParent);
}
$second.appendTo($secondParent);
}
bBeforeCurrent = false;
} else if (bBeforeCurrent) {
$(eChild).appendTo($firstParent);
} else {
$(eChild).appendTo($secondParent);
}
}
bLast = eBlock === eCurrent;
if (bLast) {
bContinue = false;
}
eCurChild = eCurrent;
eCurrent = eCurrent.parentNode;
}
if ($firstParent !== null && $secondParent !== null) {
$firstParent.insertBefore($(eBlock));
$span = $('<span> </span>').insertBefore($(eBlock));
$('<br>').insertBefore($(eBlock));
$secondParent.insertBefore($(eBlock));
$(eBlock).remove();
this.setCursorPosition($span[0], 0);
}
};
module.exports = CCrea;
/***/ }),
/***/ "yHWv":
/*!***************************************************!*\
!*** ./modules/MailWebclient/js/utils/Sending.js ***!
\***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/* provided dependency */ var $ = __webpack_require__(/*! jquery */ "M4cL");
var _ = __webpack_require__(/*! underscore */ "C3HO"),
TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "LKDt"),
Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "ERH9"),
Api = __webpack_require__(/*! modules/CoreWebclient/js/Api.js */ "Z9uT"),
App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "yU9o"),
Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "ioSH"),
Screens = __webpack_require__(/*! modules/CoreWebclient/js/Screens.js */ "D2Gh"),
CAddressModel = __webpack_require__(/*! modules/CoreWebclient/js/models/CAddressModel.js */ "jqos"),
CAddressListModel = __webpack_require__(/*! modules/CoreWebclient/js/models/CAddressListModel.js */ "lZd5"),
MessageUtils = __webpack_require__(/*! modules/MailWebclient/js/utils/Message.js */ "wXcN"),
AccountList = __webpack_require__(/*! modules/MailWebclient/js/AccountList.js */ "Fj7m"),
Ajax = __webpack_require__(/*! modules/MailWebclient/js/Ajax.js */ "P7bQ"),
MailCache = __webpack_require__(/*! modules/MailWebclient/js/Cache.js */ "eGl8"),
Settings = __webpack_require__(/*! modules/MailWebclient/js/Settings.js */ "Ua3z"),
MainTab = App.isNewTab() && window.opener && window.opener.MainTabMailMethods,
SendingUtils = {
sReplyText: '',
sReplyDraftUid: '',
oPostponedMailData: null
};
/**
* @param {string} sText
* @param {string} sDraftUid
*/
SendingUtils.setReplyData = function (sText, sDraftUid) {
this.sReplyText = sText;
this.sReplyDraftUid = sDraftUid;
};
function getLongUid(parameters) {
return "".concat(parameters.AccountID, ":").concat(parameters.DraftFolder, ":").concat(parameters.DraftUid);
}
/**
* @param {string} sMethod
* @param {Object} oParameters
* @param {boolean} bShowLoading
* @param {Function} fSendMessageResponseHandler
* @param {Object} oSendMessageResponseContext
* @param {boolean=} bPostponedSending = false
* @param {boolean=} bAddToSentFolder = true
*/
SendingUtils.send = function (sMethod, oParameters, bShowLoading, fSendMessageResponseHandler, oSendMessageResponseContext, bPostponedSending, bAddToSentFolder) {
bAddToSentFolder = typeof bAddToSentFolder === 'boolean' ? bAddToSentFolder : true;
var iAccountID = oParameters.AccountID,
oAccount = AccountList.getAccount(iAccountID),
oFolderList = MailCache.oFolderListItems[iAccountID],
sLoadingMessage = '',
sSentFolder = oFolderList ? oFolderList.sentFolderFullName() : '',
sDraftFolder = oFolderList ? oFolderList.draftsFolderFullName() : '',
sCurrEmail = oAccount ? oAccount.email() : '',
bSelfRecipient = oParameters.To.indexOf(sCurrEmail) > -1 || oParameters.Cc.indexOf(sCurrEmail) > -1 || oParameters.Bcc.indexOf(sCurrEmail) > -1;
if (oAccount.bSaveRepliesToCurrFolder && !bSelfRecipient && Types.isNonEmptyArray(oParameters.DraftInfo, 3)) {
sSentFolder = oParameters.DraftInfo[2];
}
oParameters.Method = sMethod;
oParameters.ShowReport = bShowLoading;
switch (sMethod) {
case 'SendMessage':
sLoadingMessage = TextUtils.i18n('COREWEBCLIENT/INFO_SENDING');
if (bAddToSentFolder) {
if (!Types.isNonEmptyString(oParameters.SentFolder)) {
oParameters.SentFolder = sSentFolder;
}
if (oParameters.DraftUid !== '') {
oParameters.DraftFolder = sDraftFolder;
if (MainTab) {
MainTab.removeOneMessageFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder, oParameters.DraftUid);
MainTab.replaceHashWithoutMessageUid(getLongUid(oParameters));
} else {
MailCache.removeOneMessageFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder, oParameters.DraftUid);
Routing.replaceHashWithoutMessageUid(getLongUid(oParameters));
}
}
} else {
delete oParameters.SentFolder;
delete oParameters.DraftUid;
delete oParameters.DraftFolder;
}
break;
case 'SaveMessage':
sLoadingMessage = TextUtils.i18n('MAILWEBCLIENT/INFO_SAVING');
if (typeof oParameters.DraftFolder === 'undefined') {
oParameters.DraftFolder = sDraftFolder;
}
// Message with this uid will not be selected from message list
MailCache.savingDraftUid(oParameters.DraftUid);
if (MainTab) {
MainTab.startMessagesLoadingWhenDraftSaving(oParameters.AccountID, oParameters.DraftFolder);
MainTab.replaceHashWithoutMessageUid(getLongUid(oParameters));
} else {
MailCache.startMessagesLoadingWhenDraftSaving(oParameters.AccountID, oParameters.DraftFolder);
Routing.replaceHashWithoutMessageUid(getLongUid(oParameters));
}
break;
}
if (bShowLoading) {
Screens.showLoading(sLoadingMessage);
}
if (bPostponedSending) {
this.postponedMailData = {
'Parameters': oParameters,
'SendMessageResponseHandler': fSendMessageResponseHandler,
'SendMessageResponseContext': oSendMessageResponseContext
};
} else {
Ajax.send(sMethod, oParameters, fSendMessageResponseHandler, oSendMessageResponseContext);
}
};
/**
* @param {string} sDraftUid
*/
SendingUtils.sendPostponedMail = function (sDraftUid) {
var oData = this.postponedMailData,
oParameters = oData.Parameters,
iAccountID = oParameters.AccountID,
oFolderList = MailCache.oFolderListItems[iAccountID],
sDraftFolder = oFolderList ? oFolderList.draftsFolderFullName() : '';
if (sDraftUid !== '') {
oParameters.DraftUid = sDraftUid;
oParameters.DraftFolder = sDraftFolder;
if (MainTab) {
MainTab.removeOneMessageFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder, oParameters.DraftUid);
MainTab.replaceHashWithoutMessageUid(getLongUid(oParameters));
} else {
MailCache.removeOneMessageFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder, oParameters.DraftUid);
Routing.replaceHashWithoutMessageUid(getLongUid(oParameters));
}
}
if (this.postponedMailData) {
Ajax.send(oParameters.Method, oParameters, oData.SendMessageResponseHandler, oData.SendMessageResponseContext);
this.postponedMailData = null;
}
};
/**
* @param {string} sMethod
* @param {string} sText
* @param {string} sDraftUid
* @param {Function} fSendMessageResponseHandler
* @param {Object} oSendMessageResponseContext
* @param {boolean} bRequiresPostponedSending
*/
SendingUtils.sendReplyMessage = function (sMethod, sText, sDraftUid, fSendMessageResponseHandler, oSendMessageResponseContext, bRequiresPostponedSending) {
var oParameters = null,
oMessage = MailCache.currentMessage(),
aRecipients = [],
oFetcherOrIdentity = null;
if (oMessage) {
aRecipients = oMessage.oTo.aCollection.concat(oMessage.oCc.aCollection);
oFetcherOrIdentity = this.getFirstFetcherOrIdentityByRecipientsOrDefault(aRecipients, oMessage.accountId());
oParameters = this.getReplyDataFromMessage(oMessage, Enums.ReplyType.ReplyAll, oMessage.accountId(), oFetcherOrIdentity, false, sText, sDraftUid);
oParameters.AccountID = oMessage.accountId();
if (oFetcherOrIdentity) {
oParameters.IdentityID = oFetcherOrIdentity && oFetcherOrIdentity.IDENTITY ? oFetcherOrIdentity.id() : '';
oParameters.AliasID = oFetcherOrIdentity && oFetcherOrIdentity.ALIAS ? oFetcherOrIdentity.id() : '';
oParameters.FetcherID = oFetcherOrIdentity && oFetcherOrIdentity.FETCHER ? oFetcherOrIdentity.id() : '';
}
oParameters.Bcc = '';
oParameters.Importance = Enums.Importance.Normal;
oParameters.SendReadingConfirmation = false;
oParameters.IsQuickReply = true;
oParameters.IsHtml = true;
oParameters.Attachments = this.convertAttachmentsForSending(oParameters.Attachments);
this.send(sMethod, oParameters, false, fSendMessageResponseHandler, oSendMessageResponseContext, bRequiresPostponedSending);
}
};
/**
* @param {Array} aAttachments
*
* @return {Object}
*/
SendingUtils.convertAttachmentsForSending = function (aAttachments) {
var oAttachments = {};
_.each(aAttachments, function (oAttach) {
oAttachments[oAttach.tempName()] = [oAttach.fileName(), oAttach.linked() ? oAttach.cid() : '', oAttach.inline() ? '1' : '0', oAttach.linked() ? '1' : '0', oAttach.contentLocation()];
});
return oAttachments;
};
/**
* @param {Object} oResponse
* @param {Object} oRequest
* @param {boolean} bRequiresPostponedSending
*
* @return {Object}
*/
SendingUtils.onSendOrSaveMessageResponse = function (oResponse, oRequest, bRequiresPostponedSending) {
var oParameters = oRequest.Parameters,
bResult = !!oResponse.Result,
sFullName,
sUid,
sReplyType;
if (!bRequiresPostponedSending) {
Screens.hideLoading();
}
switch (oRequest.Method) {
case 'SaveMessage':
// All messages can not be selected from message list if message saving is done
MailCache.savingDraftUid('');
if (!bResult) {
if (oParameters.ShowReport) {
if (-1 !== $.inArray(oRequest.Parameters.DraftFolder, MailCache.getCurrentTemplateFolders())) {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_TEMPLATE_SAVING'), true);
} else {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_MESSAGE_SAVING'), true);
}
}
} else {
if (oParameters.ShowReport && !bRequiresPostponedSending) {
if (-1 !== $.inArray(oRequest.Parameters.DraftFolder, MailCache.getCurrentTemplateFolders())) {
Screens.showReport(TextUtils.i18n('MAILWEBCLIENT/REPORT_TEMPLATE_SAVED'));
} else {
Screens.showReport(TextUtils.i18n('MAILWEBCLIENT/REPORT_MESSAGE_SAVED'));
}
}
if (!oResponse.Result.NewUid) {
Settings.AllowAutosaveInDrafts = false;
}
}
break;
case 'SendMessage':
if (!bResult) {
Api.showErrorByCode(oResponse, TextUtils.i18n('MAILWEBCLIENT/ERROR_MESSAGE_SENDING'), true);
} else {
if (oParameters.IsQuickReply) {
Screens.showReport(TextUtils.i18n('MAILWEBCLIENT/REPORT_MESSAGE_SENT'));
} else {
if (MainTab) {
MainTab.showReport(TextUtils.i18n('MAILWEBCLIENT/REPORT_MESSAGE_SENT'));
} else {
Screens.showReport(TextUtils.i18n('MAILWEBCLIENT/REPORT_MESSAGE_SENT'));
}
}
if (_.isArray(oParameters.DraftInfo) && oParameters.DraftInfo.length === 3) {
sReplyType = oParameters.DraftInfo[0];
sUid = oParameters.DraftInfo[1];
sFullName = oParameters.DraftInfo[2];
MailCache.markMessageReplied(oParameters.AccountID, sFullName, sUid, sReplyType);
}
}
if (oParameters.SentFolder) {
if (MainTab) {
MainTab.removeMessagesFromCacheForFolder(oParameters.AccountID, oParameters.SentFolder);
} else {
MailCache.removeMessagesFromCacheForFolder(oParameters.AccountID, oParameters.SentFolder);
}
}
break;
}
if (oParameters.DraftFolder && !bRequiresPostponedSending) {
if (MainTab) {
MainTab.removeMessagesFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder);
} else {
MailCache.removeMessagesFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder);
}
}
return {
Method: oRequest.Method,
Result: bResult,
NewUid: oResponse.Result ? oResponse.Result.NewUid : ''
};
};
SendingUtils.getReplytoAddresses = function (oMessage) {
var oReplytoAddresses = oMessage.oReplyTo;
if (oReplytoAddresses.getFull() === '' || oMessage.oFrom.getFirstEmail() === oReplytoAddresses.getFirstEmail() && oReplytoAddresses.getFirstName() === '') {
oReplytoAddresses = oMessage.oFrom;
}
return oReplytoAddresses;
};
/**
* @param {Object} oMessage
* @param {string} sReplyType
* @param {number} iAccountId
* @param {Object} oFetcherOrIdentity
* @param {boolean} bPasteSignatureAnchor
* @param {string} sText
* @param {string} sDraftUid
*
* @return {Object}
*/
SendingUtils.getReplyDataFromMessage = function (oMessage, sReplyType, iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor, sText, sDraftUid) {
var oReplyData = {
DraftInfo: [],
DraftUid: '',
To: '',
Cc: '',
Bcc: '',
Subject: '',
Attachments: [],
InReplyTo: oMessage.messageId(),
References: this.getReplyReferences(oMessage)
},
aAttachmentsLink = [],
oReplytoAddresses = this.getReplytoAddresses(oMessage),
sToAddr = oReplytoAddresses.getFull();
if (!sText || sText === '') {
sText = this.sReplyText;
this.sReplyText = '';
}
if (sReplyType === 'forward') {
oReplyData.Text = sText + this.getForwardMessageBody(oMessage, iAccountId, oFetcherOrIdentity);
} else if (sReplyType === 'resend') {
oReplyData.Text = oMessage.getConvertedHtml();
oReplyData.Cc = oMessage.cc();
oReplyData.Bcc = oMessage.bcc();
} else {
oReplyData.Text = sText + GetReplyMessageBody.call(this, oMessage, iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor);
}
if (sDraftUid) {
oReplyData.DraftUid = sDraftUid;
} else {
oReplyData.DraftUid = this.sReplyDraftUid;
this.sReplyDraftUid = '';
}
switch (sReplyType) {
case Enums.ReplyType.Reply:
oReplyData.DraftInfo = [Enums.ReplyType.Reply, oMessage.uid(), oMessage.folder()];
oReplyData.To = sToAddr;
oReplyData.Subject = this.getReplySubject(oMessage.subject(), true);
aAttachmentsLink = _.filter(oMessage.attachments(), function (oAttach) {
return oAttach.linked();
});
break;
case Enums.ReplyType.ReplyAll:
oReplyData.DraftInfo = [Enums.ReplyType.ReplyAll, oMessage.uid(), oMessage.folder()];
oReplyData.To = sToAddr;
oReplyData.Cc = this.getReplyAllCcAddr(oMessage, iAccountId, oFetcherOrIdentity);
oReplyData.Subject = this.getReplySubject(oMessage.subject(), true);
aAttachmentsLink = _.filter(oMessage.attachments(), function (oAttach) {
return oAttach.linked();
});
break;
case Enums.ReplyType.Resend:
oReplyData.DraftInfo = [Enums.ReplyType.Resend, oMessage.uid(), oMessage.folder(), oMessage.cc(), oMessage.bcc()];
oReplyData.To = oMessage.oTo.getFull();
oReplyData.Subject = oMessage.subject();
aAttachmentsLink = oMessage.attachments();
break;
case Enums.ReplyType.ForwardAsAttach:
case Enums.ReplyType.Forward:
oReplyData.DraftInfo = [Enums.ReplyType.Forward, oMessage.uid(), oMessage.folder()];
oReplyData.Subject = this.getReplySubject(oMessage.subject(), false);
aAttachmentsLink = oMessage.attachments();
break;
}
_.each(aAttachmentsLink, function (oAttachLink) {
if (oAttachLink.getCopy) {
var oCopy = oAttachLink.getCopy();
oReplyData.Attachments.push(oCopy);
}
});
return oReplyData;
};
/**
* Prepares and returns references for reply message.
*
* @param {Object} oMessage
*
* @return {string}
*/
SendingUtils.getReplyReferences = function (oMessage) {
var sRef = oMessage.references(),
sInR = oMessage.messageId(),
sPos = sRef.indexOf(sInR);
if (sPos === -1) {
sRef += ' ' + sInR;
}
return sRef;
};
/**
* @param {Object} oMessage
* @param {number} iAccountId
* @param {Object} oFetcherOrIdentity
* @param {boolean} bPasteSignatureAnchor
*
* @return {string}
*/
function GetReplyMessageBody(oMessage, iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor) {
var sReplyTitle = TextUtils.i18n('MAILWEBCLIENT/TEXT_REPLY_MESSAGE', {
'DATE': oMessage.oDateModel.getDate(),
'TIME': oMessage.oDateModel.getTime(),
'SENDER': TextUtils.encodeHtml(oMessage.oFrom.getFull())
}),
sReplyBody = '<br /><br />' + this.getSignatureText(iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor) + '<br /><br />' + '<div data-anchor="reply-title">' + sReplyTitle + '</div><blockquote>' + oMessage.getConvertedHtml() + '</blockquote>';
return sReplyBody;
}
/**
* @param {number} iAccountId
* @param {Object} oFetcherOrIdentity
*
* @return {string}
*/
SendingUtils.getClearSignature = function (iAccountId, oFetcherOrIdentity) {
var oAccount = AccountList.getAccount(iAccountId),
sSignature = '';
if (oFetcherOrIdentity && oFetcherOrIdentity.accountId() === iAccountId) {
if (oFetcherOrIdentity.useSignature()) {
sSignature = oFetcherOrIdentity.signature();
}
} else if (oAccount && oAccount.useSignature()) {
sSignature = oAccount.signature();
}
return sSignature;
};
/**
* @param {number} iAccountId
* @param {Object} oFetcherOrIdentity
* @param {boolean} bPasteSignatureAnchor
*
* @return {string}
*/
SendingUtils.getSignatureText = function (iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor) {
var sSignature = this.getClearSignature(iAccountId, oFetcherOrIdentity);
if (bPasteSignatureAnchor) {
return '<div data-anchor="signature">' + sSignature + '</div>';
}
return '<div>' + sSignature + '</div>';
};
/**
* @param {Array} aRecipients
* @param {number} iAccountId
*
* @return Object
*/
SendingUtils.getFirstFetcherOrIdentityByRecipientsOrDefault = function (aRecipients, iAccountId) {
var oAccount = AccountList.getAccount(iAccountId),
aList = this.getAccountFetchersIdentitiesList(oAccount),
aEqualEmailList = [],
oFoundFetcherOrIdentity = null;
_.each(aRecipients, function (oAddr) {
if (!oFoundFetcherOrIdentity) {
aEqualEmailList = _.filter(aList, function (oItem) {
return oAddr.sEmail === oItem.email;
});
switch (aEqualEmailList.length) {
case 0:
break;
case 1:
oFoundFetcherOrIdentity = aEqualEmailList[0];
break;
default:
oFoundFetcherOrIdentity = _.find(aEqualEmailList, function (oItem) {
return oAddr.sEmail === oItem.email && oAddr.sName === oItem.name;
});
if (!oFoundFetcherOrIdentity) {
oFoundFetcherOrIdentity = _.find(aEqualEmailList, function (oItem) {
return oItem.isDefault;
});
if (!oFoundFetcherOrIdentity) {
oFoundFetcherOrIdentity = aEqualEmailList[0];
}
}
break;
}
}
});
if (!oFoundFetcherOrIdentity) {
oFoundFetcherOrIdentity = _.find(aList, function (oItem) {
return oItem.isDefault;
});
}
return oFoundFetcherOrIdentity && oFoundFetcherOrIdentity.result;
};
/**
* @param {Object} oAccount
* @returns {Array}
*/
SendingUtils.getAccountFetchersIdentitiesList = function (oAccount) {
var aList = [];
if (oAccount) {
_.each(oAccount.fetchers(), function (oFetcher) {
aList.push({
'email': oFetcher.email(),
'name': oFetcher.userName(),
'isDefault': false,
'result': oFetcher
});
});
_.each(oAccount.identities(), function (oIdnt) {
aList.push({
'email': oIdnt.email(),
'name': oIdnt.friendlyName(),
'isDefault': oIdnt.isDefault(),
'result': oIdnt
});
});
_.each(oAccount.aliases(), function (oAlias) {
aList.push({
'email': oAlias.email(),
'name': oAlias.friendlyName(),
'isDefault': false,
'result': oAlias
});
});
}
return aList;
};
/**
* @param {Object} oMessage
* @param {number} iAccountId
* @param {Object} oFetcherOrIdentity
*
* @return {string}
*/
SendingUtils.getForwardMessageBody = function (oMessage, iAccountId, oFetcherOrIdentity) {
var sCcAddr = TextUtils.encodeHtml(oMessage.oCc.getFull()),
sCcPart = sCcAddr !== '' ? TextUtils.i18n('MAILWEBCLIENT/TEXT_FORWARD_MESSAGE_CCPART', {
'CCADDR': sCcAddr
}) : '',
sForwardTitle = TextUtils.i18n('MAILWEBCLIENT/TEXT_FORWARD_MESSAGE', {
'FROMADDR': TextUtils.encodeHtml(oMessage.oFrom.getFull()),
'TOADDR': TextUtils.encodeHtml(oMessage.oTo.getFull()),
'CCPART': sCcPart,
'FULLDATE': oMessage.oDateModel.getFullDate(),
'SUBJECT': TextUtils.encodeHtml(oMessage.subject())
}),
sForwardBody = '<br /><br />' + this.getSignatureText(iAccountId, oFetcherOrIdentity, true) + '<br /><br />' + '<div data-anchor="reply-title">' + sForwardTitle + '</div><br /><br />' + oMessage.getConvertedHtml();
return sForwardBody;
};
SendingUtils.hasReplyAllCcAddrs = function (oMessage) {
var iAccountId = oMessage.accountId(),
aRecipients = oMessage.oTo.aCollection.concat(oMessage.oCc.aCollection),
oFetcherOrIdentity = this.getFirstFetcherOrIdentityByRecipientsOrDefault(aRecipients, oMessage.accountId()),
sCcAddrs = this.getReplyAllCcAddr(oMessage, iAccountId, oFetcherOrIdentity);
return sCcAddrs !== '';
};
/**
* Prepares and returns cc address for reply message.
*
* @param {Object} oMessage
* @param {number} iAccountId
* @param {Object} oFetcherOrIdentity
*
* @return {string}
*/
SendingUtils.getReplyAllCcAddr = function (oMessage, iAccountId, oFetcherOrIdentity) {
var oAddressList = new CAddressListModel(),
aAddrCollection = _.union(oMessage.oTo.aCollection, oMessage.oCc.aCollection, oMessage.oBcc.aCollection),
oCurrAccount = _.find(AccountList.collection(), function (oAccount) {
return oAccount.id() === iAccountId;
}, this),
oCurrAccAddress = new CAddressModel(),
oFetcherAddress = new CAddressModel(),
oReplytoAddresses = this.getReplytoAddresses(oMessage);
oCurrAccAddress.sEmail = oCurrAccount.email();
oFetcherAddress.sEmail = oFetcherOrIdentity ? oFetcherOrIdentity.email() : '';
oAddressList.addCollection(aAddrCollection);
oAddressList.excludeCollection(_.union(oReplytoAddresses.aCollection, [oCurrAccAddress, oFetcherAddress]));
return oAddressList.getFull();
};
/**
* Obtains a subject of the message, which is the answer (reply or forward):
* - adds the prefix "Re" of "Fwd" if the language is English, otherwise - their translation
* - joins "Re" and "Fwd" prefixes if it is allowed for application in settings
*
* @param {string} sSubject Subject of the message, the answer to which is composed
* @param {boolean} bReply If **true** the prefix will be "Re", otherwise - "Fwd"
*
* @return {string}
*/
SendingUtils.getReplySubject = function (sSubject, bReply) {
var sRePrefix = TextUtils.i18n('MAILWEBCLIENT/TEXT_REPLY_PREFIX'),
sFwdPrefix = TextUtils.i18n('MAILWEBCLIENT/TEXT_FORWARD_PREFIX'),
sPrefix = bReply ? sRePrefix : sFwdPrefix,
sReSubject = sPrefix + ': ' + sSubject;
if (Settings.JoinReplyPrefixes) {
sReSubject = MessageUtils.joinReplyPrefixesInSubject(sReSubject, sRePrefix, sFwdPrefix);
}
return sReSubject;
};
/**
* @param {string} sPlain
*
* @return {string}
*/
SendingUtils.getHtmlFromText = function (sPlain) {
return sPlain.replace(/&/g, '&').replace(/>/g, '>').replace(/</g, '<').replace(/\r/g, '').replace(/\n/g, '<br />');
};
module.exports = SendingUtils;
/***/ })
}]);