mailymaily/dist/mailgo.min.js
2020-06-17 23:01:27 +02:00

158 lines
39 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./mailgo.webpack.ts");
/******/ })
/************************************************************************/
/******/ ({
/***/ "../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./mailgo.scss":
/*!****************************************************************************************************!*\
!*** ../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./mailgo.scss ***!
\****************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \".m-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 .m-modal p,\\n .m-modal span,\\n .m-modal strong,\\n .m-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, Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\";\\n text-rendering: optimizeLegibility; }\\n .m-modal strong {\\n font-weight: 700; }\\n .m-modal .m-modal-back {\\n position: absolute;\\n z-index: 10001;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background-color: rgba(32, 35, 42, 0.75);\\n opacity: 0.8; }\\n .m-modal .m-modal-content {\\n position: relative;\\n z-index: 10002;\\n box-sizing: content-box;\\n text-align: center;\\n min-width: 200px;\\n max-width: 240px;\\n background-color: #fff;\\n opacity: 0.97;\\n border-radius: 8px;\\n box-shadow: 0px 3px 20px rgba(32, 35, 42, 0.5);\\n color: #4a4a4a;\\n display: flex;\\n flex-direction: column;\\n overflow: auto;\\n padding: 20px;\\n transition: 0.5s box-shadow; }\\n .m-modal .m-modal-content:hover {\\n opacity: 1;\\n box-shadow: 0px 7px 20px rgba(32, 35, 42, 0.85); }\\n .m-modal .m-modal-content .m-title {\\n margin-bottom: 8px;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis; }\\n .m-modal .m-modal-content .m-details {\\n margin-bottom: 10px; }\\n .m-modal .m-modal-content .m-details p {\\n font-size: 12px;\\n margin-top: 3px;\\n margin-bottom: 3px; }\\n .m-modal .m-modal-content a {\\n padding: 10px;\\n color: #4a4a4a;\\n border-radius: 8px;\\n text-decoration: none; }\\n .m-modal .m-modal-content a.m-gmail {\\n color: #d44638; }\\n .m-modal .m-modal-content a.m-gmail:hover {\\n background-color: rgba(212, 70, 56, 0.08);\\n color: #d44638; }\\n .m-modal .m-modal-content a.m-outlook {\\n color: #0072c6; }\\n .m-modal .m-modal-content a.m-outlook:hover {\\n background-color: rgba(0, 114, 198, 0.08);\\n color: #0072c6; }\\n .m-modal .m-modal-content a.m-tg {\\n color: #0088cc; }\\n .m-modal .m-modal-content a.m-tg:hover {\\n background-color: rgba(0, 114, 198, 0.08);\\n color: #0088cc; }\\n .m-modal .m-modal-content a.m-wa {\\n color: #00bfa5; }\\n .m-modal .m-modal-content a.m-wa:hover {\\n background-color: rgba(0, 191, 165, 0.08);\\n color: #00bfa5; }\\n .m-modal .m-modal-content a.m-skype {\\n color: #00aff0; }\\n .m-modal .m-modal-content a.m-skype:hover {\\n background-color: rgba(0, 175, 240, 0.08);\\n color: #00aff0; }\\n .m-modal .m-modal-content a.m-copy {\\n padding: 16px 10px;\\n font-size: 16px; }\\n .m-modal .m-modal-content a.m-default:hover, .m-modal .m-modal-content a.m-copy:hover {\\n background-color: rgba(0, 0, 0, 0.08);\\n color: #4a4a4a; }\\n .m-modal .m-modal-content a.m-by {\\n font-size: 8px;\\n margin-top: 0.8rem;\\n padding: 5px;\\n color: #4a4a4a;\\n opacity: 0.5; }\\n .m-modal .m-modal-content a.m-by:hover {\\n opacity: 1; }\\n .m-modal .m-modal-content .w-500 {\\n font-weight: 500; }\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./mailgo.scss?../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js");
/***/ }),
/***/ "../node_modules/css-loader/dist/runtime/api.js":
/*!******************************************************!*\
!*** ../node_modules/css-loader/dist/runtime/api.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}\n\n//# sourceURL=webpack:///../node_modules/css-loader/dist/runtime/api.js?");
/***/ }),
/***/ "./i18n/i18n.json":
/*!************************!*\
!*** ./i18n/i18n.json ***!
\************************/
/*! exports provided: languages, translations, default */
/***/ (function(module) {
eval("module.exports = JSON.parse(\"{\\\"languages\\\":[\\\"en\\\",\\\"it\\\"],\\\"translations\\\":{\\\"en\\\":{\\\"open_in\\\":\\\"open in \\\",\\\"cc\\\":\\\"cc \\\",\\\"bcc\\\":\\\"bcc \\\",\\\"subject\\\":\\\"subject \\\",\\\"body\\\":\\\"body \\\"},\\\"it\\\":{\\\"open_in\\\":\\\"apri con \\\"}}}\");\n\n//# sourceURL=webpack:///./i18n/i18n.json?");
/***/ }),
/***/ "./mailgo.scss":
/*!*********************!*\
!*** ./mailgo.scss ***!
\*********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("\n var result = __webpack_require__(/*! !../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./mailgo.scss */ \"../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./mailgo.scss\");\n\n if (typeof result === \"string\") {\n module.exports = result;\n } else {\n module.exports = result.toString();\n }\n \n\n//# sourceURL=webpack:///./mailgo.scss?");
/***/ }),
/***/ "./mailgo.ts":
/*!*******************!*\
!*** ./mailgo.ts ***!
\*******************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// i18n for mailgo\nconst i18n = __webpack_require__(/*! ./i18n/i18n.json */ \"./i18n/i18n.json\");\n// mailgo css\nconst mailgoCSS = __webpack_require__(/*! ./mailgo.scss */ \"./mailgo.scss\").toString();\n// default lang\nconst DEFAULT_LANG = \"en\";\n// links\nconst MAILTO = \"mailto:\";\nconst TEL = \"tel:\";\nconst CALLTO = \"callto:\";\n// mailgo types\nconst MAIL_TYPE = \"mail\";\nconst TEL_TYPE = \"tel\";\n// default href for links\nconst DEFAULT_BTN_HREF = \"javascript:void(0);\";\n// html tags\nconst span = \"span\";\n// mailgo variables\nlet url, mail = \"\", encEmail = \"\", cc = \"\", bcc = \"\", subject = \"\", bodyMail = \"\";\n// mailgo tel variables\nlet tel = \"\", msg = \"\", telegramUsername = \"\", skypeUsername = \"\";\n// the DOM elements\nlet title, titleTel, detailCc, detailBcc, detailSubject, detailBody, ccValue, bccValue, subjectValue, bodyValue;\n// mailgo buttons (actions)\nlet gmail, outlook, open, telegram, wa, skype, call, copyMail, copyTel;\n/**\n * mailgoInit\n * the function that creates the mailgo elements in DOM\n */\nconst mailgoInit = (mailgoConfig) => {\n // default language\n let lang = DEFAULT_LANG;\n // translations\n let translations = i18n.translations;\n // if a default language is defined use it\n if (mailgoConfig.defaultLang &&\n i18n.languages.includes(mailgoConfig.defaultLang)) {\n lang = mailgoConfig.defaultLang;\n }\n // if is defined <html lang=\"\"> use it!\n if (!mailgoConfig.forceLang && document.documentElement.lang) {\n lang = document.documentElement.lang;\n }\n // strings\n let defaultStrings = translations[DEFAULT_LANG];\n let strings = translations[lang];\n // mailgo mail\n {\n // modal\n let modal = createElement();\n modal.style.display = \"none\";\n modal.id = \"mailgo\";\n modal.classList.add(\"m-modal\");\n // background\n let modalBackground = createElement();\n modalBackground.className = \"m-modal-back\";\n modal.appendChild(modalBackground);\n // modal content\n let modalContent = createElement();\n modalContent.className = \"m-modal-content\";\n modal.appendChild(modalContent);\n // title (email address)\n title = createElement(\"strong\");\n title.id = \"m-title\";\n title.className = \"m-title\";\n modalContent.appendChild(title);\n // details\n let details = createElement();\n details.id = \"m-details\";\n details.className = \"m-details\";\n detailCc = createElement(\"p\");\n detailCc.id = \"m-cc\";\n let ccSpan = createElement(span);\n ccSpan.className = \"w-500\";\n ccSpan.appendChild(createTextNode(strings.cc));\n ccValue = createElement(span);\n ccValue.id = \"m-cc-value\";\n detailCc.appendChild(ccSpan);\n detailCc.appendChild(ccValue);\n details.appendChild(detailCc);\n detailBcc = createElement(\"p\");\n detailBcc.id = \"m-bcc\";\n let bccSpan = createElement(span);\n bccSpan.className = \"w-500\";\n bccSpan.appendChild(createTextNode(strings.bcc));\n bccValue = createElement(span);\n bccValue.id = \"m-bcc-value\";\n detailBcc.appendChild(bccSpan);\n detailBcc.appendChild(bccValue);\n details.appendChild(detailBcc);\n detailSubject = createElement(\"p\");\n detailSubject.id = \"m-subject\";\n let subjectSpan = createElement(span);\n subjectSpan.className = \"w-500\";\n subjectSpan.appendChild(createTextNode(strings.subject));\n subjectValue = createElement(span);\n subjectValue.id = \"m-subject-value\";\n detailSubject.appendChild(subjectSpan);\n detailSubject.appendChild(subjectValue);\n details.appendChild(detailSubject);\n detailBody = createElement(\"p\");\n detailBody.id = \"m-body\";\n let bodySpan = createElement(span);\n bodySpan.className = \"w-500\";\n bodySpan.appendChild(createTextNode(strings.body));\n bodyValue = createElement(span);\n bodyValue.id = \"m-body-value\";\n detailBody.appendChild(bodySpan);\n detailBody.appendChild(bodyValue);\n details.appendChild(detailBody);\n modalContent.appendChild(details);\n // Gmail\n gmail = createElement(\"a\");\n gmail.id = \"m-gmail\";\n gmail.href = DEFAULT_BTN_HREF;\n gmail.classList.add(\"m-open\");\n gmail.classList.add(\"m-gmail\");\n gmail.appendChild(createTextNode(strings.open_in));\n let gmailSpan = createElement(span);\n gmailSpan.className = \"w-500\";\n gmailSpan.appendChild(createTextNode(\"Gmail\"));\n gmail.appendChild(gmailSpan);\n modalContent.appendChild(gmail);\n // Outlook\n outlook = createElement(\"a\");\n outlook.id = \"m-outlook\";\n outlook.href = DEFAULT_BTN_HREF;\n outlook.classList.add(\"m-open\");\n outlook.classList.add(\"m-outlook\");\n outlook.appendChild(createTextNode(strings.open_in));\n let outlookSpan = createElement(span);\n outlookSpan.className = \"w-500\";\n outlookSpan.appendChild(createTextNode(\"Outlook\"));\n outlook.appendChild(outlookSpan);\n modalContent.appendChild(outlook);\n // open default\n open = createElement(\"a\");\n open.id = \"m-open\";\n open.href = DEFAULT_BTN_HREF;\n open.classList.add(\"m-open\");\n open.classList.add(\"m-default\");\n let openSpan = createElement(span);\n openSpan.className = \"w-500\";\n openSpan.appendChild(createTextNode(\"open\"));\n open.appendChild(openSpan);\n open.appendChild(createTextNode(\" default\"));\n modalContent.appendChild(open);\n // copy\n copyMail = createElement(\"a\");\n copyMail.id = \"m-copy\";\n copyMail.href = DEFAULT_BTN_HREF;\n copyMail.classList.add(\"m-copy\");\n copyMail.classList.add(\"w-500\");\n copyMail.appendChild(createTextNode(\"copy\"));\n modalContent.appendChild(copyMail);\n modalContent.appendChild(byElement());\n // add the modal at the end of the body\n document.body.appendChild(modal);\n // every click outside the modal will hide the modal\n modalBackground.addEventListener(\"click\", hideMailgo);\n }\n // mailgo tel\n {\n // modal\n let modal = createElement();\n modal.style.display = \"none\";\n modal.id = \"mailgo-tel\";\n modal.classList.add(\"m-modal\");\n // background\n let modalBackground = createElement();\n modalBackground.className = \"m-modal-back\";\n modal.appendChild(modalBackground);\n // modal content\n let modalContent = createElement();\n modalContent.className = \"m-modal-content\";\n modal.appendChild(modalContent);\n // title (telephone number)\n titleTel = createElement(\"strong\");\n titleTel.id = \"m-tel-title\";\n titleTel.className = \"m-title\";\n modalContent.appendChild(titleTel);\n // Telegram\n telegram = createElement(\"a\");\n telegram.id = \"m-tg\";\n telegram.href = DEFAULT_BTN_HREF;\n telegram.classList.add(\"m-open\");\n telegram.classList.add(\"m-tg\");\n // by default not display\n telegram.style.display = \"none\";\n telegram.appendChild(createTextNode(strings.open_in));\n let telegramSpan = createElement(span);\n telegramSpan.className = \"w-500\";\n telegramSpan.appendChild(createTextNode(\"Telegram\"));\n telegram.appendChild(telegramSpan);\n modalContent.appendChild(telegram);\n // WhatsApp\n wa = createElement(\"a\");\n wa.id = \"m-wa\";\n wa.href = DEFAULT_BTN_HREF;\n wa.classList.add(\"m-open\");\n wa.classList.add(\"m-wa\");\n wa.appendChild(createTextNode(strings.open_in));\n let waSpan = createElement(span);\n waSpan.className = \"w-500\";\n waSpan.appendChild(createTextNode(\"WhatsApp\"));\n wa.appendChild(waSpan);\n modalContent.appendChild(wa);\n // Skype\n skype = createElement(\"a\");\n skype.id = \"m-skype\";\n skype.href = DEFAULT_BTN_HREF;\n skype.classList.add(\"m-open\");\n skype.classList.add(\"m-skype\");\n skype.appendChild(createTextNode(strings.open_in));\n let skypeSpan = createElement(span);\n skypeSpan.className = \"w-500\";\n skypeSpan.appendChild(createTextNode(\"Skype\"));\n skype.appendChild(skypeSpan);\n modalContent.appendChild(skype);\n // call default\n call = createElement(\"a\");\n call.id = \"m-call\";\n call.href = DEFAULT_BTN_HREF;\n call.classList.add(\"m-open\");\n call.classList.add(\"m-default\");\n let callSpan = createElement(span);\n callSpan.className = \"w-500\";\n callSpan.appendChild(createTextNode(\"call\"));\n call.appendChild(callSpan);\n call.appendChild(createTextNode(\" as default\"));\n modalContent.appendChild(call);\n // copy\n copyTel = createElement(\"a\");\n copyTel.id = \"m-tel-copy\";\n copyTel.href = DEFAULT_BTN_HREF;\n copyTel.classList.add(\"m-copy\");\n copyTel.classList.add(\"w-500\");\n copyTel.appendChild(createTextNode(\"copy\"));\n modalContent.appendChild(copyTel);\n modalContent.appendChild(byElement());\n // add the modal at the end of the body\n document.body.appendChild(modal);\n // every click outside the modal will hide the modal\n modalBackground.addEventListener(\"click\", hideMailgo);\n }\n // event listener on body, if the element is mailgo-compatible the mailgo modal will be rendered\n document.addEventListener(\"click\", mailgoCheckRender);\n};\n/**\n * mailgoRender\n * function to render a mailgo (mail or tel)\n */\nconst mailgoRender = (type = MAIL_TYPE, mailgo) => {\n // mailgo mail\n if (type === MAIL_TYPE) {\n // if the element href=^\"mailto:\"\n if (mailgo.href && mailgo.href.toLowerCase().startsWith(MAILTO)) {\n mail = decodeURIComponent(mailgo.href.split(\"?\")[0].split(MAILTO)[1].trim());\n url = new URL(mailgo.href);\n let urlParams = url.searchParams;\n // optional parameters for the email\n cc = urlParams.get(\"cc\");\n bcc = urlParams.get(\"bcc\");\n subject = urlParams.get(\"subject\");\n bodyMail = urlParams.get(\"body\");\n }\n else {\n // if the element href=\"#mailgo\" or class=\"mailgo\"\n // mail = data-address + @ + data-domain\n mail =\n mailgo.getAttribute(\"data-address\") +\n \"@\" +\n mailgo.getAttribute(\"data-domain\");\n url = new URL(MAILTO + encodeURIComponent(mail));\n // cc = data-cc-address + @ + data-cc-domain\n cc =\n mailgo.getAttribute(\"data-cc-address\") +\n \"@\" +\n mailgo.getAttribute(\"data-cc-domain\");\n // bcc = data-bcc-address + @ + data-bcc-domain\n bcc =\n mailgo.getAttribute(\"data-bcc-address\") +\n \"@\" +\n mailgo.getAttribute(\"data-bcc-domain\");\n // subject = data-subject\n subject = mailgo.getAttribute(\"data-subject\");\n // body = data-body\n bodyMail = mailgo.getAttribute(\"data-body\");\n }\n // validate the email address\n if (!validateEmails(mail.split(\",\")))\n return;\n // if cc, bcc is not valid cc, bcc = \"\"\n if (cc && !validateEmails(cc.split(\",\")))\n cc = \"\";\n if (bcc && !validateEmails(bcc.split(\",\")))\n bcc = \"\";\n // the title of the modal (email address)\n title.innerHTML = mail.split(\",\").join(\"<br/>\");\n // add the details if provided\n cc\n ? ((detailCc.style.display = \"block\"),\n (ccValue.innerHTML = cc.split(\",\").join(\"<br/>\")))\n : (detailCc.style.display = \"none\");\n bcc\n ? ((detailBcc.style.display = \"block\"),\n (bccValue.innerHTML = bcc.split(\",\").join(\"<br/>\")))\n : (detailBcc.style.display = \"none\");\n subject\n ? ((detailSubject.style.display = \"block\"),\n (subjectValue.textContent = subject))\n : (detailSubject.style.display = \"none\");\n bodyMail\n ? ((detailBody.style.display = \"block\"),\n (bodyValue.textContent = bodyMail))\n : (detailBody.style.display = \"none\");\n // add the actions\n gmail.addEventListener(\"click\", openGmail);\n outlook.addEventListener(\"click\", openOutlook);\n encEmail = encodeEmail(mail);\n open.addEventListener(\"click\", openDefault);\n copyMail.addEventListener(\"click\", () => copy(mail));\n }\n // mailgo tel\n if (type === TEL_TYPE) {\n if (mailgo.href && mailgo.href.toLowerCase().startsWith(TEL)) {\n tel = decodeURIComponent(mailgo.href.split(\"?\")[0].split(TEL)[1].trim());\n }\n else if (mailgo.href && mailgo.href.toLowerCase().startsWith(CALLTO)) {\n tel = decodeURIComponent(mailgo.href.split(\"?\")[0].split(CALLTO)[1].trim());\n }\n else if (mailgo.hasAttribute(\"data-tel\")) {\n tel = mailgo.getAttribute(\"data-tel\");\n msg = mailgo.getAttribute(\"data-msg\");\n }\n // information\n // let titleEl = getE(\"m-tel-title\");\n // Telegram username\n if (mailgo.hasAttribute(\"data-telegram\")) {\n telegramUsername = mailgo.getAttribute(\"data-telegram\");\n }\n // Telegram username\n if (mailgo.hasAttribute(\"data-skype\")) {\n skypeUsername = mailgo.getAttribute(\"data-skype\");\n }\n // the title of the modal (tel)\n titleTel.innerHTML = tel;\n // add the actions to buttons\n wa.addEventListener(\"click\", openWhatsApp);\n if (telegramUsername) {\n setDisplay(\"m-tg\", \"block\");\n telegram.addEventListener(\"click\", openTelegram);\n }\n skype.addEventListener(\"click\", openSkype);\n call.addEventListener(\"click\", callDefault);\n copyTel.addEventListener(\"click\", () => copy(tel));\n }\n // show the mailgo\n showMailgo(type);\n // add listener keyDown\n document.addEventListener(\"keydown\", mailgoKeydown);\n};\n// actions\nconst openGmail = () => {\n // Gmail url\n let gmailUrl = \"https://mail.google.com/mail/u/0/?view=cm&source=mailto&to=\" +\n encodeURIComponent(mail);\n // the details if provided\n if (cc)\n gmailUrl = gmailUrl.concat(\"&cc=\" + encodeURIComponent(cc));\n if (bcc)\n gmailUrl = gmailUrl.concat(\"&bcc=\" + encodeURIComponent(bcc));\n if (subject)\n gmailUrl = gmailUrl.concat(\"&subject=\" + subject);\n if (bodyMail)\n gmailUrl = gmailUrl.concat(\"&body=\" + bodyMail);\n // open the link\n window.open(gmailUrl, \"_blank\");\n // hide the modal\n hideMailgo();\n};\nconst openOutlook = () => {\n // Outlook url\n let outlookUrl = \"https://outlook.live.com/owa/?path=/mail/action/compose&to=\" +\n encodeURIComponent(mail);\n // the details if provided\n if (subject)\n outlookUrl = outlookUrl.concat(\"&subject=\" + subject);\n if (bodyMail)\n outlookUrl = outlookUrl.concat(\"&body=\" + bodyMail);\n // open the link\n window.open(outlookUrl, \"_blank\");\n // hide the modal\n hideMailgo();\n};\nconst openDefault = () => {\n mailToEncoded(encEmail);\n hideMailgo();\n};\nconst openTelegram = () => {\n // Telegram url\n let tgUrl = \"https://t.me/\" + telegramUsername;\n // open the url\n window.open(tgUrl, \"_blank\");\n // hide the modal\n hideMailgo();\n};\nconst openSkype = () => {\n let skype = skypeUsername !== \"\" ? skypeUsername : tel;\n // Telegram url\n let skypeUrl = \"skype:\" + skype;\n // open the url\n window.open(skypeUrl, \"_blank\");\n // hide the modal\n hideMailgo();\n};\nconst openWhatsApp = () => {\n // WhatsApp url\n let waUrl = \"https://wa.me/\" + tel;\n // the details if provided\n if (msg)\n waUrl + \"?text=\" + msg;\n // open the url\n window.open(waUrl, \"_blank\");\n // hide the modal\n hideMailgo();\n};\nconst callDefault = () => {\n let callUrl = \"tel:\" + tel;\n window.open(callUrl);\n hideMailgo();\n};\nconst copy = (content) => {\n copyToClipboard(content);\n let activeCopy;\n // the correct copyButton (mail or tel)\n mailgoIsShowing(MAIL_TYPE) ? (activeCopy = copyMail) : (activeCopy = copyTel);\n activeCopy.textContent = \"copied\";\n setTimeout(() => {\n activeCopy.textContent = \"copy\";\n // hide after the timeout\n hideMailgo();\n }, 999);\n};\n// function that returns if an element is a mailgo\nconst isMailgo = (element, type = MAIL_TYPE) => {\n let href = element.href;\n // mailgo type mail\n if (type === MAIL_TYPE) {\n return (\n // first case: it is an <a> element with \"mailto:...\" in href and no no-mailgo in classList\n (href &&\n href.toLowerCase().startsWith(MAILTO) &&\n !element.classList.contains(\"no-mailgo\")) ||\n (element.hasAttribute(\"data-address\") &&\n // second case: the href=#mailgo\n ((href && element.getAttribute(\"href\").toLowerCase() === \"#mailgo\") ||\n // third case: the classList contains mailgo\n (element.classList && element.classList.contains(\"mailgo\")))));\n }\n // mailgo type tel\n if (type === TEL_TYPE) {\n return (\n // first case: it is an <a> element with \"tel:...\" or \"callto:...\" in href and no no-mailgo in classList\n (href &&\n (href.toLowerCase().startsWith(TEL) ||\n href.toLowerCase().startsWith(CALLTO)) &&\n !element.classList.contains(\"no-mailgo\")) ||\n (element.hasAttribute(\"data-tel\") &&\n // second case: the href=#mailgo\n href &&\n element.getAttribute(\"href\").toLowerCase() === \"#mailgo\") ||\n // third case: the classList contains mailgo\n (element.classList && element.classList.contains(\"mailgo\")));\n }\n return false;\n};\n/**\n * mailgoCheckRender\n * function to check if an element is mailgo-enabled or not referencing to\n * mail:\n * document.querySelectorAll(\n * 'a[href^=\"mailto:\" i]:not(.no-mailgo), a[href=\"#mailgo\"], a.mailgo'\n * );\n * tel:\n * document.querySelectorAll(\n * 'a[href^=\"tel:\" i]:not(.no-mailgo), a[href=\"#mailgo\"], a.mailgo'\n * );\n * or\n * document.querySelectorAll(\n * 'a[href^=\"callto:\" i]:not(.no-mailgo), a[href=\"#mailgo\"], a.mailgo'\n * );\n */\nconst mailgoCheckRender = (event) => {\n // check if the id=mailgo exists in the body\n if (!document.contains(getE(\"mailgo\")) ||\n !document.contains(getE(\"mailgo-tel\")))\n return;\n // if a mailgo is already showing do nothing\n if (mailgoIsShowing(MAIL_TYPE) || mailgoIsShowing(TEL_TYPE))\n return false;\n // the path of the event\n let path = (event.composedPath && event.composedPath()) ||\n composedPath(event.target);\n if (path) {\n path.forEach((element) => {\n if (element instanceof HTMLDocument || element instanceof Window)\n return false;\n // go in the event.path to find if the user has clicked on a mailgo element\n if (isMailgo(element, MAIL_TYPE)) {\n // stop the normal execution of the element click\n event.preventDefault();\n // render mailgo\n mailgoRender(MAIL_TYPE, element);\n return true;\n }\n if (isMailgo(element, TEL_TYPE)) {\n // stop the normal execution of the element click\n event.preventDefault();\n // render mailgo\n mailgoRender(TEL_TYPE, element);\n return true;\n }\n });\n }\n return false;\n};\n/**\n * mailgoKeydown\n * function to manage the keydown event when the modal is showing\n */\nconst mailgoKeydown = (event) => {\n // if mailgo is showing\n if (mailgoIsShowing(MAIL_TYPE)) {\n switch (event.keyCode) {\n case 27:\n // Escape\n hideMailgo();\n break;\n case 71:\n // g -> open GMail\n openGmail();\n break;\n case 79:\n // o -> open Outlook\n openOutlook();\n break;\n case 32:\n case 13:\n // spacebar or enter -> open default\n openDefault();\n break;\n case 67:\n // c -> copy\n copy(mail);\n break;\n default:\n return;\n }\n }\n else if (mailgoIsShowing(TEL_TYPE)) {\n switch (event.keyCode) {\n case 27:\n // Escape\n hideMailgo();\n break;\n case 84:\n // t -> open Telegram\n openTelegram();\n break;\n case 87:\n // w -> open WhatsApp\n openWhatsApp();\n break;\n case 32:\n case 13:\n // spacebar or enter -> call default\n callDefault();\n break;\n case 67:\n // c -> copy\n copy(tel);\n break;\n default:\n return;\n }\n }\n return;\n};\n// show the modal\nconst showMailgo = (type = MAIL_TYPE) => {\n // show mailgo type mail\n if (type === MAIL_TYPE) {\n setDisplay(\"mailgo\", \"flex\");\n return true;\n }\n // show mailgo type tel\n if (type === TEL_TYPE) {\n setDisplay(\"mailgo-tel\", \"flex\");\n return true;\n }\n return false;\n};\n// hide the modal\nconst hideMailgo = () => {\n setDisplay(\"mailgo\", \"none\");\n setDisplay(\"mailgo-tel\", \"none\");\n // remove listener keyDown\n document.removeEventListener(\"keydown\", mailgoKeydown);\n};\n// is the mailgo modal hidden?\nconst mailgoIsShowing = (type = MAIL_TYPE) => {\n return type === MAIL_TYPE\n ? getDisplay(\"mailgo\") === \"flex\"\n : type === TEL_TYPE\n ? getDisplay(\"mailgo-tel\") === \"flex\"\n : false;\n};\nconst byElement = () => {\n // by\n let by = createElement(\"a\");\n by.href = \"https://mailgo.js.org?ref=mailgo-modal\";\n by.className = \"m-by\";\n by.target = \"_blank\";\n by.rel = \"noopener noreferrer\";\n by.appendChild(createTextNode(\"mailgo.js.org\"));\n return by;\n};\n// create element\nconst createElement = (element = \"div\") => document.createElement(element);\n// create text node\nconst createTextNode = (element) => document.createTextNode(element);\n// decrypt email\nconst mailToEncoded = (encoded) => (window.location.href = MAILTO + atob(encoded));\n// encode email\nconst encodeEmail = (email) => btoa(email);\n// getE shorthand\nconst getE = (id) => document.getElementById(id);\n// get display value\nconst getDisplay = (id) => getE(id).style.display;\n// get display value\nconst setDisplay = (id, value) => (getE(id).style.display = value);\n// custom composedPath if path or event.composedPath() are not defined\nconst composedPath = (el) => {\n let path = [];\n while (el) {\n path.push(el);\n if (el.tagName === \"HTML\") {\n path.push(document);\n path.push(window);\n return path;\n }\n el = el.parentElement;\n }\n};\n// validate a single email with regex\nconst validateEmail = (email) => /^(([^<>()[\\]\\\\.,;:\\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(email);\n// validate an array of emails\nconst validateEmails = (arr) => arr.every(validateEmail);\n// copy of a string\nconst copyToClipboard = (str) => {\n let el = createElement(\"textarea\");\n el.value = str;\n el.setAttribute(\"readonly\", \"\");\n el.style.position = \"absolute\";\n el.style.left = \"-9999px\";\n document.body.appendChild(el);\n let selected = document.getSelection().rangeCount > 0\n ? document.getSelection().getRangeAt(0)\n : false;\n el.select();\n document.execCommand(\"copy\");\n document.body.removeChild(el);\n if (selected) {\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(selected);\n return true;\n }\n return false;\n};\nconst mailgoStyle = () => {\n // mailgo style\n let mailgoCSSElement = createElement(\"style\");\n mailgoCSSElement.id = \"mailgo-style\";\n mailgoCSSElement.type = \"text/css\";\n mailgoCSSElement.appendChild(createTextNode(mailgoCSS));\n document.head.appendChild(mailgoCSSElement);\n};\n// mailgo\nconst mailgo = (mailgoConfig) => {\n // if the window is defined...\n if (window && typeof window !== \"undefined\") {\n // add the style for mailgo\n mailgoStyle();\n // if is set an initEvent add the listener\n if (mailgoConfig === null || mailgoConfig === void 0 ? void 0 : mailgoConfig.initEvent) {\n document.addEventListener(mailgoConfig.initEvent, () => {\n mailgoInit(mailgoConfig);\n });\n }\n else {\n mailgoInit(mailgoConfig);\n }\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (mailgo);\n\n\n//# sourceURL=webpack:///./mailgo.ts?");
/***/ }),
/***/ "./mailgo.webpack.ts":
/*!***************************!*\
!*** ./mailgo.webpack.ts ***!
\***************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mailgo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mailgo */ \"./mailgo.ts\");\n\n// call init mailgo attached to the event DOMContentLoaded\nconst mailgoConfig = {\n initEvent: \"DOMContentLoaded\",\n};\nconsole.log(_mailgo__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\nObject(_mailgo__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(mailgoConfig);\n\n\n//# sourceURL=webpack:///./mailgo.webpack.ts?");
/***/ })
/******/ });