From ff8ef2012b0cf89414c13e6f5e912f471b27acb5 Mon Sep 17 00:00:00 2001 From: RainLoop Team Date: Fri, 13 Dec 2013 01:27:22 +0400 Subject: [PATCH] Add unread count to page title --- dev/Models/FolderModel.js | 6 ++++++ dev/Screens/MailBox.js | 18 ++++++++++++++++-- dev/Storages/WebMailData.js | 2 ++ rainloop/v/0.0.0/static/js/app.js | 26 ++++++++++++++++++++++++-- rainloop/v/0.0.0/static/js/app.min.js | 8 ++++---- 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/dev/Models/FolderModel.js b/dev/Models/FolderModel.js index 8e5c4c35d..e3b05ad34 100644 --- a/dev/Models/FolderModel.js +++ b/dev/Models/FolderModel.js @@ -137,6 +137,12 @@ FolderModel.prototype.initComputed = function () iUnread = this.messageCountUnread(), iType = this.type() ; + + if (Enums.FolderType.Inbox === iType) + { + RL.data().foldersInboxUnreadCount(iUnread); + } + // return 0 < iUnread ? '' + iUnread : ''; // return 0 < iUnread && 'INBOX' === this.fullNameRaw ? '' + iUnread : ''; return 0 < iUnread && (Enums.FolderType.Inbox === iType || Enums.FolderType.Spam === iType) ? '' + iUnread : diff --git a/dev/Screens/MailBox.js b/dev/Screens/MailBox.js index 7cbcda3e1..9f27d8a3f 100644 --- a/dev/Screens/MailBox.js +++ b/dev/Screens/MailBox.js @@ -23,10 +23,20 @@ _.extend(MailBoxScreen.prototype, KnoinAbstractScreen.prototype); */ MailBoxScreen.prototype.oLastRoute = {}; +MailBoxScreen.prototype.setNewTitle = function () +{ + var + sEmail = RL.data().accountEmail(), + ifoldersInboxUnreadCount = RL.data().foldersInboxUnreadCount() + ; + + RL.setTitle(('' === sEmail ? '' : + (0 < ifoldersInboxUnreadCount ? '(' + ifoldersInboxUnreadCount + ') ' : ' ') + sEmail + ' - ') + Utils.i18n('TITLES/MAILBOX')); +}; + MailBoxScreen.prototype.onShow = function () { - var sEmail = RL.data().accountEmail(); - RL.setTitle(('' === sEmail ? '' : sEmail + ' - ') + Utils.i18n('TITLES/MAILBOX')); + this.setNewTitle(); }; /** @@ -121,6 +131,10 @@ MailBoxScreen.prototype.onStart = function () oData.usePreviewPane.subscribe(function (bValue) { $html.toggleClass('rl-no-preview-pane', !bValue); }); + + oData.foldersInboxUnreadCount.subscribe(function () { + this.setNewTitle(); + }, this); }; MailBoxScreen.prototype.onBuild = function () diff --git a/dev/Storages/WebMailData.js b/dev/Storages/WebMailData.js index 0402754e8..87fa0ef0d 100644 --- a/dev/Storages/WebMailData.js +++ b/dev/Storages/WebMailData.js @@ -87,6 +87,8 @@ function WebMailDataStorage() this.foldersDeleting = ko.observable(false); this.foldersRenaming = ko.observable(false); + this.foldersInboxUnreadCount = ko.observable(0); + this.currentFolder = ko.observable(null).extend({'toggleSubscribe': [null, function (oPrev) { if (oPrev) diff --git a/rainloop/v/0.0.0/static/js/app.js b/rainloop/v/0.0.0/static/js/app.js index bd7948334..8981874fd 100644 --- a/rainloop/v/0.0.0/static/js/app.js +++ b/rainloop/v/0.0.0/static/js/app.js @@ -7314,6 +7314,12 @@ FolderModel.prototype.initComputed = function () iUnread = this.messageCountUnread(), iType = this.type() ; + + if (Enums.FolderType.Inbox === iType) + { + RL.data().foldersInboxUnreadCount(iUnread); + } + // return 0 < iUnread ? '' + iUnread : ''; // return 0 < iUnread && 'INBOX' === this.fullNameRaw ? '' + iUnread : ''; return 0 < iUnread && (Enums.FolderType.Inbox === iType || Enums.FolderType.Spam === iType) ? '' + iUnread : @@ -12897,6 +12903,8 @@ function WebMailDataStorage() this.foldersDeleting = ko.observable(false); this.foldersRenaming = ko.observable(false); + this.foldersInboxUnreadCount = ko.observable(0); + this.currentFolder = ko.observable(null).extend({'toggleSubscribe': [null, function (oPrev) { if (oPrev) @@ -15248,10 +15256,20 @@ _.extend(MailBoxScreen.prototype, KnoinAbstractScreen.prototype); */ MailBoxScreen.prototype.oLastRoute = {}; +MailBoxScreen.prototype.setNewTitle = function () +{ + var + sEmail = RL.data().accountEmail(), + ifoldersInboxUnreadCount = RL.data().foldersInboxUnreadCount() + ; + + RL.setTitle(('' === sEmail ? '' : + (0 < ifoldersInboxUnreadCount ? '(' + ifoldersInboxUnreadCount + ') ' : ' ') + sEmail + ' - ') + Utils.i18n('TITLES/MAILBOX')); +}; + MailBoxScreen.prototype.onShow = function () { - var sEmail = RL.data().accountEmail(); - RL.setTitle(('' === sEmail ? '' : sEmail + ' - ') + Utils.i18n('TITLES/MAILBOX')); + this.setNewTitle(); }; /** @@ -15346,6 +15364,10 @@ MailBoxScreen.prototype.onStart = function () oData.usePreviewPane.subscribe(function (bValue) { $html.toggleClass('rl-no-preview-pane', !bValue); }); + + oData.foldersInboxUnreadCount.subscribe(function () { + this.setNewTitle(); + }, this); }; MailBoxScreen.prototype.onBuild = function () diff --git a/rainloop/v/0.0.0/static/js/app.min.js b/rainloop/v/0.0.0/static/js/app.min.js index 8bb46275b..d3907b8d6 100644 --- a/rainloop/v/0.0.0/static/js/app.min.js +++ b/rainloop/v/0.0.0/static/js/app.min.js @@ -1,8 +1,8 @@ /*! RainLoop Webmail Main Module (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ !function(a,b,c,d,e,f,g,h){"use strict";function i(){this.sBase="#/",this.sCdnStaticDomain=Ab.settingsGet("CdnStaticDomain"),this.sVersion=Ab.settingsGet("Version"),this.sSpecSuffix=Ab.settingsGet("AuthAccountHash")||"0",this.sServer=(Ab.settingsGet("IndexFile")||"./")+"?",this.sCdnStaticDomain=""===this.sCdnStaticDomain?this.sCdnStaticDomain:"/"===this.sCdnStaticDomain.substr(-1)?this.sCdnStaticDomain:this.sCdnStaticDomain+"/"}function j(a,c,d,e){var f={DisableHtml:!1,onSwitch:!1,LangSwitcherConferm:"EDITOR_TEXT_SWITCHER_CONFIRM",LangSwitcherTextLabel:"EDITOR_SWITCHER_TEXT_LABEL",LangSwitcherHtmlLabel:"EDITOR_SWITCHER_HTML_LABEL"};this.bIe=!!/msie/.test(navigator.userAgent.toLowerCase()),e=b.extend(f,ob.isUnd(e)?{}:e),this.oOptions=e,this.bOnlyPlain=!!this.oOptions.DisableHtml,this.fOnSwitch=this.oOptions.onSwitch,this.textarea=b(a).empty().addClass("editorTextArea"),this.htmlarea=b(c).empty().addClass("editorHtmlArea").prop("contentEditable","true"),this.toolbar=b(d).empty().addClass("editorToolbar"),j.htmlInitEditor.apply(this),j.htmlInitToolbar.apply(this),j.htmlAttachEditorEvents.apply(this),this.bOnlyPlain&&this.toolbar.hide()}function k(a,b,c,d,e){this.list=a,this.selectedItem=b,this.selectedItem.extend({toggleSubscribe:[null,function(a){a&&a.selected(!1)},function(a){a&&a.selected(!0)}]}),this.oContentVisible=null,this.oContentScrollable=null,this.sItemSelector=c,this.sItemSelectedSelector=d,this.sItemCheckedSelector=e,this.sLastUid="",this.oCallbacks={},this.iSelectTimer=0,this.bUseKeyboard=!0,this.emptyFunction=function(){},this.useItemSelectCallback=!0,this.throttleSelection=!1,this.selectedItem.subscribe(function(a){this.useItemSelectCallback&&(this.throttleSelection?(this.throttleSelection=!1,this.selectItemCallbacksThrottle(a)):this.selectItemCallbacks(a))},this);var f=this,g=[],i=null;this.list.subscribe(function(){var a=this,b=this.list();ob.isArray(b)&&h.each(b,function(b){b.checked()&&g.push(a.getItemUid(b)),null===i&&b.selected()&&(i=a.getItemUid(b))})},this,"beforeChange"),this.list.subscribe(function(a){if(this.useItemSelectCallback=!1,this.selectedItem(null),ob.isArray(a)){var b=this,c=g.length;h.each(a,function(a){c>0&&-1b?b:a))},this),this.body=null,this.isRtl=c.observable(!1),this.isHtml=c.observable(!1),this.hasImages=c.observable(!1),this.attachments=c.observableArray([]),this.priority=c.observable(mb.MessagePriority.Normal),this.aDraftInfo=[],this.sMessageId="",this.sInReplyTo="",this.sReferences="",this.parentUid=c.observable(0),this.threads=c.observableArray([]),this.threadsLen=c.observable(0),this.hasUnseenSubMessage=c.observable(!1),this.hasFlaggedSubMessage=c.observable(!1),this.lastInCollapsedThread=c.observable(!1),this.lastInCollapsedThreadLoading=c.observable(!1),this.threadsLenResult=c.computed(function(){var a=this.threadsLen();return 0===this.parentUid()&&a>0?a+1:""},this)}function y(){this.name=c.observable(""),this.fullName="",this.fullNameRaw="",this.fullNameHash="",this.delimiter="",this.namespace="",this.deep=0,this.selectable=!1,this.existen=!0,this.isNamespaceFolder=!1,this.isGmailFolder=!1,this.isUnpaddigFolder=!1,this.type=c.observable(mb.FolderType.User),this.selected=c.observable(!1),this.edited=c.observable(!1),this.collapsed=c.observable(!0),this.subScribed=c.observable(!0),this.subFolders=c.observableArray([]),this.deleteAccess=c.observable(!1),this.actionBlink=c.observable(!1).extend({falseTimeout:1e3}),this.nameForEdit=c.observable(""),this.name.subscribe(function(a){this.nameForEdit(a)},this),this.edited.subscribe(function(a){a&&this.nameForEdit(this.name())},this),this.canBeEdited=c.computed(function(){return mb.FolderType.User===this.type()},this),this.privateMessageCountAll=c.observable(0),this.privateMessageCountUnread=c.observable(0),this.collapsedPrivate=c.observable(!0)}function z(a,b){this.email=a,this.deleteAccess=c.observable(!1),this.canBeDalete=c.observable(b)}function A(a,b,d){this.id=a,this.email=c.observable(b),this.name=c.observable(""),this.replyTo=c.observable(""),this.bcc=c.observable(""),this.deleteAccess=c.observable(!1),this.canBeDalete=c.observable(d)}function B(){p.call(this,"Popups","PopupsFolderClear"),this.selectedFolder=c.observable(null),this.clearingProcess=c.observable(!1),this.clearingError=c.observable(""),this.folderFullNameForClear=c.computed(function(){var a=this.selectedFolder();return a?a.printableFullName():""},this),this.folderNameForClear=c.computed(function(){var a=this.selectedFolder();return a?a.localName():""},this),this.dangerDescHtml=c.computed(function(){return ob.i18n("POPUPS_CLEAR_FOLDER/DANGER_DESC_HTML_1",{FOLDER:this.folderNameForClear()})},this),this.clearCommand=ob.createCommand(this,function(){var a=this,b=this.selectedFolder();b&&(Ab.data().message(null),Ab.data().messageList([]),this.clearingProcess(!0),Ab.cache().setFolderHash(b.fullNameRaw,""),Ab.remote().folderClear(function(b,c){a.clearingProcess(!1),mb.StorageResultType.Success===b&&c&&c.Result?(Ab.reloadMessageList(!0),a.cancelCommand()):c&&c.ErrorCode?a.clearingError(ob.getNotification(c.ErrorCode)):a.clearingError(ob.getNotification(mb.Notification.MailServerError))},b.fullNameRaw))},function(){var a=this.selectedFolder(),b=this.clearingProcess();return!b&&null!==a}),r.constructorEnd(this)}function C(){p.call(this,"Popups","PopupsFolderCreate"),ob.initOnStartOrLangChange(function(){this.sNoParentText=ob.i18n("POPUPS_CREATE_FOLDER/SELECT_NO_PARENT")},this),this.folderName=c.observable(""),this.focusTrigger=c.observable(!1),this.selectedParentValue=c.observable(lb.Values.UnuseOptionValue),this.parentFolderSelectList=c.computed(function(){var a=Ab.data(),b=[],c=null,d=null,e=a.folderList(),f=function(a){return a?a.isSystemFolder()?a.name()+" "+a.manageFolderSystemName():a.name():""};return b.push(["",this.sNoParentText]),""!==a.namespace&&(c=function(b){return a.namespace!==b.fullNameRaw.substr(0,a.namespace.length)}),Ab.folderListOptionsBuilder([],e,[],b,null,c,d,f)},this),this.createFolder=ob.createCommand(this,function(){var a=Ab.data(),b=this.selectedParentValue();""===b&&1=a?1:a},this),this.contactsPagenator=c.computed(ob.computedPagenatorHelper(this.contactsPage,this.contactsPageCount)),this.emptySelection=c.observable(!0),this.viewClearSearch=c.observable(!1),this.viewID=c.observable(""),this.viewProperties=c.observableArray([]),this.viewPropertiesNames=this.viewProperties.filter(function(a){return-10&&b>0&&a>b},this),this.hasMessages=c.computed(function(){return 0'),e.after(f),e.remove()),f&&f[0]&&f.attr("data-href",g).attr("data-theme",a[0]).text(a[1]),d.themeTrigger(mb.SaveSettingsStep.TrueResult))}).always(function(){d.iTimer=a.setTimeout(function(){d.themeTrigger(mb.SaveSettingsStep.Idle)},1e3),d.oLastAjax=null})),Ab.remote().saveSettings(null,{Theme:c})},this)}function _(){ob.initDataConstructorBySettings(this)}function ab(){_.call(this);var a=function(a){return function(){var b=Ab.cache().getFolderFromCacheList(a());b&&b.type(mb.FolderType.User)}},d=function(a){return function(b){var c=Ab.cache().getFolderFromCacheList(b);c&&c.type(a)}};this.devEmail="",this.devLogin="",this.devPassword="",this.accountEmail=c.observable(""),this.accountIncLogin=c.observable(""),this.accountOutLogin=c.observable(""),this.projectHash=c.observable(""),this.threading=c.observable(!1),this.lastFoldersHash="",this.remoteSuggestions=!1,this.sentFolder=c.observable(""),this.draftFolder=c.observable(""),this.spamFolder=c.observable(""),this.trashFolder=c.observable(""),this.sentFolder.subscribe(a(this.sentFolder),this,"beforeChange"),this.draftFolder.subscribe(a(this.draftFolder),this,"beforeChange"),this.spamFolder.subscribe(a(this.spamFolder),this,"beforeChange"),this.trashFolder.subscribe(a(this.trashFolder),this,"beforeChange"),this.sentFolder.subscribe(d(mb.FolderType.SentItems),this),this.draftFolder.subscribe(d(mb.FolderType.Draft),this),this.spamFolder.subscribe(d(mb.FolderType.Spam),this),this.trashFolder.subscribe(d(mb.FolderType.Trash),this),this.draftFolderNotEnabled=c.computed(function(){return""===this.draftFolder()||lb.Values.UnuseOptionValue===this.draftFolder()},this),this.displayName=c.observable(""),this.signature=c.observable(""),this.replyTo=c.observable(""),this.accounts=c.observableArray([]),this.accountsLoading=c.observable(!1).extend({throttle:100}),this.identities=c.observableArray([]),this.identitiesLoading=c.observable(!1).extend({throttle:100}),this.namespace="",this.folderList=c.observableArray([]),this.foldersListError=c.observable(""),this.foldersLoading=c.observable(!1),this.foldersCreating=c.observable(!1),this.foldersDeleting=c.observable(!1),this.foldersRenaming=c.observable(!1),this.currentFolder=c.observable(null).extend({toggleSubscribe:[null,function(a){a&&a.selected(!1)},function(a){a&&a.selected(!0)}]}),this.currentFolderFullNameRaw=c.computed(function(){return this.currentFolder()?this.currentFolder().fullNameRaw:""},this),this.currentFolderFullName=c.computed(function(){return this.currentFolder()?this.currentFolder().fullName:""},this),this.currentFolderFullNameHash=c.computed(function(){return this.currentFolder()?this.currentFolder().fullNameHash:""},this),this.currentFolderName=c.computed(function(){return this.currentFolder()?this.currentFolder().name():""},this),this.folderListSystemNames=c.computed(function(){var a=["INBOX"],b=this.folderList(),c=this.sentFolder(),d=this.draftFolder(),e=this.spamFolder(),f=this.trashFolder();return ob.isArray(b)&&0=a?1:a},this),this.mainMessageListSearch=c.computed({read:this.messageListSearch,write:function(a){tb.setHash(Ab.link().mailBox(this.currentFolderFullNameHash(),1,ob.trim(a.toString())))},owner:this}),this.messageListError=c.observable(""),this.messageListLoading=c.observable(!1),this.messageListIsNotCompleted=c.observable(!1),this.messageListCompleteLoadingThrottle=c.observable(!1).extend({throttle:200}),this.messageListCompleteLoading=c.computed(function(){var a=this.messageListLoading(),b=this.messageListIsNotCompleted();return a||b},this),this.messageListCompleteLoading.subscribe(function(a){this.messageListCompleteLoadingThrottle(a)},this),this.messageList.subscribe(h.debounce(function(a){h.each(a,function(a){a.newForAnimation()&&a.newForAnimation(!1)})},500)),this.staticMessageList=new x,this.message=c.observable(null),this.messageLoading=c.observable(!1),this.messageLoadingThrottle=c.observable(!1).extend({throttle:50}),this.messageLoading.subscribe(function(a){this.messageLoadingThrottle(a)},this),this.messageFullScreenMode=c.observable(!1),this.messageError=c.observable(""),this.messagesBodiesDom=c.observable(null),this.messagesBodiesDom.subscribe(function(a){!a||a instanceof jQuery||this.messagesBodiesDom(b(a))},this),this.messageActiveDom=c.observable(null),this.isMessageSelected=c.computed(function(){return null!==this.message()},this),this.currentMessage=c.observable(null),this.message.subscribe(function(a){null===a&&(this.currentMessage(null),this.hideMessageBodies())},this),this.messageListChecked=c.computed(function(){return h.filter(this.messageList(),function(a){return a.checked()})},this),this.messageListCheckedOrSelected=c.computed(function(){var a=this.messageListChecked(),b=this.currentMessage();return h.union(a,b?[b]:[])},this),this.messageListCheckedUids=c.computed(function(){var a=[];return h.each(this.messageListChecked(),function(b){b&&(a.push(b.uid),00?Math.ceil(b/a*100):0},this),this.useKeyboardShortcuts=c.observable(!0),this.googleActions=c.observable(!1),this.googleLoggined=c.observable(!1),this.googleUserName=c.observable(""),this.facebookActions=c.observable(!1),this.facebookLoggined=c.observable(!1),this.facebookUserName=c.observable(""),this.twitterActions=c.observable(!1),this.twitterLoggined=c.observable(!1),this.twitterUserName=c.observable(""),this.customThemeType=c.observable(mb.CustomThemeType.Light),this.purgeMessageBodyCacheThrottle=h.throttle(this.purgeMessageBodyCache,3e4)}function bb(){this.oRequests={}}function cb(){bb.call(this),this.oRequests={}}function db(){this.oEmailsPicsHashes={},this.oServices={}}function eb(){db.call(this),this.oFoldersCache={},this.oFoldersNamesCache={},this.oFolderHashCache={},this.oFolderUidNextCache={},this.oMessageListHashCache={},this.oMessageFlagsCache={},this.oNewMessage={},this.oRequestedMessage={}}function fb(a){q.call(this,"settings",a),this.menu=c.observableArray([]),this.oCurrentSubScreen=null,this.oViewModelPlace=null}function gb(){q.call(this,"login",[K])}function hb(){q.call(this,"mailbox",[M,O,P,Q]),this.oLastRoute={}}function ib(){fb.call(this,[N,R,S]),ob.initOnStartOrLangChange(function(){this.sSettingsTitle=ob.i18n("TITLES/SETTINGS")},this,function(){Ab.setTitle(this.sSettingsTitle)})}function jb(){o.call(this),this.oSettings=null,this.oPlugins=null,this.oLink=null,this.oLocal=null,this.isLocalAutocomplete=!0,this.popupVisibility=c.observable(!1),this.iframe=b('