Skip to content

Commit 87ff7ca

Browse files
committed
Add JS refreshing to the news displays
1 parent 48b9360 commit 87ff7ca

File tree

2 files changed

+106
-4
lines changed

2 files changed

+106
-4
lines changed

layouts/shortcodes/news.md

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<h2 class="ms-3">CodeMeta News</h2>
2-
<ul class="list-group list-unstyled">
2+
<ul id="newslist" class="list-group list-unstyled">
33

44
{{ $items := slice }}
55

@@ -26,4 +26,55 @@
2626
</li>
2727
{{ end }}
2828
</ul>
29-
<div class="text-center "><small class="mw-100 text-secondary-emphasis">Updates daily</small></div>
29+
<script>
30+
31+
function formatAMPM(date) {
32+
var hours = date.getUTCHours();
33+
var minutes = date.getUTCMinutes();
34+
var ampm = hours >= 12 ? 'PM' : 'AM';
35+
hours = hours % 12;
36+
hours = hours ? hours : 12; // the hour '0' should be '12'
37+
minutes = minutes < 10 ? '0'+minutes : minutes;
38+
var strTime = hours + ':' + minutes + ' ' + ampm;
39+
return strTime;
40+
}
41+
42+
async function fetchCodeMetaPostsFromSWHWordPress() {
43+
let url = `https://softwareheritage.org/tag/codemeta/feed/`;
44+
let response = await fetch(url, {
45+
method: "GET",
46+
});
47+
48+
const text = await response.text();
49+
const parser = new DOMParser();
50+
const doc = parser.parseFromString(text, "text/xml");
51+
const items = doc.getElementsByTagName("item");
52+
53+
$("#newslist").empty();
54+
for (let i = 0 ; i < items.length ; ++i) {
55+
56+
const title = items[i].querySelector("title").textContent;
57+
const link = items[i].querySelector("link").textContent;
58+
const date = new Date(items[i].querySelector("pubDate").textContent);
59+
const desc = items[i].querySelector("description").textContent;
60+
61+
const year = date.getUTCFullYear();
62+
const months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
63+
const month = months[date.getUTCMonth()];
64+
const day = date.getUTCDate().toString().padStart(2, '0');
65+
const timestr = formatAMPM(date);
66+
67+
const utc = `${month} ${day}, ${year} ${timestr} UTC`
68+
69+
$("#newslist").append(
70+
`<li class="ps-2 pb-2 refreshed">
71+
<h3><a class="list-group-item newslink p-2" href="${link}">${title}</a></h3>
72+
<small class="ps-2 text-secondary-emphasis">${utc}</small>
73+
<div class="ps-2 pt-2">${desc}</div>
74+
</li>`
75+
)
76+
};
77+
}
78+
79+
fetchCodeMetaPostsFromSWHWordPress();
80+
</script>

themes/CodeMeta-Pyramids/layouts/partials/news.html

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ <h3 class="ms-3">News</h3>
2222

2323
{{ range first .Site.Params.newslimit $combi }}
2424

25-
<li class="ps-2">
25+
<li class="ps-2">
2626
<a class="list-group-item newslink lh-base p-2" href="{{ .link }}">{{ .title }}</a>
2727
<small class="p-2 text-secondary-emphasis">{{ .pubDate | time.Format "Jan 02, 2006 3:04 PM MST" }}</small>
2828
</li>
@@ -36,5 +36,56 @@ <h3 class="ms-3">News</h3>
3636
{{ end }}
3737
{{ end }}
3838
</ul>
39-
{{ if .IsHome }}<div class="text-center"><small class="mw-100 text-secondary-emphasis">Updates daily<br><a href="/news">Full news feed</a></small></div>{{ end }}
39+
{{ if .IsHome }}<div class="text-center"><small class="mw-100 text-secondary-emphasis"><a href="/news">Full news feed</a></small></div>{{ end }}
4040
</div>
41+
<script>
42+
43+
function formatAMPM(date) {
44+
var hours = date.getUTCHours();
45+
var minutes = date.getUTCMinutes();
46+
var ampm = hours >= 12 ? 'PM' : 'AM';
47+
hours = hours % 12;
48+
hours = hours ? hours : 12; // the hour '0' should be '12'
49+
minutes = minutes < 10 ? '0'+minutes : minutes;
50+
var strTime = hours + ':' + minutes + ' ' + ampm;
51+
return strTime;
52+
}
53+
54+
async function fetchCodeMetaPostsFromSWHWordPress() {
55+
let url = `https://softwareheritage.org/tag/codemeta/feed/`;
56+
let response = await fetch(url, {
57+
method: "GET",
58+
});
59+
60+
const text = await response.text();
61+
const parser = new DOMParser();
62+
const doc = parser.parseFromString(text, "text/xml");
63+
const items = doc.getElementsByTagName("item");
64+
65+
$("#newslinks ul").empty();
66+
for (let i = 0 ; i < items.length ; ++i) {
67+
const title = items[i].querySelector("title").textContent;
68+
const link = items[i].querySelector("link").textContent;
69+
const date = new Date(items[i].querySelector("pubDate").textContent);
70+
const desc = items[i].querySelector("description").textContent;
71+
72+
const year = date.getUTCFullYear();
73+
const months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
74+
const month = months[date.getUTCMonth()];
75+
const day = date.getUTCDate().toString().padStart(2, '0');
76+
const timestr = formatAMPM(date);
77+
78+
const utc = `${month} ${day}, ${year} ${timestr} UTC`
79+
80+
if (i <= ({{ .Site.Params.newslimit }} - 1 ))
81+
$("#newslinks ul").append(
82+
`<li class="ps-2 refreshed">
83+
<a class="list-group-item newslink lh-base p-2" href="${link}">${title}</a>
84+
<small class="p-2 text-secondary-emphasis">${utc}</small>
85+
</li>`
86+
)
87+
};
88+
}
89+
90+
fetchCodeMetaPostsFromSWHWordPress();
91+
</script>

0 commit comments

Comments
 (0)