mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-08-07 16:14:58 +00:00
automatically scroll to end of log
This commit is contained in:
parent
8e7e4f56e3
commit
2dacceb1d9
@ -3,6 +3,8 @@ Ext.define('PVE.grig.LogView', {
|
||||
|
||||
alias: ['widget.pveLogView'],
|
||||
|
||||
scrollToEnd: true,
|
||||
|
||||
initComponent : function() {
|
||||
var me = this;
|
||||
|
||||
@ -22,26 +24,101 @@ Ext.define('PVE.grig.LogView', {
|
||||
}
|
||||
});
|
||||
|
||||
var scrollEndMarker = false;
|
||||
var autoscroll = true;
|
||||
|
||||
var scrollToEndFn = function() {
|
||||
var vertScroller = me.getVerticalScroller();
|
||||
if (!(vertScroller && vertScroller.scrollEl)) {
|
||||
return;
|
||||
}
|
||||
|
||||
var vertScrollerEl = vertScroller.scrollEl;
|
||||
var vertScrollerElDom = vertScrollerEl.dom;
|
||||
var maxDown = vertScrollerElDom.scrollHeight -
|
||||
vertScrollerElDom.clientHeight -
|
||||
vertScrollerElDom.scrollTop;
|
||||
|
||||
scrollEndMarker = (maxDown <= 0);
|
||||
|
||||
if (me.scrollToEnd && scrollEndMarker) {
|
||||
autoscroll = true;
|
||||
}
|
||||
|
||||
if (!autoscroll) {
|
||||
return;
|
||||
}
|
||||
|
||||
vertScroller.scrollByDeltaY(maxDown);
|
||||
|
||||
// invalidate last page by removing last entry from cache
|
||||
store.prefetchData.removeAtKey(store.totalCount - 1);
|
||||
store.guaranteeRange(store.totalCount - store.pageSize,
|
||||
store.totalCount - 1);
|
||||
};
|
||||
|
||||
var onScroll = function() {
|
||||
var scroller = this;
|
||||
if (me.scrollToEnd && scrollEndMarker) {
|
||||
autoscroll = false;
|
||||
}
|
||||
};
|
||||
|
||||
Ext.apply(me, {
|
||||
store: store,
|
||||
features: [ {ftype: 'selectable'}],
|
||||
stateful: false,
|
||||
verticalScrollerType: 'paginggridscroller',
|
||||
loadMask: true,
|
||||
invalidateScrollerOnRefresh: false,
|
||||
viewConfig: {
|
||||
loadMask: false,
|
||||
trackOver: false,
|
||||
stripeRows: false
|
||||
},
|
||||
hideHeaders: true,
|
||||
columns: [
|
||||
{ header: "Text", dataIndex: 't', flex: 1 }
|
||||
]
|
||||
],
|
||||
listeners: {
|
||||
'scrollershow': function(scroller, orientation) {
|
||||
if (orientation !== 'vertical') {
|
||||
return;
|
||||
}
|
||||
scroller.on('afterrender', function() {
|
||||
me.mon(scroller.scrollEl, 'scroll', onScroll, scroller);
|
||||
});
|
||||
},
|
||||
'scrollerhide': function(scroller, orientation) {
|
||||
if (orientation !== 'vertical') {
|
||||
return;
|
||||
}
|
||||
autoscroll = false;
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
var load_task = new Ext.util.DelayedTask();
|
||||
|
||||
var run_load_task = function() {
|
||||
if (!store.totalCount) {
|
||||
store.guaranteeRange(0, store.pageSize - 1);
|
||||
} else {
|
||||
scrollToEndFn();
|
||||
}
|
||||
load_task.delay(1000, run_load_task);
|
||||
};
|
||||
|
||||
if (me.scrollToEnd) {
|
||||
run_load_task();
|
||||
} else {
|
||||
store.guaranteeRange(0, store.pageSize - 1);
|
||||
}
|
||||
|
||||
me.on('destroy', function() {
|
||||
load_task.cancel();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user