From e15bdeb6f73e5a1e1110740e36a2aabc5f9b487a Mon Sep 17 00:00:00 2001 From: Alex Burka Date: Fri, 12 May 2017 15:49:56 -0400 Subject: [PATCH] Linkify cross-repo issues references in titles - Fixes #412 (#416) --- extension/content.js | 9 +++++---- extension/linkify-urls-in-code.js | 11 ++--------- extension/util.js | 9 +++++++++ test/linkify-urls-in-code.js | 1 + 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/extension/content.js b/extension/content.js index ad537b4..516a78b 100644 --- a/extension/content.js +++ b/extension/content.js @@ -1,4 +1,4 @@ -/* globals gitHubInjection, pageDetect, icons, diffFileHeader, addReactionParticipants, addFileCopyButton, addGistCopyButton, enableCopyOnY, showRealNames, markUnread, linkifyURLsInCode, addUploadBtn */ +/* globals utils, gitHubInjection, pageDetect, icons, diffFileHeader, addReactionParticipants, addFileCopyButton, addGistCopyButton, enableCopyOnY, showRealNames, markUnread, linkifyURLsInCode, addUploadBtn */ 'use strict'; const {ownerName, repoName} = pageDetect.getOwnerAndRepo(); @@ -148,11 +148,12 @@ function addDeleteForkLink() { function linkifyIssuesInTitles() { const $title = $('.js-issue-title'); const titleText = $title.text(); + const issueRegex = utils.issueRegex; - if (/(#\d+)/.test(titleText)) { + if (issueRegex.test(titleText)) { $title.html(titleText.replace( - /#(\d+)/g, - `#$1` + new RegExp(issueRegex.source, 'g'), + match => utils.linkifyIssueRef(repoUrl, match, '') )); } } diff --git a/extension/linkify-urls-in-code.js b/extension/linkify-urls-in-code.js index 017900f..2b8484b 100644 --- a/extension/linkify-urls-in-code.js +++ b/extension/linkify-urls-in-code.js @@ -1,16 +1,9 @@ window.linkifyURLsInCode = (() => { - const issueRegex = /([a-zA-Z0-9-_.]+\/[a-zA-Z0-9-_.]+)?#[0-9]+/; + const issueRegex = window.utils.issueRegex; const URLRegex = /(http(s)?(:\/\/))(www\.)?[a-zA-Z0-9-_.]+(\.[a-zA-Z0-9]{2,})([-a-zA-Z0-9:%_+.~#?&//=]*)/; const linkifiedURLClass = 'rg-linkified-code'; const commonURLAttrs = `target="_blank" class="${linkifiedURLClass}"`; - const linkifyIssue = (repoPath, issue) => { - if (/\//.test(issue)) { - const issueParts = issue.split('#'); - return `${issue}`; - } - return `${issue}`; - }; const linkifyURL = url => `${url}`; const hasIssue = text => issueRegex.test(text); @@ -41,7 +34,7 @@ window.linkifyURLsInCode = (() => { const blobHTML = blob.innerHTML; if (hasIssue(blobHTML)) { const issueMatch = blobHTML.match(issueRegex)[0]; - blob.innerHTML = blobHTML.replace(issueMatch, linkifyIssue(repoPath, issueMatch)); + blob.innerHTML = blobHTML.replace(issueMatch, window.utils.linkifyIssueRef(repoPath, issueMatch, commonURLAttrs)); } }); }; diff --git a/extension/util.js b/extension/util.js index 2976cd9..38aec60 100644 --- a/extension/util.js +++ b/extension/util.js @@ -31,4 +31,13 @@ return success; }; + + exports.issueRegex = /([a-zA-Z0-9-_.]+\/[a-zA-Z0-9-_.]+)?#[0-9]+/; + exports.linkifyIssueRef = (repoPath, issue, attrs) => { + if (/\//.test(issue)) { + const issueParts = issue.split('#'); + return `${issue}`; + } + return `${issue}`; + }; })(window.utils = {}); diff --git a/test/linkify-urls-in-code.js b/test/linkify-urls-in-code.js index 1f51870..0d779ec 100644 --- a/test/linkify-urls-in-code.js +++ b/test/linkify-urls-in-code.js @@ -4,6 +4,7 @@ import Window from './fixtures/window'; global.window = new Window(); global.location = window.location; +require('../extension/util.js'); // eslint-disable-line import/no-unassigned-import require('../extension/linkify-urls-in-code.js'); // eslint-disable-line import/no-unassigned-import const {linkifyURLsInCode} = window;