Skip to content

Commit 02d90aa

Browse files
author
Remy Hunter
authored
Merge pull request #1 from UziTech/demo-versions
Demo versions
2 parents 3ddbb43 + 4095fc6 commit 02d90aa

File tree

2 files changed

+80
-30
lines changed

2 files changed

+80
-30
lines changed

docs/demo/demo.js

Lines changed: 75 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,20 @@ var $panes = document.querySelectorAll('.pane');
2222
var $inputPanes = document.querySelectorAll('.inputPane');
2323
var inputDirty = true;
2424
var $activeOutputElem = null;
25-
var changeTimeout = null;
2625
var search = searchToObject();
2726

27+
var markedVersions = {
28+
master: 'https://cdn.jsdelivr.net/gh/markedjs/marked/lib/marked.js'
29+
};
30+
var markedVersionCache = {};
31+
2832
var iframeLoaded = false;
2933
$previewIframe.addEventListener('load', function () {
3034
iframeLoaded = true;
3135
inputDirty = true;
32-
checkForChanges();
3336
});
3437

35-
if ('text' in search) {
38+
if ('text' in search && search.text) {
3639
$markdownElem.value = search.text;
3740
} else {
3841
fetch('./initial.md')
@@ -41,25 +44,47 @@ if ('text' in search) {
4144
if ($markdownElem.value === '') {
4245
$markdownElem.value = text;
4346
inputDirty = true;
44-
clearTimeout(changeTimeout);
45-
checkForChanges();
4647
setScrollPercent(0);
4748
}
4849
});
4950
}
5051

