-
Notifications
You must be signed in to change notification settings - Fork 206
Expand file tree
/
Copy pathreleases.js
More file actions
93 lines (77 loc) · 3.49 KB
/
releases.js
File metadata and controls
93 lines (77 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Cache will time out after five minutes
var releaseCacheTimeMillis = 5 * 60 * 1000;
var releasePlatformRegexes = {
ev3: /ev3dev-jessie-ev3-generic-[\d-]+\.zip/,
rpi: /ev3dev-jessie-rpi-generic-[\d-]+\.zip/,
rpi2: /ev3dev-jessie-rpi2-generic-[\d-]+\.zip/,
bone: /ev3dev-jessie-bone-generic-[\d-]+\.zip/,
}
function loadReleasesByPlatform(successCallback, errorCallback) {
getApiValue('https://api.github.com/repos/ev3dev/ev3dev/releases', releaseCacheTimeMillis, function (releasesApiData, error) {
if (error) {
errorCallback(error);
return;
}
var releaseMap = {};
releasesApiData.forEach(function (releaseApiData) {
releaseApiData['assets'].forEach(function (assetApiData) {
var assetPlatform = $.grep(Object.keys(releasePlatformRegexes), function (platId) {
return releasePlatformRegexes[platId].test(assetApiData['name']);
})[0];
if (!assetPlatform)
return true;
if (!Array.isArray(releaseMap[assetPlatform]))
releaseMap[assetPlatform] = [];
releaseMap[assetPlatform].push({
releaseName: releaseApiData['name'],
assetName: assetApiData['name'],
creationDate: Date.parse(releaseApiData['created_at']),
platform: assetPlatform,
size: assetApiData['size'],
downloadUrl: assetApiData['browser_download_url']
});
});
});
Object.keys(releaseMap).forEach(function (platformId) {
releaseMap[platformId].sort(function (a, b) {
return (b.creationDate > a.creationDate) - (b.creationDate < a.creationDate);
});
})
successCallback(releaseMap);
});
}
function initDownloadLinks() {
loadReleasesByPlatform(function (releaseMap) {
$('a[data-release-link-platform]').each(function (i, element) {
var $linkElem = $(element);
var targetReleasePlatform = $linkElem.data('release-link-platform');
var targetRelease = (releaseMap[targetReleasePlatform] || [])[0];
if (!targetRelease) {
console.error('"' + targetReleasePlatform + '" is an invalid release target or no releases for the given platform exist.');
return true;
}
$linkElem.attr('href', targetRelease.downloadUrl);
$linkElem.children('small.download-info-label').remove();
var fileSize = targetRelease.size >> 20;
$('<small/>').addClass('download-info-label badge').text(fileSize + ' MiB').appendTo($linkElem);
$('<small/>').addClass('download-info-label').css({
'display': 'block',
'font-size': '65%'
}).text(targetRelease.assetName).appendTo($linkElem);
});
},
function (error) {
console.error("Download links not available! Falling back to static content.");
$('.release-link-container').hide();
$('.release-link-alt').show();
});
}
$(document).ready(function () {
// If JS is disabled, this code will never run and the alt content will be left as-is.
// We do this as soon as the document loads so that the page flash is minimal.
$('.release-link-alt').hide();
$('.release-link-container').show();
if ($('a[data-release-link-platform]').length > 0) {
initDownloadLinks();
}
});