preview.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import generatePreview from "./generate-preview.js"
  2. export default function preview(selector, signed = false) {
  3. document.querySelector(selector)?.addEventListener("click", async function (e) {
  4. const contractPreview = await generatePreview(signed)
  5. let iframe = document.getElementById('iframe').contentWindow.document
  6. localStorage.removeItem("client_signature")
  7. iframe.open()
  8. iframe.write(contractPreview)
  9. iframe.close()
  10. e.preventDefault()
  11. }, false)
  12. }
  13. // previewAfterClientSigned
  14. // generate-preview.js triggers this when submit is clicked in preview iframe 📡
  15. window.onmessage = function (e) {
  16. if (e.data == 'previewAfterClientSigned') {
  17. previewAfterClientSigned()
  18. }
  19. };
  20. async function previewAfterClientSigned() {
  21. const contractPreview = await generatePreview(true)
  22. let iframe = document.getElementById('iframe').contentWindow.document
  23. iframe.open()
  24. iframe.write(contractPreview)
  25. iframe.close()
  26. }
  27. // event listeners
  28. // modal open and close buttons
  29. const modal = document.querySelector("#modal-preview")
  30. const openModal = document.querySelector("#show-modal-preview")
  31. const closeModal = document.querySelector("#close-modal-preview")
  32. openModal?.addEventListener("click", (e) => {
  33. if (modal?.open === false)
  34. modal.showModal()
  35. })
  36. closeModal?.addEventListener("click", (e) => {
  37. modal?.close()
  38. })
  39. // close modal when click events happen outside of it
  40. modal?.addEventListener("click", (e) => {
  41. const rect = modal.getBoundingClientRect()
  42. if (
  43. e.clientY < rect.top ||
  44. e.clientY > rect.bottom ||
  45. e.clientX < rect.left ||
  46. e.clientX > rect.right
  47. ) {
  48. modal.close()
  49. }
  50. })
  51. // // old selectors used event delegation with el.matches()
  52. // document.addEventListener("click", (e) => {
  53. // const el = e.target
  54. // if (el.matches(".preview, .preview *")) {
  55. // document.querySelector('.modal-preview').classList.add('is-active');
  56. // }
  57. // if (el.matches(".modal-preview :is(.modal-background,.delete)")) {
  58. // el.closest(".modal-preview.is-active").classList.remove("is-active")
  59. // }
  60. // })