芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/www/cloud.pulsehost.co.uk/modules/MailNotesPlugin/js/views/CMessagePaneView.js
'use strict'; var _ = require('underscore'), $ = require('jquery'), ko = require('knockout'), TextUtils = require('%PathToCoreWebclientModule%/js/utils/Text.js'), Ajax = require('%PathToCoreWebclientModule%/js/Ajax.js'), Api = require('%PathToCoreWebclientModule%/js/Api.js'), ModulesManager = require('%PathToCoreWebclientModule%/js/ModulesManager.js'), MailCache = null ; /** * @constructor * @param {object} oMailCache * @param {function} fRouteMessageView */ function CMessagePaneView(oMailCache, fRouteMessageView) { MailCache = oMailCache; this.fRouteMessageView = fRouteMessageView; this.currentMessage = MailCache.currentMessage; this.messageText = ko.observable(''); this.messageText.focused = ko.observable(false); ko.computed(function () { this.messageText(); this.messageText.focused(true); }, this).extend({ throttle: 5 }); ; this.sMessageUid = ''; this.sMessageText = ''; this.isLoading = ko.observable(false); this.isSaving = ko.observable(false); this.createMode = ko.observable(false); this.saveButtonText = ko.computed(function () { return this.isSaving() ? TextUtils.i18n('COREWEBCLIENT/ACTION_SAVE_IN_PROGRESS') : TextUtils.i18n('COREWEBCLIENT/ACTION_SAVE'); }, this); this.bBinded = false; } CMessagePaneView.prototype.ViewTemplate = '%ModuleName%_MessagePaneView'; CMessagePaneView.prototype.ViewConstructorName = 'CMessagePaneView'; CMessagePaneView.prototype.onShow = function () { this.currentMessageSubscription = this.currentMessage.subscribe(this.onCurrentMessageSubscribe, this); this.bShown = true; }; CMessagePaneView.prototype.onHide = function () { this.currentMessageSubscription?.dispose(); this.bShown = false; }; /** * Checks if there are changes in message pane. * @returns {Boolean} */ CMessagePaneView.prototype.hasUnsavedChanges = function () { var oMessage = this.currentMessage(); return (!oMessage || this.sMessageUid === oMessage.uid()) && this.sMessageText !== this.messageText(); }; /** * Discards changes in message pane. */ CMessagePaneView.prototype.discardChanges = function () { if (!this.currentMessage()) { this.sMessageUid = ''; this.sMessageText = ''; this.messageText(''); } }; CMessagePaneView.prototype.getSubjectFromText = function (sText) { var aText = sText.split(/\r\n|\n/i), sSubject = _.find(aText, function (sTextPart) { return $.trim(sTextPart) !== ''; }) ; sSubject = $.trim(sSubject); if (sSubject.length > 50) { sSubject = sSubject.substring(0, 50); } return sSubject; }; CMessagePaneView.prototype.onCurrentMessageSubscribe = function () { var oMessage = this.currentMessage(); if (oMessage) { if (oMessage.isPlain()) { this.messageText(oMessage.text()); } else { this.messageText(TextUtils.htmlToPlain(oMessage.text())); } this.sMessageUid = oMessage.uid(); this.sMessageText = this.messageText(); this.isLoading(oMessage.uid() !== '' && !oMessage.completelyFilled()); if (!oMessage.completelyFilled()) { var sbscr = oMessage.completelyFilled.subscribe(function () { this.onCurrentMessageSubscribe(); sbscr.dispose(); }, this); } this.isSaving(false); } else { this.sMessageUid = ''; this.sMessageText = ''; this.messageText(''); } }; /** * @param {Object} $MailViewDom */ CMessagePaneView.prototype.onBind = function ($MailViewDom) { if (!this.bBinded) { ModulesManager.run('SessionTimeoutWeblient', 'registerFunction', [_.bind(function () { this.saveNote(); }, this)]); $(document).on('keydown', $.proxy(function(ev) { if (ev.ctrlKey && ev.keyCode === Enums.Key.s) { ev.preventDefault(); this.saveNote(); } }, this)); this.bBinded = true; } }; CMessagePaneView.prototype.onRoute = function (aParams, oParams) { var oIdentifiers = MailCache.getMessageActualIdentifiers(MailCache.currentAccountId(), oParams.Folder, oParams.Uid); MailCache.setCurrentMessage(oIdentifiers.iAccountId, oIdentifiers.sFolder, oIdentifiers.sUid); if (oParams.Custom === 'create-note') { this.messageText(''); this.createMode(true); } else { this.createMode(false); } this.isSaving(false); }; CMessagePaneView.prototype.saveNote = function () { if (this.createMode()) { this.saveNewNote(); } else { this.saveEditedNote(); } }; CMessagePaneView.prototype.saveNewNote = function () { var oFolder = MailCache.getCurrentFolder(), oParameters = { 'AccountID': MailCache.currentAccountId(), 'FolderFullName': oFolder.fullName(), 'Text': TextUtils.encodeHtml(this.messageText()).replace(/\n/g, '
').replace(/\r\n/g, '
'), 'Subject': this.getSubjectFromText(this.messageText()) } ; this.isSaving(true); this.sMessageText = this.messageText(); Ajax.send('%ModuleName%', 'SaveNote', oParameters, function (oResponse) { this.isSaving(false); if (oResponse.Result) { if (this.bShown) { var sbscr = MailCache.messagesLoading.subscribe(function () { if (this.bShown && !MailCache.messagesLoading() && !this.currentMessage()) { this.fRouteMessageView(oParameters.FolderFullName, oResponse.Result); sbscr.dispose(); } }, this); } } else { Api.showErrorByCode(oResponse, TextUtils.i18n('%MODULENAME%/ERROR_NOTE_SAVING')); } MailCache.executeCheckMail(true); }, this); }; CMessagePaneView.prototype.saveEditedNote = function (oMessage) { if (!oMessage) { oMessage = this.currentMessage(); } if (oMessage) { var oParameters = { 'AccountID': MailCache.currentAccountId(), 'FolderFullName': oMessage.folder(), 'MessageUid': oMessage.uid(), 'Text': TextUtils.encodeHtml(this.messageText()).replace(/\n/g, '
').replace(/\r\n/g, '
'), 'Subject': this.getSubjectFromText(this.messageText()) }, oFolder = MailCache.getFolderByFullName(MailCache.currentAccountId(), oMessage.folder()) ; oFolder.markDeletedByUids([oMessage.uid()]); MailCache.excludeDeletedMessages(); this.isSaving(true); this.sMessageText = this.messageText(); Ajax.send('%ModuleName%', 'SaveNote', oParameters, function (oResponse) { this.isSaving(false); if (oResponse.Result) { if (this.bShown) { var sbscr = MailCache.messagesLoading.subscribe(function () { if (this.bShown && !MailCache.messagesLoading() && !this.currentMessage()) { this.fRouteMessageView(oParameters.FolderFullName, oResponse.Result); sbscr.dispose(); } }, this); } } else { Api.showErrorByCode(oResponse, TextUtils.i18n('%MODULENAME%/ERROR_NOTE_SAVING')); } MailCache.executeCheckMail(true); }, this); } }; CMessagePaneView.prototype.cancel = function () { this.sMessageText = this.messageText(); ModulesManager.run('MailWebclient', 'setCustomRouting', ['Notes', 1, '', '', '', '']); }; module.exports = CMessagePaneView;