11    if (typeof JSROOT != 
"object") {
 
   12       var e1 = 
new Error(
"httptextlog.js requires JSROOT to be already loaded");
 
   13       e1.source = 
"httptextlog.js";
 
   17    function MakeMsgListRequest(hitem, item) {
 
   21       var arg = 
"&max=1000";
 
   22       if (
'last-id' in item) arg+= 
"&id="+item[
'last-id'];
 
   23       return 'exe.json.gz?method=Select' + arg;
 
   26    function AfterMsgListRequest(hitem, item, obj) {
 
   29       if (item==null) 
return;
 
   32          delete item[
'last-id'];
 
   36       if (obj._typename != 
'TList') 
return;
 
   39       obj._typename = 
"TMsgList";
 
   41       if (obj.arr.length>0) {
 
   42          item[
'last-id'] = obj.arr[0].fString;
 
   45          if (!(
'clear' in item))
 
   46             item[
'clear'] = 
function() { 
delete this[
'last-id']; }
 
   51    function DrawMsgList(divid, lst, opt) {
 
   53       var painter = 
new JSROOT.TBasePainter();
 
   54       painter.SetDivId(divid);
 
   56       painter.Draw = 
function(lst) {
 
   59          var frame = this.select_main();
 
   61          var main = frame.select(
"div");
 
   63             main = frame.append(
"div")
 
   64                         .style(
'max-width',
'100%')
 
   65                         .style(
'max-height',
'100%')
 
   66                         .style(
'overflow',
'auto');
 
   68             this.SetDivId(this.divid);
 
   71          var old = main.selectAll(
"pre");
 
   72          var newsize = old.size() + lst.arr.length - 1;
 
   76             old.select(
function(d,i) { 
return i < newsize - 1000 ? 
this : null; }).
remove();
 
   78          for (var i=lst.arr.length-1;i>0;i--)
 
   79             main.append(
"pre").style(
'margin',
'2px').html(lst.arr[i].fString);
 
   82       painter.RedrawObject = 
function(obj) {
 
   88       return painter.DrawingReady();
 
   92    JSROOT.addDrawFunc({name:
"TMsgList", icon:
"img_text", make_request:MakeMsgListRequest, after_request:AfterMsgListRequest, func:DrawMsgList, opt:
"list"});