|
|
@ -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)
|
|
|
|