topbar.eta 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <% const timeIcon = `
  2. <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
  3. <g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
  4. <circle cx="12" cy="12" r="10" />
  5. <path d="M12 6v6l4 2" />
  6. </g>
  7. </svg>
  8. ` %>
  9. <% const dateIcon = `
  10. <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
  11. <g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
  12. <path d="M8 2v4m8-4v4" />
  13. <rect width="18" height="18" x="3" y="4" rx="2" />
  14. <path d="M3 10h18M8 14h.01M12 14h.01M16 14h.01M8 18h.01M12 18h.01M16 18h.01" />
  15. </g>
  16. </svg>
  17. ` %>
  18. <% const homeIcon = `
  19. <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
  20. <g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
  21. <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" />
  22. <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
  23. </g>
  24. </svg>
  25. ` %>
  26. <% const settingsIcon = `
  27. <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
  28. <g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
  29. <path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0a2.34 2.34 0 0 0 3.319 1.915a2.34 2.34 0 0 1 2.33 4.033a2.34 2.34 0 0 0 0 3.831a2.34 2.34 0 0 1-2.33 4.033a2.34 2.34 0 0 0-3.319 1.915a2.34 2.34 0 0 1-4.659 0a2.34 2.34 0 0 0-3.32-1.915a2.34 2.34 0 0 1-2.33-4.033a2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915" />
  30. <circle cx="12" cy="12" r="3" />
  31. </g>
  32. </svg>
  33. ` %>
  34. <% const skFlag = `
  35. <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
  36. <mask id="SVGuywqVbel">
  37. <circle cx="256" cy="256" r="256" fill="#fff" />
  38. </mask>
  39. <g mask="url(#SVGuywqVbel)">
  40. <path fill="#0052b4" d="m0 160l256-32l256 32v192l-256 32L0 352z" />
  41. <path fill="#eee" d="M0 0h512v160H0z" />
  42. <path fill="#d80027" d="M0 352h512v160H0z" />
  43. <path fill="#eee" d="M64 63v217c0 104 144 137 144 137s144-33 144-137V63z" />
  44. <path fill="#d80027" d="M96 95v185a83 78 0 0 0 9 34h206a83 77 0 0 0 9-34V95z" />
  45. <path fill="#eee" d="M288 224h-64v-32h32v-32h-32v-32h-32v32h-32v32h32v32h-64v32h64v32h32v-32h64z" />
  46. <path fill="#0052b4" d="M152 359a247 231 0 0 0 56 24c12-3 34-11 56-24a123 115 0 0 0 47-45a60 56 0 0 0-34-10l-14 2a60 56 0 0 0-110 0a60 56 0 0 0-14-2c-12 0-24 4-34 10a123 115 0 0 0 47 45" />
  47. </g>
  48. </svg>
  49. ` %>
  50. <% const date = new Date() %>
  51. <header>
  52. <p><%~ timeIcon %> <span id="topbarTime"><%= date.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', second: 'numeric', hour12: true }) %></span></p>
  53. <p><%~ dateIcon %> <span id="topbarDate"><%= date.toLocaleDateString('en-US', { weekday: "long", year: "numeric", month: "long", day: "numeric" }) %></span></p>
  54. <div class="end">
  55. <a role="button" href="/"><%~ skFlag %></a>
  56. <a role="button" href="/en"><%~ homeIcon %></a>
  57. <a role="button" href="/en/settings"><%~ settingsIcon %></a>
  58. </div>
  59. <script defer>
  60. setInterval(() => {
  61. const topbarTime = document.querySelector("#topbarTime")
  62. const topbarDate = document.querySelector("#topbarDate")
  63. const date = new Date()
  64. const timeString = date.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', second: 'numeric', hour12: true })
  65. const dateString = date.toLocaleDateString('en-US', { weekday: "long", year: "numeric", month: "long", day: "numeric" })
  66. topbarTime.textContent = timeString
  67. if (topbarDate.textContent !== dateString) {
  68. topbarDate.textContent = dateString
  69. }
  70. }, 1000)
  71. </script>
  72. </header>