51-
if ('options' in search) {
52-
$optionsElem.value = search.options;
53-
} else {
54-
$optionsElem.value = JSON.stringify(
55-
marked.getDefaults(),
56-
function (key, value) {
57-
if (value && typeof value === 'object' && Object.getPrototypeOf(value) !== Object.prototype) {
58-
return undefined;
52+
fetch('https://data.jsdelivr.com/v1/package/npm/marked')
53+
.then(function (res) {
54+
return res.json();
55+
})
56+
.then(function (json) {
57+
for (var i = 0; i < json.versions.length; i++) {
58+
var ver = json.versions[i];
59+
markedVersions[ver] = 'https://cdn.jsdelivr.net/npm/marked@' + ver + '/lib/marked.js';
60+
var opt = document.createElement('option');
61+
opt.textContent = ver;
62+
opt.value = ver;
63+
$markedVerElem.appendChild(opt);
64+
}
65+
})
66+
.then(function () {
67+
if ('version' in search && search.version) {
68+
$markedVerElem.value = search.version;
69+
} else {
70+
$markedVerElem.value = 'master';
71+
}
72+
73+
updateVersion().then(function () {
74+
if ('options' in search && search.options) {
75+
$optionsElem.value = search.options;
76+
} else {
77+
$optionsElem.value = JSON.stringify(
78+
marked.getDefaults(),
79+
function (key, value) {
80+
if (value && typeof value === 'object' && Object.getPrototypeOf(value) !== Object.prototype) {
81+
return undefined;
82+
}
83+
return value;
84+
}, ' ');
5985
}
60-
return value;
61-
}, ' ');
62-
}
86+
});
87+
});
6388

6489
if (search.outputType) {
6590
$outputTypeElem.value = search.outputType;
@@ -80,11 +105,6 @@ function handleOutputChange() {
80105
updateLink();
81106
}
82107

83-
function handleVersionChange() {
84-
handleChange($markedVer, $markedVerElem.value);
85-
updateVersion();
86-
}
87-
88108
function handleChange(panes, visiblePane) {
89109
var active = null;
90110
for (var i = 0; i < panes.length; i++) {
@@ -102,8 +122,7 @@ $outputTypeElem.addEventListener('change', handleOutputChange, false);
102122
handleOutputChange();
103123
$inputTypeElem.addEventListener('change', handleInputChange, false);
104124
handleInputChange();
105-
$markedVerElem.addEventListener('change', handleVersionChange, false);
106-
handleVersionChange();
125+
$markedVerElem.addEventListener('change', updateVersion, false);
107126

108127
function handleInput() {
109128
inputDirty = true;
@@ -121,8 +140,17 @@ $optionsElem.addEventListener('keydown', handleInput, false);
121140

122141
$clearElem.addEventListener('click', function () {
123142
$markdownElem.value = '';
124-
$optionsElem.value = '';
125-
handleInput();
143+
$markedVerElem.value = 'master';
144+
updateVersion().then(function () {
145+
$optionsElem.value = JSON.stringify(
146+
marked.getDefaults(),
147+
function (key, value) {
148+
if (value && typeof value === 'object' && Object.getPrototypeOf(value) !== Object.prototype) {
149+
return undefined;
150+
}
151+
return value;
152+
}, ' ');
153+
});
126154
}, false);
127155

128156
function searchToObject() {
@@ -179,18 +207,36 @@ function updateLink() {
179207
}
180208

181209
$permalinkElem.href = '?' + outputType + 'text=' + encodeURIComponent($markdownElem.value)
182-
+ '&options=' + encodeURIComponent($optionsElem.value);
210+
+ '&options=' + encodeURIComponent($optionsElem.value)
211+
+ '&version=' + encodeURIComponent($markedVerElem.value);
183212
history.replaceState('', document.title, $permalinkElem.href);
184213
}
185214

186215
function updateVersion() {
187-
$markedVer.setAttribute('src', $markedVerElem.value);
216+
var promise;
217+
if ($markedVerElem.value in markedVersionCache) {
218+
promise = Promise.resolve(markedVersionCache[$markedVerElem.value]);
219+
} else {
220+
promise = fetch(markedVersions[$markedVerElem.value])
221+
.then(function (res) { return res.text(); })
222+
.then(function (text) {
223+
markedVersionCache[$markedVerElem.value] = text;
224+
return text;
225+
});
226+
}
227+
return promise.then(function (text) {
228+
var script = document.createElement('script');
229+
script.textContent = text;
230+
231+
$markedVer.parentNode.replaceChild(script, $markedVer);
232+
$markedVer = script;
233+
}).then(handleInput);
188234
}
189235

190236
var delayTime = 1;
191237
var options = {};
192238
function checkForChanges() {
193-
if (inputDirty) {
239+
if (inputDirty && typeof marked !== 'undefined') {
194240
inputDirty = false;
195241

196242
updateLink();
@@ -238,7 +284,7 @@ function checkForChanges() {
238284
delayTime = 1000;
239285
}
240286
}
241-
changeTimeout = window.setTimeout(checkForChanges, delayTime);
287+
window.setTimeout(checkForChanges, delayTime);
242288
};
243289
checkForChanges();
244290
setScrollPercent(0);

docs/demo/index.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ <h1>Marked Demo</h1>
2323
<div class="label">
2424
<span>Input</span> ·
2525
<a id="permalink">Permalink</a> ·
26+
<span>Version: </span>
27+
<select id="markedVersion">
28+
<option value="master">master</option>
29+
</select> ·
2630
<button id="clear">Clear</button>
2731
<select id="inputType">
2832
<option value="markdown">Markdown</option>
@@ -63,7 +67,7 @@ <h2>You'll need to enable Javascript to use this tool.</h2>
6367
<textarea id="quickref" class="pane" readonly="readonly"></textarea>
6468
</div>
6569
</div>
66-
<script id="markedCdn" src="https://cdn.jsdelivr.net/npm/marked/lib/marked.js"></script>
70+
<script id="markedCdn"></script>
6771
<script src="https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.js"></script>
6872
<script src="https://cdn.jsdelivr.net/npm/unfetch/dist/unfetch.umd.js"></script>
6973
<script src="./demo.js"></script>

0 commit comments

Comments
 (0)