158 lines
39 KiB
JavaScript
158 lines
39 KiB
JavaScript
/******/ (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?");
|
||
|
||
/***/ })
|
||
|
||
/******/ }); |