-
Notifications
You must be signed in to change notification settings - Fork 206
Expand file tree
/
Copy pathreleases.js
More file actions
99 lines (81 loc) · 3.87 KB
/
releases.js
File metadata and controls
99 lines (81 loc) · 3.87 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
94
95
96
97
98
99
// 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-download-button-platform]').each(function (i, element) {
var $linkElem = $(element);
var targetReleasePlatform = $linkElem.data('download-button-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.addClass('btn-group-vertical download-button-container');
var $upperSection = $linkElem.children('.download-button-upper');
if($upperSection.length <= 0) {
var $contents = $linkElem.contents();
$upperSection = $('<span/>').addClass('btn btn-primary download-button-upper').appendTo($linkElem);
$contents.appendTo($upperSection);
}
$linkElem.children('.download-button-lower').remove();
var $lowerSection = $('<span/>').addClass('btn download-button-lower').text(targetRelease.assetName).appendTo($linkElem);
var fileSize = targetRelease.size >> 20;
$('<small/>').addClass('download-info-label badge').text(fileSize + ' MiB').appendTo($lowerSection);
});
},
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-download-button-platform]').length > 0) {
initDownloadLinks();
}
});