From 79dbe85bdf6e70f3f076dc6e0f18bc69cb322f65 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 6 Jul 2021 22:58:36 +0300 Subject: [PATCH] Sort comments by date and author --- apps/common/main/lib/controller/Comments.js | 46 ++++++++++++++--- .../main/lib/template/CommentsPanel.template | 4 ++ apps/common/main/lib/view/Comments.js | 51 ++++++++++++++++++- apps/common/main/resources/less/comments.less | 19 +++++++ apps/documenteditor/main/locale/en.json | 4 ++ apps/presentationeditor/main/locale/en.json | 4 ++ apps/spreadsheeteditor/main/locale/en.json | 4 ++ 7 files changed, 124 insertions(+), 8 deletions(-) diff --git a/apps/common/main/lib/controller/Comments.js b/apps/common/main/lib/controller/Comments.js index fda45bab88..21e1638f73 100644 --- a/apps/common/main/lib/controller/Comments.js +++ b/apps/common/main/lib/controller/Comments.js @@ -102,7 +102,8 @@ define([ // work handlers - 'comment:closeEditing': _.bind(this.closeEditing, this) + 'comment:closeEditing': _.bind(this.closeEditing, this), + 'comment:sort': _.bind(this.setComparator, this) }, 'Common.Views.ReviewPopover': { @@ -144,10 +145,11 @@ define([ }.bind(this)); }, onLaunch: function () { + var filter = Common.localStorage.getKeysFilter(); + this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : ''; + this.collection = this.getApplication().getCollection('Common.Collections.Comments'); - if (this.collection) { - this.collection.comparator = function (collection) { return -collection.get('time'); }; - } + this.setComparator(); this.popoverComments = new Common.Collections.Comments(); if (this.popoverComments) { @@ -204,6 +206,33 @@ define([ }, // + setComparator: function(type) { + if (this.collection) { + var sort = (type !== undefined); + if (type === undefined) { + type = Common.localStorage.getItem(this.appPrefix + "comments-sort") || 'date'; + } + Common.localStorage.setItem(this.appPrefix + "comments-sort", type); + Common.Utils.InternalSettings.set(this.appPrefix + "comments-sort", type); + + if (type=='position') { + } else if (type=='author') { + this.collection.comparator = function (collection) { + return collection.get('parsedName').toLowerCase(); + }; + } else { // date + this.collection.comparator = function (collection) { + return -collection.get('time'); + }; + } + sort && this.updateComments(true); + } + }, + + getComparator: function() { + return Common.Utils.InternalSettings.get(this.appPrefix + "comments-sort") || 'date'; + }, + onCreateComment: function (panel, commentVal, editMode, hidereply, documentFlag) { if (this.api && commentVal && commentVal.length > 0) { var comment = buildCommentData(); // new asc_CCommentData(null); @@ -776,9 +805,11 @@ define([ ((data.asc_getTime() == '') ? new Date() : new Date(this.stringUtcToLocalDate(data.asc_getTime()))); var user = this.userCollection.findOriginalUser(data.asc_getUserId()); + var needSort = (this.getComparator() == 'author') && (data.asc_getUserName() !== comment.get('username')); comment.set('comment', data.asc_getText()); comment.set('userid', data.asc_getUserId()); comment.set('username', data.asc_getUserName()); + comment.set('parsedName', AscCommon.UserInfoParser.getParsedName(data.asc_getUserName())); comment.set('usercolor', (user) ? user.get('color') : null); comment.set('resolved', data.asc_getSolved()); comment.set('quote', data.asc_getQuoteText()); @@ -804,6 +835,7 @@ define([ id : Common.UI.getId(), userid : data.asc_getReply(i).asc_getUserId(), username : data.asc_getReply(i).asc_getUserName(), + parsedName : AscCommon.UserInfoParser.getParsedName(data.asc_getReply(i).asc_getUserName()), usercolor : (user) ? user.get('color') : null, date : t.dateToLocaleTimeString(dateReply), reply : data.asc_getReply(i).asc_getText(), @@ -825,7 +857,7 @@ define([ } if (!silentUpdate) { - this.updateComments(false, true); + this.updateComments(needSort, !needSort); // if (this.getPopover() && this.getPopover().isVisible()) { // this._dontScrollToComment = true; @@ -1089,7 +1121,7 @@ define([ var i, end = true; - if (_.isUndefined(disableSort)) { + if (!disableSort) { this.collection.sort(); } @@ -1253,6 +1285,7 @@ define([ guid : data.asc_getGuid(), userid : data.asc_getUserId(), username : data.asc_getUserName(), + parsedName : AscCommon.UserInfoParser.getParsedName(data.asc_getUserName()), usercolor : (user) ? user.get('color') : null, date : this.dateToLocaleTimeString(date), quote : data.asc_getQuoteText(), @@ -1299,6 +1332,7 @@ define([ id : Common.UI.getId(), userid : data.asc_getReply(i).asc_getUserId(), username : data.asc_getReply(i).asc_getUserName(), + parsedName : AscCommon.UserInfoParser.getParsedName(data.asc_getReply(i).asc_getUserName()), usercolor : (user) ? user.get('color') : null, date : this.dateToLocaleTimeString(date), reply : data.asc_getReply(i).asc_getText(), diff --git a/apps/common/main/lib/template/CommentsPanel.template b/apps/common/main/lib/template/CommentsPanel.template index bcbe186739..5de0e80d79 100644 --- a/apps/common/main/lib/template/CommentsPanel.template +++ b/apps/common/main/lib/template/CommentsPanel.template @@ -10,4 +10,8 @@ +
+ +
+
diff --git a/apps/common/main/lib/view/Comments.js b/apps/common/main/lib/view/Comments.js index b1e9090ea7..749a655f54 100644 --- a/apps/common/main/lib/view/Comments.js +++ b/apps/common/main/lib/view/Comments.js @@ -293,6 +293,9 @@ define([ Common.UI.BaseView.prototype.initialize.call(this, options); this.store = this.options.store; + + var filter = Common.localStorage.getKeysFilter(); + this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : ''; }, render: function () { @@ -304,7 +307,8 @@ define([ textAddComment: me.textAddComment, textCancel: me.textCancel, textEnterCommentHint: me.textEnterCommentHint, - maxCommLength: Asc.c_oAscMaxCellOrCommentLength + maxCommLength: Asc.c_oAscMaxCellOrCommentLength, + textComments: me.textComments })); this.buttonAddCommentToDoc = new Common.UI.Button({ @@ -321,9 +325,44 @@ define([ enableToggle: false }); + this.buttonSort = new Common.UI.Button({ + parentEl: $('#comments-btn-sort', this.$el), + cls: 'btn-toolbar', + iconCls: 'toolbar__icon btn-rotate-270', + hint: this.textSort, + menu: new Common.UI.Menu({ + menuAlign: 'tr-br', + style: 'min-width: auto;', + items: [ + // { + // caption: this.mniPosition, + // value: 'position', + // checkable: true, + // checked: Common.localStorage.getItem(this.appPrefix + "comments-sort") === 'position', + // toggleGroup: 'sortcomments' + // }, + { + caption: this.mniAuthor, + value: 'author', + checkable: true, + checked: Common.localStorage.getItem(this.appPrefix + "comments-sort") === 'author', + toggleGroup: 'sortcomments' + }, + { + caption: this.mniDate, + value: 'date', + checkable: true, + checked: (Common.localStorage.getItem(this.appPrefix + "comments-sort") || 'date') === 'date', + toggleGroup: 'sortcomments' + } + ] + }) + }); + this.buttonAddCommentToDoc.on('click', _.bind(this.onClickShowBoxDocumentComment, this)); this.buttonAdd.on('click', _.bind(this.onClickAddDocumentComment, this)); this.buttonCancel.on('click', _.bind(this.onClickCancelDocumentComment, this)); + this.buttonSort.menu.on('item:toggle', _.bind(this.onSortClick, this)); this.txtComment = $('#comment-msg-new', this.el); this.txtComment.keydown(function (event) { @@ -730,6 +769,10 @@ define([ }); }, + onSortClick: function(menu, item, state) { + state && this.fireEvent('comment:sort', [item.value]); + }, + textComments : 'Comments', textAnonym : 'Guest', textAddCommentToDoc : 'Add Comment to Document', @@ -744,6 +787,10 @@ define([ textEdit : 'Edit', textAdd : "Add", textOpenAgain : "Open Again", - textHintAddComment : 'Add Comment' + textHintAddComment : 'Add Comment', + textSort: 'Sort comments', + mniPosition: 'Sort by Position', + mniAuthor: 'Sort by Authors', + mniDate: 'Sort by Date' }, Common.Views.Comments || {})) }); \ No newline at end of file diff --git a/apps/common/main/resources/less/comments.less b/apps/common/main/resources/less/comments.less index 415f98a0c4..4447724b1c 100644 --- a/apps/common/main/resources/less/comments.less +++ b/apps/common/main/resources/less/comments.less @@ -7,6 +7,24 @@ display: table-row; } + #comments-header { + position: absolute; + height: 45px; + left: 0; + top: 0; + right: 0; + padding: 12px; + overflow: hidden; + border-bottom: @scaled-one-px-value-ie solid @border-toolbar-ie; + border-bottom: @scaled-one-px-value solid @border-toolbar; + + label { + font-size: 12px; + font-weight: bold; + margin-top: 2px; + } + } + .messages-ct { position: absolute; overflow: hidden; @@ -14,6 +32,7 @@ right: 0; bottom: 45px; height: 300px; + padding-top: 45px; border-bottom: @scaled-one-px-value-ie solid @border-toolbar-ie; border-bottom: @scaled-one-px-value solid @border-toolbar; diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 92048ca45a..54c5148cfe 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -246,6 +246,10 @@ "Common.Views.Comments.textReply": "Reply", "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", + "Common.Views.Comments.textSort": "Sort comments", + "Common.Views.Comments.mniPosition": "Sort by Position", + "Common.Views.Comments.mniAuthor": "Sort by Authors", + "Common.Views.Comments.mniDate": "Sort by Date", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", "Common.Views.CopyWarningDialog.textTitle": "Copy, Cut and Paste Actions", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 4ef65a7f52..2be27c3b64 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -139,6 +139,10 @@ "Common.Views.Comments.textReply": "Reply", "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", + "Common.Views.Comments.textSort": "Sort comments", + "Common.Views.Comments.mniPosition": "Sort by Position", + "Common.Views.Comments.mniAuthor": "Sort by Authors", + "Common.Views.Comments.mniDate": "Sort by Date", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", "Common.Views.CopyWarningDialog.textTitle": "Copy, Cut and Paste Actions", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 5793314d5e..afd0e99928 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -187,6 +187,10 @@ "Common.Views.Comments.textReply": "Reply", "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", + "Common.Views.Comments.textSort": "Sort comments", + "Common.Views.Comments.mniPosition": "Sort by Position", + "Common.Views.Comments.mniAuthor": "Sort by Authors", + "Common.Views.Comments.mniDate": "Sort by Date", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", "Common.Views.CopyWarningDialog.textTitle": "Copy, Cut and Paste Actions",