Use apis where it is possible for the online diff

This commit is contained in:
Rodrigo Fernandes 2016-10-15 12:13:09 +01:00
parent 269b1b6cfb
commit 40f0548919
No known key found for this signature in database
GPG key ID: 08E3C5F38969078E
3 changed files with 97 additions and 79 deletions

View file

@ -399,15 +399,12 @@
/* /*
* Example URLs: * Example URLs:
* *
* github/rtfpessoa/diff2html/7d02e67f3b3386ac5d804f974d025cd7a1165839
* https://github.com/rtfpessoa/diff2html/commit/7d02e67f3b3386ac5d804f974d025cd7a1165839 * https://github.com/rtfpessoa/diff2html/commit/7d02e67f3b3386ac5d804f974d025cd7a1165839
* https://github.com/rtfpessoa/diff2html/pull/106 * https://github.com/rtfpessoa/diff2html/pull/106
* *
* gitlab/gitlab-org/gitlab-ce/4e963fed42ad518caa7353d361a38a1250c99c41
* https://gitlab.com/gitlab-org/gitlab-ce/commit/4e963fed42ad518caa7353d361a38a1250c99c41 * https://gitlab.com/gitlab-org/gitlab-ce/commit/4e963fed42ad518caa7353d361a38a1250c99c41
* https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6763 * https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6763
* *
* bitbucket/atlassian/amps/52c38116f12475f75af4a147b7a7685478b83eca
* https://bitbucket.org/atlassian/amps/commits/52c38116f12475f75af4a147b7a7685478b83eca * https://bitbucket.org/atlassian/amps/commits/52c38116f12475f75af4a147b7a7685478b83eca
* https://bitbucket.org/atlassian/amps/pull-requests/236 * https://bitbucket.org/atlassian/amps/pull-requests/236
*/ */
@ -431,7 +428,7 @@ $(document).ready(function() {
if (hash) { if (hash) {
$url.val(hash); $url.val(hash);
draw(prepareUrl(hash)); smartDraw(hash);
} else if (search) { } else if (search) {
try { try {
var url = search var url = search
@ -439,12 +436,12 @@ $(document).ready(function() {
.split('diff=')[1] .split('diff=')[1]
.split('&')[0]; .split('&')[0];
$url.val(url); $url.val(url);
draw(prepareUrl(url)); smartDraw(url);
} catch (_ignore) { } catch (_ignore) {
} }
} }
bind(prepareUrl); bind();
$outputFormat $outputFormat
.add($showFiles) .add($showFiles)
@ -452,90 +449,102 @@ $(document).ready(function() {
.add($wordThreshold) .add($wordThreshold)
.add($matchingMaxComparisons) .add($matchingMaxComparisons)
.change(function() { .change(function() {
fastDraw(); smartDraw();
}); });
function fastDraw() { function smartDraw(urlOpt) {
var url = $url.val(); var url = urlOpt | $url.val();
var preparedUrl = prepareUrl(url); var req = prepareUrl(url);
draw(preparedUrl); draw(req);
}
function updateHash(url) {
window.location.hash = '#!' + url;
} }
function bind() { function bind() {
$('#url-btn').click(function(e) { $('#url-btn').click(function(e) {
e.preventDefault(); e.preventDefault();
fastDraw(); var url = $url.val();
smartDraw(url);
updateHash(url);
}); });
$url.on('paste', function(e) { $url.on('paste', function(e) {
fastDraw(); var url = e.originalEvent.clipboardData.getData('Text');
smartDraw(url);
updateHash(url);
}); });
} }
function prepareUrl(url) { function prepareUrl(url) {
var githubPath = /^github\/(.*?)\/(.*?)\/(.*?)$/; var fetchUrl;
var headers = new Headers();
var githubCommitUrl = /^https?:\/\/(?:www\.)?github\.com\/(.*?)\/(.*?)\/commit\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/; var githubCommitUrl = /^https?:\/\/(?:www\.)?github\.com\/(.*?)\/(.*?)\/commit\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/;
var githubPrUrl = /^https?:\/\/(?:www\.)?github\.com\/(.*?)\/(.*?)\/pull\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/; var githubPrUrl = /^https?:\/\/(?:www\.)?github\.com\/(.*?)\/(.*?)\/pull\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/;
var gitlabPath = /^gitlab\/(.*?)\/(.*?)\/(.*?)$/;
var gitlabCommitUrl = /^https?:\/\/(?:www\.)?gitlab\.com\/(.*?)\/(.*?)\/commit\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/; var gitlabCommitUrl = /^https?:\/\/(?:www\.)?gitlab\.com\/(.*?)\/(.*?)\/commit\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/;
var gitlabPrUrl = /^https?:\/\/(?:www\.)?gitlab\.com\/(.*?)\/(.*?)\/merge_requests\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/; var gitlabPrUrl = /^https?:\/\/(?:www\.)?gitlab\.com\/(.*?)\/(.*?)\/merge_requests\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/;
var bitbucketPath = /^bitbucket\/(.*?)\/(.*?)\/(.*?)$/;
var bitbucketCommitUrl = /^https?:\/\/(?:www\.)?bitbucket\.org\/(.*?)\/(.*?)\/commits\/(.*?)(?:\/raw)?(?:\/.*)?$/; var bitbucketCommitUrl = /^https?:\/\/(?:www\.)?bitbucket\.org\/(.*?)\/(.*?)\/commits\/(.*?)(?:\/raw)?(?:\/.*)?$/;
var bitbucketPrUrl = /^https?:\/\/(?:www\.)?bitbucket\.org\/(.*?)\/(.*?)\/pull-requests\/(.*?)(?:\/.*)?$/; var bitbucketPrUrl = /^https?:\/\/(?:www\.)?bitbucket\.org\/(.*?)\/(.*?)\/pull-requests\/(.*?)(?:\/.*)?$/;
function genericUrlGen(provider, userName, projectName, type, value) {
return 'https://' + provider + '.com/' + userName + '/' + projectName + '/' + type + '/' + value + '.diff'; function gitLabUrlGen(userName, projectName, type, value) {
return 'https://crossorigin.me/https://gitlab.com/' + userName + '/' + projectName + '/' + type + '/' + value + '.diff';
}
function gitHubUrlGen(userName, projectName, type, value) {
headers.append('Accept', 'application/vnd.github.v3.diff');
return 'https://api.github.com/repos/' + userName + '/' + projectName + '/' + type + '/' + value;
} }
function bitbucketUrlGen(userName, projectName, type, value) { function bitbucketUrlGen(userName, projectName, type, value) {
var baseUrl = 'https://bitbucket.org/api/2.0/repositories/'; var baseUrl = 'https://bitbucket.org/api/2.0/repositories/';
if (type === 'pullrequests') { if (type === 'pullrequests') {
return baseUrl + userName + '/' + projectName + '/pullrequests/' + value + '/diff'; return baseUrl + userName + '/' + projectName + '/pullrequests/' + value + '/diff';
} }
return baseUrl + userName + '/' + projectName + '/diff/' + value; return baseUrl + userName + '/' + projectName + '/diff/' + value;
} }
var values; var values;
var finalUrl; if ((values = githubCommitUrl.exec(url))) {
if ((values = githubPath.exec(url))) { fetchUrl = gitHubUrlGen(values[1], values[2], 'commits', values[3]);
finalUrl = genericUrlGen('github', values[1], values[2], 'commit', values[3]);
} else if ((values = githubCommitUrl.exec(url))) {
finalUrl = genericUrlGen('github', values[1], values[2], 'commit', values[3]);
} else if ((values = githubPrUrl.exec(url))) { } else if ((values = githubPrUrl.exec(url))) {
finalUrl = genericUrlGen('github', values[1], values[2], 'pull', values[3]); fetchUrl = gitHubUrlGen(values[1], values[2], 'pulls', values[3]);
} else if ((values = gitlabPath.exec(url))) {
finalUrl = genericUrlGen('gitlab', values[1], values[2], 'commit', values[3]);
} else if ((values = gitlabCommitUrl.exec(url))) { } else if ((values = gitlabCommitUrl.exec(url))) {
finalUrl = genericUrlGen('gitlab', values[1], values[2], 'commit', values[3]); fetchUrl = gitLabUrlGen(values[1], values[2], 'commit', values[3]);
} else if ((values = gitlabPrUrl.exec(url))) { } else if ((values = gitlabPrUrl.exec(url))) {
finalUrl = genericUrlGen('gitlab', values[1], values[2], 'merge_requests', values[3]); fetchUrl = gitLabUrlGen(values[1], values[2], 'merge_requests', values[3]);
} else if ((values = bitbucketPath.exec(url))) {
finalUrl = bitbucketUrlGen(values[1], values[2], 'commit', values[3]);
} else if ((values = bitbucketCommitUrl.exec(url))) { } else if ((values = bitbucketCommitUrl.exec(url))) {
finalUrl = bitbucketUrlGen(values[1], values[2], 'commit', values[3]); fetchUrl = bitbucketUrlGen(values[1], values[2], 'commit', values[3]);
} else if ((values = bitbucketPrUrl.exec(url))) { } else if ((values = bitbucketPrUrl.exec(url))) {
finalUrl = bitbucketUrlGen(values[1], values[2], 'pullrequests', values[3]); fetchUrl = bitbucketUrlGen(values[1], values[2], 'pullrequests', values[3]);
} else { } else {
console.info('Could not parse url, using the provided url.'); console.info('Could not parse url, using the provided url.');
finalUrl = url; fetchUrl = url;
} }
return finalUrl; return {
url: fetchUrl,
headers: headers
};
} }
function draw(url) { function draw(req) {
var outputFormat = $outputFormat.val(); var outputFormat = $outputFormat.val();
var showFiles = $showFiles.is(':checked'); var showFiles = $showFiles.is(':checked');
var matching = $matching.val(); var matching = $matching.val();
var wordThreshold = $wordThreshold.val(); var wordThreshold = $wordThreshold.val();
var matchingMaxComparisons = $matchingMaxComparisons.val(); var matchingMaxComparisons = $matchingMaxComparisons.val();
var fullUrl = 'https://crossorigin.me/' + url; fetch(req.url, {
fetch(fullUrl) method: 'GET',
headers: req.headers,
mode: 'cors',
cache: 'default'
})
.then(function(res) { .then(function(res) {
return res.text(); return res.text();
}) })

2
docs/url.min.js vendored

File diff suppressed because one or more lines are too long

View file

@ -3,15 +3,12 @@
/* /*
* Example URLs: * Example URLs:
* *
* github/rtfpessoa/diff2html/7d02e67f3b3386ac5d804f974d025cd7a1165839
* https://github.com/rtfpessoa/diff2html/commit/7d02e67f3b3386ac5d804f974d025cd7a1165839 * https://github.com/rtfpessoa/diff2html/commit/7d02e67f3b3386ac5d804f974d025cd7a1165839
* https://github.com/rtfpessoa/diff2html/pull/106 * https://github.com/rtfpessoa/diff2html/pull/106
* *
* gitlab/gitlab-org/gitlab-ce/4e963fed42ad518caa7353d361a38a1250c99c41
* https://gitlab.com/gitlab-org/gitlab-ce/commit/4e963fed42ad518caa7353d361a38a1250c99c41 * https://gitlab.com/gitlab-org/gitlab-ce/commit/4e963fed42ad518caa7353d361a38a1250c99c41
* https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6763 * https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6763
* *
* bitbucket/atlassian/amps/52c38116f12475f75af4a147b7a7685478b83eca
* https://bitbucket.org/atlassian/amps/commits/52c38116f12475f75af4a147b7a7685478b83eca * https://bitbucket.org/atlassian/amps/commits/52c38116f12475f75af4a147b7a7685478b83eca
* https://bitbucket.org/atlassian/amps/pull-requests/236 * https://bitbucket.org/atlassian/amps/pull-requests/236
*/ */
@ -35,7 +32,7 @@ $(document).ready(function() {
if (hash) { if (hash) {
$url.val(hash); $url.val(hash);
draw(prepareUrl(hash)); smartDraw(hash);
} else if (search) { } else if (search) {
try { try {
var url = search var url = search
@ -43,12 +40,12 @@ $(document).ready(function() {
.split('diff=')[1] .split('diff=')[1]
.split('&')[0]; .split('&')[0];
$url.val(url); $url.val(url);
draw(prepareUrl(url)); smartDraw(url);
} catch (_ignore) { } catch (_ignore) {
} }
} }
bind(prepareUrl); bind();
$outputFormat $outputFormat
.add($showFiles) .add($showFiles)
@ -56,90 +53,102 @@ $(document).ready(function() {
.add($wordThreshold) .add($wordThreshold)
.add($matchingMaxComparisons) .add($matchingMaxComparisons)
.change(function() { .change(function() {
fastDraw(); smartDraw();
}); });
function fastDraw() { function smartDraw(urlOpt) {
var url = $url.val(); var url = urlOpt | $url.val();
var preparedUrl = prepareUrl(url); var req = prepareUrl(url);
draw(preparedUrl); draw(req);
}
function updateHash(url) {
window.location.hash = '#!' + url;
} }
function bind() { function bind() {
$('#url-btn').click(function(e) { $('#url-btn').click(function(e) {
e.preventDefault(); e.preventDefault();
fastDraw(); var url = $url.val();
smartDraw(url);
updateHash(url);
}); });
$url.on('paste', function(e) { $url.on('paste', function(e) {
fastDraw(); var url = e.originalEvent.clipboardData.getData('Text');
smartDraw(url);
updateHash(url);
}); });
} }
function prepareUrl(url) { function prepareUrl(url) {
var githubPath = /^github\/(.*?)\/(.*?)\/(.*?)$/; var fetchUrl;
var headers = new Headers();
var githubCommitUrl = /^https?:\/\/(?:www\.)?github\.com\/(.*?)\/(.*?)\/commit\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/; var githubCommitUrl = /^https?:\/\/(?:www\.)?github\.com\/(.*?)\/(.*?)\/commit\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/;
var githubPrUrl = /^https?:\/\/(?:www\.)?github\.com\/(.*?)\/(.*?)\/pull\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/; var githubPrUrl = /^https?:\/\/(?:www\.)?github\.com\/(.*?)\/(.*?)\/pull\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/;
var gitlabPath = /^gitlab\/(.*?)\/(.*?)\/(.*?)$/;
var gitlabCommitUrl = /^https?:\/\/(?:www\.)?gitlab\.com\/(.*?)\/(.*?)\/commit\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/; var gitlabCommitUrl = /^https?:\/\/(?:www\.)?gitlab\.com\/(.*?)\/(.*?)\/commit\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/;
var gitlabPrUrl = /^https?:\/\/(?:www\.)?gitlab\.com\/(.*?)\/(.*?)\/merge_requests\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/; var gitlabPrUrl = /^https?:\/\/(?:www\.)?gitlab\.com\/(.*?)\/(.*?)\/merge_requests\/(.*?)(?:\.diff)?(?:\.patch)?(?:\/.*)?$/;
var bitbucketPath = /^bitbucket\/(.*?)\/(.*?)\/(.*?)$/;
var bitbucketCommitUrl = /^https?:\/\/(?:www\.)?bitbucket\.org\/(.*?)\/(.*?)\/commits\/(.*?)(?:\/raw)?(?:\/.*)?$/; var bitbucketCommitUrl = /^https?:\/\/(?:www\.)?bitbucket\.org\/(.*?)\/(.*?)\/commits\/(.*?)(?:\/raw)?(?:\/.*)?$/;
var bitbucketPrUrl = /^https?:\/\/(?:www\.)?bitbucket\.org\/(.*?)\/(.*?)\/pull-requests\/(.*?)(?:\/.*)?$/; var bitbucketPrUrl = /^https?:\/\/(?:www\.)?bitbucket\.org\/(.*?)\/(.*?)\/pull-requests\/(.*?)(?:\/.*)?$/;
function genericUrlGen(provider, userName, projectName, type, value) {
return 'https://' + provider + '.com/' + userName + '/' + projectName + '/' + type + '/' + value + '.diff'; function gitLabUrlGen(userName, projectName, type, value) {
return 'https://crossorigin.me/https://gitlab.com/' + userName + '/' + projectName + '/' + type + '/' + value + '.diff';
}
function gitHubUrlGen(userName, projectName, type, value) {
headers.append('Accept', 'application/vnd.github.v3.diff');
return 'https://api.github.com/repos/' + userName + '/' + projectName + '/' + type + '/' + value;
} }
function bitbucketUrlGen(userName, projectName, type, value) { function bitbucketUrlGen(userName, projectName, type, value) {
var baseUrl = 'https://bitbucket.org/api/2.0/repositories/'; var baseUrl = 'https://bitbucket.org/api/2.0/repositories/';
if (type === 'pullrequests') { if (type === 'pullrequests') {
return baseUrl + userName + '/' + projectName + '/pullrequests/' + value + '/diff'; return baseUrl + userName + '/' + projectName + '/pullrequests/' + value + '/diff';
} }
return baseUrl + userName + '/' + projectName + '/diff/' + value; return baseUrl + userName + '/' + projectName + '/diff/' + value;
} }
var values; var values;
var finalUrl; if ((values = githubCommitUrl.exec(url))) {
if ((values = githubPath.exec(url))) { fetchUrl = gitHubUrlGen(values[1], values[2], 'commits', values[3]);
finalUrl = genericUrlGen('github', values[1], values[2], 'commit', values[3]);
} else if ((values = githubCommitUrl.exec(url))) {
finalUrl = genericUrlGen('github', values[1], values[2], 'commit', values[3]);
} else if ((values = githubPrUrl.exec(url))) { } else if ((values = githubPrUrl.exec(url))) {
finalUrl = genericUrlGen('github', values[1], values[2], 'pull', values[3]); fetchUrl = gitHubUrlGen(values[1], values[2], 'pulls', values[3]);
} else if ((values = gitlabPath.exec(url))) {
finalUrl = genericUrlGen('gitlab', values[1], values[2], 'commit', values[3]);
} else if ((values = gitlabCommitUrl.exec(url))) { } else if ((values = gitlabCommitUrl.exec(url))) {
finalUrl = genericUrlGen('gitlab', values[1], values[2], 'commit', values[3]); fetchUrl = gitLabUrlGen(values[1], values[2], 'commit', values[3]);
} else if ((values = gitlabPrUrl.exec(url))) { } else if ((values = gitlabPrUrl.exec(url))) {
finalUrl = genericUrlGen('gitlab', values[1], values[2], 'merge_requests', values[3]); fetchUrl = gitLabUrlGen(values[1], values[2], 'merge_requests', values[3]);
} else if ((values = bitbucketPath.exec(url))) {
finalUrl = bitbucketUrlGen(values[1], values[2], 'commit', values[3]);
} else if ((values = bitbucketCommitUrl.exec(url))) { } else if ((values = bitbucketCommitUrl.exec(url))) {
finalUrl = bitbucketUrlGen(values[1], values[2], 'commit', values[3]); fetchUrl = bitbucketUrlGen(values[1], values[2], 'commit', values[3]);
} else if ((values = bitbucketPrUrl.exec(url))) { } else if ((values = bitbucketPrUrl.exec(url))) {
finalUrl = bitbucketUrlGen(values[1], values[2], 'pullrequests', values[3]); fetchUrl = bitbucketUrlGen(values[1], values[2], 'pullrequests', values[3]);
} else { } else {
console.info('Could not parse url, using the provided url.'); console.info('Could not parse url, using the provided url.');
finalUrl = url; fetchUrl = url;
} }
return finalUrl; return {
url: fetchUrl,
headers: headers
};
} }
function draw(url) { function draw(req) {
var outputFormat = $outputFormat.val(); var outputFormat = $outputFormat.val();
var showFiles = $showFiles.is(':checked'); var showFiles = $showFiles.is(':checked');
var matching = $matching.val(); var matching = $matching.val();
var wordThreshold = $wordThreshold.val(); var wordThreshold = $wordThreshold.val();
var matchingMaxComparisons = $matchingMaxComparisons.val(); var matchingMaxComparisons = $matchingMaxComparisons.val();
var fullUrl = 'https://crossorigin.me/' + url; fetch(req.url, {
fetch(fullUrl) method: 'GET',
headers: req.headers,
mode: 'cors',
cache: 'default'
})
.then(function(res) { .then(function(res) {
return res.text(); return res.text();
}) })