emails.html 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. ---
  2. page-header: Email templates
  3. page-menu: emails
  4. page-libs: [masonry, fslightbox]
  5. layout: default
  6. permalink: emails.html
  7. ---
  8. <div class="row row-cards">
  9. <div class="col-12">
  10. <div class="card card-md">
  11. <div class="card-stamp card-stamp-lg">
  12. <div class="card-stamp-icon bg-primary">
  13. {% include "ui/icon.html" icon="mail" %}
  14. </div>
  15. </div>
  16. <div class="card-body">
  17. <div class="row align-items-center">
  18. <div class="col-10">
  19. <h3 class="h1">Tabler Emails</h3>
  20. <div class="markdown text-secondary fs-3">
  21. {{ emails | size }} eye-catching, customizable and responsive email templates to improve your email communication. No coding skills needed.
  22. </div>
  23. <div class="mt-3">
  24. <a href="{{ site.emails.buy_link }}" class="btn btn-primary" target="_blank">Buy all emails for {{ site.emails.price }}</a>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. <div class="col-12">
  32. <div class="row row-cards" data-masonry='{"percentPosition": true }'>
  33. {% for email in emails %}
  34. <div class="col-4">
  35. <a
  36. href="{{ page | relative }}/static/emails/{{ email[0] }}.jpg"
  37. data-bs-toggle="modal"
  38. data-bs-target="#email-modal"
  39. data-bs-title="{{ email[1].descriptionShort | escape }}"
  40. data-bs-description="{{ email[1].descriptionLong | escape }}"
  41. data-bs-image="{{ page | relative }}/static/emails/{{ email[0] }}.jpg"
  42. >
  43. <img src="{{ page | relative }}/static/emails/{{ email[0] }}.jpg" class="img-fluid rounded" alt="{{ email[1].descriptionShort }}" width="{{ email[1].width }}" height="{{ email[1].height }}" />
  44. </a>
  45. </div>
  46. {% endfor %}
  47. </div>
  48. </div>
  49. </div>
  50. <div class="modal fade" id="email-modal" aria-hidden="true" aria-labelledby="email-modal-label" tabindex="-1">
  51. <div class="modal-dialog modal-xl modal-dialog-centered">
  52. <div class="modal-content">
  53. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  54. <div class="modal-body p-0">
  55. <div class="row g-0">
  56. <div class="col-6">
  57. <div class="p-6 bg-body rounded-start">
  58. <img src="" class="img-fluid rounded-left" data-email-image />
  59. </div>
  60. </div>
  61. <div class="col-6">
  62. <div class="p-7">
  63. <div class="markdown">
  64. <h3 data-email-title></h3>
  65. <p data-email-description></p>
  66. </div>
  67. <div class="mt-6">
  68. <a href="{{ site.emails.buy_link }}" class="btn btn-primary w-100" target="_blank">Buy {{ site.emails.count }} emails for {{ site.emails.price }}</a>
  69. </div>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. {% capture_global scripts %}
  78. <script>
  79. const emailModal = document.getElementById("email-modal")
  80. if (emailModal) {
  81. emailModal.addEventListener("show.bs.modal", function (e) {
  82. const button = e.relatedTarget
  83. const image = button.getAttribute("data-bs-image"),
  84. title = button.getAttribute("data-bs-title"),
  85. description = button.getAttribute("data-bs-description")
  86. emailModal.querySelector("[data-email-title]").textContent = title
  87. emailModal.querySelector("[data-email-description]").textContent = description
  88. emailModal.querySelector("[data-email-image]").src = image
  89. modalTitle.textContent = `New message to ${recipient}`
  90. modalBodyInput.value = recipient
  91. })
  92. }
  93. </script>
  94. {% endcapture_global %}