File: /home/httpd/html/freecam2.com/public_html/templates/default/js/main.js
(function () {
"use strict";
/**
* Easy selector helper function
*/
const select = (el, all = false) => {
el = el.trim()
if (all) {
return [...document.querySelectorAll(el)]
} else {
return document.querySelector(el)
}
}
/**
* Easy event listener function
*/
const on = (type, el, listener, all = false) => {
let selectEl = select(el, all)
if (selectEl) {
if (all) {
selectEl.forEach(e => e.addEventListener(type, listener))
} else {
selectEl.addEventListener(type, listener)
}
}
}
/**
* Easy on scroll event listener
*/
const onscroll = (el, listener) => {
el.addEventListener('scroll', listener)
}
/**
* Navbar links active state on scroll
*/
let navbarlinks = select('#navbar .scrollto', true)
const navbarlinksActive = () => {
let position = window.scrollY + 200
navbarlinks.forEach(navbarlink => {
if (!navbarlink.hash)
return
let section = select(navbarlink.hash)
if (!section)
return
if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
navbarlink.classList.add('active')
} else {
navbarlink.classList.remove('active')
}
})
}
window.addEventListener('load', navbarlinksActive)
onscroll(document, navbarlinksActive)
/**
* Scrolls to an element with header offset
*/
const scrollto = (el) => {
let header = select('header')
let offset = header.offsetHeight
let elementPos = select(el).offsetTop
window.scrollTo({
top: elementPos - offset,
behavior: 'smooth'
})
}
/**
* Mobile nav toggle
*/
/**
* Mobile nav dropdowns activate
*/
on('click', '.navbar .dropdown > a', function (e) {
if (select('#navbar').classList.contains('navbar-mobile')) {
e.preventDefault()
this.nextElementSibling.classList.toggle('dropdown-active')
}
}, true)
/**
* Scroll with offset on links with a class name .scroll to
*/
on('click', '.scrollto', function (e) {
if (select(this.hash)) {
e.preventDefault()
let navbar = select('#navbar')
if (navbar.classList.contains('navbar-mobile')) {
navbar.classList.remove('navbar-mobile')
let navbarToggle = select('.mobile-nav-toggle')
navbarToggle.classList.toggle('bi-list')
navbarToggle.classList.toggle('bi-x')
}
scrollto(this.hash)
}
}, true)
/**
* Toggle .header-scrolled class to #header when page is scrolled
*/
let selectHeader = select('.header')
if (selectHeader) {
const headerScrolled = () => {
if (window.scrollY > 100) {
selectHeader.classList.add('header-scrolled')
} else {
selectHeader.classList.remove('header-scrolled')
}
}
window.addEventListener('load', headerScrolled)
onscroll(document, headerScrolled)
}
/**
* Scroll with ofset on page load with hash links in the url
*/
window.addEventListener('load', () => {
if (window.location.hash) {
if (select(window.location.hash)) {
scrollto(window.location.hash)
}
}
});
/*load more
$(document).ready(function () {
$(".img-col").slice(0, 30).show();
$("#loadMore").on("click", function (e) {
e.preventDefault();
$(".img-col:hidden").slice(0, 30).slideDown();
if ($(".img-col:hidden").length == 0) {
$("#loadMore").text("No Content").addClass("noContent");
}
});
});*/
$(document).ready(function () {
$('.close-link').click(function (e) {
e.preventDefault();
$(this).parent('.side-link').remove(); // remove element which is being clicked
});
});
function addFav() {
$(document).on('click', '[data-mb="addFav"]', function (e) {
e.preventDefault();
var xhr,
_this = $(this),
site = _this.attr('data-site'),
model = _this.attr('data-model');
if (xhr && xhr.readyState() !== 4) {
xhr.abort();
}
xhr = $.ajax({
url: "includes/inc.add_favorites.php",
method: "POST",
dataType: "html",
data: {
site: site,
username: model
},
success: function (data) {
$('#addFavModal .modal-body').html(data);
var favModal = new bootstrap.Modal(document.getElementById('addFavModal'));
favModal.show();
}
});
});
}
function remFav() {
$(document).on('click', '[data-mb="remFav"]', function (e) {
e.preventDefault();
var xhr,
_this = $(this),
site = _this.attr('data-site'),
model = _this.attr('data-model');
if (xhr && xhr.readyState() !== 4) {
xhr.abort();
}
xhr = $.ajax({
url: "../includes/inc.del_favorites.php",
method: "POST",
dataType: "html",
data: {
site: site,
username: model
},
success: function (data) {
_this.parent().parent().remove();
}
});
});
}
function rating() {
$(document).on('click', '[data-mb="rate"]:not(.disabled)', function (e) {
e.preventDefault();
var xhr,
_this = $(this),
action = 'rating',
performer_site = _this.parent().data('site'),
performer_name = _this.parent().data('performer'),
rate = _this.attr('data-rate');
if (xhr && xhr.readyState() !== 4) {
xhr.abort();
}
xhr = $.ajax({
url: "../includes/ajax.rating.php",
method: "POST",
dataType: "html",
data: {
action: action,
performer_site: performer_site,
performer_name: performer_name,
rate: rate
},
success: function (data) {
var res = JSON.parse(data);
var info = res.message;
var title;
if (res.success === true) {
title = 'Success';
$('[data-rating="total"]').html(res.newRating + '%');
_this.addClass('active');
$('[data-mb="rate"]').addClass('disabled');
} else {
title = 'Error';
}
$('#infoModal .modal-title').html(title);
$('#infoModal .modal-body').html(info);
var infoModal = new bootstrap.Modal(document.getElementById('infoModal'));
infoModal.show();
}
});
});
}
$(document).ready(function () {
addFav();
remFav();
rating();
if ($('.t-comments').length > 0) {
mbComments();
}
$('.mobile-nav-toggle').click(function (e) {
e.preventDefault();
$('#navbar').toggleClass('navbar-mobile');
$(this).find('i').toggleClass('bi-list');
$(this).find('i').toggleClass('bi-x');
});
$('.show-categories').click(function (e) {
e.preventDefault();
$('#mobile-categories').toggleClass('list-container-mobile');
$(this).toggleClass('bi-x');
$('body').toggleClass('categories-open');
});
});
})()