Show More
@@ -17,6 +17,34 b" document.addEventListener('DOMContentLoa" | |||
|
17 | 17 | return; |
|
18 | 18 | } |
|
19 | 19 | |
|
20 | // tooltip to invite on lines selection | |
|
21 | var tooltip = document.createElement('div'); | |
|
22 | tooltip.id = 'followlines-tooltip'; | |
|
23 | tooltip.classList.add('hidden'); | |
|
24 | var initTooltipText = 'click to start following lines history from here'; | |
|
25 | tooltip.textContent = initTooltipText; | |
|
26 | sourcelines.appendChild(tooltip); | |
|
27 | ||
|
28 | var tooltipTimeoutID; | |
|
29 | //* move the "tooltip" with cursor (top-right) and show it after 1s */ | |
|
30 | function moveAndShowTooltip(e) { | |
|
31 | if (typeof tooltipTimeoutID !== 'undefined') { | |
|
32 | // avoid accumulation of timeout callbacks (blinking) | |
|
33 | window.clearTimeout(tooltipTimeoutID); | |
|
34 | } | |
|
35 | tooltip.classList.add('hidden'); | |
|
36 | var x = (e.clientX + 10) + 'px', | |
|
37 | y = (e.clientY - 20) + 'px'; | |
|
38 | tooltip.style.top = y; | |
|
39 | tooltip.style.left = x; | |
|
40 | tooltipTimeoutID = window.setTimeout(function() { | |
|
41 | tooltip.classList.remove('hidden'); | |
|
42 | }, 1000); | |
|
43 | } | |
|
44 | ||
|
45 | // on mousemove, show tooltip close to cursor position | |
|
46 | sourcelines.addEventListener('mousemove', moveAndShowTooltip); | |
|
47 | ||
|
20 | 48 | // retrieve all direct <span> children of <pre class="sourcelines"> |
|
21 | 49 | var spans = Array.prototype.filter.call( |
|
22 | 50 | sourcelines.children, |
@@ -65,6 +93,10 b" document.addEventListener('DOMContentLoa" | |||
|
65 | 93 | // registered for other click with <span> target |
|
66 | 94 | return; |
|
67 | 95 | } |
|
96 | ||
|
97 | // update tooltip text | |
|
98 | tooltip.textContent = 'click again to terminate line block selection here'; | |
|
99 | ||
|
68 | 100 | var startId = parseInt(startElement.id.slice(1)); |
|
69 | 101 | startElement.classList.add(lineSelectedCSSClass); // CSS |
|
70 | 102 | |
@@ -83,13 +115,25 b" document.addEventListener('DOMContentLoa" | |||
|
83 | 115 | // remove this event listener |
|
84 | 116 | sourcelines.removeEventListener('click', lineSelectEnd); |
|
85 | 117 | |
|
118 | // hide tooltip and disable motion tracking | |
|
119 | tooltip.classList.add('hidden'); | |
|
120 | sourcelines.removeEventListener('mousemove', moveAndShowTooltip); | |
|
121 | window.clearTimeout(tooltipTimeoutID); | |
|
122 | ||
|
123 | //* restore initial "tooltip" state */ | |
|
124 | function restoreTooltip() { | |
|
125 | tooltip.textContent = initTooltipText; | |
|
126 | sourcelines.addEventListener('mousemove', moveAndShowTooltip); | |
|
127 | } | |
|
128 | ||
|
86 | 129 | // compute line range (startId, endId) |
|
87 | 130 | var endId = parseInt(endElement.id.slice(1)); |
|
88 | 131 | if (endId == startId) { |
|
89 | 132 | // clicked twice the same line, cancel and reset initial state |
|
90 |
// (CSS |
|
|
133 | // (CSS, event listener for selection start, tooltip) | |
|
91 | 134 | removeSelectedCSSClass(); |
|
92 | 135 | sourcelines.addEventListener('click', lineSelectStart); |
|
136 | restoreTooltip(); | |
|
93 | 137 | return; |
|
94 | 138 | } |
|
95 | 139 | var inviteElement = endElement; |
@@ -118,6 +162,8 b" document.addEventListener('DOMContentLoa" | |||
|
118 | 162 | sourcelines.removeEventListener('click', cancel); |
|
119 | 163 | // remove styles on selected lines |
|
120 | 164 | removeSelectedCSSClass(); |
|
165 | // restore tooltip element | |
|
166 | restoreTooltip(); | |
|
121 | 167 | } |
|
122 | 168 | |
|
123 | 169 | // bind cancel event to click on <button> |
@@ -320,6 +320,22 b' div.followlines-link {' | |||
|
320 | 320 | font-family: sans-serif; |
|
321 | 321 | } |
|
322 | 322 | |
|
323 | div#followlines-tooltip { | |
|
324 | display: none; | |
|
325 | position: fixed; | |
|
326 | background-color: #ffc; | |
|
327 | border: 1px solid #999; | |
|
328 | padding: 2px; | |
|
329 | } | |
|
330 | ||
|
331 | .sourcelines:hover > div#followlines-tooltip { | |
|
332 | display: inline; | |
|
333 | } | |
|
334 | ||
|
335 | .sourcelines:hover > div#followlines-tooltip.hidden { | |
|
336 | display: none; | |
|
337 | } | |
|
338 | ||
|
323 | 339 | .sourcelines > a { |
|
324 | 340 | display: inline-block; |
|
325 | 341 | position: absolute; |
General Comments 0
You need to be logged in to leave comments.
Login now