redzuurdesem/themes/desem-swift-theme/assets/js/redzuurdesem.js

194 lines
5.4 KiB
JavaScript

(function() {
const doc = document.documentElement;
// from swift theme: sandwich
// ******
function modifyClass(el, targetClass) {
if (isObj(el) && targetClass) {
const elClass = el.classList;
elClass.contains(targetClass) ? elClass.remove(targetClass) : elClass.add(targetClass);
}
}
function containsClass(el, targetClass) {
if (isObj(el) && targetClass && el !== document ) {
return el.classList.contains(targetClass) ? true : false;
}
}
function createEl(element = 'div') {
return document.createElement(element);
}
function isObj(obj) {
return (obj && typeof obj === 'object' && obj !== null) ? true : false;
}
function elem(selector, parent = document){
let elem = parent.querySelector(selector);
return elem != false ? elem : false;
}
function elems(selector, parent = document) {
let elems = parent.querySelectorAll(selector);
return elems.length ? elems : false;
}
function pushClass(el, targetClass) {
if (isObj(el) && targetClass) {
const elClass = el.classList;
elClass.contains(targetClass) ? false : elClass.add(targetClass);
}
}
const copyToClipboard = str => {
let copy, selection, selected;
copy = createEl('textarea');
copy.value = str;
copy.setAttribute('readonly', '');
copy.style.position = 'absolute';
copy.style.left = '-9999px';
selection = document.getSelection();
doc.appendChild(copy);
// check if there is any selected content
selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;
copy.select();
document.execCommand('copy');
doc.removeChild(copy);
if (selected) { // if a selection existed before copying
selection.removeAllRanges(); // unselect existing selection
selection.addRange(selected); // restore the original selection
}
}
(function copyLinkToShare() {
let copy, copied, excerpt, isCopyIcon, isInExcerpt, link, postCopy, postLink, target;
copy = 'copy';
copied = 'copy_done';
excerpt = 'excerpt';
postCopy = 'post_copy';
postLink = 'post_card';
doc.addEventListener('click', function(event) {
target = event.target;
isCopyIcon = containsClass(target, copy);
let isWithinCopyIcon = target.closest(`.${copy}`);
if (isCopyIcon || isWithinCopyIcon) {
let icon = isCopyIcon ? isCopyIcon : isWithinCopyIcon;
isInExcerpt = containsClass(icon, postCopy);
if (isInExcerpt) {
link = target.closest(`.${excerpt}`).previousElementSibling;
link = containsClass(link, postLink)? elemAttribute(link, 'href') : false;
} else {
link = window.location.href;
}
if(link) {
copyToClipboard(link);
pushClass(icon, copied);
}
}
});
})();
[...document.querySelectorAll('.fbpost_item')].forEach((el) => {
const link = el.getAttribute('data-link');
[...el.querySelectorAll('p img')].forEach((img) => {
img.addEventListener('click', () => {
let a = document.createElement('a')
a.target= '_blank'
a.href= link
a.click()
})
})
});
(function() {
let bar = 'nav_bar-wrap';
let navBar = elem(`.${bar}`);
let nav = elem('.nav-body');
let open = 'nav-open';
let exit = 'nav-exit';
let drop = 'nav-drop';
let pop = 'nav-pop';
let navDrop = elem(`.${drop}`);
function toggleMenu(){
let menuOpen, menuPulled, status;
modifyClass(navDrop, pop);
modifyClass(navBar, 'hidden');
menuOpen = containsClass(nav, open);
menuPulled = containsClass(nav, exit);
status = menuOpen || menuPulled ? true : false;
status ? modifyClass(nav, exit) : modifyClass(nav, open);
status ? modifyClass(nav, open) : modifyClass(nav, exit);
}
navBar.addEventListener('click', function() {
toggleMenu();
});
elem('.nav-close').addEventListener('click', function() {
toggleMenu();
});
elem('.nav-drop').addEventListener('click', function(e) {
e.target === this ? toggleMenu() : false;
});
})();
(function postsPager(){
const pager = elem('.pagination');
if (pager) {
pushClass(pager, 'pager');
const pagerItems = elems('li', pager);
const pagerLinks = Array.from(pagerItems).map(function(item){
return item.firstElementChild;
});
pagerLinks.forEach(function(link){
pushClass(link, 'pager_link')
});
pagerItems.forEach(function(item){
pushClass(item, 'pager_item')
});
}
})();
// ******
const fromFixedToScrollForSafari = () => {
const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
const header = document.querySelector('.post_header');
if(isSafari) {
header.style.backgroundAttachment = 'scroll';
}
}
fromFixedToScrollForSafari();
const lightbox = () => {
[...document.querySelectorAll('article img')].forEach(el => {
if(el.parentNode.nodeName !== 'A') {
el.parentNode.innerHTML = `<a href="${el.src}" class="lbox">${el.outerHTML}</a>`;
} else {
el.parentNode.setAttribute('class', 'lbox');
}
})
const box = new SimpleLightbox('.lbox', { /* options */ });
};
lightbox();
const meel = document.querySelector('.meel');
const enc = "<o ofwo-zopsz='aowz orrfsgg' vfst='aowzhc:pfccr@fsrniifrsgsa.ps'>pfccr@fsrniifrsgsa.ps</o>"
if(meel) {
meel.addEventListener('click', function() {
meel.setAttribute('class', '')
meel.innerHTML = enc.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+12)?c:c-26);});
})
}
})()