index.html 2.4 KB

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