Web/scripts/blog.js

92 lines
3.1 KiB
JavaScript
Raw Normal View History

2019-05-01 20:10:56 +02:00
let converter = new showdown.Converter({
2019-05-01 20:13:43 +02:00
parseImgDimensions: true,
2019-10-03 15:15:25 +02:00
headerLevelStart: 3,
extensions: ["prettify"]
2019-05-01 20:10:56 +02:00
});
2019-02-23 16:30:23 +01:00
$.ajax({
dataType: "json",
url: "blog/posts.json",
cache: false,
success: function (json) {
let list = $('#blog-list');
2019-06-01 22:26:20 +02:00
list.html("");
2019-02-23 16:30:23 +01:00
for (let i = json.length - 1; i >= 0; i--) {
let obj = json[i];
2019-02-23 16:30:23 +01:00
let id = obj["id"];
2019-02-23 16:30:23 +01:00
let p = "";
p += '<a class="blog-anchor" id="blog-' + id + '"></a>';
p += '<div class="card bg-light blog-entry rounded-0">';
p += '<div class="card-body">';
p += '<a class="blog-button" id="blog-button-' + id + '"><h2 class="card-title">' + obj["name"] + '</h2></a>';
2019-10-03 13:29:55 +02:00
p += '<div class="card-text text-muted blog-summary" id="blog-summary-' + id + '">' + obj["summary"] + '</div>';
2019-02-23 16:30:23 +01:00
p += '<div class="card-text" id="blog-post-' + id + '"></div>';
p += '<span class="text-muted project-status">' + obj["date"] + "</span>";
let discussLink = obj["discuss"];
2019-02-23 16:30:23 +01:00
if (discussLink)
p += '<a href="' + discussLink + '" class="blog-discuss" id="blog-discuss-' + id + '"></a>'
p += '</div></div>';
list.append(p);
2019-02-23 16:30:23 +01:00
$("#blog-button-" + id).on('click', function () {
let post = $("#blog-post-" + id);
2019-02-23 16:30:23 +01:00
if (post.html() !== "") {
var newHash = "#blog";
history.pushState(null, null, newHash);
updateMeta(newHash);
2019-02-23 16:30:23 +01:00
post.html("");
let discuss = $("#blog-discuss-" + id);
2019-02-23 16:30:23 +01:00
if (discuss.length)
discuss.html("");
2019-10-03 13:29:55 +02:00
$("#blog-summary-" + id).show();
2019-02-23 16:30:23 +01:00
} else {
history.pushState(null, null, "#blog-" + id);
openBlogPost(obj);
2019-02-23 16:30:23 +01:00
}
});
}
var blogId = getBlogIdFromHash(window.location.hash);
if (blogId) {
for (var i = 0; i < json.length; i++) {
var obj = json[i];
if (obj["id"] !== blogId)
continue;
var anchor = $("#blog-" + blogId);
openBlogPost(obj, function () {
$('html, body').animate({
scrollTop: anchor.offset().top
}, 0)
});
break;
2019-02-23 16:30:23 +01:00
}
}
}
});
function getBlogIdFromHash(hash) {
if (hash.startsWith("#blog-"))
return hash.substring(6);
return "";
}
function openBlogPost(obj, onDone) {
let id = obj["id"];
$.get("blog/" + id + ".md", function (markdown) {
let html = converter.makeHtml(markdown);
$("#blog-post-" + id).html(html);
2019-02-17 13:07:19 +01:00
let discuss = $("#blog-discuss-" + id);
2019-02-17 13:07:19 +01:00
if (discuss.length)
discuss.html("Discuss this post");
2019-10-03 13:29:55 +02:00
$("#blog-summary-" + id).hide();
setTitleAndDesc(obj["name"], obj["summary"]);
2019-10-03 15:15:25 +02:00
PR.prettyPrint();
if (onDone)
onDone();
});
}