Spaces:
Running
Running
| !(() => { | |
| var ttFnSel = d3.select('body').selectAppend('div.tooltip-footnote.tooltip-footnote-hidden') | |
| function index2superscipt(i){ | |
| return (i + 1 + '') | |
| .split('') | |
| .map(num => '⁰¹²³⁴⁵⁶⁷⁸⁹'[num]) | |
| .join('') | |
| } | |
| var footendSel = d3.selectAll('.footend') | |
| .each(function(d, i){ | |
| var sel = d3.select(this) | |
| var ogHTML = sel.parent().html() | |
| sel | |
| .at({href: '#footstart-' + i, id: 'footend-' + i}) | |
| .text(index2superscipt(i)) | |
| .datum(ogHTML) | |
| }) | |
| footendSel.parent().parent().selectAll('br').remove() | |
| var footstartSel = d3.selectAll('.footstart') | |
| .each(function(d, i){ | |
| d3.select(this) | |
| .at({ | |
| href: '#footend-' + i, | |
| }) | |
| .text(index2superscipt(i)) | |
| .datum(footendSel.data()[i]) | |
| .parent().at({id: 'footstart-' + i}) | |
| }) | |
| .call(addLockedTooltip) | |
| function addLockedTooltip(sel){ | |
| sel | |
| .on('mouseover', function(d, i){ | |
| ttFnSel | |
| .classed('tooltip-footnote-hidden', 0) | |
| .html(d).select('.footend').remove() | |
| var [x, y] = d3.mouse(d3.select('html').node()) | |
| var bb = ttFnSel.node().getBoundingClientRect(), | |
| left = d3.clamp(20, (x-bb.width/2), window.innerWidth - bb.width - 20), | |
| top = innerHeight + scrollY > y + 20 + bb.height ? y + 20 : y - bb.height - 10; | |
| ttFnSel.st({left, top}) | |
| }) | |
| .on('mousemove', mousemove) | |
| .on('mouseout', mouseout) | |
| ttFnSel | |
| .on('mousemove', mousemove) | |
| .on('mouseout', mouseout) | |
| function mousemove(){ | |
| if (window.__ttfade) window.__ttfade.stop() | |
| } | |
| function mouseout(){ | |
| if (window.__ttfade) window.__ttfade.stop() | |
| window.__ttfade = d3.timeout( | |
| () => ttFnSel.classed('tooltip-footnote-hidden', 1), | |
| 250 | |
| ) | |
| } | |
| } | |
| })() | |