Browse Source

Linkify cross-repo issues references in titles - Fixes #412 (#416)

master
Alex Burka 8 years ago
committed by Sindre Sorhus
parent
commit
e15bdeb6f7
  1. 9
      extension/content.js
  2. 11
      extension/linkify-urls-in-code.js
  3. 9
      extension/util.js
  4. 1
      test/linkify-urls-in-code.js

9
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,
`<a href="https://github.com/${repoUrl}/issues/$1">#$1</a>`
new RegExp(issueRegex.source, 'g'),
match => utils.linkifyIssueRef(repoUrl, match, '')
));
}
}

11
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 `<a href="https://github.com/${issueParts[0]}/issues/${issueParts[1]}" ${commonURLAttrs}>${issue}</a>`;
}
return `<a href="https://github.com/${repoPath}/issues/${issue.replace('#', '')}" ${commonURLAttrs}>${issue}</a>`;
};
const linkifyURL = url => `<a href="${url}" ${commonURLAttrs}>${url}</a>`;
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));
}
});
};

9
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 `<a href="https://github.com/${issueParts[0]}/issues/${issueParts[1]}" ${attrs}>${issue}</a>`;
}
return `<a href="https://github.com/${repoPath}/issues/${issue.replace('#', '')}" ${attrs}>${issue}</a>`;
};
})(window.utils = {});

1
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;

Loading…
Cancel
Save