Web/scripts/blog.js

74 lines
2.7 KiB
JavaScript
Raw Normal View History

2020-09-30 00:24:37 +02:00
$("#blog-archive-button").on("click", function () {
let archive = $('#blog-archive');
archive.toggle();
$(this).html((archive.is(":visible") ? "Hide" : "Show") + " archived posts");
});
2019-02-23 16:30:23 +01:00
$.ajax({
dataType: "json",
2021-03-11 03:44:50 +01:00
url: "blog/src/posts.json",
2019-02-23 16:30:23 +01:00
cache: false,
success: function (json) {
2021-04-04 01:54:29 +02:00
let category = window.location.hash.match(/#blog-(.+)/);
populateBlog(json, category && decodeURI(category[1]) || "featured");
2021-03-17 03:07:12 +01:00
forceToAnchor();
}
});
2021-04-04 02:01:25 +02:00
function populateBlog(json, currentCategory) {
const currCat = currentCategory;
2021-04-04 01:54:29 +02:00
let anchors = $('#blog-cat-anchors');
2021-03-17 03:07:12 +01:00
let archive = $('#blog-archive');
let list = $('#blog-list');
let cats = $('#blog-cats');
2021-04-04 01:54:29 +02:00
anchors.html("");
2021-03-17 03:07:12 +01:00
archive.html("");
list.html("");
cats.html("");
2021-03-31 02:48:13 +02:00
// force all and featured categories to be first
2021-04-04 01:54:29 +02:00
addCategory(json, cats, anchors, "All Posts", currCat);
addCategory(json, cats, anchors, "Featured", currCat);
2021-03-31 02:48:13 +02:00
for (let i = json.length - 1; i >= 0; i--) {
2021-03-31 02:48:13 +02:00
let post = json[i];
for (let cat of post.cat)
2021-04-04 01:54:29 +02:00
addCategory(json, cats, anchors, cat, currCat);
2021-04-04 02:01:25 +02:00
if (currCat === "all-posts" || post.cat.some(c => c.toLowerCase().replace(" ", "-") === currCat)) {
2021-03-19 07:55:18 +01:00
let p = /*html*/ `
<div class="card bg-light blog-entry rounded-0">
<div class="card-body">
2021-03-31 02:48:13 +02:00
<h4 class="card-title blog-title"><a class="blog-button" href="./blog/${post.id}">${post.name}</a></h4>
<div class="card-text blog-summary">${post.summary}</div>
<span class="text-muted project-status">${post.date}</span>
<span class="text-muted blog-cat">${post.cat.join(", ")}</span>
2021-03-19 07:55:18 +01:00
</div>
</div>
`;
2021-03-31 02:48:13 +02:00
if (post.archived) {
2020-09-30 00:24:37 +02:00
archive.append(p);
} else {
list.append(p);
}
}
}
if (!archive.html())
2021-04-04 01:54:29 +02:00
archive.html(`<em>There are no archived posts in this category.</em>`);
if (!list.html())
2021-04-04 02:01:25 +02:00
populateBlog(json, "featured");
2021-03-17 03:07:12 +01:00
}
2021-04-04 01:54:29 +02:00
function addCategory(json, cats, anchors, cat, currCat) {
let catId = cat.toLowerCase().replace(" ", "-");
let catAnchor = `blog-cat-${catId}`;
2021-03-17 03:07:12 +01:00
if (!$(`#${catAnchor}`).length) {
2021-04-04 01:54:29 +02:00
cats.append( /*html*/ `<button type="button" class="btn btn-link blog-cat-button" id=${catAnchor} ${catId === currCat ? "disabled" : ""}>${cat}</button>`);
2021-03-17 03:07:12 +01:00
$(`#${catAnchor}`).on('click', function () {
2021-04-04 01:54:29 +02:00
populateBlog(json, catId);
history.replaceState(null, null, `#blog-${catId}`);
2021-03-17 03:07:12 +01:00
});
anchors.append( /*html*/ `<span class="anchor" id="blog-${catId}"></span>`);
2021-03-17 03:07:12 +01:00
}
}