shareon-pulsanti-condivisio.../src/shareon.js

71 lines
2.4 KiB
JavaScript

// eslint-disable-next-line import/no-unresolved
import urlBuilderMap from "consts:urlBuilderMap";
const initializeShareon = () => {
const shareonContainers = document.getElementsByClassName("shareon");
// iterate over <div class="shareon">
for (let i = 0; i < shareonContainers.length; i += 1) {
/** @type Element */
const container = shareonContainers[i];
// iterate over children of <div class="shareon">
for (let j = 0; j < container.children.length; j += 1) {
/** @type Element */
const child = container.children[j];
if (child) {
const classListLength = child.classList.length;
// iterate over classes of the child element
for (let k = 0; k < classListLength; k += 1) {
const cls = child.classList.item(k);
// if it's one of the networks
if (Object.prototype.hasOwnProperty.call(urlBuilderMap, cls)) {
const preset = {
url: encodeURIComponent(
child.dataset.url ||
container.dataset.url ||
window.location.href
),
title: encodeURIComponent(
child.dataset.title || container.dataset.title || document.title
),
media: encodeURIComponent(
child.dataset.media || container.dataset.media || ""
),
text: encodeURIComponent(
child.dataset.text || container.dataset.text || ""
),
via: encodeURIComponent(
child.dataset.via || container.dataset.via || ""
),
fbAppId: encodeURIComponent(
child.dataset.fbAppId || container.dataset.fbAppId || ""
),
};
const url = urlBuilderMap[cls](preset);
if (child.tagName.toLowerCase() === "a") {
child.setAttribute("href", url);
child.setAttribute("rel", "noopener noreferrer");
child.setAttribute("target", "_blank");
} else {
const getButtonListener = (buttonUrl) => () => {
window.open(buttonUrl, "_blank", "noopener,noreferrer");
};
child.addEventListener("click", getButtonListener(url));
}
break; // once a network is detected we don't want to check further
}
}
}
}
}
};
export default initializeShareon;