24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#gnav li a {
display: block;
padding: .5em 1em;
margin: 0 .5em;
background: #ddf;
color: black;
text-align: center;
text-decoration: none;
}
#gnav li a:hover {
text-decoration: underline;
background: #eef;
}
#gnav small {
display: block;
color: #333;
}`;
function isNewerVersion (oldVer, newVer) {
const oldParts = oldVer.split('.')
const newParts = newVer.split('.')
for (var i = 0; i < newParts.length; i++) {
const a = ~~newParts[i] // parse int
const b = ~~oldParts[i] // parse int
if (a > b) return true
if (a < b) return false
}
return false
}
fetch('./juvlist').then((r) => {
r.json().then((list) => {
let last = list.slice(-1)[0];
let version = last.name.match(/garradin-(.*)\.tar\.bz2/);
document.querySelector('#gnav ul').innerHTML += `<li><a href="./uv/${last.name}">Télécharger la version ${version[1]}</a></li>`;
let last;
let selected;
list.forEach((file) => {
var v = file.name.match(/^garradin-(.*)\.tar\.bz2/);
if (!v) {
return;
}
if (!last || isNewerVersion(last, v[1])) {
last = v[1];
selected = file;
}
});
let days = ((+new Date)/1000 - selected.mtime) / 3600 / 24;
if (days < 31) {
time = Math.ceil(days) + ' jours';
}
else if (days >= 31) {
time = Math.round(days / 30.5) + ' mois';
}
document.querySelector('#gnav ul').innerHTML += `<li><a href="./uv/${selected.name}">Télécharger la version ${last} <small>(sortie il y a ${time})</small></a></li>`;
});
});
</script>
# Garradin, le gestionnaire d'association
Garradin est un logiciel de gestion de petite et moyenne association. Son but est de permettre :
|