summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/blob/blob_blame_link.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/blob/blob_blame_link.js')
-rw-r--r--app/assets/javascripts/blob/blob_blame_link.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/app/assets/javascripts/blob/blob_blame_link.js b/app/assets/javascripts/blob/blob_blame_link.js
new file mode 100644
index 00000000000..41dfd7b82b8
--- /dev/null
+++ b/app/assets/javascripts/blob/blob_blame_link.js
@@ -0,0 +1,31 @@
+function addBlameLink(containerSelector, linkClass) {
+ const containerEl = document.querySelector(containerSelector);
+
+ if (!containerEl) {
+ return;
+ }
+
+ containerEl.addEventListener('mouseover', (e) => {
+ const isLineLink = e.target.classList.contains(linkClass);
+ if (isLineLink) {
+ const lineLink = e.target;
+ const lineLinkCopy = lineLink.cloneNode(true);
+ lineLinkCopy.classList.remove(linkClass, 'diff-line-num');
+
+ const { lineNumber } = lineLink.dataset;
+ const { blamePath } = document.querySelector('.line-numbers').dataset;
+ const blameLink = document.createElement('a');
+ blameLink.classList.add('file-line-blame');
+ blameLink.href = `${blamePath}#L${lineNumber}`;
+
+ const wrapper = document.createElement('div');
+ wrapper.classList.add('line-links', 'diff-line-num');
+
+ wrapper.appendChild(blameLink);
+ wrapper.appendChild(lineLinkCopy);
+ lineLink.replaceWith(wrapper);
+ }
+ });
+}
+
+export default addBlameLink;