2019-05-15 17:18:12 +00:00
"use strict" ;
2019-05-09 09:40:00 +00:00
2019-05-27 09:39:43 +00:00
var V = "0.5.0" ;
2019-05-27 09:37:37 +00:00
var MAILTO = "mailto:" ; // mailgo style (gulp)
2019-05-15 17:18:12 +00:00
2019-05-27 08:38:42 +00:00
var mailgoCSS = document . createElement ( "style" ) ;
2019-05-27 09:37:37 +00:00
mailgoCSS . id = "mailgo-style" ;
2019-05-13 10:11:06 +00:00
mailgoCSS . type = "text/css" ;
2019-05-27 08:59:21 +00:00
var mailgoCSSContent = document . createTextNode ( ".mailgo-modal p,\n.mailgo-modal span,\n.mailgo-modal strong,\n.mailgo-modal a {\n margin: 0;\n padding: 0;\n font-size: 100%;\n line-height: 1;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica,\n Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n}\n\n.mailgo-modal strong {\n font-weight: 700;\n}\n\n.mailgo-modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n overflow: hidden;\n font-size: 15px;\n z-index: 10000;\n}\n\n.mailgo-title {\n display: block;\n margin-bottom: 5px;\n}\n\n.mailgo-details {\n margin-bottom: 10px;\n}\n\n.mailgo-details p {\n font-size: 12px;\n margin-top: 3px;\n margin-bottom: 3px;\n}\n\n.mailgo-modal-background {\n position: absolute;\n z-index: 10001;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(10, 10, 10, 0.75);\n opacity: 0.8;\n}\n\n.mailgo-modal-content {\n position: relative;\n z-index: 10002;\n box-sizing: content-box;\n text-align: center;\n width: 200px;\n background-color: #fff;\n border-radius: 6px;\n box-shadow: 0 2px 6px 0 rgba(10, 10, 10, 0.39);\n color: #4a4a4a;\n display: block;\n overflow: auto;\n padding: 1.25rem;\n}\n\n.mailgo-modal-content:hover {\n box-shadow: 0 6px 20px rgba(10, 10, 10, 0.23);\n}\n\n.mailgo-modal-content a {\n display: block;\n padding: 10px;\n color: #4a4a4a;\n border-radius: 4px;\n text-decoration: none;\n}\n\n.mailgo-modal-content a.mailgo-gmail {\n color: #d44638;\n}\n\n.mailgo-modal-content a.mailgo-outlook {\n color: #0072c6;\n}\n\n.mailgo-modal-content a.mailgo-copy {\n padding: 16px 10px;\n font-size: 16px;\n}\n\n.mailgo-modal-content a.mailgo-default:hover,\n.mailgo-modal-content a.mailgo-copy:hover {\n background-color: rgba(0, 0, 0, 0.08);\n color: #4a4a4a;\n}\n\n.mailgo-modal-content a.mailgo-outlook:hover {\n background-color: rgba(0, 114, 198, 0.08);\n color: #0072c6;\n}\n\n.mailgo-modal-content a.mailgo-gmail:hover {\n background-color: rgba(212, 70, 56, 0.08);\n color: #d44638;\n}\n\n.mailgo-modal-content a.mailgo-by {\n display: block;\n font-size: 8px;\n margin-top: 1rem;\n padding: 0px;\n color: #4a4a4a;\n opacity: 0.5;\n}\n\n.mailgo-modal-content a.mailgo-by:hover {\n opacity: 1;\n}\n\n.mailgo-weight-500 {\n font-weight: 500;\n}\n" ) ;
2019-05-27 08:38:42 +00:00
mailgoCSS . appendChild ( mailgoCSSContent ) ;
2019-05-13 10:11:06 +00:00
document . head . appendChild ( mailgoCSS ) ;
2019-05-11 22:02:20 +00:00
/ * *
* mailgoInit
* the function that creates the mailgo element in DOM
* /
2019-05-15 17:18:12 +00:00
var mailgoInit = function mailgoInit ( ) {
2019-05-11 17:09:41 +00:00
// modal
2019-05-15 17:18:12 +00:00
var modal = document . createElement ( "div" ) ;
2019-05-11 17:09:41 +00:00
modal . id = "mailgo" ;
modal . classList . add ( "mailgo-modal" ) ;
2019-05-15 17:18:12 +00:00
modal . style . display = "none" ; // background
2019-05-11 17:09:41 +00:00
2019-05-15 17:18:12 +00:00
var modalBackground = document . createElement ( "div" ) ;
2019-05-11 17:09:41 +00:00
modalBackground . className = "mailgo-modal-background" ;
2019-05-15 17:18:12 +00:00
modal . appendChild ( modalBackground ) ; // modal content
2019-05-11 17:09:41 +00:00
2019-05-15 17:18:12 +00:00
var modalContent = document . createElement ( "div" ) ;
2019-05-11 17:09:41 +00:00
modalContent . className = "mailgo-modal-content" ;
2019-05-15 17:18:12 +00:00
modal . appendChild ( modalContent ) ; // title (email address)
2019-05-11 17:09:41 +00:00
2019-05-15 17:18:12 +00:00
var title = document . createElement ( "strong" ) ;
2019-05-11 17:09:41 +00:00
title . id = "mailgo-title" ;
title . className = "mailgo-title" ;
2019-05-15 17:18:12 +00:00
modalContent . appendChild ( title ) ; // details
2019-05-11 17:09:41 +00:00
2019-05-15 17:18:12 +00:00
var details = document . createElement ( "div" ) ;
2019-05-11 17:09:41 +00:00
details . id = "mailgo-details" ;
details . className = "mailgo-details" ;
2019-05-15 17:18:12 +00:00
var detailCc = document . createElement ( "p" ) ;
2019-05-11 17:09:41 +00:00
detailCc . id = "mailgo-cc" ;
2019-05-15 17:18:12 +00:00
var ccSpan = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
ccSpan . className = "mailgo-weight-500" ;
2019-05-15 17:18:12 +00:00
var ccContent = document . createTextNode ( "cc " ) ;
2019-05-11 17:09:41 +00:00
ccSpan . appendChild ( ccContent ) ;
2019-05-15 17:18:12 +00:00
var ccValue = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
ccValue . id = "mailgo-cc-value" ;
detailCc . appendChild ( ccSpan ) ;
detailCc . appendChild ( ccValue ) ;
details . appendChild ( detailCc ) ;
2019-05-15 17:18:12 +00:00
var detailBcc = document . createElement ( "p" ) ;
2019-05-11 17:09:41 +00:00
detailBcc . id = "mailgo-bcc" ;
2019-05-15 17:18:12 +00:00
var bccSpan = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
bccSpan . className = "mailgo-weight-500" ;
2019-05-15 17:18:12 +00:00
var bccContent = document . createTextNode ( "bcc " ) ;
2019-05-11 17:09:41 +00:00
bccSpan . appendChild ( bccContent ) ;
2019-05-15 17:18:12 +00:00
var bccValue = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
bccValue . id = "mailgo-bcc-value" ;
detailBcc . appendChild ( bccSpan ) ;
detailBcc . appendChild ( bccValue ) ;
details . appendChild ( detailBcc ) ;
2019-05-15 17:18:12 +00:00
var detailSubject = document . createElement ( "p" ) ;
2019-05-11 17:09:41 +00:00
detailSubject . id = "mailgo-subject" ;
2019-05-15 17:18:12 +00:00
var subjectSpan = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
subjectSpan . className = "mailgo-weight-500" ;
2019-05-23 08:54:43 +00:00
var subjectContent = document . createTextNode ( "subject " ) ;
2019-05-11 17:09:41 +00:00
subjectSpan . appendChild ( subjectContent ) ;
2019-05-15 17:18:12 +00:00
var subjectValue = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
subjectValue . id = "mailgo-subject-value" ;
detailSubject . appendChild ( subjectSpan ) ;
detailSubject . appendChild ( subjectValue ) ;
details . appendChild ( detailSubject ) ;
2019-05-15 17:18:12 +00:00
var detailBody = document . createElement ( "p" ) ;
2019-05-11 17:09:41 +00:00
detailBody . id = "mailgo-body" ;
2019-05-15 17:18:12 +00:00
var bodySpan = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
bodySpan . className = "mailgo-weight-500" ;
2019-05-15 17:18:12 +00:00
var bodyContent = document . createTextNode ( "body " ) ;
2019-05-11 17:09:41 +00:00
bodySpan . appendChild ( bodyContent ) ;
2019-05-15 17:18:12 +00:00
var bodyValue = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
bodyValue . id = "mailgo-body-value" ;
detailBody . appendChild ( bodySpan ) ;
detailBody . appendChild ( bodyValue ) ;
details . appendChild ( detailBody ) ;
2019-05-15 17:18:12 +00:00
modalContent . appendChild ( details ) ; // Gmail
2019-05-11 17:09:41 +00:00
2019-05-15 17:18:12 +00:00
var gmail = document . createElement ( "a" ) ;
2019-05-11 17:09:41 +00:00
gmail . id = "mailgo-gmail" ;
2019-05-20 15:54:45 +00:00
gmail . href = "#mailgo-gmail" ;
2019-05-11 17:09:41 +00:00
gmail . classList . add ( "mailgo-open" ) ;
2019-05-15 17:28:14 +00:00
gmail . classList . add ( "mailgo-gmail" ) ;
2019-05-15 17:18:12 +00:00
var gmailContent = document . createTextNode ( "open in " ) ;
2019-05-11 17:09:41 +00:00
gmail . appendChild ( gmailContent ) ;
2019-05-15 17:18:12 +00:00
var gmailSpan = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
gmailSpan . className = "mailgo-weight-500" ;
2019-05-15 17:18:12 +00:00
var gmailSpanContent = document . createTextNode ( "Gmail" ) ;
2019-05-11 17:09:41 +00:00
gmailSpan . appendChild ( gmailSpanContent ) ;
gmail . appendChild ( gmailSpan ) ;
2019-05-15 17:18:12 +00:00
modalContent . appendChild ( gmail ) ; // Outlook
2019-05-11 17:09:41 +00:00
2019-05-15 17:18:12 +00:00
var outlook = document . createElement ( "a" ) ;
2019-05-11 17:09:41 +00:00
outlook . id = "mailgo-outlook" ;
2019-05-20 15:54:45 +00:00
outlook . href = "#mailgo-outlook" ;
2019-05-11 17:09:41 +00:00
outlook . classList . add ( "mailgo-open" ) ;
2019-05-15 17:28:14 +00:00
outlook . classList . add ( "mailgo-outlook" ) ;
2019-05-15 17:18:12 +00:00
var outlookContent = document . createTextNode ( "open in " ) ;
2019-05-11 17:09:41 +00:00
outlook . appendChild ( outlookContent ) ;
2019-05-15 17:18:12 +00:00
var outlookSpan = document . createElement ( "span" ) ;
2019-05-11 17:09:41 +00:00
outlookSpan . className = "mailgo-weight-500" ;
2019-05-15 17:18:12 +00:00
var outlookSpanContent = document . createTextNode ( "Outlook" ) ;
2019-05-11 17:09:41 +00:00
outlookSpan . appendChild ( outlookSpanContent ) ;
outlook . appendChild ( outlookSpan ) ;
2019-05-15 17:18:12 +00:00
modalContent . appendChild ( outlook ) ; // open default
2019-05-11 17:09:41 +00:00
2019-05-15 17:18:12 +00:00
var open = document . createElement ( "a" ) ;
2019-05-11 17:09:41 +00:00
open . id = "mailgo-open" ;
open . href = "#mailgo-open" ;
open . classList . add ( "mailgo-open" ) ;
2019-05-15 17:28:14 +00:00
open . classList . add ( "mailgo-default" ) ;
2019-05-17 08:31:42 +00:00
var openSpan = document . createElement ( "span" ) ;
openSpan . className = "mailgo-weight-500" ;
var openSpanContent = document . createTextNode ( "open" ) ;
openSpan . appendChild ( openSpanContent ) ;
var openContent = document . createTextNode ( " default" ) ;
open . appendChild ( openSpan ) ;
2019-05-11 17:09:41 +00:00
open . appendChild ( openContent ) ;
2019-05-15 17:18:12 +00:00
modalContent . appendChild ( open ) ; // copy
2019-05-12 10:21:38 +00:00
2019-05-15 17:18:12 +00:00
var copy = document . createElement ( "a" ) ;
2019-05-11 17:09:41 +00:00
copy . id = "mailgo-copy" ;
copy . href = "#mailgo-copy" ;
copy . classList . add ( "mailgo-copy" ) ;
copy . classList . add ( "mailgo-weight-500" ) ;
2019-05-15 17:18:12 +00:00
var copyContent = document . createTextNode ( "copy" ) ;
2019-05-11 17:09:41 +00:00
copy . appendChild ( copyContent ) ;
2019-05-15 17:18:12 +00:00
modalContent . appendChild ( copy ) ; // by
2019-05-12 10:21:38 +00:00
2019-05-15 17:18:12 +00:00
var by = document . createElement ( "a" ) ;
2019-05-22 10:51:33 +00:00
by . href = "https://mailgo.js.org?ref=mailgo-modal" ;
2019-05-11 17:09:41 +00:00
by . className = "mailgo-by" ;
by . target = "_blank" ;
2019-05-17 08:31:42 +00:00
by . rel = "noopener noreferrer" ;
2019-05-15 17:18:12 +00:00
var textBy = document . createTextNode ( "mailgo.js.org" ) ;
2019-05-11 17:09:41 +00:00
by . appendChild ( textBy ) ;
2019-05-15 17:18:12 +00:00
modalContent . appendChild ( by ) ; // add the modal at the end of the body
2019-05-12 10:21:38 +00:00
2019-05-15 17:18:12 +00:00
document . body . appendChild ( modal ) ; // every click outside the modal will hide the modal
2019-05-11 17:09:41 +00:00
2019-05-23 09:15:17 +00:00
modalBackground . addEventListener ( "click" , hideMailgo ) ;
2019-05-11 17:09:41 +00:00
} ;
2019-05-11 22:02:20 +00:00
/ * *
* mailgoRender
* function to render a single mailgo
* /
2019-05-15 07:31:45 +00:00
2019-05-15 17:18:12 +00:00
var mailgoRender = function mailgoRender ( mailgo ) {
var mail = "" ,
url = "" ,
mailtoHref = "" ,
cc = "" ,
bcc = "" ,
subject = "" ,
bodyMail = "" ; // if the element href=^"mailto:"
if ( mailgo . href && mailgo . href . toLowerCase ( ) . startsWith ( MAILTO ) ) {
mail = decodeURIComponent ( mailgo . href . split ( "?" ) [ 0 ] . split ( MAILTO ) [ 1 ] . trim ( ) ) ;
2019-05-11 17:09:41 +00:00
mailtoHref = mailgo . href ;
url = new URL ( mailtoHref ) ;
2019-05-15 17:18:12 +00:00
var urlParams = new URLSearchParams ( url . search ) ; // optional parameters for the email
2019-05-11 17:09:41 +00:00
cc = urlParams . get ( "cc" ) ;
bcc = urlParams . get ( "bcc" ) ;
subject = urlParams . get ( "subject" ) ;
bodyMail = urlParams . get ( "body" ) ;
} else {
2019-05-11 22:27:20 +00:00
// if the element href="#mailgo" or class="mailgo"
2019-05-13 10:11:06 +00:00
// mail = data-address + @ + data-domain
2019-05-15 17:18:12 +00:00
mail = mailgo . getAttribute ( "data-address" ) + "@" + mailgo . getAttribute ( "data-domain" ) ;
2019-05-11 17:09:41 +00:00
mailtoHref = MAILTO + encodeURIComponent ( mail ) ;
2019-05-15 17:18:12 +00:00
url = new URL ( mailtoHref ) ; // cc = data-cc-address + @ + data-cc-domain
2019-05-13 10:11:06 +00:00
2019-05-15 17:18:12 +00:00
cc = mailgo . getAttribute ( "data-cc-address" ) + "@" + mailgo . getAttribute ( "data-cc-domain" ) ; // bcc = data-bcc-address + @ + data-bcc-domain
2019-05-13 10:11:06 +00:00
2019-05-15 17:18:12 +00:00
bcc = mailgo . getAttribute ( "data-bcc-address" ) + "@" + mailgo . getAttribute ( "data-bcc-domain" ) ; // subject = data-subject
2019-05-13 10:43:46 +00:00
2019-05-15 17:18:12 +00:00
subject = mailgo . getAttribute ( "data-subject" ) ; // body = data-body
2019-05-13 10:11:06 +00:00
bodyMail = mailgo . getAttribute ( "data-body" ) ;
2019-05-15 17:18:12 +00:00
} // validate the email address
2019-05-10 22:28:32 +00:00
2019-05-15 17:18:12 +00:00
if ( ! validateEmail ( mail ) ) return ; // if cc, bcc is not valid cc, bcc = ""
2019-05-11 17:09:41 +00:00
2019-05-13 10:11:06 +00:00
if ( ! validateEmail ( cc ) ) cc = "" ;
2019-05-15 17:18:12 +00:00
if ( ! validateEmail ( bcc ) ) bcc = "" ; // information
var titleEl = getE ( "mailgo-title" ) ;
var detailsEl = getE ( "mailgo-details" ) ;
var ccEl = getE ( "mailgo-cc" ) ;
var ccValueEl = getE ( "mailgo-cc-value" ) ;
var bccEl = getE ( "mailgo-bcc" ) ;
var bccValueEl = getE ( "mailgo-bcc-value" ) ;
var subjectEl = getE ( "mailgo-subject" ) ;
var subjectValueEl = getE ( "mailgo-subject-value" ) ;
var bodyEl = getE ( "mailgo-body" ) ;
var bodyValueEl = getE ( "mailgo-body-value" ) ; // actions
var gmailButton = getE ( "mailgo-gmail" ) ;
var outlookButton = getE ( "mailgo-outlook" ) ;
var openButton = getE ( "mailgo-open" ) ;
var copyButton = getE ( "mailgo-copy" ) ; // the title of the modal (email address)
titleEl . textContent = mail ; // add the details if provided
cc ? ( ccEl . style . display = "block" , ccValueEl . textContent = cc ) : ccEl . style . display = "none" ;
bcc ? ( bccEl . style . display = "block" , bccValueEl . textContent = bcc ) : bccEl . style . display = "none" ;
subject ? ( subjectEl . style . display = "block" , subjectValueEl . textContent = subject ) : subjectEl . style . display = "none" ;
bodyMail ? ( bodyEl . style . display = "block" , bodyValueEl . textContent = bodyMail ) : bodyEl . style . display = "none" ; // add the actions
2019-05-20 15:54:45 +00:00
gmailButton . addEventListener ( "click" , function ( ) {
2019-05-23 09:15:17 +00:00
return actions . openGmail ( mailtoHref ) ;
} ) ;
2019-05-20 15:54:45 +00:00
outlookButton . addEventListener ( "click" , function ( ) {
2019-05-24 19:04:42 +00:00
return actions . openOutlook ( mail , subject , bodyMail ) ;
2019-05-23 09:15:17 +00:00
} ) ;
2019-05-15 17:18:12 +00:00
var encEmail = encodeEmail ( mail ) ;
openButton . addEventListener ( "click" , function ( ) {
2019-05-23 09:15:17 +00:00
return actions . openDefault ( encEmail ) ;
} ) ;
copyButton . addEventListener ( "click" , function ( ) {
return actions . copy ( mail , copyButton ) ;
} ) ; // show the mailgo
2019-05-15 17:18:12 +00:00
2019-05-20 16:05:42 +00:00
showMailgo ( ) ; // listener keyDown
2019-05-26 12:21:53 +00:00
document . addEventListener ( "keydown" , function ( ) {
2019-05-24 19:18:40 +00:00
return mailgoKeydown ( mail , cc , bcc , subject , bodyMail , url , mailtoHref , encEmail , copyButton ) ;
2019-05-26 12:21:53 +00:00
} ) ;
2019-05-20 15:54:45 +00:00
} ; // actions
2019-05-21 07:13:13 +00:00
var actions = {
openGmail : function openGmail ( mailtoHref ) {
2019-05-24 18:59:48 +00:00
var gmailUrl = "https://mail.google.com/mail?extsrc=mailto&url=" + encodeURIComponent ( mailtoHref ) ;
window . open ( gmailUrl , "_blank" ) ;
2019-05-21 07:13:13 +00:00
} ,
2019-05-24 19:04:42 +00:00
openOutlook : function openOutlook ( mail , subject , bodyMail ) {
2019-05-24 18:59:48 +00:00
var outlookUrl = "https://outlook.live.com/owa/?path=/mail/action/compose&to=" + encodeURIComponent ( mail ) ;
2019-05-24 19:18:40 +00:00
if ( subject ) outlookUrl = outlookUrl . concat ( "&subject=" + subject ) ;
if ( bodyMail ) outlookUrl = outlookUrl . concat ( "&body=" + bodyMail ) ;
2019-05-24 18:59:48 +00:00
window . open ( outlookUrl , "_blank" ) ;
2019-05-21 07:13:13 +00:00
} ,
openDefault : function openDefault ( encEmail ) {
2019-05-24 18:59:48 +00:00
mailToEncoded ( encEmail ) ;
2019-05-21 07:13:13 +00:00
} ,
copy : function copy ( mail , copyButton ) {
copyToClipboard ( mail ) ;
copyButton . textContent = "copied" ;
2019-05-23 09:15:17 +00:00
setTimeout ( function ( ) {
return copyButton . textContent = "copy" ;
2019-05-21 07:13:13 +00:00
} , 999 ) ;
}
2019-05-24 18:59:48 +00:00
} ; // function that returns if an element is a mailgo
var isMailgo = function isMailgo ( element ) {
return ( // first case: it is an <a> element with "mailto:..." in href and no no-mailgo in classList
element . href && element . href . toLowerCase ( ) . startsWith ( MAILTO ) && ! element . classList . contains ( "no-mailgo" ) || // second case: the href=#mailgo
element . href && element . getAttribute ( "href" ) . toLowerCase ( ) === "#mailgo" || // third case: the classList contains mailgo
2019-05-24 19:18:40 +00:00
element . classList && element . classList . contains ( "mailgo" )
2019-05-24 18:59:48 +00:00
) ;
2019-05-07 19:33:39 +00:00
} ;
2019-05-11 22:27:20 +00:00
/ * *
* mailgoCheckRender
* function to check if an element is mailgo - enabled or not referencing to the old
* document . querySelectorAll (
* 'a[href^="mailto:" i]:not(.no-mailgo), a[href="#mailgo"], a.mailgo'
2019-05-22 07:32:21 +00:00
* ) ;
2019-05-11 22:27:20 +00:00
* /
2019-05-15 17:18:12 +00:00
2019-05-24 18:59:48 +00:00
2019-05-15 17:18:12 +00:00
var mailgoCheckRender = function mailgoCheckRender ( event ) {
2019-05-24 08:32:02 +00:00
// check if the id=mailgo exists in the body
2019-05-26 11:43:17 +00:00
if ( ! document . contains ( getE ( "mailgo" ) ) ) return ; // the path of the event
var path = event . path || event . composedPath && event . composedPath ( ) || composedPath ( event . target ) ;
if ( path ) {
path . forEach ( function ( element ) {
// go in the event.path to find if the user has clicked on a mailgo element
if ( isMailgo ( element ) ) {
// stop the normal execution of the element click
event . preventDefault ( ) ; // render mailgo
mailgoRender ( element ) ;
return ;
}
} ) ;
}
2019-05-24 08:32:02 +00:00
return ;
2019-05-11 22:02:20 +00:00
} ;
2019-05-12 10:28:21 +00:00
/ * *
* mailgoKeydown
* function to manage the keydown event when the modal is showing
* /
2019-05-15 17:18:12 +00:00
2019-05-24 19:18:40 +00:00
var mailgoKeydown = function mailgoKeydown ( mail , cc , bcc , subject , bodyMail , url , mailtoHref , encEmail , copyButton ) {
2019-05-27 08:59:21 +00:00
// if mailgo is not showing do nothing
2019-05-21 07:13:13 +00:00
if ( ! mailgoIsShowing ( ) ) return ;
2019-05-20 16:05:42 +00:00
2019-05-12 11:13:51 +00:00
switch ( event . keyCode ) {
case 27 :
// Escape
hideMailgo ( ) ;
break ;
2019-05-15 17:18:12 +00:00
2019-05-20 15:54:45 +00:00
case 71 :
// g -> open GMail
2019-05-21 07:13:13 +00:00
actions . openGmail ( mailtoHref ) ;
2019-05-20 15:54:45 +00:00
break ;
case 79 :
// o -> open Outlook
2019-05-24 19:04:42 +00:00
actions . openOutlook ( mail , subject , bodyMail ) ;
2019-05-20 15:54:45 +00:00
break ;
case 32 :
case 13 :
// spacebar or enter -> open default
2019-05-21 07:13:13 +00:00
actions . openDefault ( encEmail ) ;
2019-05-20 15:54:45 +00:00
break ;
case 67 :
// c -> copy
2019-05-21 07:13:13 +00:00
actions . copy ( mail , copyButton ) ;
2019-05-20 15:54:45 +00:00
break ;
2019-05-12 11:13:51 +00:00
default :
return ;
2019-05-12 10:28:21 +00:00
}
2019-05-15 17:18:12 +00:00
2019-05-12 11:13:51 +00:00
return ;
2019-05-15 17:18:12 +00:00
} ; // DOMContentLoaded -> mailgoInit (creates the modal)
2019-05-12 10:28:21 +00:00
2019-05-23 09:15:17 +00:00
document . addEventListener ( "DOMContentLoaded" , mailgoInit ) ; // event listener on body, if the element is mailgo-compatible the mailgo modal will be rendered
2019-05-03 11:03:42 +00:00
2019-05-23 09:15:17 +00:00
document . addEventListener ( "click" , mailgoCheckRender ) ; // validate the email with regex
2019-05-11 17:09:41 +00:00
2019-05-15 17:18:12 +00:00
var validateEmail = function validateEmail ( email ) {
var re = /^(([^<>()[\]\\.,;:\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,}))$/ ;
2019-05-03 11:03:42 +00:00
return re . test ( email ) ;
2019-05-15 17:18:12 +00:00
} ; // copy of a string
2019-05-03 23:14:10 +00:00
2019-05-15 17:18:12 +00:00
var copyToClipboard = function copyToClipboard ( str ) {
var el = document . createElement ( "textarea" ) ;
2019-05-03 23:14:10 +00:00
el . value = str ;
el . setAttribute ( "readonly" , "" ) ;
el . style . position = "absolute" ;
el . style . left = "-9999px" ;
document . body . appendChild ( el ) ;
2019-05-15 17:18:12 +00:00
var selected = document . getSelection ( ) . rangeCount > 0 ? document . getSelection ( ) . getRangeAt ( 0 ) : false ;
2019-05-03 23:14:10 +00:00
el . select ( ) ;
document . execCommand ( "copy" ) ;
document . body . removeChild ( el ) ;
2019-05-15 17:18:12 +00:00
2019-05-03 23:14:10 +00:00
if ( selected ) {
document . getSelection ( ) . removeAllRanges ( ) ;
document . getSelection ( ) . addRange ( selected ) ;
}
2019-05-15 17:18:12 +00:00
} ; // show the modal
var showMailgo = function showMailgo ( ) {
2019-05-21 07:20:51 +00:00
return getE ( "mailgo" ) . style . display = "flex" ;
2019-05-15 17:18:12 +00:00
} ; // hide the modal
var hideMailgo = function hideMailgo ( ) {
2019-05-21 07:20:51 +00:00
return getE ( "mailgo" ) . style . display = "none" ;
2019-05-20 16:05:42 +00:00
} ; // is the modal hidden?
2019-05-11 08:03:51 +00:00
2019-05-21 07:13:13 +00:00
var mailgoIsShowing = function mailgoIsShowing ( ) {
return getE ( "mailgo" ) . style . display === "flex" ;
2019-05-15 17:18:12 +00:00
} ; // decrypt email
var mailToEncoded = function mailToEncoded ( encoded ) {
return window . location . href = MAILTO + atob ( encoded ) ;
} ; // encode email
var encodeEmail = function encodeEmail ( email ) {
return btoa ( email ) ;
} ; // getE shorthand
2019-05-09 07:23:12 +00:00
2019-05-11 22:05:52 +00:00
2019-05-15 17:18:12 +00:00
var getE = function getE ( id ) {
return document . getElementById ( id ) ;
2019-05-26 11:45:05 +00:00
} ; // custom composedPath if path or event.composedPath() are not defined
2019-05-26 11:43:17 +00:00
var composedPath = function composedPath ( el ) {
var path = [ ] ;
while ( el ) {
path . push ( el ) ;
if ( el . tagName === "HTML" ) {
path . push ( document ) ;
path . push ( window ) ;
return path ;
}
el = el . parentElement ;
}
2019-05-15 17:18:12 +00:00
} ;