From 4ddd069c95f38d7e90a5b9b0682bbb95d6b63978 Mon Sep 17 00:00:00 2001 From: Sergey Linev <S.Linev@gsi.de> Date: Wed, 22 Jul 2015 16:25:19 +0200 Subject: [PATCH] http: let read tree from file when using treeplayer in browser Signed-off-by: Bertrand Bellenot <bertrand.bellenot@cern.ch> --- etc/http/scripts/JSRootCore.js | 2 +- etc/http/scripts/JSRootPainter.jquery.js | 32 +++++++++++++++++------- net/http/src/TRootSniffer.cxx | 11 ++++++++ 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/etc/http/scripts/JSRootCore.js b/etc/http/scripts/JSRootCore.js index 2c52ba60166..a7dccf3d26c 100644 --- a/etc/http/scripts/JSRootCore.js +++ b/etc/http/scripts/JSRootCore.js @@ -74,7 +74,7 @@ } } (function(JSROOT) { - JSROOT.version = "3.7 22/07/2015"; + JSROOT.version = "3.7.1 22/07/2015"; JSROOT.source_dir = ""; JSROOT.source_min = false; diff --git a/etc/http/scripts/JSRootPainter.jquery.js b/etc/http/scripts/JSRootPainter.jquery.js index 59627ce9514..2fff6ca67df 100644 --- a/etc/http/scripts/JSRootPainter.jquery.js +++ b/etc/http/scripts/JSRootPainter.jquery.js @@ -168,6 +168,8 @@ } } + if ('_player' in hitem) can_click = true; + if (img2.length==0) img2 = img1; if (img1.length==0) img1 = has_childs ? "img_folder" : "img_page"; if (img2.length==0) img2 = has_childs ? "img_folderopen" : "img_page"; @@ -752,11 +754,12 @@ // ========== performs tree drawing on server ================== - JSROOT.TTreePlayer = function(itemname, url) { + JSROOT.TTreePlayer = function(itemname, url, askey) { JSROOT.TBasePainter.call(this); this.SetItemName(itemname); this.url = url; this.hist_painter = null; + this.askey = askey; return this; } @@ -838,12 +841,18 @@ url += '&_ret_object_=' + hname; var player = this; - - JSROOT.NewHttpRequest(url, 'object', function(res) { - if (res==null) return; - $("#"+player.drawid).empty(); - player.hist_painter = JSROOT.draw(player.drawid, res) - }).send(); + function SubmitDrawRequest() { + JSROOT.NewHttpRequest(url, 'object', function(res) { + if (res==null) return; + $("#"+player.drawid).empty(); + player.hist_painter = JSROOT.draw(player.drawid, res) + }).send(); + } + if (this.askey) { + // first let read tree from the file + this.askey = false; + JSROOT.NewHttpRequest(this.url + "/root.json", 'text', SubmitDrawRequest).send(); + } else SubmitDrawRequest(); } JSROOT.TTreePlayer.prototype.CheckResize = function(force) { @@ -857,7 +866,7 @@ } } - JSROOT.drawTreePlayer = function(hpainter, itemname) { + JSROOT.drawTreePlayer = function(hpainter, itemname, askey) { var url = hpainter.GetOnlineItemUrl(itemname); if (url == null) return null; @@ -870,11 +879,16 @@ var divid = d3.select(frame).attr('id'); - var player = new JSROOT.TTreePlayer(itemname, url); + var player = new JSROOT.TTreePlayer(itemname, url, askey); player.Show(divid); return player; } + JSROOT.drawTreePlayerKey = function(hpainter, itemname) { + // function used when tree is not yet loaded on the server + return JSROOT.drawTreePlayer(hpainter, itemname, true); + } + // ======================================================================= JSROOT.Painter.separ = null; diff --git a/net/http/src/TRootSniffer.cxx b/net/http/src/TRootSniffer.cxx index 0450669cffb..881519ebbbb 100644 --- a/net/http/src/TRootSniffer.cxx +++ b/net/http/src/TRootSniffer.cxx @@ -845,6 +845,17 @@ void TRootSniffer::ScanCollection(TRootSnifferScanRec &rec, TCollection *lst, } } else { obj_class = TClass::GetClass(key->GetClassName()); + if (obj_class && obj_class->InheritsFrom(TTree::Class())) { + if (rec.CanExpandItem()) { + // it is requested to expand tree element - read it + obj = key->ReadObj(); + if (obj) obj_class = obj->IsA(); + } else { + rec.SetField("_player", "JSROOT.drawTreePlayerKey"); + rec.SetField("_prereq", "jq2d"); + // rec.SetField("_more", "true"); // one could allow to extend + } + } } } -- GitLab