This commit is contained in:
Tony Brix 2019-02-14 10:43:03 -06:00
parent a00ae47f3a
commit a6f7609438
2 changed files with 85 additions and 33 deletions

View File

@ -14,7 +14,6 @@ onunhandledrejection = function (e) {
var $markdownElem = document.querySelector('#markdown'); var $markdownElem = document.querySelector('#markdown');
var $markedVerElem = document.querySelector('#markedVersion'); var $markedVerElem = document.querySelector('#markedVersion');
var $commitVerElem = document.querySelector('#commitVersion'); var $commitVerElem = document.querySelector('#commitVersion');
$commitVerElem.style.display = 'none';
var $markedVer = document.querySelector('#markedCdn'); var $markedVer = document.querySelector('#markedCdn');
var $optionsElem = document.querySelector('#options'); var $optionsElem = document.querySelector('#options');
var $outputTypeElem = document.querySelector('#outputType'); var $outputTypeElem = document.querySelector('#outputType');
@ -34,11 +33,11 @@ var $activeOutputElem = null;
var search = searchToObject(); var search = searchToObject();
var markedVersions = { var markedVersions = {
commit: 'commit',
master: 'https://cdn.jsdelivr.net/gh/markedjs/marked/lib/marked.js' master: 'https://cdn.jsdelivr.net/gh/markedjs/marked/lib/marked.js'
}; };
var markedVersionCache = {}; var markedVersionCache = {};
$commitVerElem.style.display = 'none';
$previewIframe.addEventListener('load', function () { $previewIframe.addEventListener('load', function () {
lastInput = ''; lastInput = '';
inputDirty = true; inputDirty = true;
@ -75,20 +74,42 @@ fetch('https://data.jsdelivr.com/v1/package/npm/marked')
.then(function () { .then(function () {
if ('version' in search && search.version) { if ('version' in search && search.version) {
if (!(search.version in markedVersions)) { if (!(search.version in markedVersions)) {
addCommitVersion(search.version); var match = search.version.match(/^(\w+):(.+)$/);
if (match) {
switch (match[1]) {
case 'commit':
addCommitVersion(search.version, match[2].substring(0, 7), match[2]);
return search.version;
case 'pr':
return getPrCommit(match[2])
.then(function (commit) {
if (!commit) {
return 'master';
}
addCommitVersion(search.version, 'PR #' + match[2], commit);
return search.version;
});
}
}
} }
$markedVerElem.value = search.version;
} else {
$markedVerElem.value = 'master';
} }
updateVersion().then(function () { return 'master';
if ('options' in search && search.options) { })
$optionsElem.value = search.options; .then(function (version) {
} else { $markedVerElem.value = version;
setDefaultOptions(); })
} .then(updateVersion)
}); .then(function () {
if ('options' in search && search.options) {
$optionsElem.value = search.options;
} else {
setDefaultOptions();
}
})
.then(function () {
checkForChanges();
setScrollPercent(0);
}); });
if (search.outputType) { if (search.outputType) {
@ -101,14 +122,14 @@ fetch('./quickref.md')
document.querySelector('#quickref').value = text; document.querySelector('#quickref').value = text;
}); });
function addCommitVersion(version) { function addCommitVersion(value, text, commit) {
if (version in markedVersions) { if (value in markedVersions) {
return; return;
} }
markedVersions[version] = 'https://cdn.jsdelivr.net/gh/markedjs/marked@' + version + '/lib/marked.js'; markedVersions[value] = 'https://cdn.jsdelivr.net/gh/markedjs/marked@' + commit + '/lib/marked.js';
var opt = document.createElement('option'); var opt = document.createElement('option');
opt.textContent = version.substring(0, 7); opt.textContent = text;
opt.value = version; opt.value = value;
$markedVerElem.insertBefore(opt, $markedVerElem.firstChild); $markedVerElem.insertBefore(opt, $markedVerElem.firstChild);
} }
@ -139,7 +160,7 @@ handleOutputChange();
$inputTypeElem.addEventListener('change', handleInputChange, false); $inputTypeElem.addEventListener('change', handleInputChange, false);
handleInputChange(); handleInputChange();
$markedVerElem.addEventListener('change', function () { $markedVerElem.addEventListener('change', function () {
if ($markedVerElem.value === 'commit') { if ($markedVerElem.value === 'commit' || $markedVerElem.value === 'pr') {
$commitVerElem.style.display = ''; $commitVerElem.style.display = '';
} else { } else {
$commitVerElem.style.display = 'none'; $commitVerElem.style.display = 'none';
@ -163,16 +184,36 @@ $optionsElem.addEventListener('keydown', handleInput, false);
$commitVerElem.addEventListener('keypress', function (e) { $commitVerElem.addEventListener('keypress', function (e) {
if (e.which === 13) { if (e.which === 13) {
var commit = $commitVerElem.value.toLowerCase(); switch ($markedVerElem.value) {
if (!commit.match(/^[0-9a-f]{40}$/)) { case 'commit':
alert('That is not a valid commit'); var commit = $commitVerElem.value.toLowerCase();
return; if (!commit.match(/^[0-9a-f]{40}$/)) {
alert('That is not a valid commit');
return;
}
addCommitVersion('commit:' + commit, commit.substring(0, 7), commit);
$markedVerElem.value = 'commit:' + commit;
$commitVerElem.style.display = 'none';
$commitVerElem.value = '';
updateVersion();
break;
case 'pr':
$commitVerElem.disabled = true;
var pr = $commitVerElem.value.replace(/\D/g, '');
getPrCommit(pr)
.then(function (commit) {
$commitVerElem.disabled = false;
if (!commit) {
alert('That is not a valid PR');
return;
}
addCommitVersion('pr:' + pr, 'PR #' + pr, commit);
$markedVerElem.value = 'pr:' + pr;
$commitVerElem.style.display = 'none';
$commitVerElem.value = '';
updateVersion();
});
} }
addCommitVersion(commit);
$markedVerElem.value = commit;
$commitVerElem.style.display = 'none';
$commitVerElem.value = '';
updateVersion();
} }
}, false); }, false);
@ -183,12 +224,24 @@ $clearElem.addEventListener('click', function () {
updateVersion().then(setDefaultOptions); updateVersion().then(setDefaultOptions);
}, false); }, false);
function getPrCommit(pr) {
return fetch('https://api.github.com/repos/markedjs/marked/pulls/' + pr + '/commits')
.then(function (res) {
return res.json();
})
.then(function (json) {
return json[json.length - 1].sha;
}).catch(function () {
// return undefined
});
}
function setDefaultOptions() { function setDefaultOptions() {
if (window.Worker) { if (window.Worker) {
messageWorker({ messageWorker({
task: 'defaults', task: 'defaults',
version: markedVersions[$markedVerElem.value]} version: markedVersions[$markedVerElem.value]
); });
} else { } else {
var defaults = marked.getDefaults(); var defaults = marked.getDefaults();
setOptions(defaults); setOptions(defaults);
@ -293,7 +346,7 @@ function updateVersion() {
var delayTime = 1; var delayTime = 1;
var checkChangeTimeout = null; var checkChangeTimeout = null;
function checkForChanges() { function checkForChanges() {
if (inputDirty && $markedVerElem.value !== 'commit' && (typeof marked !== 'undefined' || window.Worker)) { if (inputDirty && $markedVerElem.value !== 'commit' && $markedVerElem.value !== 'pr' && (typeof marked !== 'undefined' || window.Worker)) {
inputDirty = false; inputDirty = false;
updateLink(); updateLink();
@ -435,5 +488,3 @@ function workerTimeout(seconds) {
workerTimeout(seconds); workerTimeout(seconds);
}, 1000); }, 1000);
} }
checkForChanges();
setScrollPercent(0);

View File

@ -25,6 +25,7 @@
<a id="permalink">Permalink</a> · <a id="permalink">Permalink</a> ·
<span>Version: </span> <span>Version: </span>
<select id="markedVersion"> <select id="markedVersion">
<option value="pr">Add PR:</option>
<option value="commit">Add Commit:</option> <option value="commit">Add Commit:</option>
<option value="master" selected>master</option> <option value="master" selected>master</option>
</select> </select>