1+ var ev3devRepoReleaseCacheKey = 'ev3dev-repo-release-cache' ;
2+ var releaseCacheTimeMillis = 1 * 24 * 60 * 60 * 1000 ;
3+
4+ var releasePlatformRegexes = {
5+ ev3 : "ev3-[\\w\\d-]*\\.img\\.xz" ,
6+ rpi : "rpi-[\\w\\d-]*\\.img\\.xz" ,
7+ rpi2 : "rpi2-[\\w\\d-]*\\.img\\.xz" ,
8+ evb : "evb-[\\w\\d-]*\\.img\\.xz" ,
9+ }
10+
11+ function supportsHtml5Storage ( ) {
12+ try {
13+ return 'localStorage' in window && window [ 'localStorage' ] !== null ;
14+ } catch ( e ) {
15+ return false ;
16+ }
17+ }
18+
19+ $ ( document ) . ready ( function ( ) {
20+ if ( $ ( 'a[data-release-link-platform]' ) . length > 0 ) {
21+ function initReleaseLinks ( releases ) {
22+ releases . sort ( function ( a , b ) {
23+ if ( Date . parse ( a [ 'created_at' ] ) < Date . parse ( b [ 'created_at' ] ) )
24+ return 1 ;
25+ if ( Date . parse ( a [ 'created_at' ] ) > Date . parse ( b [ 'created_at' ] ) )
26+ return - 1 ;
27+
28+ return 0 ;
29+ } ) ;
30+
31+ $ ( 'a[data-release-link-platform]' ) . each ( function ( i , element ) {
32+ var $linkElem = $ ( element ) ;
33+ var targetReleasePlatform = $linkElem . data ( 'release-link-platform' ) ;
34+ if ( ! releasePlatformRegexes [ targetReleasePlatform ] ) {
35+ console . error ( '"' + targetReleasePlatform + '" is an invalid release target.' ) ;
36+ return true ;
37+ }
38+
39+ var platformRegex = new RegExp ( releasePlatformRegexes [ targetReleasePlatform ] ) ;
40+
41+ for ( var releaseIndex in releases ) {
42+ var releaseAssets = releases [ releaseIndex ] . assets ;
43+ for ( var assetIndex in releaseAssets ) {
44+ if ( platformRegex . test ( releaseAssets [ assetIndex ] . name ) ) {
45+ $linkElem . attr ( 'href' , releaseAssets [ assetIndex ] [ 'browser_download_url' ] ) ;
46+ return true ;
47+ }
48+ }
49+ }
50+ } ) ;
51+ }
52+
53+ var cacheData ;
54+ try {
55+ cacheData = supportsHtml5Storage ( ) ? JSON . parse ( localStorage . getItem ( ev3devRepoReleaseCacheKey ) ) : null ;
56+ }
57+ catch ( e ) {
58+ // Ignore the error; if the saved JSON is invalid, we'll just request it from the server.
59+ }
60+
61+ if ( cacheData && Date . now ( ) - cacheData . dateRetrieved < releaseCacheTimeMillis ) {
62+ initReleaseLinks ( cacheData . releaseData ) ;
63+ }
64+ else {
65+ console . log ( "No cached copy of releases found. Downloading from GitHub." ) ;
66+ $ . ajax ( 'https://api.github.com/repos/ev3dev/ev3dev/releases' ) . done ( function ( releases ) {
67+ if ( supportsHtml5Storage ( ) )
68+ localStorage . setItem ( ev3devRepoReleaseCacheKey , JSON . stringify ( {
69+ dateRetrieved : Date . now ( ) ,
70+ releaseData : releases
71+ } ) ) ;
72+ initReleaseLinks ( releases ) ;
73+ } ) . fail ( function ( error ) {
74+ console . error ( "Error getting release info: " + error ) ;
75+ } ) ;
76+ }
77+ }
78+ } ) ;
0 commit comments