@@ -269,12 +269,40 @@ function parseYAML(text) {
269269 const meta = common . extractAndParseYAML ( text ) ;
270270 const html = [ '<div class="api_metadata">' ] ;
271271
272+ const added = { description : '' } ;
273+ const deprecated = { description : '' } ;
274+
272275 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>` ;
274278 }
275279
276280 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 } ` ) ;
278306 }
279307
280308 html . push ( '</div>' ) ;
@@ -390,3 +418,14 @@ function getId(text) {
390418 }
391419 return text ;
392420}
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