00001 # JSROOT changelog
00002
00003 ## Changes in 4.5.0
00004 1. Zooming with mouse wheel
00005 2. Context menus for many different objects attributes are provided
00006 3. Context menu for every drawn object can be activated via toolbar button
00007 4. Support browsing of TTask and derived classes (#40)
00008 5. Apply user range for drawing TH1/TH2 histograms, also when superimposed (#44)
00009 6. Implement scaling factor like x10^3 on the vertical axes
00010 7. Provide shortcut buttons for each subpad
00011 8. Implement simple drawing for TBox, TWbox, TSliderBox classes
00012
00013
00014 ## Changes in 4.4.4
00015 1. Fix - toggling of statbox was not working in all situations
00016 2. Fix - for mouse rect zooming use only left mouse button
00017 3. Fix - correctly draw TH2 with lego option, when histogram has negative bin content
00018 4. Fix - log axis drawing with no visible ticks
00019
00020
00021 ## Changes in 4.4.3
00022 1. Fix - wrong selection of TH1 Y axis range when errors are displayed (#44)
00023 2. Fix - apply user range for TH1 X-axis zooming (#44)
00024 3. Fix - protect against pathological case of 1-bin histogram
00025 4. Fix - use error plot by default in TH1 only when positive sumw2 entry exists
00026 5. Fix - for TH2 box draw option draw at least 1px rect for non-empty bin
00027 6. Fix - support transparency (alpha) in TColor (#45)
00028 7. Fix - correct tooltip handling for graphs with lines and markers
00029 8. Fix - interactive zooming in TH2 when doing histogram update
00030
00031
00032 ## Changes in 4.4.2
00033 1. Fix - statistic collection for TH2
00034 2. Fix - correct handling of empty TList in browser/inspector
00035 3. Fix - support TFolder in browser/inspector (#40)
00036
00037
00038 ## Changes in 4.4.1
00039 1. Fix - colz palette resize when drawing histogram second time
00040 2. Fix - use embeded in TCanvas color for background color of canvas itself
00041 3. Fix - rotate too long X axis text labels
00042 4. Fix - draw histogram bins on frame boundary
00043 5. Fix - use alternative color for shapes with default black color
00044 6. Fix - correctly handle pcon/pgon shape with rmin==rmax on top or bottom side
00045
00046
00047 ## Changes in 4.4
00048 1. Fix faces orientation for all TGeo shapes.
00049 2. Improve TGeoTorus creation - handle all parameters combinations
00050 3. Implement TGeoCompositeShape, using ThreeCSG.js
00051 4. Fix problem with color pallete when switch to 3D mode (#28)
00052 5. Use nested CSS classes to avoid conflicts with other libraries (#29)
00053 6. Let move and resize TFrame
00054 7. Improve TH1/TH2 drawings
00055 - draw all histograms points in the range (no any skipped bins)
00056 - minimize SVG code for drawing (up to factor 100)
00057 - gives significant speedup in drawings
00058 8. SVG code improvement for TGraph, TF1, TAxis drawings
00059 9. Provide new tooltip kind
00060 - created only when needed (minimizing SVG code)
00061 - tooltip can be drawn for every object in the frame
00062 - touch devices are supported
00063 10. Fix - let draw same object on the canvas with different options
00064 11. Create cached list of known class methods. It can be extended by users.
00065 12. Use of cached methods improves binary I/O perfromance by 20%
00066 13. Support TGaxis
00067 14. Project now can be obtained via 'bower install jsroot'
00068 15. Support 'scat' and 'text' draw options for TH2
00069 16. Support in binary I/O zipped buffer bigger than 16M
00070 17. Correctly handle in binary I/O pointer on TArray object (like in THnSparseArrayChunk)
00071
00072
00073 ## Changes in 4.3
00074 1. Implement TGeoCtub, TGeoParaboloid and TGeoHype shapes
00075 2. Support TGeoTube with Rmin==0
00076 3. Exclude empty faces in TGeoArb8
00077 4. Improve TGeoSphere creation - handle all parameters combinations
00078 5. Introduce JSROOT.cleanup() function to safely clear all drawn objects
00079 6. Fix wrong resize method in 'tabs' and 'collapsible' layouts
00080 7. Fix canvas resize problem (issue #27)
00081 8. Fix zero-height canvas when draw TGeo in collapsible layout
00082 9. Fix problem of simultaneous move TGeo drawings and canvas in flexible layout
00083
00084
00085 ## Changes in 4.2
00086 1. Significant performance improvements in 3D drawings - TGeo/TH2/TH3
00087 2. Implement TGeoPara, TGeoGtra, TGeoXtru and TGeoEltu shapes
00088 3. Optimize (reduce vertices number) for others TGeo shapes
00089 4. Correct rotation/translation/scaling of TGeo nodes
00090 5. Workaround for axis reflection (not directly supported in three.js)
00091 6. Support array of objects in I/O (like in TAxis3D)
00092 7. Correct reading of multi-dim arrays like Double_t fXY[8][2];
00093 8. Provide canvas toolbar for actions like savepng or unzoom
00094 9. Implement JSROOT.resize() function to let resize drawing after changes in page layout
00095 10. Fix error with title display/update
00096
00097
00098 ## Changes in 4.1
00099 1. Introduce object inspector - one could browse object members of any class
00100 2. Let draw sub-items from TCanvas list of primitives like sub-pad or TLatex
00101 3. Provide possibility to save drawn SVG canvas as PNG
00102 4. TGraph drawing optimization - limit number of drawn points
00103 5. Implement painter for TPolyMarker3D
00104 6. Improve drawing and update of TMultiGraph
00105 7. Reorganize 3D drawing of TH2/TH3 histograms, allow to mix 2D and 3D display together
00106 8. Support overlay of 3D graphic over SVG canvas (used for IE)
00107 9. Fix problems and improve flex(ible) layout
00108
00109
00110 ## Changes in 4.0
00111 1. New TGeo classes support:
00112 - browsing through volumes hieararchy
00113 - changing visibility flags
00114 - drawing of selected volumes
00115 2. New 'flex' layout:
00116 - create frames like in Multi Document Interface
00117 - one could move/resize/minimize/maximize such frames
00118 3. Significant (factor 4) I/O performance improvement:
00119 - use ArrayBuffer class in HTTP requests instead of String
00120 - use native arrays (like Int32Array) for array data members
00121 - highly optimize streamer infos handling
00122 4. TH2 drawing optimization:
00123 - if there are too many non-empty bins, combine them together
00124 - when zoom-in, all original bins will be displayed separately
00125 - let draw big TH2 histogram faster than in 1 sec
00126 - optimization can be disabled by providing '&optimize=0' in URL
00127 5. TF1 drawing optimization:
00128 - function 'compiled' only once
00129 6. Reorganize scripts structure:
00130 - move all math functions to JSRootMath.js
00131 - TH2, TF1, THStack and TMultiGraph painters moved into JSRootPainter.more.js script
00132 - reduce size of scripts required for default functionality
00133 7. Update all basic libraries:
00134 - d3.js - v3.5.9,
00135 - jquery.js - v2.1.4,
00136 - jquery-ui.js - v1.11.4,
00137 - three.js - r73
00138 8. Implement ROOT6-like color palettes:
00139 - all palettes in range 51...112 are implemented
00140 - by default palette 57 is used
00141 - one could change default palette with '&palette=111' in URL
00142 - or palette can be specified in draw option like '&opt=colz,pal77'
00143
00144
00145 ## Changes in 3.9
00146 1. Support non-equidistant bins for TH1/TH2 objects.
00147 2. Display entries count from histo.fEntries member, only when not set use computed value
00148 3. Support italic and bold text when used with MathJax
00149 4. Improve TF1 drawing - support exp function in TFormula, fix errors with logx scale, enable zoom-in, (re)calculate function points when zooming
00150 5. Support several columns in TLegend
00151 6. Introduce context menus for x/y axis, add some items similar to native ROOT menus
00152 7. Introduce context menu for TPaveStats, let switch single elements in the box
00153 8. Enable usage of all context menus on touch devices
00154 9. Implement JSROOT.Math.Prob function, provides probability value in stat box
00155 10. Introduce context menu for color palette (z axis)
00156 11. Implement col0 and col0z draw option for TH2 histograms, similar to ROOT6
00157
00158
00159 ## Changes in 3.8
00160 1. Let use HTML element pointer in JSROOT.draw function like:
00161 JSROOT.draw(document.getElementsByTagName("div")[0], obj, "hist");
00162 Normally unique identifier was used before, which is not required any longer.
00163 Of course, old functionality with element identifier will work as well.
00164 2. TreePlayer can also be used for trees, which not yet read from the file.
00165 Requires appropriate changes in TRootSniffer class.
00166 3. Fix error in I/O with members like: `Double_t *fArr;
00167 4. Introduce JSROOT.OpenFile function. It loads I/O functionality automatically,
00168 therefore can be used directly after loading JSRootCore.js script
00169 5. Same is done with JSROOT.draw function. It is defined in the JSRootCore.js
00170 and can be used directly. Makes usage of JSROOT easier
00171 6. Introduce JSRootPainter.more.js script, where painters for auxiliary classes
00172 will be implemented.
00173 7. Implement painter for TEllipse, TLine, TArrow classes
00174 8. Fix several problems with markers drawing; implement plus, asterisk, mult symbols.
00175 9. Implement custom layout, which allows to configure user-defined layout for displayed objects
00176 10. Fix errors with scaling of axis labels.
00177 11. Support also Y axis with custom labels like: http:
00178
00179
00180 ## Changes in 3.7
00181 1. Support of X axis with custom labels like: http:
00182 2. Extend functionality of JSROOT.addDrawFunc() function. One could register type-specific
00183 `make_request` and `after_request` functions; `icon`, `prereq`, `script`, `monitor` properties.
00184 This let add more custom elements to the generic gui, implemented with JSROOT.HierarchyPainter
00185 3. Provide full support of require.js. One could load now JSRootCore.js script like:
00186
00187 <script type="text/javascript" src="require.js" data-main="scripts/JSRootCore.js"></script>
00188
00189 After this several modules are defined and can be used with syntax like:
00190
00191 require(['JSRootPainter'], function(jsroot) { });
00192
00193 Also inside JSROOT require.js used to load all dependencies.
00194
00195
00196 ## Changes in 3.6
00197 1. Try to provide workaround for websites where require.js already loaded.
00198 This makes problem by direct loading of jquery and jquery-ui
00199 2. Provide workaround for older version of jquery-ui
00200 3. Prompt for input of command arguments
00201 4. After command execution one could automatically reload hierarchy (_hreload property) or
00202 update view of displayed object (_update_item property)
00203 5. Use HiearchyPainter for implementing draw.htm. This let us handle
00204 all different kinds of extra attributes in central place
00205 6. Fix problem in tabs layout - new tab should be add to direct child
00206 7. When drawing several tabs, activate frame before drawing - only then
00207 real frame size will be set
00208 8. Fix problem with GetBBox - it only can be used for visible elements in mozilla.
00209 9. Support drawing of fit parameters in stat box, use (as far as possible) stat and
00210 fit format for statistic display
00211 10. Implement 'g' formatting kind for stat box output - one need to checks
00212 significant digits when producing output.
00213 11. Support new draw options for TGraph: 'C', 'B1', '0', '2', '3', '4', '[]'
00214 12. Primary support for STL containers in IO part. Allows to read ROOT6 TF1.
00215 13. Full support of TGraphBentErrors
00216 14. Support objects drawing from JSON files in default user interface, including
00217 monitoring. One could open file from link like: https:
00218 15. Introduce JSROOT.FFormat function to convert numeric values into string according
00219 format like 6.4g or 5.7e. Used for statistic display.
00220
00221
00222 ## Changes in 3.5
00223 1. Fix error in vertical text alignment
00224 2. Many improvements in TPaletteAxis drawing - draw label, avoid too large ticks.
00225 3. Fix error with col drawing - bin with maximum value got wrong color
00226 4. Test for existing jquery.js, jquery-ui.js and d3.js libraries, reuse when provided
00227 5. Fix several I/O problems; now one could read files, produced in Geant4
00228 6. Implement 'e2' drawing option for TH1 class,
00229 use by default 'e' option when TH1 has non-empty fSumw2
00230 7. Reuse statistic from histogram itself, when no axis selection done
00231 8. Support log/lin z scale for color drawing
00232 9. Implement interactive z-scale selection on TPaletteAxis
00233 10. Allow to redraw item with other draw options (before one should clear drawings)
00234 11. Several improvements in THttpServer user interface - repair hierarchy reload,
00235 hide unsupported context menu entries, status line update
00236
00237
00238 ## Changes in 3.4
00239 1. Support usage of minimized versions of .js and .css files.
00240 Minimized scripts used by default on web servers.
00241 2. Implement JSROOT.extend instead of jQuery.extend, reduce
00242 usage of jquery.js in core JSROOT classes
00243 3. Implement main graphics without jquery at all,
00244 such mode used in `nobrowser` mode.
00245 4. Provide optional latex drawing with MathJax SVG.
00246 TMathText always drawn with MathJax,
00247 other classes require `mathjax` option in URL
00248 5. Improve drawing of different text classes, correctly handle
00249 their alignment and scaling, special handling for IE
00250 6. Fix error with time axes - time offset was not correctly interpreted
00251
00252
00253 ## Changes in 3.3
00254 1. Use d3.time.scale for display of time scales
00255 2. Within JSRootCore.js script URL one could specify JSROOT
00256 functionality to be loaded: '2d', '3d', 'io', 'load', 'onload'.
00257 Old method with JSROOT.AssertPrerequisites will also work.
00258 3. With THttpServer JSROOT now provides simple control functionality.
00259 One could publish commands and execute them from the browser
00260 4. One could open several ROOT files simultaneously
00261 5. Add 'simple' layout - drawing uses full space on the right side
00262 6. Allow to open ROOT files in online session (via url parameter)
00263 7. One could monitor simultaneously objects from server and root files
00264 8. Implement 'autocol' draw option - when superimposing histograms,
00265 their line colors will be automatically assigned
00266 9. Implement 'nostat' draw option - disabled stat drawing
00267 10. Using '_same_' identifier in item name, one can easily draw or superimpose
00268 similar items from different files. Could be used in URL like:
00269 `...&files=[file1.root,file2.root]&items=[file1.root/hpx, file2.root/_same_]`
00270 `...&files=[file1.root,file2.root]&item=file1.root/hpx+file2.root/_same_`
00271 Main limitation - file names should have similar length.
00272 11. When 'autozoom' specified in draw options, histogram zoomed into
00273 non-empty content. Same command available via context menu.
00274 12. Item of 'Text' kind can be created. It is displayed as
00275 plain text in the browser. If property 'mathjax' specified,
00276 MathJax.js library will be loaded and used for rendering.
00277 See httpcontrol.C macro for example.
00278 13. When using foreignObject, provide workaround for absolute positioning
00279 problem in Chrome/Safari, see <http:
00280
00281
00282 ## Changes in 3.2
00283 1. Support JSON objects embedding in html pages, produced by THttpServer
00284 2. For small resize of canvas use autoscale functionality of SVG. Only when
00285 relative changes too large, redraw complete canvas again.
00286 3. Use touch-punch.min.js to process touch events with jquery-ui
00287 4. Even when several TH1/TGraph/TF1 objects with fill attribute overlap each other,
00288 one able to get tooltip for underlying objects
00289 5. Use jquery-ui menu for context menu
00290 6. From context menu one could select several options for drawing
00291 7. Provide user interface for executing TTree::Draw on THttpServer
00292 8. 3D graphic (three.js) works only with IE11
00293
00294
00295 ## Changes in 3.1
00296 1. Correctly show tooltips in case of overlapped objects
00297 2. Implement JSROOT.Create() method to create supported
00298 in JavaScript ROOT classes like TH1 or TGraph
00299 3. Fix problem with JSROOT.draw in HTML element with zero width (display:none)
00300 4. Provide possibility to load user scripts with JSROOT.BuildSimpleGUI
00301 and JSROOT.AssertPrerequisites, also with main index.htm
00302 5. Support of TCutG drawing
00303 6. Implement hierarchy display (former dtree) with jQuery
00304 7. Fix several problems in drawing optimization
00305 8. Implement dragging objects from hierarchy browser into existing canvas
00306 to superimpose several objects
00307 9. Implement col2 and col3 draw options, using html5 canvas
00308 10. Support 'p' and 'p0' draw options for TH1 class
00309
00310
00311 ## Development of version 3.0
00312
00313 ### November 2014
00314 1. Better font size and position in pave stats
00315 2. Resize/move of element only inside correspondent pad
00316 3. Adjust of frame size when Y-axis exceed pad limits
00317 4. Correct values in tooltip for THStack
00318 5. Exclude drawing of markers from TGraph outside visible range
00319 6. Drawing of canvas without TFrame object
00320 7. Many other small bug fixes and improvements, thanks to Maximilian Dietrich
00321
00322 ### October 2014
00323 1. Add "shortcut icon"
00324 2. Add demo of online THttpServer - shell script copies data from
00325 running httpserver.C macro on Apache webserver
00326 3. Evaluate 'monitoring' parameter for online server like:
00327 <http:
00328 Parameter defines how often displayed objects should be updated.
00329 4. Implement 'opt' and 'opts' URL parameters for main page.
00330 5. Show progress with scripts loading in the browser window
00331 6. When one appends "+" to the filename, its content read completely with first I/O operation.
00332 7. Implement JS custom streamer for TCanvas, restore aspect ratio when drawing
00333 8. Major redesign of drawing classes. Resize and update of TCanvas are implemented.
00334 All major draw functions working with HTML element id as first argument.
00335 9. Extract 3D drawings into separate JSRoot3DPainter.js script
00336 10. Use newest three.min.js (r68) for 3D drawings, solves problem with Firefox.
00337 11. Introduce generic list of draw functions for all supported classes.
00338 12. Add possibility to 'expand' normal objects in the hierarchy browser.
00339 For instance, this gives access to single elements of canvas,
00340 when whole canvas cannot be drawn.
00341 13. Correct usage of colors map, provided with TCanvas.
00342 14. Introduce JSROOT.redraw() function which is capable to create or update object drawing.
00343 15. In main index.htm page browser can be disabled (nobrowser parameter) and
00344 page can be used to display only specified items from the file
00345 16. Add support of TPolyMarker3D in binary I/O
00346
00347 ### September 2014
00348 1. First try to handle resize of the browser,
00349 for the moment works only with collapsible layout
00350 2. Also first try to interactively move separation line between
00351 browser and drawing field.
00352 3. Small fix of minor ticks drawing on the axis
00353 4. Introduce display class for MDI drawing. Provide two implementations -
00354 'collapsible' for old kind and 'tabs' for new kinds.
00355 5. Adjust size of color palette drawing when labels would take more place as provided.
00356 6. Add correct filling of statistic for TProfile,
00357 fix small problem with underflow/overflow bins.
00358 7. Provide way to select display kind ('collapsible', 'tabs') in the simple GUI.
00359 8. Implement 'grid' display, one could specify any number of devision like
00360 'grid 3x3' or 'grid 4x2'.
00361 9. MDI display object created at the moment when first draw is performed.
00362 10. Introduce painter class for TCanvas, support resize and update of canvas drawing
00363 11. Resize almost works for all layouts and all objects kinds.
00364 12. Implement JSROOT.GetUrlOption to extract options from document URL.
00365 13. Provide example fileitem.htm how read and display item from ROOT file.
00366 14. In default index.htm page one could specify 'file', 'layout',
00367 'item' and 'items' parameters like:
00368 <http:
00369 15. Support direct reading of objects from sub-sub-directories.
00370 16. Introduce demo.htm, which demonstrates online usage of JSROOT.
00371 17. One could use demo.htm directly with THttpServer providing address like:
00372 <http:
00373 18. Also for online server process url options like 'item', 'items', 'layout'
00374 19. Possibility to generate URL, which reproduces opened page with layout and drawn items
00375
00376 ### August 2014
00377 1. All communication between server and browser done with JSON format.
00378 2. Fix small error in dtree.js - one should always set
00379 last sibling (_ls) property while tree can be dynamically changed.
00380 3. In JSRootCore.js provide central function, which handles different kinds
00381 of XMLHttpRequest. Use only async requests, also when getting file header.
00382 4. Fully reorganize data management in file/tree/directory/collection hierarchical
00383 display. Now complete description collected in HPainter class and decoupled from
00384 visualization, performed with dTree.js.
00385 5. Remove all global variables from the code.
00386 6. Automatic scripts/style loading handled via JSROOT.loadScript() function.
00387 One can specify arbitrary scripts list, which asynchronously loaded by browser.
00388 7. Method to build simple GUI changed and more simplified :). The example in index.htm.
00389 While loadScript and AssertPrerequisites functions moved to JSROOT, one
00390 can easily build many different kinds of GUIs, reusing provided JSRootCore.js functions.
00391 8. In example.htm also use AssertPrerequisites to load necessary scripts.
00392 This helps to keep code up-to-date even by big changes in JavaScript code.
00393 9. Provide monitoring of online THttpServer with similar interface as for ROOT files.
00394 10. Fix several errors in TKey Streamer, use member names as in ROOT itself.
00395 11. Keep the only version identifier JSROOT.version for JS code
00396 12. One can specify in JSROOT.AssertPrerequisites functionality which is required.
00397 One could specify '2d', 'io' (default) or '3d'.
00398 13. Use new AssertPrerequisites functionality to load only required functionality.
00399 14. When displaying single element, one could specify draw options and monitor property like:
00400 <http:
00401 Such link is best possibility to integrate display into different HTML pages,
00402 using `<iframe/>` tag like:
00403 `<iframe src="http:
00404 `style="width: 800px; height:600px"></iframe>`
00405 15. Remove 'JSROOTIO.' prefix from _typename. Now real class name is used.
00406 16. Use in all scripts JSROOT as central 'namespace'
00407 17. Introduce context menu in 3D, use it for switch between 2D/3D modes
00408 18. Use own code to generate hierarchical structure in HTML, replace dtree.js which is
00409 extremely slow for complex hierarchies. Dramatically improve performance for
00410 structures with large (~1000) number of items.
00411 19. Deliver to the server title of the objects, display it as hint in the browser.
00412 20. Better handling of special characters in the hierarchies - allows to display
00413 symbols like ' or " in the file structure.
00414
00415 ### July 2014
00416 1. Migration to d3.v3.js and jQuery v2.1.1
00417 2. Fix errors in filling of histogram statbox
00418 3. Possibility of move and resize of statbox, title, color palete
00419 4. Remove many (not all) global variables
00420 5. Example with direct usage of JSRootIO graphics
00421 6. Example of inserting ROOT graphics from THttpServer into `<iframe></iframe>`
00422
00423 ### May 2014
00424 1. This JSRootIO code together with THttpServer class included
00425 in ROOT repository
00426
00427 ### March 2014
00428 1. Introduce JSROOT.TBuffer class, which plays similar role
00429 as TBuffer in native ROOT I/O. Simplifies I/O logic,
00430 reduce duplication of code in many places, fix errors.
00431 Main advantage - one could try to keep code synchronous with C++.
00432 2. Avoid objects cloning when object referenced several times.
00433 3. Treat special cases (collection, arrays) in one place.
00434 This is major advantage, while any new classes need to be implemented only once.
00435 4. Object representation, produced by JSRootIO is similar to
00436 objects, produced by TBufferJSON class. By this one can exchange
00437 I/O engine and use same JavaSctript graphic for display.
00438 5. More clear functions to display different elements of the file.
00439 In the future functions should be fully separated from I/O part
00440 and organized in similar way as online part.
00441 6. Eliminate usage of gFile pointer in the I/O part.
00442 7. Provide TBufferJSON::JsonWriteMember method. It allows to stream any
00443 selected data member of the class. Supported are:
00444 basic data types, arrays of basic data types, TString, TArray classes.
00445 Also any object as data member can be streamed.
00446 8. TRootSniffer do not creates sublevels for base classes