示例#1
0
	/**
	 * @constructor
	 */
	function MessageStatesModel()
	{
		AbstractModel.call(this, 'MessageStatesModel');

		this.flags = {};
		this.states = {};

		this.flags.unseen = ko.observable(false);
		this.flags.deleted = ko.observable(false);
		this.flags.flagged = ko.observable(false);
		this.flags.answered = ko.observable(false);
		this.flags.forwarded = ko.observable(false);

		this.states.checked = ko.observable(false);
		this.states.deleted = ko.observable(false);
		this.states.selected = ko.observable(false);
		this.states.focused = ko.observable(false);

		this.states.showReadReceipt = ko.observable(false);
		this.states.showExternalImages = ko.observable(false);

		this.states.hasUnseenSubMessages = ko.observable(false);
		this.states.hasFlaggedSubMessages = ko.observable(false);

		this.threads = ko.observableArray([]);
	}
	/**
	 * @constructor
	 * @param {string} sId
	 * @param {string} sFileName
	 * @param {?number=} nSize
	 * @param {boolean=} bInline
	 * @param {boolean=} bLinked
	 * @param {string=} sCID
	 * @param {string=} sContentLocation
	 */
	function ComposeAttachmentModel(sId, sFileName, nSize, bInline, bLinked, sCID, sContentLocation)
	{
		AbstractModel.call(this, 'ComposeAttachmentModel');

		this.id = sId;
		this.isInline = Utils.isUnd(bInline) ? false : !!bInline;
		this.isLinked = Utils.isUnd(bLinked) ? false : !!bLinked;
		this.CID = Utils.isUnd(sCID) ? '' : sCID;
		this.contentLocation = Utils.isUnd(sContentLocation) ? '' : sContentLocation;
		this.fromMessage = false;

		this.fileName = ko.observable(sFileName);
		this.size = ko.observable(Utils.isUnd(nSize) ? null : nSize);
		this.tempName = ko.observable('');

		this.progress = ko.observable('');
		this.error = ko.observable('');
		this.waiting = ko.observable(true);
		this.uploading = ko.observable(false);
		this.enabled = ko.observable(true);

		this.friendlySize = ko.computed(function () {
			var mSize = this.size();
			return null === mSize ? '' : Utils.friendlySize(this.size());
		}, this);

		this.regDisposables([this.friendlySize]);
	}
示例#3
0
	/**
	 * @constructor
	 */
	function FolderModel()
	{
		AbstractModel.call(this, 'FolderModel');

		this.name = ko.observable('');
		this.fullName = '';
		this.fullNameRaw = '';
		this.fullNameHash = '';
		this.delimiter = '';
		this.namespace = '';
		this.deep = 0;
		this.interval = 0;

		this.selectable = false;
		this.existen = true;

		this.type = ko.observable(Enums.FolderType.User);

		this.focused = ko.observable(false);
		this.selected = ko.observable(false);
		this.edited = ko.observable(false);
		this.collapsed = ko.observable(true);
		this.subScribed = ko.observable(true);
		this.checkable = ko.observable(false);
		this.subFolders = ko.observableArray([]);
		this.deleteAccess = ko.observable(false);
		this.actionBlink = ko.observable(false).extend({'falseTimeout': 1000});

		this.nameForEdit = ko.observable('');

		this.privateMessageCountAll = ko.observable(0);
		this.privateMessageCountUnread = ko.observable(0);

		this.collapsedPrivate = ko.observable(true);
	}
	/**
	 * @param {string=} sSuperName
	 * @constructor
	 */
	function MessageSimpleModel(sSuperName)
	{
		AbstractModel.call(this, sSuperName || 'MessageSimpleModel');

		this.flagged = ko.observable(false);
		this.selected = ko.observable(false);
	}
示例#5
0
	/**
	 * @constructor
	 *
	 * @param {string} sEmail
	 * @param {boolean=} bCanBeDelete = true
	 */
	function AccountModel(sEmail, bCanBeDelete)
	{
		AbstractModel.call(this, 'AccountModel');

		this.email = sEmail;

		this.deleteAccess = ko.observable(false);
		this.canBeDalete = ko.observable(Utils.isUnd(bCanBeDelete) ? true : !!bCanBeDelete);
	}
示例#6
0
/**
 * @constructor
 * @param {string} sID
 * @param {string} sName
 * @param {string} sBody
 */
function TemplateModel(sID, sName, sBody)
{
	AbstractModel.call(this, 'TemplateModel');

	this.id = sID;
	this.name = sName;
	this.body = sBody;
	this.populated = true;

	this.deleteAccess = ko.observable(false);
}
示例#7
0
/**
 * @constructor
 *
 * @param {string} sEmail
 * @param {boolean=} bCanBeDelete = true
 * @param {number=} iCount = 0
 */
