diff --git a/src/Whoops/Resources/css/whoops.base.css b/src/Whoops/Resources/css/whoops.base.css index edd5cd8..00856a6 100644 --- a/src/Whoops/Resources/css/whoops.base.css +++ b/src/Whoops/Resources/css/whoops.base.css @@ -558,3 +558,11 @@ pre.sf-dump { .search-for-help li a svg path { background-size: contain; } + +.line-numbers-rows span { + pointer-events: auto; + cursor: pointer; +} +.line-numbers-rows span:hover { + text-decoration: underline; +} diff --git a/src/Whoops/Resources/js/whoops.base.js b/src/Whoops/Resources/js/whoops.base.js index 22a0d7b..8bd919b 100644 --- a/src/Whoops/Resources/js/whoops.base.js +++ b/src/Whoops/Resources/js/whoops.base.js @@ -183,6 +183,30 @@ Zepto(function($) { setActiveFramesTab($(this)); }); + // Open editor from code block rows number + $(document).delegate('.line-numbers-rows > span', 'click', function(e) { + var linkTag = $(this).closest('.frame-code').find('.editor-link'); + if (!linkTag) return; + var editorUrl = linkTag.attr('href'); + var requiresAjax = linkTag.data('ajax'); + + var lineOffset = $(this).closest('[data-line-offset]').data('line-offset'); + var lineNumber = lineOffset + $(this).index(); + + var realLine = $(this).closest('[data-line]').data('line'); + if (!realLine) return; + var fileUrl = editorUrl.replace( + new RegExp('([:=])' + realLine), + '$1' + lineNumber + ); + + if (requiresAjax) { + $.get(fileUrl); + } else { + $('').attr('href', fileUrl).trigger('click'); + } + }); + // Render late enough for highlightCurrentLine to be ready renderCurrentCodeblock(); });