-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathversion.js
More file actions
55 lines (52 loc) · 1.85 KB
/
version.js
File metadata and controls
55 lines (52 loc) · 1.85 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
/**
* Auto-version: fetches latest release tag from GitHub and updates all
* elements with class "oa-version" or data-version-prefix attributes.
*
* Usage in HTML:
* <span class="oa-version">2.0.7</span> → replaced with latest tag (no "v")
* <span class="oa-version-full">v2.0.7</span> → replaced with "v2.0.7"
* <span data-version-prefix="Documentation v">Documentation v2.0.7</span>
*
* Falls back to the hardcoded text if fetch fails (offline, rate-limited).
*/
(function () {
var REPO = 'OpenAnalystInc/cli';
var CACHE_KEY = 'oa_cli_version';
var CACHE_TTL = 300000; // 5 minutes
function apply(version) {
var bare = version.replace(/^v/, '');
// .oa-version → bare number
document.querySelectorAll('.oa-version').forEach(function (el) {
el.textContent = bare;
});
// .oa-version-full → with "v" prefix
document.querySelectorAll('.oa-version-full').forEach(function (el) {
el.textContent = version;
});
// [data-version-prefix] → prefix + bare
document.querySelectorAll('[data-version-prefix]').forEach(function (el) {
el.textContent = el.getAttribute('data-version-prefix') + bare;
});
}
// Check sessionStorage cache first
try {
var cached = JSON.parse(sessionStorage.getItem(CACHE_KEY));
if (cached && Date.now() - cached.ts < CACHE_TTL) {
apply(cached.v);
return;
}
} catch (e) {}
fetch('https://api.github.com/repos/' + REPO + '/releases/latest')
.then(function (r) { return r.json(); })
.then(function (data) {
if (data && data.tag_name) {
apply(data.tag_name);
try {
sessionStorage.setItem(CACHE_KEY, JSON.stringify({ v: data.tag_name, ts: Date.now() }));
} catch (e) {}
}
})
.catch(function () {
// Offline or rate-limited — keep hardcoded fallback text
});
})();