import { doShortcodesFromLocalstorage } from "../utils.js"; import previewOnly from "./preview-only.js"; export default async function generatePreview(signed=false, forDownload=false, filename="contract-signed.html") { const signatureFileEmpty = "data/more-data/signature-empty.png" let clientSignatureData if (localStorage.getItem("client_signature") !== null) { clientSignatureData = localStorage.getItem("client_signature") } else { // todo: instantiate signature and get data; get rid of empty signature png file clientSignatureData = await toDataURL(signatureFileEmpty) localStorage.setItem("client_signature", clientSignatureData) } // get css let contract_css = localStorage.getItem("contract_css") // get main from editor (don't escape single quotes) let main = document.querySelector(".editor-container .ql-editor").innerHTML // replace each shortcode w/ its value main = doShortcodesFromLocalstorage(main) // js for unsigned contract let contract_script_unsigned = ` ` // js for signed contract let contract_script_signed = ` ` let contract_script, clientSignature_html, ui_html, compiled_signatures, previewOverrides if (signed) { const client_timestamp = getTimestamp() const dev_timestamp = localStorage.getItem("dev_timestamp") ?? client_timestamp // get IP const client_ip = await fetch("https://api.ipify.org").then((data) => { return data.text() }) contract_script = contract_script_signed clientSignature_html = `` ui_html = localStorage.getItem("ui_signed") ui_html = `
${ui_html}
` compiled_signatures = `
${localStorage.getItem("dev_name")}
Signed on: ${dev_timestamp}
IP address: ${client_ip}
${localStorage.getItem("client_name")} ${clientSignature_html}
Signed on: ${client_timestamp}
IP address: ${client_ip}
` } else { localStorage.setItem("dev_timestamp", getTimestamp()) contract_script = contract_script_unsigned clientSignature_html = "" ui_html = localStorage.getItem("ui_unsigned") ui_html = `
${ui_html}
` compiled_signatures = `` } previewOverrides = previewOnly(signed, forDownload, filename) // to do: move to external file; make function w/ props const output = ` Signed Contract
${main} ${compiled_signatures} ${ui_html}
${contract_script} ${previewOverrides} ` return (output) } const getTimestamp = () => { const date = new Date() let timestamp = new Intl.DateTimeFormat("en", { dateStyle: "long", timeStyle: "long" } ).format(date) return timestamp } const toDataURL = url => fetch(url) .then(response => response.blob()) .then(blob => new Promise((resolve, reject) => { const reader = new FileReader() reader.onloadend = () => resolve(reader.result) reader.onerror = reject reader.readAsDataURL(blob) })) // from https://stackoverflow.com/a/20285053