AbstractApp.prototype.bootstart = function () { Events.pub('rl.bootstart'); var ssm = require('ssm'); Utils.initOnStartOrLangChange(function () { Utils.initNotificationLanguage(); }, null); _.delay(function () { Utils.windowResize(); }, 1000); ssm.addState({ 'id': 'mobile', 'maxWidth': 767, 'onEnter': function() { Globals.$html.addClass('ssm-state-mobile'); Events.pub('ssm.mobile-enter'); }, 'onLeave': function() { Globals.$html.removeClass('ssm-state-mobile'); Events.pub('ssm.mobile-leave'); } }); ssm.addState({ 'id': 'tablet', 'minWidth': 768, 'maxWidth': 999, 'onEnter': function() { Globals.$html.addClass('ssm-state-tablet'); }, 'onLeave': function() { Globals.$html.removeClass('ssm-state-tablet'); } }); ssm.addState({ 'id': 'desktop', 'minWidth': 1000, 'maxWidth': 1400, 'onEnter': function() { Globals.$html.addClass('ssm-state-desktop'); }, 'onLeave': function() { Globals.$html.removeClass('ssm-state-desktop'); } }); ssm.addState({ 'id': 'desktop-large', 'minWidth': 1400, 'onEnter': function() { Globals.$html.addClass('ssm-state-desktop-large'); }, 'onLeave': function() { Globals.$html.removeClass('ssm-state-desktop-large'); } }); Events.sub('ssm.mobile-enter', function () { Globals.leftPanelDisabled(true); }); Events.sub('ssm.mobile-leave', function () { Globals.leftPanelDisabled(false); }); Globals.leftPanelDisabled.subscribe(function (bValue) { Globals.$html.toggleClass('rl-left-panel-disabled', bValue); }); ssm.ready(); };
/** * @constructor * @extends KnoinAbstractViewModel */ function MailBoxMessageListViewModel() { KnoinAbstractViewModel.call(this, 'Right', 'MailMessageList'); this.sLastUid = null; this.bPrefetch = false; this.emptySubjectValue = ''; this.hideDangerousActions = !!Settings.settingsGet('HideDangerousActions'); this.popupVisibility = Globals.popupVisibility; this.message = Data.message; this.messageList = Data.messageList; this.folderList = Data.folderList; this.currentMessage = Data.currentMessage; this.isMessageSelected = Data.isMessageSelected; this.messageListSearch = Data.messageListSearch; this.messageListError = Data.messageListError; this.folderMenuForMove = Data.folderMenuForMove; this.useCheckboxesInList = Data.useCheckboxesInList; this.mainMessageListSearch = Data.mainMessageListSearch; this.messageListEndFolder = Data.messageListEndFolder; this.messageListChecked = Data.messageListChecked; this.messageListCheckedOrSelected = Data.messageListCheckedOrSelected; this.messageListCheckedOrSelectedUidsWithSubMails = Data.messageListCheckedOrSelectedUidsWithSubMails; this.messageListCompleteLoadingThrottle = Data.messageListCompleteLoadingThrottle; Utils.initOnStartOrLangChange(function () { this.emptySubjectValue = Utils.i18n('MESSAGE_LIST/EMPTY_SUBJECT_TEXT'); }, this); this.userQuota = Data.userQuota; this.userUsageSize = Data.userUsageSize; this.userUsageProc = Data.userUsageProc; this.moveDropdownTrigger = ko.observable(false); this.moreDropdownTrigger = ko.observable(false); // append drag and drop this.dragOver = ko.observable(false).extend({'throttle': 1}); this.dragOverEnter = ko.observable(false).extend({'throttle': 1}); this.dragOverArea = ko.observable(null); this.dragOverBodyArea = ko.observable(null); this.messageListItemTemplate = ko.computed(function () { return Enums.Layout.NoPreview !== Data.layout() ? 'MailMessageListItem' : 'MailMessageListItemNoPreviewPane'; }); this.messageListSearchDesc = ko.computed(function () { var sValue = Data.messageListEndSearch(); return '' === sValue ? '' : Utils.i18n('MESSAGE_LIST/SEARCH_RESULT_FOR', {'SEARCH': sValue}); }); this.messageListPagenator = ko.computed(Utils.computedPagenatorHelper(Data.messageListPage, Data.messageListPageCount)); this.checkAll = ko.computed({ 'read': function () { return 0 < Data.messageListChecked().length; }, 'write': function (bValue) { bValue = !!bValue; _.each(Data.messageList(), function (oMessage) { oMessage.checked(bValue); }); } }); this.inputMessageListSearchFocus = ko.observable(false); this.sLastSearchValue = ''; this.inputProxyMessageListSearch = ko.computed({ 'read': this.mainMessageListSearch, 'write': function (sValue) { this.sLastSearchValue = sValue; }, 'owner': this }); this.isIncompleteChecked = ko.computed(function () { var iM = Data.messageList().length, iC = Data.messageListChecked().length ; return 0 < iM && 0 < iC && iM > iC; }, this); this.hasMessages = ko.computed(function () { return 0 < this.messageList().length; }, this); this.hasCheckedOrSelectedLines = ko.computed(function () { return 0 < this.messageListCheckedOrSelected().length; }, this); this.isSpamFolder = ko.computed(function () { return Data.spamFolder() === this.messageListEndFolder() && '' !== Data.spamFolder(); }, this); this.isSpamDisabled = ko.computed(function () { return Consts.Values.UnuseOptionValue === Data.spamFolder(); }, this); this.isTrashFolder = ko.computed(function () { return Data.trashFolder() === this.messageListEndFolder() && '' !== Data.trashFolder(); }, this); this.isDraftFolder = ko.computed(function () { return Data.draftFolder() === this.messageListEndFolder() && '' !== Data.draftFolder(); }, this); this.isSentFolder = ko.computed(function () { return Data.sentFolder() === this.messageListEndFolder() && '' !== Data.sentFolder(); }, this); this.isArchiveFolder = ko.computed(function () { return Data.archiveFolder() === this.messageListEndFolder() && '' !== Data.archiveFolder(); }, this); this.isArchiveDisabled = ko.computed(function () { return Consts.Values.UnuseOptionValue === Data.archiveFolder(); }, this); this.canBeMoved = this.hasCheckedOrSelectedLines; this.clearCommand = Utils.createCommand(this, function () { kn.showScreenPopup(require('View:Popup:FolderClear'), [Data.currentFolder()]); }); this.multyForwardCommand = Utils.createCommand(this, function () { kn.showScreenPopup(require('View:Popup:Compose'), [ Enums.ComposeType.ForwardAsAttachment, Data.messageListCheckedOrSelected()]); }, this.canBeMoved); this.deleteWithoutMoveCommand = Utils.createCommand(this, function () { require('App:RainLoop').deleteMessagesFromFolder(Enums.FolderType.Trash, Data.currentFolderFullNameRaw(), Data.messageListCheckedOrSelectedUidsWithSubMails(), false); }, this.canBeMoved); this.deleteCommand = Utils.createCommand(this, function () { require('App:RainLoop').deleteMessagesFromFolder(Enums.FolderType.Trash, Data.currentFolderFullNameRaw(), Data.messageListCheckedOrSelectedUidsWithSubMails(), true); }, this.canBeMoved); this.archiveCommand = Utils.createCommand(this, function () { require('App:RainLoop').deleteMessagesFromFolder(Enums.FolderType.Archive, Data.currentFolderFullNameRaw(), Data.messageListCheckedOrSelectedUidsWithSubMails(), true); }, this.canBeMoved); this.spamCommand = Utils.createCommand(this, function () { require('App:RainLoop').deleteMessagesFromFolder(Enums.FolderType.Spam, Data.currentFolderFullNameRaw(), Data.messageListCheckedOrSelectedUidsWithSubMails(), true); }, this.canBeMoved); this.notSpamCommand = Utils.createCommand(this, function () { require('App:RainLoop').deleteMessagesFromFolder(Enums.FolderType.NotSpam, Data.currentFolderFullNameRaw(), Data.messageListCheckedOrSelectedUidsWithSubMails(), true); }, this.canBeMoved); this.moveCommand = Utils.createCommand(this, Utils.emptyFunction, this.canBeMoved); this.reloadCommand = Utils.createCommand(this, function () { if (!Data.messageListCompleteLoadingThrottle()) { require('App:RainLoop').reloadMessageList(false, true); } }); this.quotaTooltip = _.bind(this.quotaTooltip, this); this.selector = new Selector(this.messageList, this.currentMessage, '.messageListItem .actionHandle', '.messageListItem.selected', '.messageListItem .checkboxMessage', '.messageListItem.focused'); this.selector.on('onItemSelect', _.bind(function (oMessage) { if (oMessage) { Data.message(Data.staticMessageList.populateByMessageListItem(oMessage)); this.populateMessageBody(Data.message()); if (Enums.Layout.NoPreview === Data.layout()) { kn.setHash(LinkBuilder.messagePreview(), true); Data.message.focused(true); } } else { Data.message(null); } }, this)); this.selector.on('onItemGetUid', function (oMessage) { return oMessage ? oMessage.generateUid() : ''; }); Data.messageListEndHash.subscribe(function () { this.selector.scrollToTop(); }, this); Data.layout.subscribe(function (mValue) { this.selector.autoSelect(Enums.Layout.NoPreview !== mValue); }, this); Data.layout.valueHasMutated(); Events .sub('mailbox.message-list.selector.go-down', function () { this.selector.goDown(true); }, this) .sub('mailbox.message-list.selector.go-up', function () { this.selector.goUp(true); }, this) ; kn.constructorEnd(this); }