209 lines
6.2 KiB
JavaScript
209 lines
6.2 KiB
JavaScript
const pageScriptElement = document.currentScript;
|
|
const configEl = document.getElementById("firebase-config");
|
|
|
|
if (!configEl?.textContent) {
|
|
console.error("Firebase config element not found");
|
|
document
|
|
.querySelectorAll(
|
|
'[id^="views_"], [id^="likes_"], #button_likes_heart, #button_likes_emtpty_heart, #button_likes_text',
|
|
)
|
|
.forEach((el) => el.remove());
|
|
} else {
|
|
const data = JSON.parse(configEl.textContent);
|
|
const oid = data.oids?.views;
|
|
const oid_likes = data.oids?.likes;
|
|
|
|
let liked_page = false;
|
|
const id = oid ? oid.replaceAll("/", "-") : oid;
|
|
const id_likes = oid_likes ? oid_likes.replaceAll("/", "-") : oid_likes;
|
|
|
|
function numberWithCommas(x) {
|
|
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
}
|
|
|
|
function toggleLoaders(node) {
|
|
var classesString = node.className;
|
|
if (classesString == "") return;
|
|
var classes = classesString.split(" ");
|
|
for (var i in classes) {
|
|
node.classList.toggle(classes[i]);
|
|
}
|
|
}
|
|
|
|
var update_views = function (node, id) {
|
|
db.collection("views")
|
|
.doc(id)
|
|
.onSnapshot((doc) => {
|
|
var data = doc.data();
|
|
if (data) {
|
|
node.innerText = numberWithCommas(data.views);
|
|
} else {
|
|
node.innerText = 0;
|
|
}
|
|
toggleLoaders(node);
|
|
});
|
|
};
|
|
|
|
var update_likes = function (node, id) {
|
|
db.collection("likes")
|
|
.doc(id)
|
|
.onSnapshot((doc) => {
|
|
var data = doc.data();
|
|
if (data) {
|
|
node.innerText = numberWithCommas(data.likes);
|
|
} else {
|
|
node.innerText = 0;
|
|
}
|
|
toggleLoaders(node);
|
|
});
|
|
};
|
|
|
|
if (typeof auth !== "undefined") {
|
|
const viewed = localStorage.getItem(id);
|
|
|
|
if (!viewed && id) {
|
|
auth
|
|
.signInAnonymously()
|
|
.then(() => {
|
|
const docRef = db.collection("views").doc(id);
|
|
localStorage.setItem(id, true);
|
|
docRef
|
|
.get()
|
|
.then((doc) => {
|
|
if (doc.exists) {
|
|
db.collection("views")
|
|
.doc(id)
|
|
.update({
|
|
views: firebase.firestore.FieldValue.increment(1),
|
|
});
|
|
} else {
|
|
db.collection("views").doc(id).set({ views: 1 });
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
console.log("Error getting document:", error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
const errorCode = error.code;
|
|
const errorMessage = error.message;
|
|
console.error(errorCode, errorMessage);
|
|
});
|
|
}
|
|
|
|
const liked = localStorage.getItem(id_likes);
|
|
|
|
if (liked) {
|
|
liked_page = true;
|
|
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "";
|
|
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "none";
|
|
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "";
|
|
}
|
|
|
|
auth
|
|
.signInAnonymously()
|
|
.then(() => {
|
|
var views_nodes = document.querySelectorAll("span[id^='views_']");
|
|
|
|
for (var i in views_nodes) {
|
|
var node = views_nodes[i];
|
|
var id = node.id ? node.id.replaceAll("/", "-") : node.id;
|
|
if (id) {
|
|
update_views(node, id);
|
|
}
|
|
}
|
|
|
|
var likes_nodes = document.querySelectorAll("span[id^='likes_']");
|
|
|
|
for (var i in likes_nodes) {
|
|
var node = likes_nodes[i];
|
|
var id = node.id ? node.id.replaceAll("/", "-") : node.id;
|
|
if (id) {
|
|
update_likes(node, id);
|
|
}
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
var errorCode = error.code;
|
|
var errorMessage = error.message;
|
|
console.error(errorCode, errorMessage);
|
|
});
|
|
}
|
|
|
|
function like_article(id_likes) {
|
|
auth
|
|
.signInAnonymously()
|
|
.then(() => {
|
|
const docRef = db.collection("likes").doc(id_likes);
|
|
docRef
|
|
.get()
|
|
.then((doc) => {
|
|
liked_page = true;
|
|
localStorage.setItem(id_likes, true);
|
|
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "";
|
|
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "none";
|
|
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "";
|
|
if (doc.exists) {
|
|
db.collection("likes")
|
|
.doc(id_likes)
|
|
.update({
|
|
likes: firebase.firestore.FieldValue.increment(1),
|
|
});
|
|
} else {
|
|
db.collection("likes").doc(id_likes).set({ likes: 1 });
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
console.log("Error getting document:", error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
const errorCode = error.code;
|
|
const errorMessage = error.message;
|
|
console.error(errorCode, errorMessage);
|
|
});
|
|
}
|
|
|
|
function remove_like_article(id_likes) {
|
|
auth
|
|
.signInAnonymously()
|
|
.then(() => {
|
|
const docRef = db.collection("likes").doc(id_likes);
|
|
docRef
|
|
.get()
|
|
.then((doc) => {
|
|
liked_page = false;
|
|
localStorage.removeItem(id_likes);
|
|
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "none";
|
|
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "";
|
|
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "\xa0Like";
|
|
if (doc.exists) {
|
|
db.collection("likes")
|
|
.doc(id_likes)
|
|
.update({
|
|
likes: firebase.firestore.FieldValue.increment(-1),
|
|
});
|
|
} else {
|
|
db.collection("likes").doc(id_likes).set({ likes: 0 });
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
console.log("Error getting document:", error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
const errorCode = error.code;
|
|
const errorMessage = error.message;
|
|
console.error(errorCode, errorMessage);
|
|
});
|
|
}
|
|
|
|
window.process_article = function () {
|
|
if (!liked_page) {
|
|
like_article(id_likes);
|
|
} else {
|
|
remove_like_article(id_likes);
|
|
}
|
|
};
|
|
}
|