Skip to content

Commit bf0399b

Browse files
authored
Merge pull request #1415 from remyhunt/enhancement-1406-demo-version
Add select option in demo mode to choose Marked version
2 parents d9d6758 + 02d90aa commit bf0399b

File tree

2 files changed

+91
-22
lines changed

2 files changed

+91
-22
lines changed

docs/demo/demo.js

+80-21
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ if (!window.fetch) {
88
}
99

1010
var $markdownElem = document.querySelector('#markdown');
11+
var $markedVerElem = document.querySelector('#markedVersion');
12+
var $markedVer = document.querySelector('#markedCdn');
1113
var $optionsElem = document.querySelector('#options');
1214
var $outputTypeElem = document.querySelector('#outputType');
1315
var $inputTypeElem = document.querySelector('#inputType');
@@ -20,17 +22,20 @@ var $panes = document.querySelectorAll('.pane');
2022
var $inputPanes = document.querySelectorAll('.inputPane');
2123
var inputDirty = true;
2224
var $activeOutputElem = null;
23-
var changeTimeout = null;
2425
var search = searchToObject();
2526

27+
var markedVersions = {
28+
master: 'https://cdn.jsdelivr.net/gh/markedjs/marked/lib/marked.js'
29+
};
30+
var markedVersionCache = {};
31+
2632
var iframeLoaded = false;
2733
$previewIframe.addEventListener('load', function () {
2834
iframeLoaded = true;
2935
inputDirty = true;
30-
checkForChanges();
3136
});
3237

33-
if ('text' in search) {
38+
if ('text' in search && search.text) {
3439
$markdownElem.value = search.text;
3540
} else {
3641
fetch('./initial.md')
@@ -39,25 +44,47 @@ if ('text' in search) {
3944
if ($markdownElem.value === '') {
4045
$markdownElem.value = text;
4146
inputDirty = true;
42-
clearTimeout(changeTimeout);
43-
checkForChanges();
4447
setScrollPercent(0);
4548
}
4649
});
4750
}
4851

49-
if ('options' in search) {
50-
$optionsElem.value = search.options;
51-
} else {
52-
$optionsElem.value = JSON.stringify(
53-
marked.getDefaults(),
54-
function (key, value) {
55-
if (value && typeof value === 'object' && Object.getPrototypeOf(value) !== Object.prototype) {
56-
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+
}, ' ');
5785
}
58-
return value;
59-
}, ' ');
60-
}
86+
});
87+
});
6188

6289
if (search.outputType) {
6390
$outputTypeElem.value = search.outputType;
@@ -95,6 +122,7 @@ $outputTypeElem.addEventListener('change', handleOutputChange, false);
95122
handleOutputChange();
96123
$inputTypeElem.addEventListener('change', handleInputChange, false);
97124
handleInputChange();
125+
$markedVerElem.addEventListener('change', updateVersion, false);
98126

99127
function handleInput() {
100128
inputDirty = true;
@@ -112,8 +140,17 @@ $optionsElem.addEventListener('keydown', handleInput, false);
112140

113141
$clearElem.addEventListener('click', function () {
114142
$markdownElem.value = '';
115-
$optionsElem.value = '';
116-
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+
});
117154
}, false);
118155

119156
function searchToObject() {
@@ -170,14 +207,36 @@ function updateLink() {
170207
}
171208

172209
$permalinkElem.href = '?' + outputType + 'text=' + encodeURIComponent($markdownElem.value)
173-
+ '&options=' + encodeURIComponent($optionsElem.value);
210+
+ '&options=' + encodeURIComponent($optionsElem.value)
211+
+ '&version=' + encodeURIComponent($markedVerElem.value);
174212
history.replaceState('', document.title, $permalinkElem.href);
175213
}
176214

215+
function updateVersion() {
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);
234+
}
235+
177236
var delayTime = 1;
178237
var options = {};
179238
function checkForChanges() {
180-
if (inputDirty) {
239+
if (inputDirty && typeof marked !== 'undefined') {
181240
inputDirty = false;
182241

183242
updateLink();
@@ -225,7 +284,7 @@ function checkForChanges() {
225284
delayTime = 1000;
226285
}
227286
}
228-
changeTimeout = window.setTimeout(checkForChanges, delayTime);
287+
window.setTimeout(checkForChanges, delayTime);
229288
};
230289
checkForChanges();
231290
setScrollPercent(0);

docs/demo/index.html

+11-1
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,21 @@ <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>
2933
<option value="options">Options</option>
3034
</select>
35+
<select id="markedVersion">
36+
<option value="https://cdn.jsdelivr.net/npm/marked@master/marked.min.js">Marked@master</option>
37+
<option value="https://cdn.jsdelivr.net/npm/marked@0.6.0/marked.min.js">Marked@0.6.0</option>
38+
<option value="https://cdn.jsdelivr.net/npm/marked@0.5.2/marked.min.js">Marked@0.5.2</option>
39+
<option value="https://cdn.jsdelivr.net/npm/marked@0.5.1/marked.min.js">Marked@0.5.1</option>
40+
</select>
3141
</div>
3242
<textarea id="markdown" class="inputPane"></textarea>
3343
<textarea id="options" class="inputPane" placeholder="Options (as JSON)"></textarea>
@@ -57,7 +67,7 @@ <h2>You'll need to enable Javascript to use this tool.</h2>
5767
<textarea id="quickref" class="pane" readonly="readonly"></textarea>
5868
</div>
5969
</div>
60-
<script src="https://cdn.jsdelivr.net/npm/marked/lib/marked.js"></script>
70+
<script id="markedCdn"></script>
6171
<script src="https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.js"></script>
6272
<script src="https://cdn.jsdelivr.net/npm/unfetch/dist/unfetch.umd.js"></script>
6373
<script src="./demo.js"></script>

0 commit comments

Comments
 (0)