Add the following tags to your head
<meta name="pluscriber-verification" content="YOUR PUBLICATION ID">
<script async src="https://pluscriber.com/assets/pluscriber.js"></script>| document.addEventListener('DOMContentLoaded', async function () { | |
| loadPluscriber() | |
| } | |
| function loadPluscriber() { | |
| try { | |
| addCssToHead() | |
| addModalToBody() | |
| const form = getForm() | |
| const pubId = getPublicationId() | |
| form.addEventListener('submit', (ev) => { | |
| showModal() | |
| }) | |
| } catch (e) { | |
| console.error(e) | |
| // log event to pluscriber backend and exit gracefully | |
| } | |
| } | |
| function getForm() { | |
| const inputs = document.querySelectorAll('input[type="email"]') | |
| if (inputs.length > 1) { | |
| throw new Error( | |
| `Expected 1 input of type email - found ${inputs.length}. Additional configuration needed` | |
| ) | |
| } | |
| const input = Array.from(inputs)[0] | |
| const form = input.closest('form') | |
| if (!form) { | |
| throw new Error(`No form element found. Additional configuration needed.`) | |
| } | |
| return form | |
| } | |
| function addCssToHead() { | |
| const style = document.createElement('style') | |
| style.setAttribute('type', 'text/css') | |
| style.appendChild(document.createTextNode(css)) | |
| document.getElementsByTagName('head')[0].appendChild(style) | |
| } | |
| const css = ` | |
| @keyframes overlayShow { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes contentShow { | |
| from { | |
| opacity: 0; | |
| transform: translate(-50%, -48%) scale(.96); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translate(-50%,-50%) scale(1) | |
| } | |
| } | |
| .ps-overlay { | |
| background-color: hsla(0, 0%, 0%, 0.439); | |
| position: fixed; | |
| inset: 0; | |
| animation-name: overlayShow; | |
| animation-duration: 150ms; | |
| animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); | |
| animation-fill-mode: forwards; | |
| } | |
| .ps-content { | |
| background-color: white; | |
| border-radius: 6px; | |
| box-shadow: hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px; | |
| position: fixed; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| width: 90vw; | |
| max-width: 450px; | |
| max-height: 85vh; | |
| padding: 25px; | |
| animation-name: contentShow; | |
| animation-duration: 150ms; | |
| animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); | |
| animation-fill-mode: forwards; | |
| } | |
| ` | |
| function showModal() { | |
| const overlay = document.createElement('div') | |
| overlay.classList.add('ps-overlay') | |
| const content = document.createElement('div') | |
| content.classList.add('ps-content') | |
| content.innerHTML = `<div>HERE IS SOME TEXT</div>` | |
| const modal = document.querySelector('div#ps-modal') | |
| document.body.appendChild(overlay) | |
| modal.appendChild(content) | |
| } | |
| function addModalToBody() { | |
| const pubId = getPublicationId() | |
| const body = document.querySelector('body') | |
| if (!body) { | |
| throw new Error('What? No body!') | |
| } | |
| const modal = document.createElement('div') | |
| modal.setAttribute('id', 'ps-modal') | |
| modal.setAttribute('data-id', pubId) | |
| body.appendChild(modal) | |
| } | |
| function getPublicationId() { | |
| const meta = document.querySelector('meta[name="pluscriber-verification"]') | |
| if (!meta) { | |
| throw new Error('No publicationId provided in meta tag') | |
| } | |
| const content = meta.getAttribute('content') | |
| if (!content) { | |
| throw new Error('No publicationId provided in meta tag') | |
| } | |
| return content | |
| } |