diff --git a/config.json b/config.json
index 7c8a82d..251cbb0 100644
--- a/config.json
+++ b/config.json
@@ -1,6 +1,12 @@
{
- "navbarBrandText": "Netzbegrünung Mastowall",
+ "navbarBrandText": "Netzbegrünung Mastowall - gruene.social",
"defaultServerUrl": "https://gruene.social",
"navbarColor": "#008939",
+ "duration": 10,
+ "refreshDuration": 30,
+ "maxAge": 604800,
+ "extraCards": [
+ ""
+ ],
"includeReplies": true
}
diff --git a/script.js b/script.js
index af74d3b..b87dded 100644
--- a/script.js
+++ b/script.js
@@ -1,12 +1,6 @@
// The existingPosts array is used to track already displayed posts
let existingPosts = [];
-// below times are in milliseconds
-// duration for slide animations
-let duration = 5000;
-// refresh rate
-let refresh = 30000;
-
// getUrlParameter helps to fetch URL parameters
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
@@ -23,23 +17,44 @@ const secondsAgo = date => Math.floor((new Date() - date) / 1000);
const timeAgo = function(seconds) {
// An array of intervals for years, months, days, hours, and minutes.
const intervals = [
- { limit: 31536000, text: 'Jahren' },
- { limit: 2592000, text: 'Monaten' },
- { limit: 86400, text: 'Tagen' },
- { limit: 3600, text: 'Stunden' },
- { limit: 60, text: 'Minuten' }
+ { limit: 31536000, singular: 'Jahre', plural: 'Jahren' },
+ { limit: 2592000, singular: 'Monat', plural: 'Monaten' },
+ { limit: 86400, singular: 'Tag', plural: 'Tagen' },
+ { limit: 3600, singular: 'Stunde', plural: 'Stunden' },
+ { limit: 60, singular: 'Minute', plural: 'Minuten' }
];
// Loop through the intervals to find which one is the best fit.
for (let interval of intervals) {
if (seconds >= interval.limit) {
- return "Vor " + Math.floor(seconds / interval.limit) + ` ${interval.text}`;
+ let amount = Math.floor(seconds / interval.limit);
+ let text;
+ if (amount !== 1) {
+ text = interval.plural;
+ } else {
+ text = interval.singular;
+ }
+ return `Vor ${amount} ${text}`;
}
}
- return "Vor " + Math.floor(seconds) + " Sekunden";
+ let text = "Sekunde";
+ let amount = Math.floor(seconds);
+ if (amount !== 1) {
+ text += "n";
+ }
+ return `Vor ${amount} ${text}`;
};
let includeReplies;
+// max post age in seconds
+let maxAge;
+// below times are in milliseconds
+// duration for slide animations
+let duration;
+// refresh rate
+let refresh;
+// extra cards text
+let extraCards;
// fetchConfig fetches the configuration from the config.json file
const fetchConfig = async function() {
@@ -48,12 +63,22 @@ const fetchConfig = async function() {
$('#navbar-brand').text(config.navbarBrandText);
$('.navbar').css('background-color', config.navbarColor);
includeReplies = config.includeReplies;
+ maxAge = config.maxAge;
+ duration = config.duration * 1000;
+ refresh = config.refreshDuration * 1000;
+ extraCards = config.extraCards;
return config.defaultServerUrl;
} catch (error) {
console.log("Error loading config.json:", error);
- $('#navbar-brand').text("Netzbegrünung Mastowall");
+ $('#navbar-brand').text("Netzbegrünung Mastowall - gruene.social");
$('.navbar').css('background-color', "#008939");
includeReplies = true;
+ maxAge = 60 * 60 * 24 * 7;
+ duration = 10000;
+ refresh = 30000;
+ extraCards = [
+ "
${DOMPurify.sanitize(post.account.display_name)}
+${DOMPurify.sanitize(post.account.display_name)} @${DOMPurify.sanitize(post.account.acct)}
${DOMPurify.sanitize(post.content)}
@@ -104,11 +129,22 @@ const displayPost = function(post) { return 1; }; +const processPosts = function(posts) { + posts = posts.filter((post) => { + return secondsAgo(new Date(post.created_at)) < maxAge && post.content.indexOf("nitter.") === -1 + }); + + return posts; +}; + // updateWall displays all posts const updateWall = function(posts) { if (!posts || posts.length === 0) return; + posts = processPosts(posts); + posts.sort((a, b) => new Date(a.created_at) - new Date(b.created_at)); + let ret = 0 posts.forEach(post => ret += displayPost(post)); $('.masonry-grid').masonry('layout'); @@ -120,8 +156,10 @@ const updateWall = function(posts) { const updateCarousel = function(slides, posts) { if (!posts || posts.length === 0) return; + posts = processPosts(posts); + posts.sort((a, b) => new Date(b.created_at) - new Date(a.created_at)); - + // remove slides in carousel slides.innerHTML = ""; var newHTML = ` ` @@ -141,7 +179,7 @@ const updateCarousel = function(slides, posts) {${DOMPurify.sanitize(post.account.display_name)}
+${DOMPurify.sanitize(post.account.display_name)} @${DOMPurify.sanitize(post.account.acct)}