@@ -1,6 +1,9 @@
1 1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This module contains javascript needed to render timeline graphs in Fossil.
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There can be multiple graphs on a single webpage, but this script is only
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** loaded once.
2 5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3 6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Prior to sourcing this script, there should be a separate
4 7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <script type='application/json' id='timeline-data-NN'> for each graph,
5 8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** each containing JSON like this:
6 9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -14,10 +17,13 @@
14 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "omitDescenders": BOOLEAN, // Omit ancestor lines off bottom of screen
15 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "fileDiff": BOOLEAN, // True for file diff. False for check-in
16 19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "scrollToSelect": BOOLEAN, // Scroll to selection on first render
17 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "nrail": INTEGER, // Number of vertical "rails"
18 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "baseUrl": TEXT, // Top-level URL
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "dwellTimeout": INTEGER, // Tooltip show delay in milliseconds
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "closeTimeout": INTEGER, // Tooltip close delay in milliseconds
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "hashDigits": INTEGER, // Limit of tooltip hashes ("hash-digits")
19 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "rowinfo": ROWINFO-ARRAY }
20 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
21 27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The rowinfo field is an array of structures, one per entry in the timeline,
22 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** where each structure has the following fields:
23 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -55,10 +61,15 @@
55 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** merges.
56 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ci: "cherrypick-in". Like "mi" except for cherrypick merges.
57 63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** omitted if there are no cherrypick merges.
58 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** h: The artifact hash of the object being graphed
59 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The amendCss() function does a one-time change to the CSS to account
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for the "circleNodes" and "showArrowheads" settings. Do this change
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only once, even if there are multiple graphs being rendered.
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
60 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var amendCssOnce = 1; // Only change the CSS one time
61 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function amendCss(circleNodes,showArrowheads){
62 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !amendCssOnce ) return;
63 74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var css = "";
64 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( circleNodes ){
@@ -73,17 +84,134 @@
73 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
document.querySelector("head").appendChild(style);
74 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
amendCssOnce = 0;
76 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The <span> object that holds the tooltip */
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var tooltipObj = document.createElement("span");
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.className = "tl-tooltip";
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.display = "none";
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ document.getElementsByClassName("content")[0].appendChild(tooltipObj);
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.onmouseenter = function(){stopCloseTimer();}
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.onmouseleave = function(){
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (tooltipInfo.ixActive != -1) resumeCloseTimer();
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* State information for the tooltip popup and its timers */
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ window.tooltipInfo = {
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwellTimeout: 250, /* The tooltip dwell timeout. */
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ closeTimeout: 3000, /* The tooltip close timeout. */
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hashDigits: 16, /* Limit of tooltip hashes ("hash-digits"). */
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ idTimer: 0, /* The tooltip dwell timer id. */
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ idTimerClose: 0, /* The tooltip close timer id. */
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ixHover: -1, /* The id of the element with the mouse. */
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ixActive: -1, /* The id of the element with the tooltip. */
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nodeHover: null, /* Graph node under mouse when ixHover==-2 */
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ posX: 0, posY: 0 /* The last mouse position. */
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Functions used to control the tooltip popup and its timer */
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function hideGraphTooltip(){
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stopCloseTimer();
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.display = "none";
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.ixActive = -1;
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ document.body.onunload = hideGraphTooltip
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function stopDwellTimer(){
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (tooltipInfo.idTimer != 0) {
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ clearTimeout(tooltipInfo.idTimer);
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.idTimer = 0;
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function resumeCloseTimer(){
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This timer must be stopped explicitly to reset the elapsed timeout. */
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(tooltipInfo.idTimerClose == 0 && tooltipInfo.closeTimeout>0) {
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.idTimerClose = setTimeout(function(){
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.idTimerClose = 0;
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hideGraphTooltip();
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },tooltipInfo.closeTimeout);
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function stopCloseTimer(){
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (tooltipInfo.idTimerClose != 0) {
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ clearTimeout(tooltipInfo.idTimerClose);
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.idTimerClose = 0;
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Construct that graph corresponding to the timeline-data-N object that
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is passed in by the tx parameter */
78 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function TimelineGraph(tx){
79 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var topObj = document.getElementById("timelineTable"+tx.iTableId);
80 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
amendCss(tx.circleNodes, tx.showArrowheads);
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.dwellTimeout = tx.dwellTimeout
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.closeTimeout = tx.closeTimeout
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.hashDigits = tx.hashDigits
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ topObj.onclick = clickOnGraph
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ topObj.ondblclick = dblclickOnGraph
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ topObj.onmousemove = function(e) {
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var ix = findTxIndex(e);
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ topObj.style.cursor = (ix<0) ? "" : "pointer"
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Keep the already visible tooltip at a constant position, as long as the
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mouse is over the same element. */
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(tooltipObj.style.display != "none"){
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(ix == tooltipInfo.ixHover) return;
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The tooltip is either not visible, or the mouse is over a different
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** element, so clear the dwell timer, and record the new element id and
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mouse position. */
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stopDwellTimer();
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(ix >= 0){
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.ixHover = ix;
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.posX = e.clientX;
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.posY = e.clientY;
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stopCloseTimer();
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(tooltipInfo.dwellTimeout>0){
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.idTimer = setTimeout(function() {
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.idTimer = 0;
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stopCloseTimer();
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ showGraphTooltip();
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },tooltipInfo.dwellTimeout);
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The mouse is not over an element with a tooltip */
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.ixHover = -1;
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ resumeCloseTimer();
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ topObj.onmouseleave = function(e) {
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Hide the tooltip if the mouse is outside the "timelineTableN" element,
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and outside the tooltip. */
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(e.relatedTarget && e.relatedTarget != tooltipObj){
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.ixHover = -1;
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hideGraphTooltip();
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stopDwellTimer();
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stopCloseTimer();
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function nodeHover(e){
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Invoked by mousemove events over a graph node */
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e.stopPropagation()
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(tooltipInfo.ixHover==-2) return
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.ixHover = -2
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.posX = e.clientX
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.posY = e.clientY
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.nodeHover = this
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stopCloseTimer();
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(tooltipInfo.dwellTimeout>0){
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.idTimer = setTimeout(function() {
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.idTimer = 0;
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stopCloseTimer();
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ showGraphTooltip();
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },tooltipInfo.dwellTimeout);
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
81 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var canvasDiv;
82 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var railPitch;
83 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var mergeOffset;
84 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var node, arrow, arrowSmall, line, mArrow, mLine, wArrow, wLine;
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function initGraph(){
86 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var parent = topObj.rows[0].cells[1];
87 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
parent.style.verticalAlign = "top";
88 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
canvasDiv = document.createElement("div");
89 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
canvasDiv.className = "tl-canvas";
@@ -163,17 +291,22 @@
163 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n.className = "tl-"+cls;
164 292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
canvasDiv.appendChild(n);
165 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return n;
166 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
167 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function absoluteY(obj){
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- var top = 0;
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( obj.offsetParent ){
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do{
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- top += obj.offsetTop;
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( obj = obj.offsetParent );
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return top;
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var y = 0;
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do{
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ y += obj.offsetTop;
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( obj = obj.offsetParent );
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return y;
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function absoluteX(obj){
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var x = 0;
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do{
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x += obj.offsetLeft;
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( obj = obj.offsetParent );
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return x;
175 308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
176 309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function miLineY(p){
177 310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p.y + node.h - mLine.w - 1;
178 311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
179 312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function drawLine(elem,color,x0,y0,x1,y1){
@@ -185,28 +318,34 @@
185 318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
y1 = y0+elem.w;
186 319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cls += "h";
187 320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
188 321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return drawBox(cls,color,x0,y0,x1,y1);
189 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- function drawUpArrow(from,to,color){
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function drawUpArrow(from,to,color,id){
191 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var y = to.y + node.h;
192 325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var arrowSpace = from.y - y + (!from.id || from.r!=to.r ? node.h/2 : 0);
193 326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var arw = arrowSpace < arrow.h*1.5 ? arrowSmall : arrow;
194 327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var x = to.x + (node.w-line.w)/2;
195 328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var y0 = from.y + node.h/2;
196 329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var y1 = Math.ceil(to.y + node.h + arw.h/2);
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawLine(line,color,x,y0,null,y1);
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var n = drawLine(line,color,x,y0,null,y1);
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addToolTip(n,id)
198 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x = to.x + (node.w-arw.w)/2;
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- var n = drawBox(arw.cls,null,x,y);
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = drawBox(arw.cls,null,x,y);
200 334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(color) n.style.borderBottomColor = color;
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addToolTip(n,id)
201 336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- function drawDotted(from,to,color){
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function drawDotted(from,to,color,id){
203 338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var x = to.x + (node.w-line.w)/2;
204 339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var y0 = from.y + node.h/2;
205 340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var y1 = Math.ceil(to.y + node.h);
206 341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var n = drawLine(dotLine,null,x,y0,null,y1)
207 342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( color ) n.style.borderColor = color
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addToolTip(n,id)
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function addToolTip(n,id){
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( id ) n.setAttribute("data-ix",id-tx.iTopRow)
208 347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
209 348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Draw thin horizontal or vertical lines representing merges */
210 349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function drawMergeLine(x0,y0,x1,y1){
211 350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
drawLine(mLine,null,x0,y0,x1,y1);
212 351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -243,37 +382,39 @@
243 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(e) e.style.backgroundColor = p.bg;
244 383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e = document.getElementById("md"+p.id);
245 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(e) e.style.backgroundColor = p.bg;
246 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
247 386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p.r<0 ) return;
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p.u>0 ) drawUpArrow(p,tx.rowinfo[p.u-tx.iTopRow],p.fg);
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p.sb>0 ) drawDotted(p,tx.rowinfo[p.sb-tx.iTopRow],p.fg);
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p.u>0 ) drawUpArrow(p,tx.rowinfo[p.u-tx.iTopRow],p.fg,p.id);
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p.sb>0 ) drawDotted(p,tx.rowinfo[p.sb-tx.iTopRow],p.fg,p.id);
250 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var cls = node.cls;
251 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p.hasOwnProperty('mi') && p.mi.length ) cls += " merge";
252 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p.f&1 ) cls += " leaf";
253 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var n = drawBox(cls,p.bg,p.x,p.y);
254 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n.id = "tln"+p.id;
255 394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n.onclick = clickOnNode;
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n.ondblclick = dblclickOnNode;
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n.onmousemove = nodeHover;
256 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n.style.zIndex = 10;
257 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !tx.omitDescenders ){
258 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p.u==0 ){
259 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p.hasOwnProperty('mo') && p.r==p.mo ){
260 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var ix = p.hasOwnProperty('cu') ? p.cu : p.mu;
261 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var top = tx.rowinfo[ix-tx.iTopRow]
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawUpArrow(p,{x: p.x, y: top.y-node.h}, p.fg);
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ drawUpArrow(p,{x: p.x, y: top.y-node.h}, p.fg, p.id);
263 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( p.y>100 ){
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawUpArrow(p,{x: p.x, y: p.y-50}, p.fg);
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ drawUpArrow(p,{x: p.x, y: p.y-50}, p.fg, p.id);
265 406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawUpArrow(p,{x: p.x, y: 0},p.fg);
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ drawUpArrow(p,{x: p.x, y: 0},p.fg, p.id);
267 408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
268 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
269 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p.hasOwnProperty('d') ){
270 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p.y + 150 >= btm ){
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawUpArrow({x: p.x, y: btm - node.h/2},p,p.fg);
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ drawUpArrow({x: p.x, y: btm - node.h/2},p,p.fg,p.id);
272 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawUpArrow({x: p.x, y: p.y+50},p,p.fg);
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawDotted({x: p.x, y: p.y+63},{x: p.x, y: p.y+50-node.h/2},p.fg);
414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ drawUpArrow({x: p.x, y: p.y+50},p,p.fg,p.id);
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ drawDotted({x: p.x, y: p.y+63},{x: p.x, y: p.y+50-node.h/2},p.fg,p.id);
275 416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
276 417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
277 418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
278 419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p.hasOwnProperty('mo') ){
279 420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var x0 = p.x + node.w/2;
@@ -326,11 +467,11 @@
326 467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
327 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var y0 = p.y + (node.h-line.w)/2;
328 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var u = tx.rowinfo[p.au[i+1]-tx.iTopRow];
329 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.id<p.id ){
330 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
drawLine(line,u.fg,x0,y0,x1,null);
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drawUpArrow(p,u,u.fg);
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ drawUpArrow(p,u,u.fg,u.id);
332 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
333 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var y1 = u.y + (node.h-line.w)/2;
334 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
drawLine(wLine,u.fg,x0,y0,x1,null);
335 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
drawLine(wLine,u.fg,x1-line.w,y0,null,y1+line.w);
336 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
drawLine(wLine,u.fg,x1,y1,u.x-wArrow.w/2,null);
@@ -390,11 +531,12 @@
390 531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for( var i=tx.rowinfo.length-1; i>=0; i-- ){
391 532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
drawNode(tx.rowinfo[i], btm);
392 533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
393 534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
394 535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var selRow;
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- function clickOnNode(){
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function clickOnNode(e){
537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hideGraphTooltip()
396 538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var p = tx.rowinfo[parseInt(this.id.match(/\d+$/)[0], 10)-tx.iTopRow];
397 539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !selRow ){
398 540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
selRow = p;
399 541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.className += " sel";
400 542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
canvasDiv.className += " sel";
@@ -407,10 +549,113 @@
407 549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
location.href=tx.baseUrl + "/fdiff?v1="+selRow.h+"&v2="+p.h
408 550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
409 551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
location.href=tx.baseUrl + "/vdiff?from="+selRow.h+"&to="+p.h
410 552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
411 553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e.stopPropagation()
555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function dblclickOnNode(e){
557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var p = tx.rowinfo[parseInt(this.id.match(/\d+$/)[0], 10)-tx.iTopRow];
558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ window.location.href = tx.baseUrl+"/info/"+p.h
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e.stopPropagation()
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function findTxIndex(e){
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Look at all the graph elements. If any graph elements that is near
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the click-point "e" and has a "data-ix" attribute, then return
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the value of that attribute. Otherwise return -1 */
565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var x = e.clientX + window.pageXOffset - absoluteX(canvasDiv);
566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var y = e.clientY + window.pageYOffset - absoluteY(canvasDiv);
567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var aNode = canvasDiv.childNodes
568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var nNode = aNode.length;
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var i;
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0;i<nNode;i++){
571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var n = aNode[i]
572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !n.hasAttribute("data-ix") ) continue;
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( x<n.offsetLeft-5 ) continue;
574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( x>n.offsetLeft+n.offsetWidth+5 ) continue;
575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( y<n.offsetTop-5 ) continue;
576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( y>n.offsetTop+n.offsetHeight ) continue;
577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return n.getAttribute("data-ix")
578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -1
580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Compute the hyperlink for the branch graph for tx.rowinfo[ix] */
582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function branchHyperlink(ix){
583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var br = tx.rowinfo[ix].br
584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var dest = tx.baseUrl + "/timeline?r=" + encodeURIComponent(br)
585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dest += tx.fileDiff ? "&m&cf=" : "&m&c="
586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dest += encodeURIComponent(tx.rowinfo[ix].h)
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return dest
588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function clickOnGraph(e){
590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.ixHover = findTxIndex(e);
591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.posX = e.clientX;
592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.posY = e.clientY;
593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ showGraphTooltip();
594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function showGraphTooltip(){
596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var html = null
597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var ix = -1
598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tooltipInfo.ixHover==-2 ){
599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ix = parseInt(tooltipInfo.nodeHover.id.match(/\d+$/)[0],10)-tx.iTopRow
600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var h = tx.rowinfo[ix].h
601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var dest = tx.baseUrl + "/info/" + h
602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ h = h.slice(0,tooltipInfo.hashDigits); // Assume single-byte characters.
603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tx.fileDiff ){
604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ html = "artifact <a id=\"tooltip-link\" href=\""+dest+"\">"+h+"</a>"
605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ html = "check-in <a id=\"tooltip-link\" href=\""+dest+"\">"+h+"</a>"
607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.ixActive = -2;
609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( tooltipInfo.ixHover>=0 ){
610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ix = tooltipInfo.ixHover
611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var br = tx.rowinfo[ix].br
612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var dest = branchHyperlink(ix)
613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var hbr = br.replace(/&/g, "&")
614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ .replace(/</g, "<")
615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ .replace(/>/g, ">")
616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ .replace(/"/g, """)
617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ .replace(/'/g, "'");
618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ html = "branch <a id=\"tooltip-link\" href=\""+dest+"\">"+hbr+"</a>"
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipInfo.ixActive = ix;
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( html ){
622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Setup while hidden, to ensure proper dimensions. */
623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var s = getComputedStyle(document.body)
624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tx.rowinfo[ix].bg.length ){
625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.backgroundColor = tx.rowinfo[ix].bg
626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.backgroundColor = s.getPropertyValue('background-color')
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.borderColor =
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.color = s.getPropertyValue('color')
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.visibility = "hidden"
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.innerHTML = html
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.appendChild(document.createTextNode(' '));
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.appendChild(
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ makeCopyButton("tooltip-copybtn","tooltip-link",0));
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.display = "inline"
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.position = "absolute"
638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var x = tooltipInfo.posX + 4 + window.pageXOffset
639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - absoluteX(tooltipObj.offsetParent)
640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.left = x+"px"
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var y = tooltipInfo.posY + window.pageYOffset
642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - tooltipObj.clientHeight - 4
643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - absoluteY(tooltipObj.offsetParent)
644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.top = y+"px"
645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tooltipObj.style.visibility = "visible"
646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hideGraphTooltip()
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function dblclickOnGraph(e){
651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var ix = findTxIndex(e);
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hideGraphTooltip()
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ix>=0 ){
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var dest = branchHyperlink(ix)
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ window.location.href = dest
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
412 657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
413 658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function changeDisplay(selector,value){
414 659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var x = document.getElementsByClassName(selector);
415 660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var n = x.length;
416 661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(var i=0; i<n; i++) {x[i].style.display = value;}
417 662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!