function AccountModel(sEmail, bCanBeDelete, iCount)
{
	AbstractModel.call(this, 'AccountModel');

	this.email = sEmail;

	this.count = ko.observable(iCount || 0);

	this.deleteAccess = ko.observable(false);
	this.canBeDeleted = ko.observable(Utils.isUnd(bCanBeDelete) ? true : !!bCanBeDelete);
	this.canBeEdit = this.canBeDeleted;
}
示例#8
0
	/**
	 * @param {string} iIndex
	 * @param {string} sGuID
	 * @param {string} sID
	 * @param {string} sUserID
	 * @param {string} sEmail
	 * @param {boolean} bIsPrivate
	 * @param {string} sArmor
	 * @constructor
	 */
	function OpenPgpKeyModel(iIndex, sGuID, sID, sUserID, sEmail, bIsPrivate, sArmor)
	{
		AbstractModel.call(this, 'OpenPgpKeyModel');

		this.index = iIndex;
		this.id = sID;
		this.guid = sGuID;
		this.user = sUserID;
		this.email = sEmail;
		this.armor = sArmor;
		this.isPrivate = !!bIsPrivate;

		this.deleteAccess = ko.observable(false);
	}
示例#9
0
	/**
	 * @param {string} iIndex
	 * @param {string} sGuID
	 * @param {string} sID
	 * @param {array} aUserIDs
	 * @param {array} aEmails
	 * @param {boolean} bIsPrivate
	 * @param {string} sArmor
	 * @param {string} sUserID
	 * @constructor
	 */
	function OpenPgpKeyModel(iIndex, sGuID, sID, aUserIDs, aEmails, bIsPrivate, sArmor, sUserID)
	{
		AbstractModel.call(this, 'OpenPgpKeyModel');

		this.index = iIndex;
		this.id = sID;
		this.guid = sGuID;
		this.users = aUserIDs;
		this.emails = aEmails;
		this.armor = sArmor;
		this.isPrivate = !!bIsPrivate;
		this.selectUser(sUserID);

		this.deleteAccess = ko.observable(false);
	}
示例#10
0
	/**
	 * @param {string} sId
	 * @param {string} sEmail
	 * @constructor
	 */
	function IdentityModel(sId, sEmail)
	{
		AbstractModel.call(this, 'IdentityModel');

		this.id = ko.observable(sId);
		this.email = ko.observable(sEmail);
		this.name = ko.observable('');

		this.replyTo = ko.observable('');
		this.bcc = ko.observable('');

		this.signature = ko.observable('');
		this.signatureInsertBefore = ko.observable(false);

		this.deleteAccess = ko.observable(false);
		this.canBeDeleted = ko.computed(function () {
			return '' !== this.id();
		}, this);
	}
	/**
	 * @param {*} oKoList
	 * @constructor
	 */
	function FilterConditionModel(oKoList)
	{
		AbstractModel.call(this, 'FilterConditionModel');

		this.parentList = oKoList;

		this.field = ko.observable(Enums.FilterConditionField.From);

		this.fieldOptions = [ // TODO i18n
			{'id': Enums.FilterConditionField.From, 'name': 'From'},
			{'id': Enums.FilterConditionField.Recipient, 'name': 'Recipient (To or CC)'},
			{'id': Enums.FilterConditionField.To, 'name': 'To'},
			{'id': Enums.FilterConditionField.Subject, 'name': 'Subject'}
		];

		this.type = ko.observable(Enums.FilterConditionType.EqualTo);

		this.typeOptions = [ // TODO i18n
			{'id': Enums.FilterConditionType.EqualTo, 'name': 'Equal To'},
			{'id': Enums.FilterConditionType.NotEqualTo, 'name': 'Not Equal To'},
			{'id': Enums.FilterConditionType.Contains, 'name': 'Contains'},
			{'id': Enums.FilterConditionType.NotContains, 'name': 'Not Contains'}
		];

		this.value = ko.observable('');

		this.template = ko.computed(function () {

			var sTemplate = '';
			switch (this.type())
			{
				default:
					sTemplate = 'SettingsFiltersConditionDefault';
					break;
			}

			return sTemplate;

		}, this);

		this.regDisposables([this.template]);
	}
	/**
	 * @constructor
	 * @param {number=} iType = Enums.ContactPropertyType.Unknown
	 * @param {string=} sTypeStr = ''
	 * @param {string=} sValue = ''
	 * @param {boolean=} bFocused = false
	 * @param {string=} sPlaceholder = ''
	 */
	function ContactPropertyModel(iType, sTypeStr, sValue, bFocused, sPlaceholder)
	{
		AbstractModel.call(this, 'ContactPropertyModel');

		this.type = ko.observable(Utils.isUnd(iType) ? Enums.ContactPropertyType.Unknown : iType);
		this.typeStr = ko.observable(Utils.isUnd(sTypeStr) ? '' : sTypeStr);
		this.focused = ko.observable(Utils.isUnd(bFocused) ? false : !!bFocused);
		this.value = ko.observable(Utils.pString(sValue));

		this.placeholder = ko.observable(sPlaceholder || '');

		this.placeholderValue = ko.computed(function () {
			var sPlaceholder = this.placeholder();
			return sPlaceholder ? Utils.i18n(sPlaceholder) : '';
		}, this);

		this.largeValue = ko.computed(function () {
			return Enums.ContactPropertyType.Note === this.type();
		}, this);

		this.regDisposables([this.placeholderValue, this.largeValue]);
	}
