@@ -5,6 +5,88 @@ const updateMenuPositionForSubMenu = (currentMenuSupplier) => {
5
5
subMenu ?. style . setProperty ( '--menu-x' , `${ currentMenu . getBoundingClientRect ( ) . x } px` ) ;
6
6
}
7
7
8
+ function generateReleaseList ( data , crateName ) {
9
+ const currentPath = window . location . pathname . split ( '/' ) ;
10
+ const releaseData = document . getElementById ( 'release-data' ) ;
11
+ const innerPath = releaseData . getAttribute ( "data-inner-path" ) ;
12
+ const target = releaseData . getAttribute ( "data-target" ) ;
13
+ const releases = [ ] ;
14
+
15
+ for ( const release of data ) {
16
+ let url ;
17
+ let retainFragment = "" ;
18
+
19
+ if ( innerPath . length === "" ) {
20
+ url = `/crate/${ crateName } /${ release . version } ` ;
21
+ } else {
22
+ url = `/crate/${ crateName } /${ release . version } /target-redirect/${ target } ${ innerPath } ` ;
23
+ retainFragment = `\ndata-fragment="retain"` ;
24
+ }
25
+ let releaseName = `${ crateName } - ${ release . version } `
26
+ let warning = null ;
27
+
28
+ if ( ! release . is_library ) {
29
+ // If the release isn't a library, then display that warning.
30
+ warning = `${ releaseName } is not a library` ;
31
+ } else if ( release . yanked && release . build_status !== null ) {
32
+ // If the release has been yanked and failed to build, display a warning.
33
+ warning = `${ releaseName } is yanked` ;
34
+ } else if ( release . yanked ) {
35
+ // If the release has been yanked and failed to build, display a warning.
36
+ warning = `${ releaseName } is yanked and docs.rs failed to build it` ;
37
+ } else if ( release . build_status === null ) {
38
+ // If the release failed to build, display a warning.
39
+ warning = `docs.rs failed to build ${ releaseName } ` ;
40
+ }
41
+
42
+ let extraClass = "" ;
43
+ let title = "" ;
44
+ let extraText = "" ;
45
+
46
+ if ( warning !== null ) {
47
+ extraClass = " warn" ;
48
+ title = `\ntitle="${ warning } "` ;
49
+ extraText = `\
50
+ <span class="fa-svg fa-svg-fw " aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" \
51
+ viewBox="0 0 512 512"><path d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 \
52
+ 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 \
53
+ 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 \
54
+ 24-24V184c0-13.3-10.7-24-24-24zm32 224c0-17.7-14.3-32-32-32s-32 14.3-32 32s14.3 32 32 32s32-14.3 \
55
+ 32-32z"></path></svg></span> ` ;
56
+ }
57
+
58
+ releases . push ( `\
59
+ <li class="pure-menu-item">
60
+ <a href="${ url } "
61
+ rel="nofollow"
62
+ class="pure-menu-link${ extraClass } "${ retainFragment } ${ title }
63
+ >${ extraText } ${ release [ "version" ] } </a>
64
+ </li>` ) ;
65
+ }
66
+ document . getElementById ( 'releases-list' ) . innerHTML = `\
67
+ <ul class="pure-menu-list">${ releases . join ( '' ) } </ul>` ;
68
+ }
69
+
70
+ let loadReleases = function ( ) {
71
+ const crateName = window . location . pathname . split ( '/' ) [ 1 ] ;
72
+ const xhttp = new XMLHttpRequest ( ) ;
73
+ xhttp . onreadystatechange = function ( ) {
74
+ if ( xhttp . readyState !== XMLHttpRequest . DONE ) {
75
+ return ;
76
+ }
77
+ if ( xhttp . status === 200 ) {
78
+ generateReleaseList ( JSON . parse ( xhttp . responseText ) , crateName ) ;
79
+ } else {
80
+ console . error ( `Failed to load release list: [${ xhttp . status } ] ${ xhttp . responseText } ` ) ;
81
+ document . getElementById ( 'releases-list' ) . innerHTML = "Failed to load release list" ;
82
+ }
83
+ } ;
84
+ xhttp . open ( "GET" , `/${ crateName } /releases` , true ) ;
85
+ xhttp . send ( ) ;
86
+ // To prevent reloading the list unnecessarily.
87
+ loadReleases = function ( ) { } ;
88
+ } ;
89
+
8
90
// Allow menus to be open and used by keyboard.
9
91
( function ( ) {
10
92
var currentMenu ;
@@ -53,6 +135,7 @@ const updateMenuPositionForSubMenu = (currentMenuSupplier) => {
53
135
currentMenu = newMenu ;
54
136
newMenu . className += " pure-menu-active" ;
55
137
backdrop . style . display = "block" ;
138
+ loadReleases ( ) ;
56
139
}
57
140
function menuOnClick ( e ) {
58
141
if ( this . getAttribute ( "href" ) != "#" ) {
0 commit comments