]>
git.proxmox.com Git - pve-manager.git/blob - www/manager/panel/LogView.js
1 Ext
.define('PVE.panel.LogView', {
2 extend
: 'Ext.panel.Panel',
4 alias
: ['widget.pveLogView'],
14 getMaxDown: function(scrollToEnd
) {
17 var target
= me
.getTargetEl();
20 dom
.scrollTop
= dom
.scrollHeight
- dom
.clientHeight
;
23 var maxDown
= dom
.scrollHeight
- dom
.clientHeight
-
29 updateView: function(start
, end
, total
, text
) {
31 var el
= me
.dataCmp
.el
;
33 if (me
.viewInfo
&& me
.viewInfo
.start
=== start
&&
34 me
.viewInfo
.end
=== end
&& me
.viewInfo
.total
=== total
&&
35 me
.viewInfo
.textLength
=== text
.length
) {
36 return; // same content
39 var maxDown
= me
.getMaxDown();
40 var scrollToEnd
= (maxDown
<= 0) && me
.scrollToEnd
;
42 el
.setStyle('padding-top', start
*me
.lineHeight
);
44 me
.dataCmp
.setHeight(total
*me
.lineHeight
);
54 textLength
: text
.length
58 doAttemptLoad: function(start
) {
61 PVE
.Utils
.API2Request({
68 success: function(response
) {
69 PVE
.Utils
.setErrorMask(me
, false);
70 var list
= response
.result
.data
;
71 var total
= response
.result
.total
;
72 var first
= 0, last
= 0;
74 Ext
.Array
.each(list
, function(item
) {
75 if (!first
|| item
.n
< first
) {
78 if (!last
|| item
.n
> last
) {
81 text
= text
+ Ext
.htmlEncode(item
.t
) + "<br>";
84 if (first
&& last
&& total
) {
85 me
.updateView(first
-1 , last
-1, total
, text
);
87 me
.updateView(0, 0, 0, '');
90 failure: function(response
) {
91 var msg
= response
.htmlStatus
;
92 PVE
.Utils
.setErrorMask(me
, msg
);
97 attemptLoad: function(start
) {
100 me
.loadTask
= Ext
.create('Ext.util.DelayedTask', me
.doAttemptLoad
, me
, []);
102 me
.loadTask
.delay(200, me
.doAttemptLoad
, me
, [start
]);
105 requestUpdate: function(top
, force
) {
108 if (top
=== undefined) {
109 var target
= me
.getTargetEl();
110 top
= target
.dom
.scrollTop
;
113 var viewStart
= parseInt((top
/ me
.lineHeight
) - 1, 10);
117 var viewEnd
= parseInt(((top
+ me
.getHeight())/ me
.lineHeight
) + 1, 10);
118 var info
= me
.viewInfo
;
119 if (info
&& !force
) {
120 if (viewStart
>= info
.start
&& viewEnd
<= info
.end
) {
124 var line
= parseInt((top
/ me
.lineHeight
) - (me
.pageSize
/ 2) + 10, 10);
129 me
.attemptLoad(line
);
132 afterRender: function() {
135 me
.callParent(arguments
);
137 Ext
.Function
.defer(function() {
138 var target
= me
.getTargetEl();
139 target
.on('scroll', function(e
) {
147 /*jslint confusion: true */
150 me
.callParent(arguments
);
152 var target
= me
.getTargetEl();
153 target
.dom
.scrollTop
= me
.savedScrollTop
;
155 me
.task
= Ext
.TaskManager
.start({
157 if (!me
.scrollToEnd
|| !me
.viewInfo
) {
161 var maxDown
= me
.getMaxDown();
166 me
.requestUpdate(undefined, true);
175 var target
= me
.getTargetEl();
176 // Hack: chrome reset scrollTop to 0, so we save/restore
177 me
.savedScrollTop
= target
.dom
.scrollTop
;
179 Ext
.TaskManager
.stop(me
.task
);
182 me
.callParent(arguments
);
185 onDestroy: function() {
189 Ext
.TaskManager
.stop(me
.task
);
192 me
.callParent(arguments
);
195 initComponent : function() {
199 throw "no url specified";
202 me
.dataCmp
= Ext
.create('Ext.Component', {
203 style
: 'font:normal 11px tahoma, arial, verdana, sans-serif;' +
204 'line-height: ' + me
.lineHeight
.toString() + 'px; white-space: pre;'
211 bodyStyle
: 'padding: 5px;'