diff --git a/app/js/controllers.js b/app/js/controllers.js index 2f60e5d2..e6919d1e 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -440,7 +440,11 @@ angular.module('myApp.controllers', ['myApp.i18n']) if (peerData.peerString == $scope.curDialog.peer && peerData.messageID == $scope.curDialog.messageID && !peerData.startParam) { - $scope.$broadcast(peerData.messageID ? 'ui_history_change_scroll' : 'ui_history_focus'); + if (peerData.messageID) { + $scope.$broadcast('ui_history_change_scroll', true); + } else { + $scope.$broadcast('ui_history_focus'); + } } else { var peerID = AppPeersManager.getPeerID(peerData.peerString); var username = AppPeersManager.getPeer(peerID).username; @@ -1108,7 +1112,6 @@ angular.module('myApp.controllers', ['myApp.i18n']) documents: 'inputMessagesFilterDocument', audio: 'inputMessagesFilterVoice' }, - unfocusMessagePromise, jump = 0, moreJump = 0, moreActive = false, @@ -1131,7 +1134,7 @@ angular.module('myApp.controllers', ['myApp.i18n']) newDialog.messageID) { messageFocusHistory(); } - else if (newDialog.peerID) { + else if (peerID) { updateHistoryPeer(true); loadHistory(); } @@ -1292,15 +1295,6 @@ angular.module('myApp.controllers', ['myApp.i18n']) var focusedMsgID = $scope.curDialog.messageID || 0; $scope.$broadcast('messages_focus', focusedMsgID); $scope.$broadcast('ui_history_change_scroll', true); - - $timeout.cancel(unfocusMessagePromise); - if (focusedMsgID) { - unfocusMessagePromise = $timeout(function () { - if ($scope.curDialog.messageID == focusedMsgID) { - $scope.$broadcast('messages_focus', 0); - } - }, 2800); - } } else { loadHistory(); } @@ -1442,10 +1436,10 @@ angular.module('myApp.controllers', ['myApp.i18n']) $scope.state.mayBeHasMore = true; - // console.log(dT(), 'start load history', $scope.curDialog); + console.log(dT(), 'start load history', $scope.curDialog); getMessagesPromise.then(function (historyResult) { if (curJump != jump) return; - // console.log(dT(), 'history loaded', angular.copy(historyResult)); + console.log(dT(), 'history loaded', angular.copy(historyResult)); var fetchedLength = historyResult.history.length; @@ -1494,15 +1488,6 @@ angular.module('myApp.controllers', ['myApp.i18n']) }); $scope.$broadcast('ui_history_change'); - $timeout.cancel(unfocusMessagePromise); - if (focusedMsgID) { - unfocusMessagePromise = $timeout(function () { - if ($scope.curDialog.messageID == focusedMsgID) { - $scope.$broadcast('messages_focus', 0); - } - }, 2800); - } - if (!$rootScope.idle.isIDLE) { AppMessagesManager.readHistory($scope.curDialog.peerID); } diff --git a/app/js/directives.js b/app/js/directives.js index 360930ab..383ab54b 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1169,9 +1169,11 @@ angular.module('myApp.directives', ['myApp.filters']) var unreadSplit, focusMessage; var newScrollTop = false; - // console.trace('change scroll'); + var afterScrollAdd; + // console.trace(dT(), 'change scroll', animated); if (!noFocus && (focusMessage = $('.im_message_focus:visible', scrollableWrap)[0])) { + // console.log(dT(), 'change scroll to focus', focusMessage); var ch = scrollableWrap.clientHeight, st = scrollableWrap.scrollTop, ot = focusMessage.offsetTop, @@ -1180,12 +1182,29 @@ angular.module('myApp.directives', ['myApp.filters']) newScrollTop = Math.max(0, ot - Math.floor(ch / 2) + 26); } atBottom = false; + + afterScrollAdd = function () { + var unfocusMessagePromise = $(focusMessage).data('unfocus_promise'); + if (unfocusMessagePromise) { + $timeout.cancel(unfocusMessagePromise); + $(focusMessage).removeClass('im_message_focus_active'); + } + $timeout(function () { + $(focusMessage).addClass('im_message_focus_active'); + unfocusMessagePromise = $timeout(function () { + $(focusMessage).removeClass('im_message_focus_active'); + $(focusMessage).data('unfocus_promise', false); + }, 2800); + $(focusMessage).data('unfocus_promise', unfocusMessagePromise); + }); + } + } else if (unreadSplit = $('.im_message_unread_split:visible', scrollableWrap)[0]) { - // console.log('change scroll unread', unreadSplit.offsetTop); + // console.log(dT(), 'change scroll unread', unreadSplit.offsetTop); newScrollTop = Math.max(0, unreadSplit.offsetTop - 52); atBottom = false; } else { - // console.log('change scroll bottom'); + // console.log(dT(), 'change scroll bottom'); newScrollTop = scrollableWrap.scrollHeight; atBottom = true; } @@ -1196,6 +1215,9 @@ angular.module('myApp.directives', ['myApp.filters']) $(scrollableWrap).trigger('scroll'); scrollTopInitial = scrollableWrap.scrollTop; }); + if (afterScrollAdd) { + afterScrollAdd(); + } } if (animated) { $(scrollableWrap).animate({scrollTop: newScrollTop}, 200, afterScroll); diff --git a/app/less/app.less b/app/less/app.less index 4c720f4e..d6b2a6ca 100644 --- a/app/less/app.less +++ b/app/less/app.less @@ -3878,7 +3878,7 @@ ul.chat_modal_migrate_list { } } -.im_message_focus { +.im_message_focus_active { .im_message_date, .im_message_document_size, .audio_player_duration,