| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <title>Document</title> |
| <style> |
| .modal { |
| display: block; |
| position: fixed; |
| z-index: 1; |
| left: 0; |
| top: 0; |
| width: 100%; |
| height: 100%; |
| overflow: auto; |
| background-color: rgb(0, 0, 0); |
| background-color: rgba(0, 0, 0, 0.4); |
| } |
| |
| .modal-content { |
| background-color: #fefefe; |
| margin: 0% auto; |
| padding: 20px; |
| border: 1px solid #888; |
| width: 80%; |
| } |
| |
| .close { |
| color: #aaa; |
| float: right; |
| font-size: 28px; |
| font-weight: bold; |
| } |
| |
| .close:hover, |
| .close:focus { |
| color: black; |
| text-decoration: none; |
| cursor: pointer; |
| } |
| |
| .inputs { |
| display: flex; |
| flex-direction: column; |
| } |
| |
| .columns { |
| width: 100%; |
| display: flex; |
| gap: 40px; |
| } |
| |
| .columns > div:nth-child(2) { |
| width: 80%; |
| } |
| |
| textarea { |
| width: 100%; |
| height: 500px; |
| } |
| |
| input { |
| margin: 5px 0; |
| } |
| |
| label { |
| margin-right: 20px; |
| } |
| </style> |
| </head> |
| <body> |
| <div class="columns"> |
| <div> |
| <button>Open Modal</button> |
| <div class="inputs"> |
| <div> |
| <label>Height</label> |
| <input placeholder="height" class="height" /> |
| </div> |
| <div> |
| <label>Width</label> |
| <input placeholder="width" class="width" /> |
| </div> |
| </div> |
| </div> |
| <div> |
| <textarea |
| class="molecule" |
| placeholder="Insert a molecule here..." |
| ></textarea> |
| </div> |
| </div> |
| <script defer> |
| const button = document.querySelector('button') |
| const textarea = document.querySelector('.molecule') |
| const width = document.querySelector('.width') |
| const height = document.querySelector('.height') |
| const modalContent = ` |
| <div class="modal-content"> |
| <span class="close">×</span> |
| <iframe |
| width="784" |
| height="624" |
| id="iframe" |
| src="env_url" |
| sandbox="allow-scripts allow-same-origin" |
| ></iframe> |
| </div> |
| ` |
| let modal |
| let closeIcon; |
| let iframe; |
| |
| function closeModal() { |
| closeIcon.removeEventListener('click', closeModal) |
| modal.remove() |
| } |
| |
| function createModal() { |
| modal = document.createElement('div') |
| modal.classList.add('modal') |
| modal.innerHTML = modalContent |
| document.body.appendChild(modal) |
| |
| closeIcon = document.querySelector('.close') |
| iframe = document.getElementById('iframe') |
| iframe.style.height = height.value + 'px' |
| iframe.style.width = width.value + 'px' |
| |
| closeIcon.addEventListener('click', closeModal) |
| } |
| |
| button.onclick = createModal |
| window.onclick = function (event) { |
| if (event.target == modal) { |
| closeModal() |
| } |
| } |
| |
| window.addEventListener('message', (event) => { |
| if (event.data.eventType === 'init') { |
| iframe.contentWindow.ketcher.setMolecule(textarea.value) |
| } |
| }) |
| </script> |
| </body> |
| </html> |
|
|