Merge pull request #905 from lorenzhs/dont-scroll-to-readmarker

[DISCUSS] Remove "scroll to readmarker" functionality
This commit is contained in:
Lorenz Hübschle-Schneider 2017-05-26 14:23:37 +02:00 committed by GitHub
commit d45763d736
2 changed files with 9 additions and 16 deletions

View file

@ -505,10 +505,8 @@ weechat.factory('connection',
} }
$rootScope.loadingLines = false; $rootScope.loadingLines = false;
// Only scroll to read marker if we didn't have all unread lines previously, but have them now // "Scroll" to maintain position
var scrollToReadmarker = !hadAllUnreadLines && buffer.lastSeen >= 0; $rootScope.scrollWithBuffer(/* moreLines */ true);
// Scroll to correct position
$rootScope.scrollWithBuffer(scrollToReadmarker, true);
}); });
}; };

View file

@ -162,7 +162,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
connection.requestNicklist(ab.id, function() { connection.requestNicklist(ab.id, function() {
$scope.showNicklist = $scope.updateShowNicklist(); $scope.showNicklist = $scope.updateShowNicklist();
// Scroll after nicklist has been loaded, as it may break long lines // Scroll after nicklist has been loaded, as it may break long lines
$rootScope.scrollWithBuffer(true); $rootScope.scrollWithBuffer();
}); });
} else { } else {
// Check if we should show nicklist or not // Check if we should show nicklist or not
@ -195,7 +195,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
} }
}; };
$rootScope.updateBufferBottom(true); $rootScope.updateBufferBottom(true);
$rootScope.scrollWithBuffer(true); $rootScope.scrollWithBuffer();
bl.onscroll = _.debounce(function() { bl.onscroll = _.debounce(function() {
$rootScope.updateBufferBottom(); $rootScope.updateBufferBottom();
}, 80); }, 80);
@ -211,7 +211,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
}); });
$timeout(function() { $timeout(function() {
$rootScope.scrollWithBuffer(true); $rootScope.scrollWithBuffer();
}); });
// Clear search term on buffer change // Clear search term on buffer change
@ -584,7 +584,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
} }
$rootScope.bufferBottom = eob.offsetTop <= bl.scrollTop + bl.clientHeight; $rootScope.bufferBottom = eob.offsetTop <= bl.scrollTop + bl.clientHeight;
}; };
$rootScope.scrollWithBuffer = function(scrollToReadmarker, moreLines) { $rootScope.scrollWithBuffer = function(moreLines) {
// First, get scrolling status *before* modification // First, get scrolling status *before* modification
// This is required to determine where we were in the buffer pre-change // This is required to determine where we were in the buffer pre-change
var bl = document.getElementById('bufferlines'); var bl = document.getElementById('bufferlines');
@ -595,14 +595,9 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
// Determine if we want to scroll at all // Determine if we want to scroll at all
// Give the check 3 pixels of slack so you don't have to hit // Give the check 3 pixels of slack so you don't have to hit
// the exact spot. This fixes a bug in some browsers // the exact spot. This fixes a bug in some browsers
if (((scrollToReadmarker || moreLines) && sTop < sVal) || (Math.abs(sTop - sVal) < 3)) { if ((moreLines && sTop < sVal) || (Math.abs(sTop - sVal) < 3)) {
var readmarker = document.querySelector(".readmarker"); if (moreLines) {
if (scrollToReadmarker && readmarker) { // We fetched more lines, keep the scroll position constant
// Switching channels, scroll to read marker
bl.scrollTop = readmarker.offsetTop - readmarker.parentElement.scrollHeight + readmarker.scrollHeight;
} else if (moreLines) {
// We fetched more lines but the read marker is still out of view
// Keep the scroll position constant
bl.scrollTop = bl.scrollHeight - bl.clientHeight - sVal; bl.scrollTop = bl.scrollHeight - bl.clientHeight - sVal;
} else { } else {
// New message, scroll with buffer (i.e. to bottom) // New message, scroll with buffer (i.e. to bottom)