signature.html 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. {% assign id = include.id | default: 'default' %}
  2. <div class="signature position-relative{% if include.class %} {{ include.class }}{% endif %}">
  3. {% if include.clear %}
  4. <div class="position-absolute top-0 end-0 p-2">
  5. <div class="btn btn-icon" id="signature-{{ id }}-clear" title="Clear signature" data-bs-toggle="tooltip">
  6. {% include "ui/icon.html" icon="trash" %}
  7. </div>
  8. </div>
  9. {% endif %}
  10. <canvas id="signature-{{ id }}" width="{{ include.width | default: 400 }}" height="{{ include.height | default: 400 }}" class="signature-canvas"></canvas>
  11. </div>
  12. {% capture_script %}
  13. <!-- BEGIN SIGNATURE PAD -->
  14. <script>
  15. document.addEventListener("{{ include.event | default: 'DOMContentLoaded' }}", function () {
  16. const canvas = document.getElementById("signature-{{ id }}");
  17. if (canvas) {
  18. const signaturePad = new SignaturePad(canvas, {
  19. backgroundColor: "transparent",
  20. penColor: getComputedStyle(canvas).color
  21. });
  22. {% if include.clear %}
  23. document.querySelector("#signature-{{ id }}-clear").addEventListener("click", function () {
  24. signaturePad.clear();
  25. });
  26. {% endif %}
  27. function resizeCanvas() {
  28. const ratio = Math.max(window.devicePixelRatio || 1, 1);
  29. console.log(canvas.offsetWidth, canvas.offsetHeight);
  30. canvas.width = canvas.offsetWidth * ratio;
  31. canvas.height = canvas.offsetHeight * ratio;
  32. canvas.getContext("2d").scale(ratio, ratio);
  33. signaturePad.fromData(signaturePad.toData());
  34. }
  35. window.addEventListener("resize", resizeCanvas);
  36. resizeCanvas();
  37. {% if include.extra-js %}
  38. {{ include.extra-js }}
  39. {% endif %}
  40. }
  41. });
  42. </script>
  43. {% endcapture_script %}