generate.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import { doShortcodesFromLocalstorage } from "../utils.js";
  2. export default async function generate() {
  3. // get timestamp
  4. // const dev_timestamp = Math.round(+new Date() / 1000);
  5. // const timestampOptions = { year: 'numeric', month: 'long', day: 'numeric' }
  6. // const timestampOptions = { dateStyle: "medium", timeStyle: "long" }
  7. // const dev_timestamp = date.toLocaleDateString("en-US", timestampOptions)
  8. const date = new Date()
  9. const dev_timestamp = new Intl.DateTimeFormat('en',
  10. { dateStyle: "long", timeStyle: "long" }
  11. ).format(date)
  12. const dev_timestamp_offset = date.getTimezoneOffset()
  13. // get IP
  14. const dev_ip = await fetch("https://api.ipify.org").then((data) => { return data.text() })
  15. // console.log(dev_timestamp)
  16. // console.log(dev_ip)
  17. // generate header
  18. let header = localStorage.getItem("contract_header")
  19. let lines = header.split("\n")
  20. lines[1] = (localStorage.getItem("client_email") || null ) ?? "[client_email]"
  21. lines[2] = (localStorage.getItem("dev_email") || null ) ?? "[dev_email]"
  22. lines[3] = (localStorage.getItem("dev_signature") || null ) ?? "[dev_signature]"
  23. lines[4] = dev_ip
  24. lines[5] = dev_timestamp
  25. lines[6] = dev_timestamp_offset
  26. lines[7] = (localStorage.getItem("dev_name") || null ) ?? "[dev_name]"
  27. lines[8] = (localStorage.getItem("client_name") || null ) ?? "[client_name]"
  28. header = lines.join("\n")
  29. // generate main (escape single quotes)
  30. let main = "\n\n\n\$CONTRACT_HTML='\n "
  31. + addSlashes(document.querySelector(".editor-container .ql-editor").innerHTML)
  32. + "\n';\n\n"
  33. // replace each shortcode w/ its value
  34. main = doShortcodesFromLocalstorage(main)
  35. // generate footer
  36. let footer = localStorage.getItem("contract_footer")
  37. // remove first line
  38. let footerWithoutFirstLine = footer.split("\n")
  39. footerWithoutFirstLine = footerWithoutFirstLine.slice(1)
  40. footer = footerWithoutFirstLine.join("\n")
  41. // console.log(footer)
  42. // put css in footer
  43. let contract_css = addSlashes(localStorage.getItem("contract_css"))
  44. // console.log(contract_css)
  45. footer = footer.replace(
  46. `<style></style>`,
  47. `<style>${contract_css}</style>`
  48. )
  49. // put html for unsigned contract in footer
  50. footer = footer.replace(
  51. `<div id="ui-unsigned"></div>`,
  52. `<div id="ui-unsigned">`+
  53. " "+indentLinesAndAddSlashes(localStorage.getItem("ui_unsigned"), 4)
  54. +"\n </div><!--.ui-unsigned-->"
  55. )
  56. // put html for unsigned contract in footer
  57. footer = footer.replace(
  58. `<div id="ui-signed"></div>`,
  59. `<div id="ui-signed">`+
  60. " "+indentLinesAndAddSlashes(localStorage.getItem("ui_signed"), 6)
  61. +"\n </div><!--.ui-signed-->"
  62. )
  63. // put js for unsigned contract in footer
  64. footer = footer.replace(
  65. `<script id="contract_script_unsigned" type="module"></script>`,
  66. `<script id="contract_script_unsigned" type="module">`
  67. +
  68. indentLinesAndAddSlashes(localStorage.getItem("contract_script_unsigned", 1))
  69. + "\n </script>"
  70. )
  71. // put js for qr code in footer
  72. footer = footer.replace(
  73. `<script id="qr_code_script" type="module"></script>`,
  74. `<script id="qr_code_script" type="module">`
  75. +
  76. indentLinesAndAddSlashes(localStorage.getItem("qr_code_script", 1))
  77. + "\n </script>"
  78. )
  79. // put js for signed contract in footer
  80. footer = footer.replace(
  81. `<script id="contract_script_signed"></script>`,
  82. `<script id="contract_script_signed">`
  83. +
  84. indentLinesAndAddSlashes(localStorage.getItem("contract_script_signed", 1))
  85. + "\n </script>"
  86. )
  87. let output = header + main + footer
  88. return (output)
  89. }
  90. const addSlashes = (str) => {
  91. return str
  92. .replace(/'/g, "\\'")
  93. }
  94. const indentLinesAndAddSlashes = (str="", indentationLevel=2) =>{
  95. const space = " ".repeat(indentationLevel)
  96. str = str.split("\n").join("\n"+space)
  97. //console.log(str)
  98. return "\n"+space+ str
  99. .replace(/'/g, "\\'")
  100. }
  101. // const stripSlashes = (str) => {
  102. // return str
  103. // .replace(/\\'/g, "\'")
  104. // // .replace(/\"/g, '"')
  105. // // .replace(/\\\\/g, '\\')
  106. // // .replace(/\\0/g, '\0')
  107. // }
  108. // function randomID() {
  109. // let text = ""
  110. // const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  111. // for (let i = 0; i < 5; i++)
  112. // text += possible.charAt(Math.floor(Math.random() * possible.length))
  113. // return text
  114. // }