123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- // global variables
- const doc = document.documentElement;
- const inline = ":inline";
- // variables read from your hugo configuration
- const parentURL = '{{ absURL "" }}';
- function isObj(obj) {
- return (obj && typeof obj === 'object' && obj !== null) ? true : false;
- }
- function createEl(element = 'div') {
- return document.createElement(element);
- }
- 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) {
- elClass = el.classList;
- elClass.contains(targetClass) ? false : elClass.add(targetClass);
- }
- }
- function hasClasses(el) {
- if(isObj(el)) {
- const classes = el.classList;
- return classes.length
- }
- }
- (function markInlineCodeTags(){
- const codeBlocks = elems('code');
- if(codeBlocks) {
- codeBlocks.forEach(function(codeBlock){
- hasClasses(codeBlock) ? false: pushClass(codeBlock, 'noClass');
- });
- }
- })();
- function deleteClass(el, targetClass) {
- if (isObj(el) && targetClass) {
- elClass = el.classList;
- elClass.contains(targetClass) ? elClass.remove(targetClass) : false;
- }
- }
- function modifyClass(el, targetClass) {
- if (isObj(el) && targetClass) {
- 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 elemAttribute(elem, attr, value = null) {
- if (value) {
- elem.setAttribute(attr, value);
- } else {
- value = elem.getAttribute(attr);
- return value ? value : false;
- }
- }
- function wrapEl(el, wrapper) {
- el.parentNode.insertBefore(wrapper, el);
- wrapper.appendChild(el);
- }
- function deleteChars(str, subs) {
- let newStr = str;
- if (Array.isArray(subs)) {
- for (let i = 0; i < subs.length; i++) {
- newStr = newStr.replace(subs[i], '');
- }
- } else {
- newStr = newStr.replace(subs, '');
- }
- return newStr;
- }
- function isBlank(str) {
- return (!str || str.trim().length === 0);
- }
- function isMatch(element, selectors) {
- if(isObj(element)) {
- if(selectors.isArray) {
- let matching = selectors.map(function(selector){
- return element.matches(selector)
- })
- return matching.includes(true);
- }
- return element.matches(selectors)
- }
- }
- function 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 loadSvg(file, parent, path = 'icons/') {
- const link = `${parentURL}${path}${file}.svg`;
- fetch(link)
- .then((response) => {
- return response.text();
- })
- .then((data) => {
- parent.innerHTML = data;
- });
- }
- function getMobileOperatingSystem() {
- let userAgent = navigator.userAgent || navigator.vendor || window.opera;
- if (/android/i.test(userAgent)) {
- return "Android";
- }
- if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
- return "iOS";
- }
- return "unknown";
- }
- function horizontalSwipe(element, func, direction) {
- // call func if result of swipeDirection() 👇🏻 is equal to direction
- let touchstartX = 0;
- let touchendX = 0;
- let swipeDirection = null;
- function handleGesure() {
- return (touchendX + 50 < touchstartX) ? 'left' : (touchendX < touchstartX + 50) ? 'right' : false;
- }
- element.addEventListener('touchstart', e => {
- touchstartX = e.changedTouches[0].screenX
- });
- element.addEventListener('touchend', e => {
- touchendX = e.changedTouches[0].screenX
- swipeDirection = handleGesure()
- swipeDirection === direction ? func() : false;
- });
- }
- function parseBoolean(string) {
- let bool;
- string = string.trim().toLowerCase();
- switch (string) {
- case 'true':
- return true;
- case 'false':
- return false;
- default:
- return undefined;
- }
- };
- (function() {
- const bodyElement = elem('body');
- const platform = navigator.platform.toLowerCase();
- if(platform.includes("win")) {
- pushClass(bodyElement, 'windows');
- }
- })();
|