mirror of
https://github.com/ryanoasis/nerd-fonts.git
synced 2024-12-19 20:12:52 +02:00
147 lines
4.4 KiB
JavaScript
147 lines
4.4 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function () {
|
|
|
|
// nice scrolling
|
|
document.getElementsByTagName('nav')[0].addEventListener('click', function (e) {
|
|
if (e.target.matches('a') && e.target.hash) {
|
|
const section = document.getElementById(e.target.hash.slice(1));
|
|
|
|
if (section) {
|
|
e.preventDefault();
|
|
scrollIt(section);
|
|
}
|
|
}
|
|
});
|
|
|
|
function scrollIt(destination, duration = 200, easing = 'linear', callback) {
|
|
|
|
const easings = {
|
|
linear(t) {
|
|
return t;
|
|
},
|
|
easeInQuad(t) {
|
|
return t * t;
|
|
},
|
|
easeOutQuad(t) {
|
|
return t * (2 - t);
|
|
},
|
|
easeInOutQuad(t) {
|
|
return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
|
|
},
|
|
easeInCubic(t) {
|
|
return t * t * t;
|
|
},
|
|
easeOutCubic(t) {
|
|
return (--t) * t * t + 1;
|
|
},
|
|
easeInOutCubic(t) {
|
|
return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
|
|
},
|
|
easeInQuart(t) {
|
|
return t * t * t * t;
|
|
},
|
|
easeOutQuart(t) {
|
|
return 1 - (--t) * t * t * t;
|
|
},
|
|
easeInOutQuart(t) {
|
|
return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t;
|
|
},
|
|
easeInQuint(t) {
|
|
return t * t * t * t * t;
|
|
},
|
|
easeOutQuint(t) {
|
|
return 1 + (--t) * t * t * t * t;
|
|
},
|
|
easeInOutQuint(t) {
|
|
return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t;
|
|
}
|
|
};
|
|
|
|
const start = window.pageYOffset;
|
|
const startTime = 'now' in window.performance ? performance.now() : new Date().getTime();
|
|
|
|
const documentHeight = Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);
|
|
const windowHeight = window.innerHeight || document.documentElement.clientHeight || document.getElementsByTagName('body')[0].clientHeight;
|
|
const destinationOffset = typeof destination === 'number' ? destination : destination.offsetTop;
|
|
const destinationOffsetToScroll = Math.round(documentHeight - destinationOffset < windowHeight ? documentHeight - windowHeight : destinationOffset);
|
|
|
|
if ('requestAnimationFrame' in window === false) {
|
|
window.scroll(0, destinationOffsetToScroll);
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
return;
|
|
}
|
|
|
|
function scroll() {
|
|
const now = 'now' in window.performance ? performance.now() : new Date().getTime();
|
|
const time = Math.min(1, ((now - startTime) / duration));
|
|
const timeFunction = easings[easing](time);
|
|
window.scroll(0, Math.ceil((timeFunction * (destinationOffsetToScroll - start)) + start));
|
|
|
|
if (window.pageYOffset === destinationOffsetToScroll) {
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
return;
|
|
}
|
|
|
|
requestAnimationFrame(scroll);
|
|
}
|
|
|
|
scroll();
|
|
}
|
|
|
|
// extremely basic filtering on load:
|
|
function getParameterByName(name, url) {
|
|
if (!url) {
|
|
url = window.location.href;
|
|
}
|
|
name = name.replace(/[\[\]]/g, '\\$&');
|
|
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
|
|
results = regex.exec(url);
|
|
if (!results) return null;
|
|
if (!results[2]) return '';
|
|
return decodeURIComponent(results[2].replace(/\+/g, ' '));
|
|
}
|
|
|
|
const set = getParameterByName('set');
|
|
const onCheatSheet = window.location.href.indexOf('/cheat-sheet') !== -1;
|
|
|
|
if (set) {
|
|
if (onCheatSheet) {
|
|
elementGlyphSearch.value = set;
|
|
gtag('event', 'search-via-url', {
|
|
event_category: 'glyph-search',
|
|
event_label: 'Cheat Sheet : ' + set,
|
|
value: set
|
|
});
|
|
searchGlyphs();
|
|
} else {
|
|
gtag('event', 'search-via-redirect', {
|
|
event_category: 'glyph-search',
|
|
event_label: 'Cheat Sheet : ' + set,
|
|
value: set
|
|
});
|
|
// redirect to cheat sheet with param
|
|
window.location.href = window.location.origin + '/cheat-sheet?set=' + set;
|
|
}
|
|
}
|
|
|
|
// lazy load images
|
|
(function lazyLoadImages() {
|
|
const imageObserver = new IntersectionObserver((entries, imgObserver) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
const lazyImage = entry.target;
|
|
lazyImage.src = lazyImage.dataset.src;
|
|
}
|
|
});
|
|
});
|
|
const arr = document.querySelectorAll('img.lzy_img');
|
|
arr.forEach(v => {
|
|
imageObserver.observe(v);
|
|
});
|
|
})();
|
|
|
|
});
|