/**
 * @constructor
 */
function FilterConditionModel()
{
	AbstractModel.call(this, 'FilterConditionModel');

	this.field = ko.observable(Enums.FilterConditionField.From);
	this.type = ko.observable(Enums.FilterConditionType.Contains);
	this.value = ko.observable('');
	this.value.error = ko.observable(false);

	this.valueSecond = ko.observable('');
	this.valueSecond.error = ko.observable(false);

	this.template = ko.computed(function() {

		var sTemplate = '';
		switch (this.field())
		{
			case Enums.FilterConditionField.Size:
				sTemplate = 'SettingsFiltersConditionSize';
				break;
			case Enums.FilterConditionField.Header:
				sTemplate = 'SettingsFiltersConditionMore';
				break;
			default:
				sTemplate = 'SettingsFiltersConditionDefault';
				break;
		}

		return sTemplate;

	}, this);

	this.field.subscribe(function() {
		this.value('');
		this.valueSecond('');
	}, this);

	this.regDisposables([this.template]);
}
示例#14
0
	/**
	 * @constructor
	 */
	function AttachmentModel()
	{
		AbstractModel.call(this, 'AttachmentModel');

		this.checked = ko.observable(false);

		this.mimeType = '';
		this.fileName = '';
		this.fileNameExt = '';
		this.fileType = Enums.FileType.Unknown;
		this.estimatedSize = 0;
		this.friendlySize = '';
		this.isInline = false;
		this.isLinked = false;
		this.isThumbnail = false;
		this.cid = '';
		this.cidWithOutTags = '';
		this.contentLocation = '';
		this.download = '';
		this.folder = '';
		this.uid = '';
		this.mimeIndex = '';
		this.framed = false;
	}
示例#15
0
	/**
	 * @constructor
	 */
	function MessageModel()
	{
		AbstractModel.call(this, 'MessageModel');

		this.folderFullNameRaw = '';
		this.uid = '';
		this.hash = '';
		this.requestHash = '';
		this.subject = ko.observable('');
		this.subjectPrefix = ko.observable('');
		this.subjectSuffix = ko.observable('');
		this.size = ko.observable(0);
		this.dateTimeStampInUTC = ko.observable(0);
		this.priority = ko.observable(Enums.MessagePriority.Normal);

		this.proxy = false;

		this.fromEmailString = ko.observable('');
		this.fromClearEmailString = ko.observable('');
		this.toEmailsString = ko.observable('');
		this.toClearEmailsString = ko.observable('');

		this.senderEmailsString = ko.observable('');
		this.senderClearEmailsString = ko.observable('');

		this.emails = [];

		this.from = [];
		this.to = [];
		this.cc = [];
		this.bcc = [];
		this.replyTo = [];
		this.deliveredTo = [];

		this.newForAnimation = ko.observable(false);

		this.deleted = ko.observable(false);
		this.deletedMark = ko.observable(false);
		this.unseen = ko.observable(false);
		this.flagged = ko.observable(false);
		this.answered = ko.observable(false);
		this.forwarded = ko.observable(false);
		this.isReadReceipt = ko.observable(false);

		this.focused = ko.observable(false);
		this.selected = ko.observable(false);
		this.checked = ko.observable(false);
		this.hasAttachments = ko.observable(false);
		this.attachmentsSpecData = ko.observableArray([]);

		this.attachmentIconClass = ko.computed(function () {
			return AttachmentModel.staticCombinedIconClass(
				this.hasAttachments() ? this.attachmentsSpecData() : []);
		}, this);

		this.body = null;

		this.isHtml = ko.observable(false);
		this.hasImages = ko.observable(false);
		this.attachments = ko.observableArray([]);

		this.isPgpSigned = ko.observable(false);
		this.isPgpEncrypted = ko.observable(false);
		this.pgpSignedVerifyStatus = ko.observable(Enums.SignedVerifyStatus.None);
		this.pgpSignedVerifyUser = ko.observable('');

		this.priority = ko.observable(Enums.MessagePriority.Normal);
		this.readReceipt = ko.observable('');

		this.aDraftInfo = [];
		this.sMessageId = '';
		this.sInReplyTo = '';
		this.sReferences = '';

		this.hasUnseenSubMessage = ko.observable(false);
		this.hasFlaggedSubMessage = ko.observable(false);

		this.threads = ko.observableArray([]);

		this.threadsLen = ko.computed(function () {
			return this.threads().length;
		}, this);

		this.isImportant = ko.computed(function () {
			return Enums.MessagePriority.High === this.priority();
		}, this);

		this.regDisposables([this.attachmentIconClass, this.threadsLen, this.isImportant]);
	}
