diff --git a/src/mailgo.js b/src/mailgo.js index 53fc404..723e40d 100644 --- a/src/mailgo.js +++ b/src/mailgo.js @@ -304,7 +304,7 @@ const mailgoInit = () => { /** * mailgoRender - * function to render a single mailgo + * function to render a mailgo (mail or tel) */ const mailgoRender = (type = MAIL_TYPE, mailgo) => { // mailgo mail @@ -446,13 +446,10 @@ const mailgoRender = (type = MAIL_TYPE, mailgo) => { // the title of the modal (tel) titleEl.innerHTML = tel; - // add the actions + // add the actions to buttons waButton.addEventListener("click", () => actions.openWhatsApp()); - telegramButton.addEventListener("click", () => actions.openTelegram()); - callButton.addEventListener("click", () => actions.callDefault()); - copyButton.addEventListener("click", () => actions.copy(tel)); } @@ -466,28 +463,38 @@ const mailgoRender = (type = MAIL_TYPE, mailgo) => { // actions const actions = { openGmail: () => { + // Gmail url let gmailUrl = "https://mail.google.com/mail/u/0/?view=cm&source=mailto&to=" + encodeURIComponent(mail); + // the details if provided if (cc) gmailUrl = gmailUrl.concat("&cc=" + encodeURIComponent(cc)); if (bcc) gmailUrl = gmailUrl.concat("&bcc=" + encodeURIComponent(bcc)); if (subject) gmailUrl = gmailUrl.concat("&subject=" + subject); if (bodyMail) gmailUrl = gmailUrl.concat("&body=" + bodyMail); + // open the link window.open(gmailUrl, "_blank"); + // hide the modal hideMailgo(); }, openOutlook: () => { + // Outlook url let outlookUrl = "https://outlook.live.com/owa/?path=/mail/action/compose&to=" + encodeURIComponent(mail); + + // the details if provided if (subject) outlookUrl = outlookUrl.concat("&subject=" + subject); if (bodyMail) outlookUrl = outlookUrl.concat("&body=" + bodyMail); + // open the link window.open(outlookUrl, "_blank"); + + // hide the modal hideMailgo(); }, @@ -497,14 +504,20 @@ const actions = { }, openTelegram: () => { + // Telegram url let tgUrl = "tg://msg?text=" + msg + "&to=" + tel; + // open the url window.open(tgUrl, "_blank"); + // hide the modal hideMailgo(); }, openWhatsApp: () => { + // WhatsApp url let waUrl = "https://wa.me/" + tel; + // open the url window.open(waUrl, "_blank"); + // hide the modal hideMailgo(); }, @@ -516,43 +529,56 @@ const actions = { copy: content => { copyToClipboard(content); + // the correct copyButton (mail or tel) mailgoIsShowing(MAIL_TYPE) ? (copyButton = getE("mailgo-copy")) : (copyButton = getE("mailgo-tel-copy")); copyButton.textContent = "copied"; setTimeout(() => { copyButton.textContent = "copy"; + // hide after the timeout hideMailgo(); }, 999); } }; // function that returns if an element is a mailgo -const isMailgo = element => - // first case: it is an element with "mailto:..." in href and no no-mailgo in classList - (element.href && - element.href.toLowerCase().startsWith(MAILTO) && - !element.classList.contains("no-mailgo")) || - (element.hasAttribute("data-address") && - // second case: the href=#mailgo - ((element.href && - element.getAttribute("href").toLowerCase() === "#mailgo") || - // third case: the classList contains mailgo - (element.classList && element.classList.contains("mailgo")))); +const isMailgo = (element, type = MAIL_TYPE) => { + // mailgo type mail + if (type === MAIL_TYPE) { + return ( + // first case: it is an element with "mailto:..." in href and no no-mailgo in classList + (element.href && + element.href.toLowerCase().startsWith(MAILTO) && + !element.classList.contains("no-mailgo")) || + (element.hasAttribute("data-address") && + // second case: the href=#mailgo + ((element.href && + element.getAttribute("href").toLowerCase() === "#mailgo") || + // third case: the classList contains mailgo + (element.classList && element.classList.contains("mailgo")))) + ); + } -// function that returns if an element is a mailgo-tel -const isMailgoTel = element => - // first case: it is an element with "tel:..." or "callto:..." in href and no no-mailgo in classList - (element.href && - (element.href.toLowerCase().startsWith(TEL) || - element.href.toLowerCase().startsWith(CALLTO)) && - !element.classList.contains("no-mailgo")) || - ((element.hasAttribute("data-tel") && - // second case: the href=#mailgo - (element.href && - element.getAttribute("href").toLowerCase() === "#mailgo")) || - // third case: the classList contains mailgo - (element.classList && element.classList.contains("mailgo"))); + // mailgo type tel + if (type === TEL_TYPE) { + return ( + // first case: it is an element with "tel:..." or "callto:..." in href and no no-mailgo in classList + (element.href && + (element.href.toLowerCase().startsWith(TEL) || + element.href.toLowerCase().startsWith(CALLTO)) && + !element.classList.contains("no-mailgo")) || + ((element.hasAttribute("data-tel") && + // second case: the href=#mailgo + (element.href && + element.getAttribute("href").toLowerCase() === "#mailgo")) || + // third case: the classList contains mailgo + (element.classList && element.classList.contains("mailgo"))) + ); + } + + return false; +}; /** * mailgoCheckRender @@ -586,7 +612,7 @@ const mailgoCheckRender = event => { if (element instanceof HTMLDocument || element instanceof Window) return; // go in the event.path to find if the user has clicked on a mailgo element - if (isMailgo(element)) { + if (isMailgo(element, MAIL_TYPE)) { // stop the normal execution of the element click event.preventDefault(); @@ -595,7 +621,7 @@ const mailgoCheckRender = event => { return; } - if (isMailgoTel(element)) { + if (isMailgo(element, TEL_TYPE)) { // stop the normal execution of the element click event.preventDefault();