diff --git a/apps/common/main/lib/collection/Users.js b/apps/common/main/lib/collection/Users.js
index 935224dcf..e3fa41a23 100644
--- a/apps/common/main/lib/collection/Users.js
+++ b/apps/common/main/lib/collection/Users.js
@@ -61,12 +61,11 @@ define([
},
getEditingCount: function() {
- var count = 0;
- this.each(function(user){
- user.get('online') && !user.get('view') && ++count;
- });
+ return this.filter(function(item){return item.get('online') && !item.get('view')}).length;
+ },
- return count;
+ getEditingOriginalCount: function() {
+ return this.chain().filter(function(item){return item.get('online') && !item.get('view')}).groupBy(function(item) {return item.get('idOriginal');}).size().value();
},
findUser: function(id) {
diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js
index 161a4013d..12243cd9c 100644
--- a/apps/common/main/lib/controller/ReviewChanges.js
+++ b/apps/common/main/lib/controller/ReviewChanges.js
@@ -691,7 +691,7 @@ define([
onUpdateUsers: function() {
var users = this.userCollection;
- this.popoverChanges.each(function (model) {
+ this.popoverChanges && this.popoverChanges.each(function (model) {
var user = users.findOriginalUser(model.get('userid'));
model.set('usercolor', (user) ? user.get('color') : null);
});
diff --git a/apps/common/main/lib/view/Header.js b/apps/common/main/lib/view/Header.js
index 1d8986488..97ccdeb4a 100644
--- a/apps/common/main/lib/view/Header.js
+++ b/apps/common/main/lib/view/Header.js
@@ -57,16 +57,18 @@ define([
var templateUserItem =
'
" class="<% if (!user.get("online")) { %> offline <% } if (user.get("view")) {%> viewmode <% } %>">' +
- ';" >' +
- '' +
- '
' +
+ '' +
+ '
;">
'+
+ '
' +
+ '<% if (len>1) { %>
<% } %>' +
+ '
'+
'';
var templateUserList = _.template(
'' +
- '<% _.each(users, function(item) { %>' +
- '<%= usertpl({user: item, fnEncode: fnEncode}) %>' +
- '<% }); %>' +
+ '<% for (originalId in users) { %>' +
+ '<%= usertpl({user: users[originalId][0], fnEncode: fnEncode, len: users[originalId].length}) %>' +
+ '<% } %>' +
'
');
var templateRightBox = '' +
@@ -115,63 +117,37 @@ define([
'' +
'';
- function onAddUser(model, collection, opts) {
- if ( $userList ) {
- var $ul = $userList.find('ul');
- if ( !$ul.length ) {
- $userList.html( templateUserList({
- users: collection.models,
- usertpl: _.template(templateUserItem),
- fnEncode: Common.Utils.String.htmlEncode
- })
- );
- } else {
- $ul.append( _.template(templateUserItem)({
- user: model,
- fnEncode: Common.Utils.String.htmlEncode
- }) );
- }
-
- $userList.scroller && $userList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true});
- }
-
- applyUsers( collection.getEditingCount() );
- };
-
- function onUsersChanged(model, collection) {
- if (model.changed.online != undefined && $userList) {
- $userList.find('#'+ model.get('iid'))[model.changed.online ? 'removeClass' : 'addClass']('offline');
- $userList.scroller && $userList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true});
- }
-
- applyUsers(model.collection.getEditingCount());
- };
-
function onResetUsers(collection, opts) {
var usercount = collection.getEditingCount();
if ( $userList ) {
if ( usercount > 1 || usercount > 0 && appConfig && !appConfig.isEdit && !appConfig.canComments) {
$userList.html(templateUserList({
- users: collection.models,
+ users: collection.chain().filter(function(item){return item.get('online') && !item.get('view')}).groupBy(function(item) {return item.get('idOriginal');}).value(),
usertpl: _.template(templateUserItem),
fnEncode: Common.Utils.String.htmlEncode
}));
- $userList.scroller = new Common.UI.Scroller({
- el: $userList.find('ul'),
- useKeyboard: true,
- minScrollbarLength: 40,
- alwaysVisibleY: true
- });
+ if (!$userList.scroller)
+ $userList.scroller = new Common.UI.Scroller({
+ el: $userList.find('ul'),
+ useKeyboard: true,
+ minScrollbarLength: 40,
+ alwaysVisibleY: true
+ });
+ $userList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true});
} else {
$userList.empty();
}
}
- applyUsers( usercount );
+ applyUsers( usercount, collection.getEditingOriginalCount() );
};
- function applyUsers(count) {
+ function onUsersChanged(model) {
+ onResetUsers(model.collection);
+ };
+
+ function applyUsers(count, originalCount) {
var has_edit_users = count > 1 || count > 0 && appConfig && !appConfig.isEdit && !appConfig.canComments; // has other user(s) who edit document
if ( has_edit_users ) {
$btnUsers
@@ -192,7 +168,7 @@ define([
$btnUsers.find('.caption')
.css({'font-size': ((has_edit_users) ? '12px' : '14px'),
'margin-top': ((has_edit_users) ? '0' : '-1px')})
- .html((has_edit_users) ? count : '+');
+ .html((has_edit_users) ? originalCount : '+');
var usertip = $btnUsers.data('bs.tooltip');
if ( usertip ) {
@@ -393,7 +369,7 @@ define([
storeUsers = this.options.storeUsers;
storeUsers.bind({
- add : onAddUser,
+ add : onUsersChanged,
change : onUsersChanged,
reset : onResetUsers
});
diff --git a/apps/common/main/resources/less/header.less b/apps/common/main/resources/less/header.less
index 4566602cc..9fae156cd 100644
--- a/apps/common/main/resources/less/header.less
+++ b/apps/common/main/resources/less/header.less
@@ -233,15 +233,22 @@
display: inline-block;
vertical-align: middle;
border: 1px solid @gray-dark;
+ margin: 0 5px 1px 0;
}
- .name {
- display: block;
- padding-left: 16px;
- margin-top: -5px;
+ .user-name {
+ color: @gray-deep;
+ font-size: 12px;
+ font-weight: bold;
white-space: nowrap;
- text-overflow: ellipsis;
- vertical-align: middle;
+ cursor: default;
+
+ label {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ vertical-align: middle;
+ max-width: 200px;
+ }
}
}
}