@@ -269,12 +269,40 @@ function parseYAML(text) {
269
269
const meta = common . extractAndParseYAML ( text ) ;
270
270
const html = [ '<div class="api_metadata">' ] ;
271
271
272
+ const added = { description : '' } ;
273
+ const deprecated = { description : '' } ;
274
+
272
275
if ( meta . added ) {
273
- html . push ( `<span>Added in: ${ meta . added . join ( ', ' ) } </span>` ) ;
276
+ added . version = meta . added . join ( ', ' ) ;
277
+ added . description = `<span>Added in: ${ added . version } </span>` ;
274
278
}
275
279
276
280
if ( meta . deprecated ) {
277
- html . push ( `<span>Deprecated since: ${ meta . deprecated . join ( ', ' ) } </span>` ) ;
281
+ deprecated . version = meta . deprecated . join ( ', ' ) ;
282
+ deprecated . description =
283
+ `<span>Deprecated since: ${ deprecated . version } </span>` ;
284
+ }
285
+
286
+ if ( meta . changes . length > 0 ) {
287
+ let changes = meta . changes . slice ( ) ;
288
+ if ( added . description ) changes . push ( added ) ;
289
+ if ( deprecated . description ) changes . push ( deprecated ) ;
290
+
291
+ changes = changes . sort ( ( a , b ) => versionSort ( a . version , b . version ) ) ;
292
+
293
+ html . push ( '<details class="changelog"><summary>History</summary>' ) ;
294
+ html . push ( '<table>' ) ;
295
+ html . push ( '<tr><th>Version</th><th>Changes</th></tr>' ) ;
296
+
297
+ changes . forEach ( ( change ) => {
298
+ html . push ( `<tr><td>${ change . version } </td>` ) ;
299
+ html . push ( `<td>${ marked ( change . description ) } </td></tr>` ) ;
300
+ } ) ;
301
+
302
+ html . push ( '</table>' ) ;
303
+ html . push ( '</details>' ) ;
304
+ } else {
305
+ html . push ( `${ added . description } ${ deprecated . description } ` ) ;
278
306
}
279
307
280
308
html . push ( '</div>' ) ;
@@ -390,3 +418,14 @@ function getId(text) {
390
418
}
391
419
return text ;
392
420
}
421
+
422
+ const numberRe = / ^ ( \d * ) / ;
423
+ function versionSort ( a , b ) {
424
+ a = a . trim ( ) ;
425
+ b = b . trim ( ) ;
426
+ let i = 0 ; // common prefix length
427
+ while ( i < a . length && i < b . length && a [ i ] === b [ i ] ) i ++ ;
428
+ a = a . substr ( i ) ;
429
+ b = b . substr ( i ) ;
430
+ return + b . match ( numberRe ) [ 1 ] - + a . match ( numberRe ) [ 1 ] ;
431
+ }
0 commit comments