window.onload = function() { var i, imax, codeBlocks = Sizzle('pre'), callStackItems = Sizzle('.call-stack-item'); // highlight code blocks for (i = 0, imax = codeBlocks.length; i < imax; ++i) { hljs.highlightBlock(codeBlocks[i], ' '); } // code block hover line document.onmousemove = function(e) { var lines, i, imax, j, jmax, k, kmax, event = e || window.event, y = event.clientY, lineFound = false; for (i = 0, imax = codeBlocks.length; i < imax; ++i) { lines = codeBlocks[i].getClientRects(); for (j = 0, jmax = lines.length; j < jmax; ++j) { if (y > lines[j].top && y < lines[j].bottom) { lineFound = true; break; } } if (lineFound) { break; } } var hoverLines = Sizzle('.hover-line'); for (k = 0, kmax = hoverLines.length; k < kmax; ++k) { hoverLines[k].className = 'hover-line'; } if (lineFound) { var line = Sizzle('.call-stack-item:eq(' + i + ') .hover-line:eq(' + j + ')'); if (line[0]) { line[0].className = 'hover-line hover'; } } } // toggle code block visibility for (i = 0, imax = callStackItems.length; i < imax; i++) { Sizzle('.element-wrap', callStackItems[i])[0].addEventListener('click', function() { var code = Sizzle('.code-wrap', this.parentNode)[0]; code.style.display = window.getComputedStyle(code).display == 'block' ? 'none' : 'block'; }); } };