let observer = init_observer();
let loc = location.href.split("/").slice(3)
let is_article = loc.find((elem) => elem === "article");
let is_category = loc[loc.length - 1] == "" ? false : true;
function post_blog_comment() {
btn = document.querySelector("#post-comment")
parts = window.location.href.split("/")
path = parts[parts.length - 1]
path_parts = path.split("-")
article_id = $("#article-info").dataset.id
btn.addEventListener("click", function () {
form_holder = document.querySelector("#comment-form")
inpts = form_holder.querySelectorAll("input, textarea")
let counter = 0;
let bad_url_flag = false;
let char_limit = 1000;
let limit_reached = false;
data = new FormData()
inpts.forEach(function (elem) {
if (elem.id !== "website") {
if (elem.value.trim() === "") {
counter++;
}
if (elem.id == "content") {
if (elem.value.length > char_limit) {
limit_reached = true;
}
}
} else {
if (elem.value.trim() !== "" && !isValidUrl(elem.value)) {
bad_url_flag = true;
}
}
data.append(elem.id, elem.value)
})
if (counter > 0) {
set_alert("Please fill all required fields!", "danger")
return false;
}
if (bad_url_flag) {
set_alert("Please use a valid website URL!", "danger")
return false;
}
if (limit_reached) {
set_alert("The comment must not exceed " + char_limit + " characters!", "danger")
return false;
}
url = "/admin/blog-controller?action=create&item=comment&article_id=" + article_id;
post_form_request(url, data);
})
}
function post_reply_comment() {
btn = document.querySelector("#reply")
parts = window.location.href.split("/")
path = parts[parts.length - 1]
path_parts = path.split("-")
article_id = $("#article-info").dataset.id
comment_id = btn.parentElement.parentElement.id
comment_id = comment_id.split("-")[1];
btn.addEventListener("click", function () {
form_holder = document.querySelector("#reply-box")
inpts = form_holder.querySelectorAll("input, textarea")
let counter = 0;
let bad_url_flag = false;
let char_limit = 1000;
let limit_reached = false;
data = new FormData()
inpts.forEach(function (elem) {
if (elem.id !== "reply-website") {
if (elem.value.trim() === "") {
counter++;
}
if (elem.id == "reply-content") {
if (elem.value.length > char_limit) {
limit_reached = true;
}
}
} else {
if (elem.value.trim() !== "" && !isValidUrl(elem.value)) {
bad_url_flag = true;
}
}
data.append(elem.id, elem.value)
})
data.append("comment-id", comment_id);
if (counter > 0) {
set_alert("Please fill all required fields!", "danger")
return false;
}
if (bad_url_flag) {
set_alert("Please use a valid website URL!", "danger")
return false;
}
if (limit_reached) {
set_alert("The comment must not exceed " + char_limit + " characters!", "danger")
return false;
}
url = "/admin/blog-controller?action=create&item=reply-comment&article_id=" + article_id;
post_form_request(url, data);
})
}
function isValidUrl(string) {
try {
new URL(string);
return true;
} catch (err) {
return false;
}
}
function check_if_dev() {
if (location.hostname.indexOf("dev") !== -1) {
return true;
} else {
return false;
}
}
function load_analitics() {
var include_tag = document.createElement("script");
include_tag.src = "https://googletagmanager.com/gtag/js?id=G-JMJ9E5GWL9";
document.getElementsByTagName("head")[0].appendChild(include_tag);
var script_tag = document.createElement("script");
script_tag.setAttribute("async", "async");
script_tag.innerHTML =
"window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-JMJ9E5GWL9');";
document.getElementsByTagName("head")[0].appendChild(script_tag);
}
function toggle_article_comments() {
let btn = document.querySelector(".comment-section-toggler")
let section = document.querySelector("#comments-section")
section_height = 0;
Array.from(section.children).forEach(function (elem) {
console.log(elem.scrollHeight)
console.log(elem)
section_height += elem.scrollHeight;
})
btn.addEventListener("click", function () {
if (section.style.height == 0 || section.style.height == "0px") {
section.style.height = (section_height + 50) + "px";
btn.classList.remove("arrow-toggler-right")
btn.classList.add("arrow-toggler-up")
} else {
btn.classList.remove("arrow-toggler-up")
btn.classList.add("arrow-toggler-right")
section.style.height = "0";
}
})
}
function subscribe_bn() {
bn_btn = document.querySelector("#subscribe_bn")
bn_btn.addEventListener("click", function () {
email = bn_btn.parentElement.children[0].value
name = bn_btn.parentElement.children[1].value
if (email.trim() === "" || name.trim() === "") {
set_alert("Please fill all the required inputs!", "danger");
return false;
}
if (!validate_email(email)) {
set_alert("Please use a vaild email address!", "danger");
return false;
}
url = '/admin/blog-controller?action=create&item=newsletter';
data = new FormData();
data.append("email_address", email)
data.append("name", name)
post_form_request(url, data)
})
}
function blog_article_nav() {
headings = document.querySelector("#article-content").querySelectorAll("h2");
list = document.querySelector("#article-contents-wrapper").querySelector("ul")
headings.forEach(function (heading) {
li = document.createElement("li")
link = document.createElement("a")
link.innerHTML = heading.innerHTML;
link.href = "#"
li.appendChild(link)
list.appendChild(li)
link.addEventListener("click", function (ev) {
ev.preventDefault()
h_box = heading.getBoundingClientRect()
console.log(findPosition(heading))
window.scroll(0, findPosition(heading))
})
function findPosition(obj) {
var currenttop = 0;
if (obj.offsetParent) {
do {
currenttop += obj.offsetTop;
} while ((obj = obj.offsetParent));
return [currenttop - 100];
}
}
})
}
function init_observer() {
let options = {
root: null,
rootMargin: '0px 0px 50px 0px',
threshold: 0.5
}
let callback = (entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
if (img.getAttribute("data-srcset")) {
const src = img.getAttribute("data-srcset");
img.setAttribute("srcset", src);
img.classList.remove("lazy")
img.classList.add("lazy-loaded")
observer.unobserve(img);
} else if (img.getAttribute("data-src")) {
const src = img.getAttribute("data-src");
img.setAttribute("src", src);
img.classList.remove("lazy")
img.classList.add("lazy-loaded")
observer.unobserve(img);
}
}
// and some other methods
})
}
let observer = new IntersectionObserver(callback, options);
return observer
}
function lazy_load_img(image) {
observer.observe(image);
}
function blog_lazy_load() {
let images = document.querySelectorAll(".lazy")
images.forEach((image) => {
lazy_load_img(image)
});
}
function article_scroll() {
let side = $("#blog-side-menu")
let side_rect = side.getBoundingClientRect()
let original_top = side_rect.y
let nav_rect = $(".navbar").getBoundingClientRect()
if (original_top == 0) {
$("#blog-side-menu").style.paddingTop = `calc( ${nav_rect.height}px + 30px )`
}
document.addEventListener("scroll", () => {
let nav_rect = $(".navbar").getBoundingClientRect()
let side = $("#blog-side-menu")
let side_rect = side.getBoundingClientRect()
if (nav_rect.bottom >= side_rect.top) {
// if( side_rect.top == 0){
if (side_rect.y > 0) {
$("#blog-side-menu").style.paddingTop = `calc( ${nav_rect.height}px - ${side_rect.y}px + 30px )`
}
} else {
$("#blog-side-menu").style.paddingTop = `0px`
// $("#blog-side-menu").style.paddingTop = `calc( ${nav_rect.height}px - ${side_rect.top}px - 30px )`
}
})
}
function load_more() {
let button = $("#load-more");
if (button) {
button.addEventListener("click", _handleLoadMore)
}
function _handleLoadMore() {
let url = "/admin/blog-controller?action=load-more"
if (is_category) {
url += "&category=" + loc[loc.length - 1]
}
get_request(url, false, add_loaded)
}
function add_loaded(data) {
if (data["success"] === undefined) {
return false;
}
let articles_container = $("#blog-main")
for (const art of data["success"]) {
let cloned = $(".article").cloneNode(true);
// cloned.classList.add("d-none")
cloned.querySelector("a").href = "/blog/article/" + art["href"]
cloned.querySelector("h3").innerHTML = art["title"]
cloned.querySelector(".preview_date").innerHTML = art["date"]
cloned.querySelector(".preview_text").innerHTML = art["preview-text"].substr(0, 100) + ". . ."
cloned.querySelector("img").src = "/images/blog/transparent-small.webp";
cloned.querySelector("img").dataset.src = "/images/blog/" + art["image"];
cloned.querySelector("img").classList.add("lazy")
cloned.querySelector("img").classList.remove("lazy-loaded")
lazy_load_img(cloned.querySelector("img"))
articles_container.insertBefore(cloned, articles_container.children[articles_container.children.length - 1])
articles_container.insertBefore($create("hr"), articles_container.children[articles_container.children.length - 1])
}
console.log(data["loaded-all"])
if (data["loaded-all"] === true) {
button.classList.add("d-none")
}
blog_lazy_load();
}
}
function format_date(timestamp) {
const date = new Date(timestamp * 1000);
const year = date.getFullYear();
let month = date.toLocaleString('default', {month: 'long'});
let day = date.getDay();
if (month < 10) {
month = "0" + month;
}
if (day < 10) {
day = "0" + day;
}
return month + " " + day + ", " + year;
}
function comment_reply() {
let buttons = $(".comment-reply-button", true)
buttons.forEach(function (elem) {
elem.addEventListener("click", () => {
_handleCommentReply(elem)
});
})
function _handleCommentReply(target) {
let reply_box = $("#reply-box")
let comment_box = target.parentElement.parentElement.parentElement
console.log(reply_box);
if (reply_box) {
reply_box.remove();
}
reply_box = document.createElement("div")
reply_box.setAttribute("id", "reply-box")
reply_box.classList.add("position-relative")
let box_header = document.createElement("span")
let inputs_wrapper = document.createElement("div")
let input_group = document.createElement("div")
input_group.classList.add("input-group", "flex-column", "mt-2")
let name_group = input_group.cloneNode(true);
let name_i = document.createElement("input")
name_i.classList.add("comments-input")
let name_l = document.createElement("label")
name_i.setAttribute("placeholder", "Dispaly name")
name_i.setAttribute("id", "reply-name")
name_l.innerHTML = "Name*"
name_group.appendChild(name_l)
name_group.appendChild(name_i)
let web_group = input_group.cloneNode(true);
let website_i = document.createElement("input")
website_i.classList.add("comments-input")
let website_l = document.createElement("label")
website_l.innerHTML = "Website(optional)"
website_i.setAttribute("placeholder", "https://domain.com")
website_i.setAttribute("id", "reply-website")
web_group.appendChild(website_l)
web_group.appendChild(website_i)
let content_group = input_group.cloneNode(true);
let content_i = document.createElement("textarea")
let content_l = document.createElement("label")
content_i.setAttribute("placeholder", "Leave your thoughts here...")
content_i.setAttribute("id", "reply-content")
content_l.innerHTML = "Reply comment*"
content_group.appendChild(content_l)
content_group.appendChild(content_i)
let close_i = document.createElement("i")
close_i.classList.add("fa-solid", "fa-circle-xmark", "position-absolute", "text-danger");
close_i.setAttribute("id", "close-reply")
if (comment_box.querySelector(".comment-name a")) {
commenter_name = comment_box.querySelector(".comment-name a").innerHTML
} else {
commenter_name = comment_box.querySelector(".comment-name").innerHTML
}
box_header.innerHTML = "Reply to " + commenter_name + ""
inputs_wrapper.appendChild(box_header)
inputs_wrapper.appendChild(name_group)
inputs_wrapper.appendChild(web_group)
inputs_wrapper.appendChild(content_group)
reply_box.appendChild(inputs_wrapper)
reply_box.appendChild(close_i)
reply_box.innerHTML += ''
insertAfter(reply_box, comment_box.children[1])
close_reply_box();
post_reply_comment();
}
function close_reply_box() {
let btn = $("#close-reply")
if (btn) {
btn.addEventListener("click", () => {
let box = $("#reply-box")
if (box) {
box.remove();
}
})
}
}
}
function change_nav_color() {
const nav = $("nav")
const rect = nav.getBoundingClientRect()
const items = $(".navbar-nav a, .navbar-nav span", true)
// console.log(window.scrollY)
var logo = document.querySelector("#logo-link");
var logoLetters = document.querySelectorAll(".logo-span-colored");
var nav_menu = $("#navbar_collapse")
if (nav_menu.classList.contains("show")) {
if (logo) {
//logo.classList.add("text-dark")
logo.classList.add("text-white")
logo.classList.add('ribbon');
}
if (logoLetters) {
logoLetters.forEach(function (element) {
element.classList.add("text-white");
//element.classList.remove("text-white");
});
}
//document.querySelector(".services > a:first-child:after").style.color = "black";
items.forEach(function (el) {
el.classList.add("text-dark")
//el.classList.remove("text-shadoe-class");
})
nav.classList.add("nav-bg")
return;
}
if (window.scrollY > rect.height) {
if (logo) {
//logo.classList.add("text-dark")
logo.classList.add("text-white")
logo.classList.add('ribbon');
}
if (logoLetters) {
logoLetters.forEach(function (element) {
element.classList.add("text-white");
//element.classList.remove("text-white");
});
}
//document.querySelector(".services > a:first-child:after").style.color = "black";
items.forEach(function (el) {
el.classList.add("text-dark")
//el.classList.remove("text-shadoe-class");
})
nav.classList.add("nav-bg")
} else {
if (logo) {
logo.classList.remove("text-dark")
logo.classList.add("text-white")
}
if (logoLetters) {
logoLetters.forEach(function (element) {
//element.classList.remove("text-dark");
element.classList.add("text-white");
});
}
items.forEach(function (el) {
el.classList.remove("text-dark")
//el.classList.add("text-white");
//el.classList.add("text-shadoe-class");
})
if (logo) {
logo.classList.add("text-white")
logo.classList.remove("text-dark")
logo.classList.remove('ribbon');
}
nav.classList.remove("nav-bg")
//document.querySelector(".services > a:first-child:after").style.color = "white";
}
}
function document_scroll() {
document.addEventListener("scroll", function (ev) {
// console.log(ev)
change_nav_color()
subscribe_padding();
}, true)
}
function subscribe_padding() {
const section = $("#blog-side-menu")
if (section) {
const s_rect = section.getBoundingClientRect();
if (s_rect.top - 80 <= 0) {
section.style.paddingTop = "80px";
} else {
section.style.paddingTop = "0";
}
}
}
function toggle_nav() {
btn = document.querySelector(".navbar-toggler")
nav = document.querySelector("#navbar_collapse")
main_nav = $("nav");
btn.addEventListener("click", function () {
if (nav.classList.contains("show")) {
nav.classList.remove("show")
change_nav_color()
} else {
nav.classList.add("show")
change_nav_color()
}
})
}
if (is_article) {
post_blog_comment()
subscribe_bn()
blog_article_nav()
blog_lazy_load()
toggle_article_comments()
comment_reply();
} else {
subscribe_bn();
blog_lazy_load()
load_more();
}
if (!check_if_dev()) {
load_analitics();
}
toggle_nav();
document_scroll();
//article_scroll();