1
0

script.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. // Clock
  2. var dat = document.querySelector("#date-and-time");
  3. var tz = Intl.DateTimeFormat().resolvedOptions().timeZone
  4. function updateTime() {
  5. var currentTime = new Date().toLocaleString(navigator.languages[0], {"timezone": tz});
  6. dat.textContent = currentTime;
  7. }
  8. setInterval(updateTime, 1000);
  9. // Drag elements (base code from https://www.geeksforgeeks.org/html/draggable-element-using-javascript/)
  10. const dragElements = document.querySelectorAll(".draggable");
  11. function onMouseDrag(event, element) {
  12. let leftValue = parseInt(window.getComputedStyle(element).left);
  13. let topValue = parseInt(window.getComputedStyle(element).top);
  14. if (0 < (leftValue + event.movementX) && (leftValue + event.movementX) < (window.window.innerWidth - element.offsetWidth)) {
  15. element.style.left = `${leftValue + event.movementX}px`;
  16. }
  17. if (0 < (topValue + event.movementY) && (topValue + event.movementY) < (window.window.innerHeight - element.offsetHeight)) {
  18. element.style.top = `${topValue + event.movementY}px`;
  19. }
  20. }
  21. dragElements.forEach((element) => {
  22. if (document.getElementById(element.id + "-header"))
  23. document.getElementById(element.id + "-header").addEventListener("mousedown", (e) => {
  24. const onMove = (event) => onMouseDrag(event, element);
  25. document.addEventListener("mousemove", onMove);
  26. document.addEventListener("mouseup", () => {
  27. document.removeEventListener("mousemove", onMove);
  28. }, { once: true });
  29. });
  30. if (document.getElementById(element.id + "-open")) {
  31. document.getElementById(element.id + "-open").addEventListener("click", () => {
  32. openWindow(element);
  33. document.getElementById(element.id + "-open").classList.toggle("closed");
  34. })
  35. }
  36. if (document.getElementById(element.id + "-close")) {
  37. document.getElementById(element.id + "-close").addEventListener("click", () => {
  38. closeWindow(element);
  39. document.getElementById(element.id + "-open").classList.add("closed");
  40. })
  41. }
  42. });
  43. // Open & close windows
  44. var dock = document.getElementById("dock-div");
  45. var topbar = document.getElementById("topbar-div");
  46. function closeWindow(elt) {
  47. elt.classList.add("hidden");
  48. }
  49. var biggestIndex = 0;
  50. function openWindow(elt) {
  51. elt.classList.toggle("hidden");
  52. biggestIndex ++;
  53. elt.style.zIndex = biggestIndex;
  54. dock.style.zIndex = biggestIndex + 1;
  55. topbar.style.zIndex = biggestIndex + 1;
  56. }
  57. // Bell
  58. var bellbtn = document.getElementById("notif-btn");
  59. var bellsound = new Audio("../sounds/ding.mp3");
  60. bellbtn.addEventListener("click", function() {
  61. bellsound.play();
  62. });
  63. // Book list app
  64. var booktitle = document.getElementById("current-book-title");
  65. var bookauthor = document.getElementById("current-book-author");
  66. var bookend = document.getElementById("current-book-end-date");
  67. var bookpubdate = document.getElementById("current-book-publication-date");
  68. var bookcomments = document.getElementById("current-book-comments");
  69. var booklisticon = document.getElementById("booklist-div-icon");
  70. var currentbookid = books.length - 1;
  71. function updateBook(id) {
  72. booktitle.textContent = books[id].title;
  73. bookauthor.textContent = "Written by " + books[id].author;
  74. bookend.textContent = "I finished it on " + books[id].end_date;
  75. bookpubdate.textContent = "It was published on " + books[id].publication_date;
  76. bookcomments.textContent = books[id].comments;
  77. booklisticon.textContent = books[id].icon;
  78. }
  79. function previousBook() {
  80. if (currentbookid > 0) {
  81. currentbookid --;
  82. updateBook(currentbookid);
  83. } else {
  84. alert("It was the first book !");
  85. }
  86. }
  87. function nextBook() {
  88. if (currentbookid < books.length - 1) {
  89. currentbookid ++;
  90. updateBook(currentbookid);
  91. } else {
  92. alert("It is the last book !");
  93. }
  94. }
  95. document.getElementById("next-book-btn").addEventListener("click", nextBook);
  96. document.getElementById("previous-book-btn").addEventListener("click", previousBook);
  97. updateBook(currentbookid);
  98. // Super secret pong
  99. var pongscore = document.getElementById("super-secret-pong-score");
  100. var pongleftpaddle = document.getElementById("super-secret-pong-left-paddle");
  101. var pongleftpaddleoffset = - 19;
  102. var pongrightpaddle = document.getElementById("super-secret-pong-right-paddle");
  103. var pongrightpaddleoffset = - 51;
  104. var pongpaddlepos;
  105. var pongball = document.getElementById("super-secret-pong-ball");
  106. var pongballyoffset = -83;
  107. var pongballx;
  108. var pongballxvel;
  109. var pongbally;
  110. var pongballyvel;
  111. var ponginterval;
  112. var pongstatus = false;
  113. function pongResetScore() {
  114. pongscore.textContent = "0";
  115. }
  116. function pongInit() {
  117. pongpaddlepos = 18;
  118. pongleftpaddle.style.top = "-1px";
  119. pongrightpaddle.style.top = "-33px";
  120. pongballx = 32;
  121. pongball.style.left = "32px";
  122. pongbally = 32;
  123. pongball.style.top = "-51px";
  124. }
  125. function pongStart() {
  126. pongInit();
  127. pongstatus = true;
  128. pongscore.textContent = "0";
  129. pongballxvel = 6;
  130. pongballyvel = 3;
  131. ponginterval = setInterval(updateBall, 100);
  132. }
  133. function updateBall() {
  134. if (0 > pongbally + pongballyvel || pongbally + pongballyvel > 196) {
  135. if (pongballyvel > 0) {
  136. pongballyvel = - Math.floor(Math.random() * 2) - pongballyvel;
  137. } else {
  138. pongballyvel = Math.floor(Math.random() * 2) - pongballyvel;
  139. }
  140. }
  141. if (18 > pongballx + pongballxvel || pongballx + pongballxvel > 374) {
  142. if (pongpaddlepos < pongbally + pongballyvel && pongbally + pongballyvel < pongpaddlepos + 32) {
  143. if (pongballxvel > 0) {
  144. pongballxvel = - Math.floor(Math.random() * 2) - pongballxvel;
  145. } else {
  146. pongballxvel = Math.floor(Math.random() * 2) - pongballxvel;
  147. }
  148. pongscore.textContent ++;
  149. } else {
  150. clearInterval(ponginterval);
  151. pongstatus = false;
  152. pongballx += pongballxvel;
  153. pongbally += pongballyvel;
  154. pongball.style.left = pongballx.toString() + "px";
  155. var pongballywithoffset = pongbally + pongballyoffset;
  156. pongball.style.top = pongballywithoffset.toString() + "px";
  157. }
  158. }
  159. pongballx += pongballxvel;
  160. pongbally += pongballyvel;
  161. pongball.style.left = pongballx.toString() + "px";
  162. var pongballywithoffset = pongbally + pongballyoffset;
  163. pongball.style.top = pongballywithoffset.toString() + "px";
  164. }
  165. document.getElementById("super-secret-pong-start").addEventListener("click", pongStart);
  166. document.body.addEventListener("keydown", function(event) {
  167. if (event.key == "ArrowUp" && pongstatus) {
  168. if (0 < pongpaddlepos) {
  169. pongpaddlepos -= 4;
  170. var pongleftpaddleposwithoffset = pongpaddlepos + pongleftpaddleoffset;
  171. var pongrightpaddleposwithoffset = pongpaddlepos + pongrightpaddleoffset;
  172. pongleftpaddle.style.top = pongleftpaddleposwithoffset.toString() + "px";
  173. pongrightpaddle.style.top = pongrightpaddleposwithoffset.toString() + "px";
  174. }
  175. } else if (event.key == "ArrowDown" && pongstatus) {
  176. if (pongpaddlepos < 168) {
  177. pongpaddlepos += 4;
  178. var pongleftpaddleposwithoffset = pongpaddlepos + pongleftpaddleoffset;
  179. var pongrightpaddleposwithoffset = pongpaddlepos + pongrightpaddleoffset;
  180. pongleftpaddle.style.top = pongleftpaddleposwithoffset.toString() + "px";
  181. pongrightpaddle.style.top = pongrightpaddleposwithoffset.toString() + "px";
  182. }
  183. }
  184. });
  185. pongInit();
  186. // Super secret button
  187. var supersecretcounter = 0;
  188. var pongSound = new Audio("../sounds/pong.mp3");
  189. document.getElementById("harupios-btn").addEventListener("click", function() {
  190. supersecretcounter ++;
  191. pongSound.play();
  192. if (supersecretcounter == 8) {
  193. document.getElementById("super-secret-pong-div-open").classList.remove("hidden");
  194. document.getElementById("super-secret-pong-div").classList.remove("hidden");
  195. }
  196. });