(function () {
const TOP_LEVEL_COMMENT_PROMPT =
"Будет добавлен комментарий верхнего уровня.";
const PATH = "/admin/last-comments.json";
const INTERVAL = 2000;
const SLUG = document.getElementById("slug").value;
function make(html) {
let template = document.createElement("template");
template.innerHTML = html.trim();
let result = template.content.firstChild;
result.classList.add("loaded");
console.log(result);
return result;
}
function process(data) {
data.forEach((comment) => {
if (comment.comment_id && comment.comment_id != "") {
let parent;
if (comment.parent_id && comment.parent_id != "") {
parent = document.getElementById(comment.parent_id);
} else {
parent = document.getElementById("comments");
}
if (parent) {
parent.appendChild(make(comment.content));
}
}
});
}
function check() {
if (window.location.hash == "#comments") {
fetch(PATH + "?ts=" + Date.now())
.then((response) => response.json())
.then((data) =>
process(
data.filter(
(comment) =>
comment.slug == SLUG &&
!document.getElementById(comment.comment_id)
)
)
);
}
setTimeout(check, INTERVAL);
}
function reset_answer(e) {
let header = document.getElementById("add-comment-target");
let field = document.getElementById("parent_id");
header.innerHTML = "Будет добавлен комментарий верхнего уровня";
field.value = "";
}
function answer_action(e) {
let target = e.target;
let action = target.dataset.action;
let comment_id = target.dataset.comment;
let header = document.getElementById("add-comment-target");
let field = document.getElementById("parent_id");
header.innerHTML = `Будет добавлен ответ на комментарий #${comment_id} [сбросить]`;
field.value = comment_id;
let message = document.getElementById("add-comment-message");
if (action == "cite") {
let source = document
.getElementById(comment_id)
.getElementsByClassName("comment-message")[0];
let source_lines = source.textContent.trim().split("\n");
for (let line of source_lines) {
message.value += "\r\n> " + line.trim();
}
message.value += "\r\n";
}
message.scrollIntoView({ block: "nearest", inline: "nearest" });
let reset_a = document.getElementById("action-reset");
reset_a.addEventListener("click", reset_answer);
}
function init_answers() {
let ans_bars = document.getElementsByClassName("comment-actions");
for (let bar of ans_bars) {
bar.style.display = "block";
for (let el of bar.children) {
if (el.dataset.action == "answer" || el.dataset.action == "cite") {
el.addEventListener("click", answer_action);
}
}
}
}
function init_id() {
var new_id = Math.floor(
Math.random() * 16 * 16 * 16 * 16 * 16 * 16
).toString(16);
var field = document.getElementById("comment_id");
field.value = new_id;
}
function init() {
init_answers();
setTimeout(check, INTERVAL);
}
// а вот это должно работать везде!
init_id();
if (self.fetch) {
// в старых браузерах работать не будет, но это их проблемы
window.addEventListener("load", init);
}
})();