@@ -14,7 +14,6 @@ onunhandledrejection = function (e) {
14
14
var $markdownElem = document . querySelector ( '#markdown' ) ;
15
15
var $markedVerElem = document . querySelector ( '#markedVersion' ) ;
16
16
var $commitVerElem = document . querySelector ( '#commitVersion' ) ;
17
- $commitVerElem . style . display = 'none' ;
18
17
var $markedVer = document . querySelector ( '#markedCdn' ) ;
19
18
var $optionsElem = document . querySelector ( '#options' ) ;
20
19
var $outputTypeElem = document . querySelector ( '#outputType' ) ;
@@ -34,11 +33,11 @@ var $activeOutputElem = null;
34
33
var search = searchToObject ( ) ;
35
34
36
35
var markedVersions = {
37
- commit : 'commit' ,
38
36
master : 'https://cdn.jsdelivr.net/gh/markedjs/marked/lib/marked.js'
39
37
} ;
40
38
var markedVersionCache = { } ;
41
39
40
+ $commitVerElem . style . display = 'none' ;
42
41
$previewIframe . addEventListener ( 'load' , function ( ) {
43
42
lastInput = '' ;
44
43
inputDirty = true ;
@@ -75,20 +74,42 @@ fetch('https://data.jsdelivr.com/v1/package/npm/marked')
75
74
. then ( function ( ) {
76
75
if ( 'version' in search && search . version ) {
77
76
if ( ! ( search . version in markedVersions ) ) {
78
- addCommitVersion ( search . version ) ;
77
+ var match = search . version . match ( / ^ ( \w + ) : ( .+ ) $ / ) ;
78
+ if ( match ) {
79
+ switch ( match [ 1 ] ) {
80
+ case 'commit' :
81
+ addCommitVersion ( search . version , match [ 2 ] . substring ( 0 , 7 ) , match [ 2 ] ) ;
82
+ return search . version ;
83
+ case 'pr' :
84
+ return getPrCommit ( match [ 2 ] )
85
+ . then ( function ( commit ) {
86
+ if ( ! commit ) {
87
+ return 'master' ;
88
+ }
89
+ addCommitVersion ( search . version , 'PR #' + match [ 2 ] , commit ) ;
90
+ return search . version ;
91
+ } ) ;
92
+ }
93
+ }
79
94
}
80
- $markedVerElem . value = search . version ;
81
- } else {
82
- $markedVerElem . value = 'master' ;
83
95
}
84
96
85
- updateVersion ( ) . then ( function ( ) {
86
- if ( 'options' in search && search . options ) {
87
- $optionsElem . value = search . options ;
88
- } else {
89
- setDefaultOptions ( ) ;
90
- }
91
- } ) ;
97
+ return 'master' ;
98
+ } )
99
+ . then ( function ( version ) {
100
+ $markedVerElem . value = version ;
101
+ } )
102
+ . then ( updateVersion )
103
+ . then ( function ( ) {
104
+ if ( 'options' in search && search . options ) {
105
+ $optionsElem . value = search . options ;
106
+ } else {
107
+ setDefaultOptions ( ) ;
108
+ }
109
+ } )
110
+ . then ( function ( ) {
111
+ checkForChanges ( ) ;
112
+ setScrollPercent ( 0 ) ;
92
113
} ) ;
93
114
94
115
if ( search . outputType ) {
@@ -101,14 +122,14 @@ fetch('./quickref.md')
101
122
document . querySelector ( '#quickref' ) . value = text ;
102
123
} ) ;
103
124
104
- function addCommitVersion ( version ) {
105
- if ( version in markedVersions ) {
125
+ function addCommitVersion ( value , text , commit ) {
126
+ if ( value in markedVersions ) {
106
127
return ;
107
128
}
108
- markedVersions [ version ] = 'https://cdn.jsdelivr.net/gh/markedjs/marked@' + version + '/lib/marked.js' ;
129
+ markedVersions [ value ] = 'https://cdn.jsdelivr.net/gh/markedjs/marked@' + commit + '/lib/marked.js' ;
109
130
var opt = document . createElement ( 'option' ) ;
110
- opt . textContent = version . substring ( 0 , 7 ) ;
111
- opt . value = version ;
131
+ opt . textContent = text ;
132
+ opt . value = value ;
112
133
$markedVerElem . insertBefore ( opt , $markedVerElem . firstChild ) ;
113
134
}
114
135
@@ -139,7 +160,7 @@ handleOutputChange();
139
160
$inputTypeElem . addEventListener ( 'change' , handleInputChange , false ) ;
140
161
handleInputChange ( ) ;
141
162
$markedVerElem . addEventListener ( 'change' , function ( ) {
142
- if ( $markedVerElem . value === 'commit' ) {
163
+ if ( $markedVerElem . value === 'commit' || $markedVerElem . value === 'pr' ) {
143
164
$commitVerElem . style . display = '' ;
144
165
} else {
145
166
$commitVerElem . style . display = 'none' ;
@@ -163,16 +184,36 @@ $optionsElem.addEventListener('keydown', handleInput, false);
163
184
164
185
$commitVerElem . addEventListener ( 'keypress' , function ( e ) {
165
186
if ( e . which === 13 ) {
166
- var commit = $commitVerElem . value . toLowerCase ( ) ;
167
- if ( ! commit . match ( / ^ [ 0 - 9 a - f ] { 40 } $ / ) ) {
168
- alert ( 'That is not a valid commit' ) ;
169
- return ;
187
+ switch ( $markedVerElem . value ) {
188
+ case 'commit' :
189
+ var commit = $commitVerElem . value . toLowerCase ( ) ;
190
+ if ( ! commit . match ( / ^ [ 0 - 9 a - f ] { 40 } $ / ) ) {
191
+ alert ( 'That is not a valid commit' ) ;
192
+ return ;
193
+ }
194
+ addCommitVersion ( 'commit:' + commit , commit . substring ( 0 , 7 ) , commit ) ;
195
+ $markedVerElem . value = 'commit:' + commit ;
196
+ $commitVerElem . style . display = 'none' ;
197
+ $commitVerElem . value = '' ;
198
+ updateVersion ( ) ;
199
+ break ;
200
+ case 'pr' :
201
+ $commitVerElem . disabled = true ;
202
+ var pr = $commitVerElem . value . replace ( / \D / g, '' ) ;
203
+ getPrCommit ( pr )
204
+ . then ( function ( commit ) {
205
+ $commitVerElem . disabled = false ;
206
+ if ( ! commit ) {
207
+ alert ( 'That is not a valid PR' ) ;
208
+ return ;
209
+ }
210
+ addCommitVersion ( 'pr:' + pr , 'PR #' + pr , commit ) ;
211
+ $markedVerElem . value = 'pr:' + pr ;
212
+ $commitVerElem . style . display = 'none' ;
213
+ $commitVerElem . value = '' ;
214
+ updateVersion ( ) ;
215
+ } ) ;
170
216
}
171
- addCommitVersion ( commit ) ;
172
- $markedVerElem . value = commit ;
173
- $commitVerElem . style . display = 'none' ;
174
- $commitVerElem . value = '' ;
175
- updateVersion ( ) ;
176
217
}
177
218
} , false ) ;
178
219
@@ -183,12 +224,24 @@ $clearElem.addEventListener('click', function () {
183
224
updateVersion ( ) . then ( setDefaultOptions ) ;
184
225
} , false ) ;
185
226
227
+ function getPrCommit ( pr ) {
228
+ return fetch ( 'https://api.github.com/repos/markedjs/marked/pulls/' + pr + '/commits' )
229
+ . then ( function ( res ) {
230
+ return res . json ( ) ;
231
+ } )
232
+ . then ( function ( json ) {
233
+ return json [ json . length - 1 ] . sha ;
234
+ } ) . catch ( function ( ) {
235
+ // return undefined
236
+ } ) ;
237
+ }
238
+
186
239
function setDefaultOptions ( ) {
187
240
if ( window . Worker ) {
188
241
messageWorker ( {
189
242
task : 'defaults' ,
190
- version : markedVersions [ $markedVerElem . value ] }
191
- ) ;
243
+ version : markedVersions [ $markedVerElem . value ]
244
+ } ) ;
192
245
} else {
193
246
var defaults = marked . getDefaults ( ) ;
194
247
setOptions ( defaults ) ;
@@ -293,7 +346,7 @@ function updateVersion() {
293
346
var delayTime = 1 ;
294
347
var checkChangeTimeout = null ;
295
348
function checkForChanges ( ) {
296
- if ( inputDirty && $markedVerElem . value !== 'commit' && ( typeof marked !== 'undefined' || window . Worker ) ) {
349
+ if ( inputDirty && $markedVerElem . value !== 'commit' && $markedVerElem . value !== 'pr' && ( typeof marked !== 'undefined' || window . Worker ) ) {
297
350
inputDirty = false ;
298
351
299
352
updateLink ( ) ;
@@ -435,5 +488,3 @@ function workerTimeout(seconds) {
435
488
workerTimeout ( seconds ) ;
436
489
} , 1000 ) ;
437
490
}
438
- checkForChanges ( ) ;
439
- setScrollPercent ( 0 ) ;
0 commit comments