index.html 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <html lang="en">
  2. <head>
  3. <meta charset="UTF-8">
  4. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Kvos.dev - Homepage</title>
  7. <link rel="stylesheet" href="style.css" type="text/css" />
  8. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@6.5.95/css/materialdesignicons.min.css">
  9. </head>
  10. <body>
  11. <header>
  12. <h1>Kristian Vos</h1>
  13. <h2>kvos.dev</h2>
  14. </header>
  15. <main>
  16. <div class="block">
  17. <h2>Contact me</h2>
  18. <div class="contact-section">
  19. <p>
  20. <span class="mdi mdi-chat"></span>
  21. <span>Matrix </span>
  22. <a href="matrix:u/@kris:kvos.dev">@kris:kvos.dev</a>
  23. </p>
  24. <p>
  25. <span class="mdi mdi-email"></span>
  26. <span>Email </span>
  27. <button onclick="reveal()" id="reveal-button">Reveal</button>
  28. </p>
  29. </div>
  30. </div>
  31. <div class="block">
  32. <h2>Links</h2>
  33. <div class="links-section">
  34. <p>
  35. <span class="mdi mdi-git"></span>
  36. <span>Git </span>
  37. <a href="https://git.kvos.dev/kris">git.kvos.dev/kris</a>
  38. </p>
  39. <p>
  40. <span class="mdi mdi-github"></span>
  41. <span>GitHub </span>
  42. <a href="https://github.com/KrisVos130">github.com/KrisVos130</a>
  43. </p>
  44. </div>
  45. </div>
  46. </main>
  47. <script>
  48. const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@.+".split("");
  49. const encodedEmail = "YM926LY926MRS9";
  50. const shift = string => {
  51. return string
  52. .split("")
  53. .map(character => chars[
  54. (
  55. chars.indexOf(character) !== -1 &&
  56. chars.indexOf(character) + 1 < chars.length
  57. )
  58. ? chars.indexOf(character) + 1
  59. : 0
  60. ])
  61. .join("");
  62. }
  63. const reveal = () => {
  64. const revealButton = document.getElementById("reveal-button");
  65. const anchor = document.createElement("a");
  66. const span = document.createElement("span");
  67. let decodedEmail = encodedEmail;
  68. revealButton.insertAdjacentElement("afterEnd", span);
  69. revealButton.remove();
  70. let index = 0;
  71. const interval = setInterval(() => {
  72. index++;
  73. decodedEmail = shift(decodedEmail);
  74. span.textContent = decodedEmail;
  75. if (index === 25) {
  76. anchor.href = `mailto:${decodedEmail}`;
  77. anchor.text = decodedEmail;
  78. span.replaceWith(anchor);
  79. clearInterval(interval);
  80. }
  81. }, 5);
  82. }
  83. </script>
  84. </body>
  85. </html>