00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 var ViewerRoot = ViewerRoot || {};
00035
00037
00038
00039
00040
00041 ViewerRoot.launch = function() {
00042
00043 Debug.log("ViewerRoot.launch");
00044
00045 document.getElementById("omni").innerHTML = "<div id='omniHistogramViewer'></div>";
00046 ViewerRoot.omni = document.getElementById("omniHistogramViewer");
00047
00048
00049 var w = ViewerRoot.w = window.innerWidth;
00050 var h = ViewerRoot.h = window.innerHeight;
00051
00052 ViewerRoot.omni.style.position = "absolute";
00053 ViewerRoot.omni.style.left = 0 + "px";
00054 ViewerRoot.omni.style.top = 0 + "px";
00055 ViewerRoot.omni.style.width = w + "px";
00056 ViewerRoot.omni.style.height = h + "px";
00057 ViewerRoot.omni.style.backgroundColor = "rgb(30,30,30)";
00058
00059 ViewerRoot.omni.innerHTML = "<center><div id='loaderStatus' style='margin-top:" + (h/2-8) + "px'>Loading Root Viewer...</div></center>";
00060
00061
00062
00063
00065
00066 loadScript(source_dir+'ViewerRootHud.js',function(){
00067 loadScript(source_dir+'JsRoot/scripts/JSRootCore.js',function(){
00068 JSROOT.AssertPrerequisites('2d;io;3d;',ViewerRoot.init);
00069 }); });
00070
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089 }
00090
00091
00093
00094
00095 var source_dir = "/WebPath/js/visualizers_lib/ViewerRoot_lib/";
00096
00097
00098
00099
00100
00101
00102
00103
00104 ViewerRoot.STREAMER_INFO_FILE_PATH = "/WebPath/js/visualizers_lib/ViewerRoot_lib/streamerInfo.root";
00105
00106 ViewerRoot.LOAD_STREAMER_INFO_CHECK_PERIOD = 100;
00107 ViewerRoot.DISPLAY_MIN_WIDTH = 450;
00108 ViewerRoot.DISPLAY_MIN_HEIGHT = 300;
00109 ViewerRoot.HUD_WIDTH = 300;
00110 ViewerRoot.HUD_MARGIN_RIGHT = 0;
00111 ViewerRoot.HUD_DROP_DOWN_SPEED = 40;
00112 ViewerRoot.ROOT_CONTAINER_OFFY = 20;
00113 ViewerRoot.ROOT_HEADER_HEIGHT = 20;
00114
00115 ViewerRoot.TILE_MODE = 0;
00116 ViewerRoot.REPLACE_MODE = 1;
00117 ViewerRoot.SUPERIMPOSE_MODE = 2;
00118
00119 ViewerRoot.ADMIN_PERMISSIONS_THRESHOLD = 1;
00120 ViewerRoot.userPermissions = 0;
00121
00122 ViewerRoot.omni;
00123 ViewerRoot.rootContainer;
00124
00125 ViewerRoot.objIndex;
00126
00127 ViewerRoot.rootElArr;
00128 ViewerRoot.rootPosArr;
00129 ViewerRoot.rootObjArr;
00130 ViewerRoot.rootObjIndexArr;
00131 ViewerRoot.rootHeaderElArr;
00132 ViewerRoot.rootObjNameArr;
00133 ViewerRoot.rootIsTransparentArr;
00134 ViewerRoot.rootIsAutoRefreshArr;
00135
00136 ViewerRoot.numPositionsTiled;
00137 ViewerRoot.rootTargetIndex;
00138 ViewerRoot.w;
00139 ViewerRoot.h;
00140 ViewerRoot.sFile;
00141
00142 ViewerRoot.hudAutoHide = false;
00143 ViewerRoot.nextObjectMode = 1;
00144 ViewerRoot.clearEachRequest = true;
00145 ViewerRoot.autoRefreshDefault = false;
00146 ViewerRoot.autoRefreshPeriod = 1000;
00147 ViewerRoot.pauseRefresh = false;
00148 ViewerRoot.hardRefresh = true;
00149
00150 ViewerRoot.autoRefreshTimer = 0;
00151
00152
00153 ViewerRoot.iterLoading = false;
00154 ViewerRoot.iterNumberRemaining;
00155 ViewerRoot.iterNumPositionsTiled;
00156 ViewerRoot.iterRunWildcard;
00157 ViewerRoot.iterRootObjNameArr;
00158 ViewerRoot.iterRootPosArr;
00159 ViewerRoot.iterRootIsTransparentArr;
00160 ViewerRoot.iterRootIsAutoRefreshArr;
00161 ViewerRoot.iterSaveNextObjectMode;
00162 ViewerRoot.iterSaveAutoRefreshDefault;
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188 ViewerRoot.init = function() {
00189 Debug.log("ViewerRoot.init");
00190
00191
00192
00193 ViewerRoot.rootElArr = [];
00194 ViewerRoot.rootPosArr = [];
00195 ViewerRoot.rootObjArr = [];
00196 ViewerRoot.rootObjIndexArr = [];
00197 ViewerRoot.rootObjNameArr = [];
00198 ViewerRoot.rootObjTitleArr = [];
00199 ViewerRoot.rootHeaderElArr = [];
00200 ViewerRoot.rootIsTransparentArr = [];
00201 ViewerRoot.rootIsAutoRefreshArr = [];
00202
00203 ViewerRoot.numPositionsTiled = 0;
00204 ViewerRoot.rootTargetIndex = -1;
00205
00206 obj_list = new Array();
00207 ViewerRoot.objIndex = 0;
00208 last_index = 0;
00209 function_list = new Array();
00210 func_list = new Array();
00211 frame_id = 0;
00212 random_id = 0;
00213
00214
00215 ViewerRoot.rootContainer = document.createElement('div');
00216 ViewerRoot.rootContainer.setAttribute("id","reportContainer");
00217 ViewerRoot.rootContainer.onmouseup = function(){
00218 Debug.log("Deselect all root containers");
00219 ViewerRoot.rootTargetIndex = -1;
00220 ViewerRoot.resizeRootObjects();
00221 };
00222 ViewerRoot.omni.appendChild(ViewerRoot.rootContainer);
00223
00224 ViewerRoot.hud = new ViewerRoot.createHud();
00225 window.onresize = ViewerRoot.handleWindowResize;
00226 ViewerRoot.handleWindowResize();
00227
00228 ViewerRoot.autoRefreshTimer = window.setInterval(ViewerRoot.autoRefreshTick,
00229 ViewerRoot.autoRefreshPeriod);
00230
00231 document.getElementById("loaderStatus").innerHTML = "Root Viewer Loaded.<br>Use drop-down to make selections.";
00232 ViewerRoot.getDirectoryContents("/");
00233 }
00234
00235 ViewerRoot.autoRefreshMatchArr = [];
00236
00237
00238
00239
00240
00241
00242
00243 ViewerRoot.autoRefreshTick = function() {
00244
00245
00246 if(ViewerRoot.pauseRefresh) return;
00247
00248 if(ViewerRoot.autoRefreshMatchArr.length)
00249 {
00250 Debug.log("ViewerRoot autoRefreshTick not done yet! Refresh period too short.");
00251 return;
00252 }
00253
00254 ViewerRoot.autoRefreshMatchArr = [];
00255 for(var j=0;j<ViewerRoot.rootPosArr.length;++j)
00256 if(ViewerRoot.rootIsAutoRefreshArr[j])
00257 {
00258
00259 ViewerRoot.autoRefreshMatchArr.push([j, ViewerRoot.rootObjNameArr[j]]);
00260 ViewerRoot.rootReq(ViewerRoot.rootObjNameArr[j]);
00261 }
00262 }
00263
00264
00265
00266
00267
00268
00269 ViewerRoot.prepareNextLocation = function(objName, objTitle) {
00270 Debug.log("ViewerRoot prepareNextLocation for ViewerRoot.objIndex " + "mode " + ViewerRoot.nextObjectMode +
00271 ": " + ViewerRoot.objIndex + ": " + objName);
00272
00273
00274 if(ViewerRoot.rootTargetIndex > ViewerRoot.numPositionsTiled) ViewerRoot.rootTargetIndex = -1;
00275
00276
00277 var ri = ViewerRoot.rootElArr.length;
00278 ViewerRoot.rootElArr.push(document.createElement('div'));
00279 ViewerRoot.rootElArr[ri].setAttribute("class","rootObjectContainer");
00280
00281 var tmpdiv = document.createElement('div');
00282 tmpdiv.setAttribute("id","histogram"+ViewerRoot.objIndex);
00283 tmpdiv.setAttribute("class","rootObjectContainerTarget");
00284 ViewerRoot.rootElArr[ri].appendChild(tmpdiv);
00285
00286
00287 ViewerRoot.rootContainer.appendChild(ViewerRoot.rootElArr[ri]);
00288
00289 var drawTransparently = false;
00290 if(!ViewerRoot.numPositionsTiled || ViewerRoot.nextObjectMode == ViewerRoot.TILE_MODE)
00291 {
00292
00293 ViewerRoot.rootPosArr.push(ViewerRoot.numPositionsTiled++);
00294 }
00295 else if(ViewerRoot.nextObjectMode == ViewerRoot.REPLACE_MODE)
00296 {
00297
00298 var repi = ViewerRoot.rootTargetIndex == -1? ViewerRoot.numPositionsTiled-1:ViewerRoot.rootTargetIndex;
00299 ViewerRoot.removeAllAtPosition(repi);
00300
00301 ViewerRoot.rootPosArr.push(repi);
00302 }
00303 else if(ViewerRoot.nextObjectMode == ViewerRoot.SUPERIMPOSE_MODE)
00304 {
00305
00306 var supi = ViewerRoot.rootTargetIndex == -1? ViewerRoot.numPositionsTiled-1:ViewerRoot.rootTargetIndex;
00307
00308 ViewerRoot.rootPosArr.push(supi);
00309 drawTransparently = true;
00310 }
00311
00312 ViewerRoot.rootIsTransparentArr.push(drawTransparently);
00313 ViewerRoot.rootIsAutoRefreshArr.push(ViewerRoot.autoRefreshDefault);
00314 ViewerRoot.rootObjNameArr.push(objName);
00315 ViewerRoot.rootObjTitleArr.push(objTitle);
00316
00317 ViewerRoot.manageRootHeaders();
00318 ViewerRoot.resizeRootObjects(true);
00319 }
00320
00321
00322
00323
00324
00325
00326 ViewerRoot.removeAllAtPosition = function(posi, isClosingPosition) {
00327 Debug.log("ViewerRoot removeAllAtPosition " + posi);
00328
00329 for(var i=0;i<ViewerRoot.rootPosArr.length;++i)
00330 if(ViewerRoot.rootPosArr[i] == posi)
00331 {
00332 ViewerRoot.rootElArr[i].parentNode.removeChild(ViewerRoot.rootElArr[i]);
00333 ViewerRoot.rootElArr.splice(i,1);
00334 ViewerRoot.rootPosArr.splice(i,1);
00335 delete ViewerRoot.rootObjArr[i]; ViewerRoot.rootObjArr[i] = null;
00336 ViewerRoot.rootObjArr.splice(i,1);
00337 ViewerRoot.rootObjIndexArr.splice(i,1);
00338 ViewerRoot.rootObjNameArr.splice(i,1);
00339 ViewerRoot.rootObjTitleArr.splice(i,1);
00340 ViewerRoot.rootIsTransparentArr.splice(i,1);
00341 ViewerRoot.rootIsAutoRefreshArr.splice(i,1);
00342
00343 --i;
00344 }
00345 else if(isClosingPosition && ViewerRoot.rootPosArr[i] > posi)
00346 --ViewerRoot.rootPosArr[i];
00347
00348 if(isClosingPosition)
00349 {
00350 --ViewerRoot.numPositionsTiled;
00351 ViewerRoot.manageRootHeaders();
00352 if(ViewerRoot.rootTargetIndex > posi) --ViewerRoot.rootTargetIndex;
00353 else if(ViewerRoot.rootTargetIndex >= ViewerRoot.numPositionsTiled) ViewerRoot.rootTargetIndex = -1;
00354 ViewerRoot.resizeRootObjects(true);
00355 }
00356 }
00357
00358
00359
00360 ViewerRoot.manageRootHeaders = function() {
00361 Debug.log("ViewerRoot manageRootHeaders");
00362
00363 var tmpdiv;
00364 while(ViewerRoot.numPositionsTiled > ViewerRoot.rootHeaderElArr.length)
00365 {
00366 tmpdiv = document.createElement('div');
00367 tmpdiv.setAttribute("id","rootContainerHeader-"+ViewerRoot.rootHeaderElArr.length);
00368 tmpdiv.setAttribute("class","rootContainerHeader");
00369 tmpdiv.onmouseup = ViewerRoot.handleRootPositionSelect;
00370 ViewerRoot.rootContainer.appendChild(tmpdiv);
00371 ViewerRoot.rootHeaderElArr.push(tmpdiv);
00372 }
00373
00374 while(ViewerRoot.numPositionsTiled < ViewerRoot.rootHeaderElArr.length)
00375 {
00376 tmpdiv = ViewerRoot.rootHeaderElArr[ViewerRoot.rootHeaderElArr.length-1];
00377 tmpdiv.parentNode.removeChild(tmpdiv);
00378 ViewerRoot.rootHeaderElArr.splice(ViewerRoot.rootHeaderElArr.length-1,1);
00379 }
00380
00381
00382 var found;
00383 var name, fullPath;
00384 var str;
00385 var isAtLeastOneRefreshing;
00386 for(var i=0;i<ViewerRoot.rootHeaderElArr.length;++i)
00387 {
00388 found = 0;
00389 isAtLeastOneRefreshing = false;
00390 for(var j=0;j<ViewerRoot.rootPosArr.length;++j)
00391 if(ViewerRoot.rootPosArr[j] == i) { ++found; fullPath = ViewerRoot.rootObjNameArr[j];
00392
00393 name=ViewerRoot.rootObjTitleArr[j];
00394 if(ViewerRoot.rootIsAutoRefreshArr[j]) isAtLeastOneRefreshing = true;
00395 }
00396
00397 str = "";
00398
00399
00400 str += "<div title='" + fullPath + "' class='rootContainerHeader-name'>" + (found == 1?name:"Multiple Files...") + "</div>";
00401
00402
00403 str += "<a title='Close' href='Javascript:ViewerRoot.removeAllAtPosition("+i+",true);' onmouseup='event.cancelBubble=true;' " +
00404 "class='rootContainerHeader-closeBtn'>X</a>";
00405
00406
00407
00408
00409
00410 str += "<a title='Close' href='Javascript:ViewerRoot.toggleAllAtPositionAutoRefresh(" + i +
00411 ");' onmouseup='event.cancelBubble=true;' " +
00412 "class='rootContainerHeader-refreshBtn'><img id='rootContainerHeaderRefreshImg" + i +
00413 "'src='/WebPath/images/iconImages/icon-rootAutoRefresh" + (isAtLeastOneRefreshing?"On":"Off") + ".png'></a>";
00414
00415
00416
00417
00418
00419
00420
00421
00422 ViewerRoot.rootHeaderElArr[i].innerHTML = str;
00423 }
00424 }
00425
00426
00427
00428
00429
00430
00431 ViewerRoot.toggleAllAtPositionAutoRefresh = function(i)
00432 {
00433 Debug.log("ViewerRoot toggleAllAtPositionAutoRefresh " + i);
00434 var found = 0;
00435 var v = true, lastv;
00436 var doover = false;
00437 do
00438 {
00439 for(var j=0;j<ViewerRoot.rootPosArr.length;++j)
00440 if(ViewerRoot.rootPosArr[j] == i)
00441 {
00442 if(!doover && ViewerRoot.rootIsAutoRefreshArr[j]) v = false;
00443 ViewerRoot.rootIsAutoRefreshArr[j] = v;
00444
00445 Debug.log("ViewerRoot toggleAllAtPositionAutoRefresh rootObj " + j + " to " + v);
00446
00447 var tmp = document.getElementById("rootContainerHeaderRefreshImg" + i );
00448 tmp.src = "/WebPath/images/iconImages/icon-rootAutoRefresh" + (v?"On":"Off") + ".png";
00449 if(lastv != v ){++found; lastv = v;}
00450 }
00451 if(!doover && found>1) doover = true;
00452 else doover = false;
00453 } while(doover)
00454
00455 }
00456
00457
00458 ViewerRoot.handleRootPositionSelect = function(event) {
00459 event.cancelBubble = true;
00460 var i = parseInt(this.id.substr(this.id.indexOf("-")+1))
00461 Debug.log("ViewerRoot handleRootPositionSelect " + i);
00462 ViewerRoot.rootTargetIndex = i;
00463 ViewerRoot.resizeRootObjects();
00464 }
00465
00466
00467
00468 ViewerRoot.clearAll = function() {
00469 Debug.log("ViewerRoot clearAll");
00470
00471 ViewerRoot.rootTargetIndex = -1;
00472
00473 for(ViewerRoot.numPositionsTiled; ViewerRoot.numPositionsTiled>0; --ViewerRoot.numPositionsTiled)
00474 ViewerRoot.removeAllAtPosition(ViewerRoot.numPositionsTiled-1);
00475 ViewerRoot.manageRootHeaders();
00476 ViewerRoot.resizeRootObjects();
00477 }
00478
00479
00480 ViewerRoot.handleWindowResize = function() {
00481
00482 var w = ViewerRoot.w = window.innerWidth < ViewerRoot.DISPLAY_MIN_WIDTH? ViewerRoot.DISPLAY_MIN_WIDTH:window.innerWidth;
00483 var h = ViewerRoot.h = window.innerHeight < ViewerRoot.DISPLAY_MIN_HEIGHT? ViewerRoot.DISPLAY_MIN_HEIGHT:window.innerHeight;
00484
00485 if(!ViewerRoot.hudAutoHide)
00486 ViewerRoot.w = w -= ViewerRoot.HUD_WIDTH + ViewerRoot.HUD_MARGIN_RIGHT + (5*2);
00487
00488 Debug.log("ViewerRoot handleWindowResize " + w + "-" + h);
00489
00490 ViewerRoot.omni.style.width = w + "px";
00491 ViewerRoot.omni.style.height = h + "px";
00492
00493 ViewerRoot.hud.handleWindowResize();
00494 ViewerRoot.resizeRootObjects(true);
00495 }
00496
00497
00498
00499
00500
00501
00502
00503 ViewerRoot.resizeRootObjects = function(needToRedraw) {
00504
00505 ViewerRoot.rootContainer.style.width = ViewerRoot.w + "px";
00506 ViewerRoot.rootContainer.style.height = ViewerRoot.h + "px";
00507
00508 if(ViewerRoot.numPositionsTiled < 1)
00509 {
00510 ViewerRoot.rootContainer.style.backgroundColor = "rgba(0,0,0,0)";
00511 return;
00512 }
00513 ViewerRoot.rootContainer.style.backgroundColor = "white";
00514
00515
00516 var w = ViewerRoot.w;
00517 var h = ViewerRoot.h - ViewerRoot.ROOT_CONTAINER_OFFY;
00518
00519 var aspect = 3/4;
00520 var r = Math.round(Math.sqrt(h*ViewerRoot.numPositionsTiled/aspect/w));
00521 if(r<1) r = 1;
00522 var c = Math.ceil(ViewerRoot.numPositionsTiled/r);
00523
00524 Debug.log("ViewerRoot resizeRootObjects " + r + "-" + c + " for " + ViewerRoot.numPositionsTiled);
00525
00526
00527 w = Math.floor(w/c);
00528 h = Math.floor(h/r);
00529
00530 Debug.log("ViewerRoot resizeRootObjects size " + w + "-" + h );
00531
00532
00533 var rootAspect = 3/4;
00534 var rootw = h/w < rootAspect?h/rootAspect:w;
00535
00536
00537 for(var i=0;i<ViewerRoot.rootElArr.length;++i)
00538 {
00539 ViewerRoot.rootElArr[i].style.width = rootw + "px";
00540 ViewerRoot.rootElArr[i].style.height = (h - ViewerRoot.ROOT_HEADER_HEIGHT) + "px";
00541 ViewerRoot.rootElArr[i].style.left = w*(ViewerRoot.rootPosArr[i]%c) + (w-rootw)/2 + "px";
00542 ViewerRoot.rootElArr[i].style.top = ViewerRoot.ROOT_CONTAINER_OFFY + ViewerRoot.ROOT_HEADER_HEIGHT +
00543 h*Math.floor(ViewerRoot.rootPosArr[i]/c) + "px";
00544
00545
00546
00547
00548 if(needToRedraw && ViewerRoot.rootObjArr[i])
00549 {
00550
00551
00552 JSROOT.redraw('histogram'+
00553 ViewerRoot.rootObjIndexArr[i],
00554 ViewerRoot.rootObjArr[i], "colz");
00555 ViewerRoot.refreshTransparency(i);
00556 }
00557 }
00558
00559
00560 for(var i=0;i<ViewerRoot.rootHeaderElArr.length;++i)
00561 {
00562 ViewerRoot.rootHeaderElArr[i].style.width = w-2 + "px";
00563 ViewerRoot.rootHeaderElArr[i].style.height = ViewerRoot.ROOT_HEADER_HEIGHT + "px";
00564 ViewerRoot.rootHeaderElArr[i].style.left = w*(i%c) + "px";
00565 ViewerRoot.rootHeaderElArr[i].style.top = ViewerRoot.ROOT_CONTAINER_OFFY + h*Math.floor(i/c) + "px";
00566
00567 ViewerRoot.rootHeaderElArr[i].style.borderColor =
00568 ViewerRoot.rootTargetIndex==i?'rgb(68,156,44)':'black';
00569 ViewerRoot.rootHeaderElArr[i].style.backgroundColor =
00570 ViewerRoot.rootTargetIndex==i?'rgb(178,222,166)':'rgba(0,0,0,0)';
00571 }
00572 }
00573
00574
00575
00576 ViewerRoot.refreshTransparency = function(i) {
00577
00578 if(ViewerRoot.rootIsTransparentArr[i])
00579 {
00580
00581
00582 ViewerRoot.rootElArr[i].children[0].style.backgroundColor = "rgba(0,0,0,0)";
00583
00584 var svg = ViewerRoot.rootElArr[i].children[0].getElementsByTagName('svg')[0];
00585 svg.style.backgroundColor = "rgba(0,0,0,0)";
00586
00587 if(svg.getElementsByTagName('rect')[0])
00588 svg.getElementsByTagName('rect')[0].style.fill = "rgba(0,0,0,0)";
00589
00590
00591
00592
00593
00594
00595
00596 }
00597 }
00598
00599
00600
00601
00602 ViewerRoot.checkStreamerInfoLoaded = function() {
00603 if(ViewerRoot.sFile &&
00604 ViewerRoot.sFile.fStreamerInfo &&
00605 gFile.fStreamerInfo.fClassMap &&
00606 gFile.fStreamerInfo.fClassMap.length > 0)
00607 {
00608 document.getElementById("loaderStatus").innerHTML = "Root Viewer Loaded.<br>Use drop-down to make selections.";
00609 ViewerRoot.getDirectoryContents("/");
00610 }
00611 else
00612 window.setTimeout(ViewerRoot.checkStreamerInfoLoaded,ViewerRoot.LOAD_STREAMER_INFO_CHECK_PERIOD);
00613 }
00614
00615
00616
00617 ViewerRoot.getDirectoryContents = function(path) {
00618
00619 Debug.log("ViewerRoot getDirectoryContents " + path);
00620
00621 if(path.indexOf(".root/") >=0)
00622 DesktopContent.XMLHttpRequest("Request?RequestType=getRoot", "RootPath="+path, ViewerRoot.getDirContentsHandler);
00623 else
00624 DesktopContent.XMLHttpRequest("Request?RequestType=getDirectoryContents", "Path="+path, ViewerRoot.getDirContentsHandler);
00625 }
00626
00627
00628 ViewerRoot.getDirContentsHandler = function(req) {
00629 Debug.log("ViewerRoot getDirContentsHandler " + req.responseText);
00630
00631 var permissions = DesktopContent.getXMLValue(req,'permissions');
00632 if(!permissions)
00633 Debug.log("ViewerRoot getDirContentsHandler permissions missing");
00634 else if(ViewerRoot.userPermissions != permissions)
00635 {
00636 Debug.log("ViewerRoot getDirContentsHandler user permissions = " + permissions);
00637 ViewerRoot.userPermissions = permissions;
00638 ViewerRoot.hud.handleWindowResize();
00639 }
00640
00641 ViewerRoot.hud.handleDirContents(req);
00642 }
00643
00644
00645
00646 ViewerRoot.rootReq = function(rootPath) {
00647
00648 Debug.log("ViewerRoot.rootReq " + rootPath );
00649 DesktopContent.XMLHttpRequest("Request?RequestType=getRoot", "RootPath="+rootPath,
00650
00651 ViewerRoot.getRootDataHandler);
00652 }
00653
00654
00655 ViewerRoot.rootConfigReq = function(rootConfigPath) {
00656
00657 DesktopContent.XMLHttpRequest("Request?RequestType=getRootConfig", "RootConfigPath="+rootConfigPath,
00658 ViewerRoot.getRootConfigHandler);
00659 }
00660
00661
00662
00663 ViewerRoot.getRootConfigHandler = function(req) {
00664 Debug.log("ViewerRoot getRootConfigHandler " + req.responseText );
00665
00666 var status = DesktopContent.getXMLValue(req,"status");
00667 if(status != "1")
00668 { alert("Loading Root Pre-Made Configuration Failed: " + status); return }
00669
00670 ViewerRoot.iterNumPositionsTiled = DesktopContent.getXMLValue(req,"numPositionsTiled");
00671 ViewerRoot.iterRunWildcard = DesktopContent.getXMLValue(req,"runNumWildcard");
00672
00673
00674
00675 var tmp = req.responseXML.getElementsByTagName("rootObjName");
00676 ViewerRoot.iterRootObjNameArr = [];
00677 for(var i=0;i<tmp.length;++i) ViewerRoot.iterRootObjNameArr[i] = tmp[i].getAttribute("value");
00678
00679 tmp = req.responseXML.getElementsByTagName("rootPos");
00680 ViewerRoot.iterRootPosArr = [];
00681 for(var i=0;i<tmp.length;++i) ViewerRoot.iterRootPosArr[i] = tmp[i].getAttribute("value") | 0;
00682
00683 tmp = req.responseXML.getElementsByTagName("rootIsTransparent");
00684 ViewerRoot.iterRootIsTransparentArr = [];
00685 for(var i=0;i<tmp.length;++i) ViewerRoot.iterRootIsTransparentArr[i] = tmp[i].getAttribute("value") | 0;
00686
00687 tmp = req.responseXML.getElementsByTagName("rootIsAutoRefresh");
00688 ViewerRoot.iterRootIsAutoRefreshArr = [];
00689 for(var i=0;i<tmp.length;++i) ViewerRoot.iterRootIsAutoRefreshArr[i] = tmp[i].getAttribute("value") | 0;
00690
00691 ViewerRoot.clearAll();
00692
00693 ViewerRoot.iterLoading = true;
00694 ViewerRoot.iterNumberRemaining = ViewerRoot.iterRootObjNameArr.length;
00695 ViewerRoot.iterSaveNextObjectMode = ViewerRoot.nextObjectMode;
00696 ViewerRoot.iterSaveAutoRefreshDefault = ViewerRoot.autoRefreshDefault;
00697
00698 ViewerRoot.iterativeConfigLoader();
00699 }
00700
00701
00702
00703 ViewerRoot.iterativeConfigLoader = function() {
00704
00705 if(!ViewerRoot.iterNumberRemaining)
00706 {
00707 ViewerRoot.autoRefreshDefault = ViewerRoot.iterSaveAutoRefreshDefault;
00708 ViewerRoot.nextObjectMode = ViewerRoot.iterSaveNextObjectMode;
00709 ViewerRoot.iterLoading = false;
00710 return;
00711 }
00712
00713 --ViewerRoot.iterNumberRemaining;
00714
00715
00716 var min = -1;
00717 for(var i=0;i<ViewerRoot.iterRootPosArr.length;++i)
00718 if(min == -1 || ViewerRoot.iterRootPosArr[i] < ViewerRoot.iterRootPosArr[min]) min = i;
00719
00720 ViewerRoot.nextObjectMode = ViewerRoot.iterRootIsTransparentArr[min]?ViewerRoot.SUPERIMPOSE_MODE:ViewerRoot.TILE_MODE;
00721 ViewerRoot.autoRefreshDefault = ViewerRoot.iterRootIsAutoRefreshArr[min];
00722
00723 ViewerRoot.rootReq(ViewerRoot.iterRootObjNameArr[min]);
00724
00725
00726 ViewerRoot.iterRootObjNameArr.splice(min,1);
00727 ViewerRoot.iterRootPosArr.splice(min,1);
00728 ViewerRoot.iterRootIsTransparentArr.splice(min,1);
00729 ViewerRoot.iterRootIsAutoRefreshArr.splice(min,1);
00730
00731 }
00732
00733
00734
00735
00736 ViewerRoot.getRootDataHandler = function(req) {
00737
00738
00739
00740 var rootType = DesktopContent.getXMLValue(req,"rootType");
00741 var rootStr = DesktopContent.getXMLValue(req,"rootData");
00742 var rootName = DesktopContent.getXMLValue(req,"path");
00743
00744
00745
00746 var rootJSON = DesktopContent.getXMLValue(req,"rootJSON");
00747
00748
00749
00750 var ojbect = JSROOT.parse(rootJSON);
00751 var rootTitle = ojbect.fTitle;
00752
00753 if(!ojbect || !rootType || !rootName)
00754 {
00755 Debug.log("Pausing auto-refresh! \n\nPlease resolve the erros before resuming refreshes.", Debug.HIGH_PRIORITY);
00756
00757 var chk = document.getElementById("hudCheckbox" + 2);
00758 chk.checked = true;
00759 ViewerRoot.pauseRefresh = true;
00760
00761 Debug.log("Error reading Root object from server - Name: " + rootName, Debug.HIGH_PRIORITY);
00762 ViewerRoot.autoRefreshMatchArr = [];
00763 return;
00764 }
00765
00766
00767 var refreshIndex = -1;
00768 if(ViewerRoot.autoRefreshMatchArr.length)
00769 {
00770 for(var i=0;i<ViewerRoot.autoRefreshMatchArr.length;++i)
00771 {
00772 if(rootName == ViewerRoot.autoRefreshMatchArr[i][1])
00773 {
00774 refreshIndex = ViewerRoot.autoRefreshMatchArr[i][0];
00775
00776
00777 ViewerRoot.autoRefreshMatchArr[i] = 0;
00778 ViewerRoot.autoRefreshMatchArr.splice(i,1);
00779
00780
00781
00782 if(refreshIndex >= ViewerRoot.rootObjNameArr.length ||
00783 ViewerRoot.rootObjNameArr[refreshIndex] != rootName)
00784 {
00785 Debug.log("ViewerRoot getRootDataHandler weird unmatch!?#$@%");
00786 return;
00787 }
00788 break;
00789 }
00790 }
00791
00792 }
00793
00794 console.log("refreshIndex=" + refreshIndex + " ViewerRoot.rootTargetIndex=" + ViewerRoot.rootTargetIndex);
00795
00796 if(refreshIndex < 0) ViewerRoot.prepareNextLocation(rootName, rootTitle);
00797 else
00798 {
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834 }
00835
00836 ViewerRoot.interpretObjectJSON(ojbect,rootType,rootName,refreshIndex);
00837 if(ViewerRoot.iterLoading) ViewerRoot.iterativeConfigLoader();
00838 }
00839
00840
00841
00842
00843 ViewerRoot.interpretObjectJSON = function(object,rootType,objName,refreshIndex) {
00844
00845 if(refreshIndex == undefined) refreshIndex = -1;
00846
00847
00848 if(ViewerRoot.hardRefresh)
00849 {
00850 if(refreshIndex < 0)
00851 {
00852 ViewerRoot.rootObjArr.push(object);
00853 ViewerRoot.rootObjIndexArr.push(ViewerRoot.objIndex);
00854 }
00855 else
00856 {
00857 delete ViewerRoot.rootObjArr[refreshIndex]; ViewerRoot.rootObjArr[refreshIndex] = null;
00858 ViewerRoot.rootObjArr[refreshIndex] = object;
00859 ViewerRoot.rootObjTitleArr[refreshIndex] = object.fTitle;
00860 ViewerRoot.rootObjIndexArr[refreshIndex] = ViewerRoot.objIndex;
00861
00862
00863 ViewerRoot.rootElArr[refreshIndex].innerHTML = "";
00864 var tmpdiv = document.createElement('div');
00865 tmpdiv.setAttribute("id","histogram"+ViewerRoot.objIndex);
00866 tmpdiv.setAttribute("class","rootObjectContainerTarget");
00867 ViewerRoot.rootElArr[refreshIndex].appendChild(tmpdiv);
00868 }
00869
00870
00871 JSROOT.redraw('histogram'+
00872 (ViewerRoot.objIndex),
00873 object, "colz");
00874
00875 ViewerRoot.objIndex++;
00876 }
00877 else
00878 {
00879
00880 JSROOT.draw('histogram'+
00881 (refreshIndex<0?ViewerRoot.objIndex:
00882 ViewerRoot.rootObjIndexArr[refreshIndex]),
00883 object, "colz");
00884
00885 if(refreshIndex < 0)
00886 {
00887 ViewerRoot.rootObjArr.push(object);
00888 ViewerRoot.rootObjIndexArr.push(ViewerRoot.objIndex);
00889 ViewerRoot.objIndex++;
00890 }
00891 else
00892 {
00893 delete ViewerRoot.rootObjArr[refreshIndex]; ViewerRoot.rootObjArr[refreshIndex] = null;
00894 ViewerRoot.rootObjArr[refreshIndex] = object;
00895 ViewerRoot.rootObjTitleArr[refreshIndex] = object.fTitle;
00896 }
00897 }
00898
00899 ViewerRoot.refreshTransparency(refreshIndex<0?(ViewerRoot.rootObjArr.length-1):refreshIndex);
00900 ViewerRoot.manageRootHeaders();
00901
00902 }
00903
00904
00905 function loadScript(url, callback) {
00906
00907
00908 var script = document.createElement("script")
00909 script.type = "text/javascript";
00910 if (script.readyState) {
00911 script.onreadystatechange = function() {
00912 if (script.readyState == "loaded" ||
00913 script.readyState == "complete") {
00914 script.onreadystatechange = null;
00915 callback();
00916 }
00917 };
00918 } else {
00919 script.onload = function(){
00920 callback();
00921 };
00922 }
00923 var rnd = Math.floor(Math.random()*80000);
00924 script.src = url;
00925 document.getElementsByTagName("head")[0].appendChild(script);
00926 };