示例#16
0
	/**
	* @constructor
	*/
	function MessageModel()
	{
		AbstractModel.call(this, 'MessageModel');

		this.folderFullNameRaw = '';
		this.uid = '';
		this.hash = '';
		this.requestHash = '';
		this.subject = ko.observable('');
		this.subjectPrefix = ko.observable('');
		this.subjectSuffix = ko.observable('');
		this.size = ko.observable(0);
		this.dateTimeStampInUTC = ko.observable(0);
		this.priority = ko.observable(Enums.MessagePriority.Normal);

		this.proxy = false;

		this.fromEmailString = ko.observable('');
		this.fromClearEmailString = ko.observable('');
		this.toEmailsString = ko.observable('');
		this.toClearEmailsString = ko.observable('');

		this.senderEmailsString = ko.observable('');
		this.senderClearEmailsString = ko.observable('');

		this.emails = [];

		this.from = [];
		this.to = [];
		this.cc = [];
		this.bcc = [];
		this.replyTo = [];
		this.deliveredTo = [];

		this.newForAnimation = ko.observable(false);

		this.deleted = ko.observable(false);
		this.unseen = ko.observable(false);
		this.flagged = ko.observable(false);
		this.answered = ko.observable(false);
		this.forwarded = ko.observable(false);
		this.isReadReceipt = ko.observable(false);

		this.focused = ko.observable(false);
		this.selected = ko.observable(false);
		this.checked = ko.observable(false);
		this.hasAttachments = ko.observable(false);
		this.attachmentsMainType = ko.observable('');

		this.moment = ko.observable(moment(moment.unix(0)));

		this.attachmentIconClass = ko.computed(function () {
			var sClass = '';
			if (this.hasAttachments())
			{
				sClass = 'icon-attachment';
				switch (this.attachmentsMainType())
				{
					case 'image':
						sClass = 'icon-image';
						break;
					case 'archive':
						sClass = 'icon-file-zip';
						break;
					case 'doc':
						sClass = 'icon-file-text';
						break;
	 //				case 'pdf':
	 //					sClass = 'icon-file-pdf';
	 //					break;
				}
			}
			return sClass;
		}, this);

		this.fullFormatDateValue = ko.computed(function () {
			return MessageModel.calculateFullFromatDateValue(this.dateTimeStampInUTC());
		}, this);

		this.momentDate = Utils.createMomentDate(this);
		this.momentShortDate = Utils.createMomentShortDate(this);

		this.regDisposables(this.dateTimeStampInUTC.subscribe(function (iValue) {
			var iNow = moment().unix();
			this.moment(moment.unix(iNow < iValue ? iNow : iValue));
		}, this));

		this.body = null;
		this.plainRaw = '';
		this.isHtml = ko.observable(false);
		this.hasImages = ko.observable(false);
		this.attachments = ko.observableArray([]);

		this.isPgpSigned = ko.observable(false);
		this.isPgpEncrypted = ko.observable(false);
		this.pgpSignedVerifyStatus = ko.observable(Enums.SignedVerifyStatus.None);
		this.pgpSignedVerifyUser = ko.observable('');

		this.priority = ko.observable(Enums.MessagePriority.Normal);
		this.readReceipt = ko.observable('');

		this.aDraftInfo = [];
		this.sMessageId = '';
		this.sInReplyTo = '';
		this.sReferences = '';

		this.parentUid = ko.observable(0);
		this.threads = ko.observableArray([]);
		this.threadsLen = ko.observable(0);
		this.hasUnseenSubMessage = ko.observable(false);
		this.hasFlaggedSubMessage = ko.observable(false);

		this.lastInCollapsedThread = ko.observable(false);
		this.lastInCollapsedThreadLoading = ko.observable(false);

		this.threadsLenResult = ko.computed(function () {
			var iCount = this.threadsLen();
			return 0 === this.parentUid() && 0 < iCount ? iCount + 1 : '';
		}, this);

		this.regDisposables([this.attachmentIconClass, this.fullFormatDateValue, this.threadsLenResult]);
	}