78 lines
2 KiB
JavaScript
Executable file
78 lines
2 KiB
JavaScript
Executable file
/* global $, location, send, window */ "use strict";
|
|
|
|
|
|
|
|
$(function () {
|
|
scrollToElementOnLoad();
|
|
|
|
$("a[href^=http]").each(function () { // Automatically open external links in new tabs
|
|
if (this.href.indexOf(location.hostname) === -1) {
|
|
$(this).attr("target", "_blank");
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
if ( // Toggle beta message
|
|
localStorage.getItem("hide lbry alert") &&
|
|
localStorage.getItem("hide lbry alert") === "true" // cannot set Booleans for some reason
|
|
) document.querySelector("#alert-beta").style.display = "none";
|
|
|
|
document.querySelector("#close-alert").onclick = function () {
|
|
localStorage.setItem("hide lbry alert", true);
|
|
document.querySelector("#alert-beta").style.display = "none";
|
|
};
|
|
|
|
|
|
|
|
// Smooth scroll
|
|
|
|
document.querySelectorAll("a[href^='#']").forEach(anchor => {
|
|
anchor.addEventListener("click", function (e) {
|
|
e.preventDefault();
|
|
|
|
const element = this.href.split("#").pop();
|
|
let elementOffset;
|
|
|
|
if (document.getElementById(element)) {
|
|
elementOffset = document.getElementById(element).offsetTop - 74;
|
|
window.scroll({ top: elementOffset, behavior: "smooth" });
|
|
}
|
|
});
|
|
});
|
|
|
|
// Newsletter
|
|
|
|
$("[data-action='subscribe to newsletter']").on("click", () => {
|
|
const email = $("#emailAddress").val();
|
|
if (!validateEmail(email)) return;
|
|
|
|
send(JSON.stringify({
|
|
"email": email,
|
|
"message": "subscribe"
|
|
}));
|
|
});
|
|
|
|
|
|
|
|
// H E L P E R S
|
|
|
|
function scrollToElementOnLoad() {
|
|
if (window.location.href.includes("#")) {
|
|
setTimeout(() => { // give page time to breathe
|
|
const element = window.location.href.split("#").pop();
|
|
let elementOffset;
|
|
|
|
if (document.getElementById(element)) {
|
|
elementOffset = document.getElementById(element).offsetTop - 74;
|
|
window.scroll({ top: elementOffset, behavior: "smooth" });
|
|
}
|
|
}, 150);
|
|
}
|
|
}
|
|
|
|
function validateEmail(email) {
|
|
const re = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\\.,;:\s@"]{2,})$/i;
|
|
return re.test(String(email));
|
|
}
|