From 3f24fe318851d67712b8cc7b24593790fd3d2094 Mon Sep 17 00:00:00 2001 From: Matteo Manzinello Date: Tue, 28 May 2019 20:03:24 +0200 Subject: [PATCH] fixed ISSUE #26 --- dist/mailgo.js | 27 ++++++++++++++------------- dist/mailgo.min.js | 2 +- mailgo.js | 2 +- src/mailgo.js | 43 ++++++++++++++++++------------------------- 4 files changed, 34 insertions(+), 40 deletions(-) diff --git a/dist/mailgo.js b/dist/mailgo.js index 3e534ac..d7a60a8 100644 --- a/dist/mailgo.js +++ b/dist/mailgo.js @@ -154,9 +154,8 @@ var mailgoInit = function mailgoInit() { var mailgoRender = function mailgoRender(mailgo) { - var mail = "", - url = "", - mailtoHref = "", + var url = "", + mail = "", cc = "", bcc = "", subject = "", @@ -164,8 +163,7 @@ var mailgoRender = function mailgoRender(mailgo) { if (mailgo.href && mailgo.href.toLowerCase().startsWith(MAILTO)) { mail = decodeURIComponent(mailgo.href.split("?")[0].split(MAILTO)[1].trim()); - mailtoHref = mailgo.href; - url = new URL(mailtoHref); + url = new URL(mailgo.href); var urlParams = new URLSearchParams(url.search); // optional parameters for the email cc = urlParams.get("cc"); @@ -176,8 +174,7 @@ var mailgoRender = function mailgoRender(mailgo) { // if the element href="#mailgo" or class="mailgo" // mail = data-address + @ + data-domain mail = mailgo.getAttribute("data-address") + "@" + mailgo.getAttribute("data-domain"); - mailtoHref = MAILTO + encodeURIComponent(mail); - url = new URL(mailtoHref); // cc = data-cc-address + @ + data-cc-domain + url = new URL(MAILTO + encodeURIComponent(mail)); // cc = data-cc-address + @ + data-cc-domain cc = mailgo.getAttribute("data-cc-address") + "@" + mailgo.getAttribute("data-cc-domain"); // bcc = data-bcc-address + @ + data-bcc-domain @@ -218,7 +215,7 @@ var mailgoRender = function mailgoRender(mailgo) { bodyMail ? (bodyEl.style.display = "block", bodyValueEl.textContent = bodyMail) : bodyEl.style.display = "none"; // add the actions gmailButton.addEventListener("click", function () { - return actions.openGmail(mailtoHref); + return actions.openGmail(mail, cc, bcc, subject, bodyMail); }); outlookButton.addEventListener("click", function () { return actions.openOutlook(mail, subject, bodyMail); @@ -234,14 +231,18 @@ var mailgoRender = function mailgoRender(mailgo) { showMailgo(); // listener keyDown document.addEventListener("keydown", function () { - return mailgoKeydown(mail, cc, bcc, subject, bodyMail, url, mailtoHref, encEmail, copyButton); + return mailgoKeydown(mail, cc, bcc, subject, bodyMail, encEmail, copyButton); }); }; // actions var actions = { - openGmail: function openGmail(mailtoHref) { - var gmailUrl = "https://mail.google.com/mail?extsrc=mailto&url=" + encodeURIComponent(mailtoHref); + openGmail: function openGmail(mail, cc, bcc, subject, bodyMail) { + var gmailUrl = "https://mail.google.com/mail/u/0/?view=cm&source=mailto&to=" + encodeURIComponent(mail); + 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); window.open(gmailUrl, "_blank"); }, openOutlook: function openOutlook(mail, subject, bodyMail) { @@ -305,7 +306,7 @@ var mailgoCheckRender = function mailgoCheckRender(event) { */ -var mailgoKeydown = function mailgoKeydown(mail, cc, bcc, subject, bodyMail, url, mailtoHref, encEmail, copyButton) { +var mailgoKeydown = function mailgoKeydown(mail, cc, bcc, subject, bodyMail, encEmail, copyButton) { // if mailgo is not showing do nothing if (!mailgoIsShowing()) return; @@ -317,7 +318,7 @@ var mailgoKeydown = function mailgoKeydown(mail, cc, bcc, subject, bodyMail, url case 71: // g -> open GMail - actions.openGmail(mailtoHref); + actions.openGmail(mail, cc, bcc, subject, bodyMail); break; case 79: diff --git a/dist/mailgo.min.js b/dist/mailgo.min.js index d7dad06..c65edbd 100644 --- a/dist/mailgo.min.js +++ b/dist/mailgo.min.js @@ -1 +1 @@ -"use strict";var V="0.6.1",MAILTO="mailto:",mailgoCSS=document.createElement("style");mailgoCSS.id="mailgo-style",mailgoCSS.type="text/css";var mailgoCSSContent=document.createTextNode('.mailgo-modal a,.mailgo-modal p,.mailgo-modal span,.mailgo-modal strong{margin:0;padding:0;font-size:100%;line-height:1;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"}.mailgo-modal strong{font-weight:700}.mailgo-modal{position:fixed;top:0;right:0;bottom:0;left:0;justify-content:center;align-items:center;flex-direction:column;overflow:hidden;font-size:15px;z-index:10000}.mailgo-title{display:block;margin-bottom:5px}.mailgo-details{margin-bottom:10px}.mailgo-details p{font-size:12px;margin-top:3px;margin-bottom:3px}.mailgo-modal-background{position:absolute;z-index:10001;top:0;right:0;bottom:0;left:0;background-color:rgba(10,10,10,.75);opacity:.8}.mailgo-modal-content{position:relative;z-index:10002;box-sizing:content-box;text-align:center;width:200px;background-color:#fff;border-radius:6px;box-shadow:0 2px 6px 0 rgba(10,10,10,.39);color:#4a4a4a;display:block;overflow:auto;padding:1.25rem}.mailgo-modal-content:hover{box-shadow:0 6px 20px rgba(10,10,10,.23)}.mailgo-modal-content a{display:block;padding:10px;color:#4a4a4a;border-radius:4px;text-decoration:none}.mailgo-modal-content a.mailgo-gmail{color:#d44638}.mailgo-modal-content a.mailgo-outlook{color:#0072c6}.mailgo-modal-content a.mailgo-copy{padding:16px 10px;font-size:16px}.mailgo-modal-content a.mailgo-copy:hover,.mailgo-modal-content a.mailgo-default:hover{background-color:rgba(0,0,0,.08);color:#4a4a4a}.mailgo-modal-content a.mailgo-outlook:hover{background-color:rgba(0,114,198,.08);color:#0072c6}.mailgo-modal-content a.mailgo-gmail:hover{background-color:rgba(212,70,56,.08);color:#d44638}.mailgo-modal-content a.mailgo-by{display:block;font-size:8px;margin-top:1rem;padding:0;color:#4a4a4a;opacity:.5}.mailgo-modal-content a.mailgo-by:hover{opacity:1}.mailgo-weight-500{font-weight:500}');mailgoCSS.appendChild(mailgoCSSContent),document.head.appendChild(mailgoCSS);var mailgoInit=function(){var e=document.createElement("div");e.id="mailgo",e.classList.add("mailgo-modal"),e.style.display="none";var a=document.createElement("div");a.className="mailgo-modal-background",e.appendChild(a);var o=document.createElement("div");o.className="mailgo-modal-content",e.appendChild(o);var t=document.createElement("strong");t.id="mailgo-title",t.className="mailgo-title",o.appendChild(t);var n=document.createElement("div");n.id="mailgo-details",n.className="mailgo-details";var i=document.createElement("p");i.id="mailgo-cc";var l=document.createElement("span");l.className="mailgo-weight-500";var d=document.createTextNode("cc ");l.appendChild(d);var c=document.createElement("span");c.id="mailgo-cc-value",i.appendChild(l),i.appendChild(c),n.appendChild(i);var m=document.createElement("p");m.id="mailgo-bcc";var r=document.createElement("span");r.className="mailgo-weight-500";var g=document.createTextNode("bcc ");r.appendChild(g);var s=document.createElement("span");s.id="mailgo-bcc-value",m.appendChild(r),m.appendChild(s),n.appendChild(m);var p=document.createElement("p");p.id="mailgo-subject";var u=document.createElement("span");u.className="mailgo-weight-500";var h=document.createTextNode("subject ");u.appendChild(h);var v=document.createElement("span");v.id="mailgo-subject-value",p.appendChild(u),p.appendChild(v),n.appendChild(p);var b=document.createElement("p");b.id="mailgo-body";var f=document.createElement("span");f.className="mailgo-weight-500";var y=document.createTextNode("body ");f.appendChild(y);var C=document.createElement("span");C.id="mailgo-body-value",b.appendChild(f),b.appendChild(C),n.appendChild(b),o.appendChild(n);var E=document.createElement("a");E.id="mailgo-gmail",E.href="#mailgo-gmail",E.classList.add("mailgo-open"),E.classList.add("mailgo-gmail");var x=document.createTextNode("open in ");E.appendChild(x);var k=document.createElement("span");k.className="mailgo-weight-500";var w=document.createTextNode("Gmail");k.appendChild(w),E.appendChild(k),o.appendChild(E);var L=document.createElement("a");L.id="mailgo-outlook",L.href="#mailgo-outlook",L.classList.add("mailgo-open"),L.classList.add("mailgo-outlook");var N=document.createTextNode("open in ");L.appendChild(N);var S=document.createElement("span");S.className="mailgo-weight-500";var T=document.createTextNode("Outlook");S.appendChild(T),L.appendChild(S),o.appendChild(L);var A=document.createElement("a");A.id="mailgo-open",A.href="#mailgo-open",A.classList.add("mailgo-open"),A.classList.add("mailgo-default");var I=document.createElement("span");I.className="mailgo-weight-500";var M=document.createTextNode("open");I.appendChild(M);var R=document.createTextNode(" default");A.appendChild(I),A.appendChild(R),o.appendChild(A);var j=document.createElement("a");j.id="mailgo-copy",j.href="#mailgo-copy",j.classList.add("mailgo-copy"),j.classList.add("mailgo-weight-500");var z=document.createTextNode("copy");j.appendChild(z),o.appendChild(j);var O=document.createElement("a");O.href="https://mailgo.js.org?ref=mailgo-modal",O.className="mailgo-by",O.target="_blank",O.rel="noopener noreferrer";var U=document.createTextNode("mailgo.js.org");O.appendChild(U),o.appendChild(O),document.body.appendChild(e),a.addEventListener("click",hideMailgo)},mailgoRender=function(e){var a="",o="",t="",n="",i="",l="",d="";if(e.href&&e.href.toLowerCase().startsWith(MAILTO)){a=decodeURIComponent(e.href.split("?")[0].split(MAILTO)[1].trim()),t=e.href,o=new URL(t);var c=new URLSearchParams(o.search);n=c.get("cc"),i=c.get("bcc"),l=c.get("subject"),d=c.get("body")}else a=e.getAttribute("data-address")+"@"+e.getAttribute("data-domain"),t=MAILTO+encodeURIComponent(a),o=new URL(t),n=e.getAttribute("data-cc-address")+"@"+e.getAttribute("data-cc-domain"),i=e.getAttribute("data-bcc-address")+"@"+e.getAttribute("data-bcc-domain"),l=e.getAttribute("data-subject"),d=e.getAttribute("data-body");if(validateEmail(a)){validateEmail(n)||(n=""),validateEmail(i)||(i="");var m=getE("mailgo-title"),r=(getE("mailgo-details"),getE("mailgo-cc")),g=getE("mailgo-cc-value"),s=getE("mailgo-bcc"),p=getE("mailgo-bcc-value"),u=getE("mailgo-subject"),h=getE("mailgo-subject-value"),v=getE("mailgo-body"),b=getE("mailgo-body-value"),f=getE("mailgo-gmail"),y=getE("mailgo-outlook"),C=getE("mailgo-open"),E=getE("mailgo-copy");m.textContent=a,n?(r.style.display="block",g.textContent=n):r.style.display="none",i?(s.style.display="block",p.textContent=i):s.style.display="none",l?(u.style.display="block",h.textContent=l):u.style.display="none",d?(v.style.display="block",b.textContent=d):v.style.display="none",f.addEventListener("click",function(){return actions.openGmail(t)}),y.addEventListener("click",function(){return actions.openOutlook(a,l,d)});var x=encodeEmail(a);C.addEventListener("click",function(){return actions.openDefault(x)}),E.addEventListener("click",function(){return actions.copy(a,E)}),showMailgo(),document.addEventListener("keydown",function(){return mailgoKeydown(a,n,i,l,d,o,t,x,E)})}},actions={openGmail:function(e){var a="https://mail.google.com/mail?extsrc=mailto&url="+encodeURIComponent(e);window.open(a,"_blank")},openOutlook:function(e,a,o){var t="https://outlook.live.com/owa/?path=/mail/action/compose&to="+encodeURIComponent(e);a&&(t=t.concat("&subject="+a)),o&&(t=t.concat("&body="+o)),window.open(t,"_blank")},openDefault:function(e){mailToEncoded(e)},copy:function(e,a){copyToClipboard(e),a.textContent="copied",setTimeout(function(){return a.textContent="copy"},999)}},isMailgo=function(e){return e.href&&e.href.toLowerCase().startsWith(MAILTO)&&!e.classList.contains("no-mailgo")||e.href&&"#mailgo"===e.getAttribute("href").toLowerCase()||e.classList&&e.classList.contains("mailgo")},mailgoCheckRender=function(a){if(document.contains(getE("mailgo"))){var e=a.path||a.composedPath&&a.composedPath()||composedPath(a.target);e&&e.forEach(function(e){if(isMailgo(e))return a.preventDefault(),void mailgoRender(e)})}},mailgoKeydown=function(e,a,o,t,n,i,l,d,c){if(mailgoIsShowing())switch(event.keyCode){case 27:hideMailgo();break;case 71:actions.openGmail(l);break;case 79:actions.openOutlook(e,t,n);break;case 32:case 13:actions.openDefault(d);break;case 67:actions.copy(e,c);break;default:return}};document.addEventListener("DOMContentLoaded",mailgoInit),document.addEventListener("click",mailgoCheckRender);var validateEmail=function(e){return/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)},copyToClipboard=function(e){var a=document.createElement("textarea");a.value=e,a.setAttribute("readonly",""),a.style.position="absolute",a.style.left="-9999px",document.body.appendChild(a);var o=0()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)},copyToClipboard=function(e){var a=document.createElement("textarea");a.value=e,a.setAttribute("readonly",""),a.style.position="absolute",a.style.left="-9999px",document.body.appendChild(a);var o=0()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)},c=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t);var o=0()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)},c=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t);var o=0 { * function to render a single mailgo */ const mailgoRender = mailgo => { - let mail = "", - url = "", - mailtoHref = "", + let url = "", + mail = "", cc = "", bcc = "", subject = "", @@ -190,8 +189,7 @@ const mailgoRender = mailgo => { .trim() ); - mailtoHref = mailgo.href; - url = new URL(mailtoHref); + url = new URL(mailgo.href); let urlParams = new URLSearchParams(url.search); // optional parameters for the email @@ -206,8 +204,8 @@ const mailgoRender = mailgo => { mailgo.getAttribute("data-address") + "@" + mailgo.getAttribute("data-domain"); - mailtoHref = MAILTO + encodeURIComponent(mail); - url = new URL(mailtoHref); + + url = new URL(MAILTO + encodeURIComponent(mail)); // cc = data-cc-address + @ + data-cc-domain cc = @@ -275,7 +273,9 @@ const mailgoRender = mailgo => { : (bodyEl.style.display = "none"); // add the actions - gmailButton.addEventListener("click", () => actions.openGmail(mailtoHref)); + gmailButton.addEventListener("click", () => + actions.openGmail(mail, cc, bcc, subject, bodyMail) + ); outlookButton.addEventListener("click", () => actions.openOutlook(mail, subject, bodyMail) @@ -291,26 +291,21 @@ const mailgoRender = mailgo => { // listener keyDown document.addEventListener("keydown", () => - mailgoKeydown( - mail, - cc, - bcc, - subject, - bodyMail, - url, - mailtoHref, - encEmail, - copyButton - ) + mailgoKeydown(mail, cc, bcc, subject, bodyMail, encEmail, copyButton) ); }; // actions const actions = { - openGmail: mailtoHref => { + openGmail: (mail, cc, bcc, subject, bodyMail) => { let gmailUrl = - "https://mail.google.com/mail?extsrc=mailto&url=" + - encodeURIComponent(mailtoHref); + "https://mail.google.com/mail/u/0/?view=cm&source=mailto&to=" + + encodeURIComponent(mail); + + 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); window.open(gmailUrl, "_blank"); }, @@ -392,8 +387,6 @@ const mailgoKeydown = ( bcc, subject, bodyMail, - url, - mailtoHref, encEmail, copyButton ) => { @@ -406,7 +399,7 @@ const mailgoKeydown = ( break; case 71: // g -> open GMail - actions.openGmail(mailtoHref); + actions.openGmail(mail, cc, bcc, subject, bodyMail); break; case 79: // o -> open Outlook