1- var ev3devRepoReleaseCacheKey = 'ev3dev-repo-release-cache' ;
21// Cache will time out after 20 minutes
32var releaseCacheTimeMillis = 20 * 60 * 1000 ;
43
@@ -9,71 +8,55 @@ var releasePlatformRegexes = {
98 evb : "evb-[\\w\\d-]*\\.img\\.xz" ,
109}
1110
12- function supportsHtml5Storage ( ) {
13- try {
14- return 'localStorage' in window && window [ 'localStorage' ] !== null ;
15- } catch ( e ) {
16- return false ;
17- }
18- }
11+ function initDownloadLinks ( ) {
12+ getApiValue ( 'https://api.github.com/repos/ev3dev/ev3dev/releases' , releaseCacheTimeMillis , function ( releases , error ) {
13+ if ( error ) {
14+ console . error ( "Download links not available! Falling back to static content." ) ;
15+ $ ( '.release-link-container' ) . hide ( ) ;
16+ $ ( '.release-link-alt' ) . show ( ) ;
17+
18+ return ;
19+ }
20+
21+ releases . sort ( function ( a , b ) {
22+ if ( Date . parse ( a [ 'created_at' ] ) < Date . parse ( b [ 'created_at' ] ) )
23+ return 1 ;
24+ if ( Date . parse ( a [ 'created_at' ] ) > Date . parse ( b [ 'created_at' ] ) )
25+ return - 1 ;
1926
20- $ ( document ) . ready ( function ( ) {
21- if ( $ ( 'a[data-release-link-platform]' ) . length > 0 ) {
22- function initReleaseLinks ( releases ) {
23- releases . sort ( function ( a , b ) {
24- if ( Date . parse ( a [ 'created_at' ] ) < Date . parse ( b [ 'created_at' ] ) )
25- return 1 ;
26- if ( Date . parse ( a [ 'created_at' ] ) > Date . parse ( b [ 'created_at' ] ) )
27- return - 1 ;
27+ return 0 ;
28+ } ) ;
2829
29- return 0 ;
30- } ) ;
30+ $ ( 'a[data-release-link-platform]' ) . each ( function ( i , element ) {
31+ var $linkElem = $ ( element ) ;
32+ var targetReleasePlatform = $linkElem . data ( 'release-link-platform' ) ;
33+ if ( ! releasePlatformRegexes [ targetReleasePlatform ] ) {
34+ console . error ( '"' + targetReleasePlatform + '" is an invalid release target.' ) ;
35+ return true ;
36+ }
3137
32- $ ( 'a[data-release-link-platform]' ) . each ( function ( i , element ) {
33- var $linkElem = $ ( element ) ;
34- var targetReleasePlatform = $linkElem . data ( 'release-link-platform' ) ;
35- if ( ! releasePlatformRegexes [ targetReleasePlatform ] ) {
36- console . error ( '"' + targetReleasePlatform + '" is an invalid release target.' ) ;
37- return true ;
38- }
39-
40- var platformRegex = new RegExp ( releasePlatformRegexes [ targetReleasePlatform ] ) ;
38+ var platformRegex = new RegExp ( releasePlatformRegexes [ targetReleasePlatform ] ) ;
4139
42- for ( var releaseIndex in releases ) {
43- var releaseAssets = releases [ releaseIndex ] . assets ;
44- for ( var assetIndex in releaseAssets ) {
45- if ( platformRegex . test ( releaseAssets [ assetIndex ] . name ) ) {
46- $linkElem . attr ( 'href' , releaseAssets [ assetIndex ] [ 'browser_download_url' ] ) ;
47- return true ;
48- }
40+ for ( var releaseIndex in releases ) {
41+ var releaseAssets = releases [ releaseIndex ] . assets ;
42+ for ( var assetIndex in releaseAssets ) {
43+ if ( platformRegex . test ( releaseAssets [ assetIndex ] . name ) ) {
44+ $linkElem . attr ( 'href' , releaseAssets [ assetIndex ] [ 'browser_download_url' ] ) ;
45+ return true ;
4946 }
5047 }
51- } ) ;
52- }
48+ }
49+ } ) ;
50+ } ) ;
51+ }
5352
54- var cacheData ;
55- try {
56- cacheData = supportsHtml5Storage ( ) ? JSON . parse ( localStorage . getItem ( ev3devRepoReleaseCacheKey ) ) : null ;
57- }
58- catch ( e ) {
59- // Ignore the error; if the saved JSON is invalid, we'll just request it from the server.
60- }
61-
62- if ( cacheData && Date . now ( ) - cacheData . dateRetrieved < releaseCacheTimeMillis ) {
63- initReleaseLinks ( cacheData . releaseData ) ;
64- }
65- else {
66- console . log ( "No cached copy of releases found. Downloading from GitHub." ) ;
67- $ . ajax ( 'https://api.github.com/repos/ev3dev/ev3dev/releases' ) . done ( function ( releases ) {
68- if ( supportsHtml5Storage ( ) )
69- localStorage . setItem ( ev3devRepoReleaseCacheKey , JSON . stringify ( {
70- dateRetrieved : Date . now ( ) ,
71- releaseData : releases
72- } ) ) ;
73- initReleaseLinks ( releases ) ;
74- } ) . fail ( function ( error ) {
75- console . error ( "Error getting release info: " + error ) ;
76- } ) ;
77- }
53+ $ ( document ) . ready ( function ( ) {
54+ // If JS is disabled, this code will never run and the alt content will be left as-is.
55+ // We do this as soon as the document loads so that the page flash is minimal.
56+ $ ( '.release-link-alt' ) . hide ( ) ;
57+ $ ( '.release-link-container' ) . show ( ) ;
58+
59+ if ( $ ( 'a[data-release-link-platform]' ) . length > 0 ) {
60+ initDownloadLinks ( ) ;
7861 }
7962} ) ;
0 commit comments