lecture.html 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Lee Morgan -lecture-</title>
  6. <link rel="icon" type="img/ico" href="/images/favicon">
  7. <link rel="stylesheet" href="/learn/style">
  8. </head>
  9. <body id="lectureBody">
  10. <h1 id="title"></h1>
  11. <h3 id="course"></h3>
  12. <h6 id="date"></h6>
  13. <iframe id="video"></iframe>
  14. <div id="lectureData">
  15. <h2 id="exerciseTitle">Exercises</h2>
  16. <ol id="exercises"></ol>
  17. <h2 id="readingTitle">Further Reading</h2>
  18. <ul id="readings"></ul>
  19. <h2 id="resourceTitle">Resources</h2>
  20. <div id="documents"></div>
  21. </div>
  22. <h1>Q&A</h1>
  23. <button id="questionButton">Ask a question</button>
  24. <div id="questionContainer">
  25. <template id="question">
  26. <div class="question">
  27. <h2 class="questTitle"></h2>
  28. <div class="questHead">
  29. <p class="questName"></p>
  30. <p>at</p>
  31. <p class="questDate"></p>
  32. </div>
  33. <p class="questContent"></p>
  34. <div class="answerContainer"></div>
  35. </div>
  36. </template>
  37. <template id="answer">
  38. <div class="answer">
  39. <div class="answerHeader">
  40. <p class="answerName"></p>
  41. <p>at</p>
  42. <p class="answerDate"></p>
  43. </div>
  44. <p class="answerContent"></p>
  45. </div>
  46. </template>
  47. </div>
  48. <form id="questionForm" style="display:none" method="post">
  49. <h1 id="questionHeader"></h1>
  50. <label>Your name
  51. <input id="questionName" type="text">
  52. </label>
  53. <label>Title
  54. <input id="questionTitle" type="text">
  55. </label>
  56. <label>Question
  57. <textarea id="questionContent" minlength="15" required></textarea>
  58. </label>
  59. <button id="questionAsk" type="button">Ask</button>
  60. <button id="questionCancel" type="button">Cancel</button>
  61. </form>
  62. <script>
  63. let video = document.getElementById("video");
  64. let sizeIframe = ()=>{
  65. let width = window.innerWidth;
  66. let height = window.innerHeight;
  67. video.width = width * 0.75;
  68. video.height = height * 0.75;
  69. }
  70. video.onload = sizeIframe();
  71. let id = window.location.href.split("/");
  72. id = id[id.length-1];
  73. fetch(`/learn/lectures/json/one/${id}`)
  74. .then(response => response.json())
  75. .then((response)=>{
  76. let date = new Date(response.createdDate);
  77. document.getElementById("title").innerText = response.title;
  78. document.getElementById("course").innerText = response.course.title;
  79. document.getElementById("date").innerText = date.toDateString();
  80. video.src = response.video;
  81. let documents = document.getElementById("documents");
  82. if(response.documents.length === 0) document.getElementById("resourceTitle").style.display = "none";
  83. for(let i = 0; i < response.documents.length; i++){
  84. let a = document.createElement("a");
  85. a.classList.add("liPad");
  86. a.href = response.documents[i].link;
  87. a.innerText = response.documents[i].name.replaceAll("_", " ");
  88. documents.appendChild(a);
  89. }
  90. let exercises = document.getElementById("exercises");
  91. if(response.exercises.length === 0) document.getElementById("exerciseTitle").style.display = "none";
  92. for(let i = 0; i < response.exercises.length; i++){
  93. let li = document.createElement("li");
  94. li.classList.add("liPad");
  95. li.innerText = response.exercises[i];
  96. exercises.appendChild(li);
  97. }
  98. let readings = document.getElementById("readings");
  99. if(response.furtherReading.length === 0) document.getElementById("readingTitle").style.display = "none";
  100. for(let i = 0; i < response.furtherReading.length; i++){
  101. let li = document.createElement("li");
  102. li.classList.add("liPad");
  103. readings.appendChild(li);
  104. let a = document.createElement("a");
  105. a.href = response.furtherReading[i].link;
  106. a.innerText = response.furtherReading[i].text;
  107. li.appendChild(a);
  108. }
  109. //Populate questions
  110. let template = document.getElementById("question").content.children[0];
  111. let answerTemplate = document.getElementById("answer").content.children[0];
  112. let questionContainer = document.getElementById("questionContainer");
  113. response.questions.reverse();
  114. for(let i = 0; i < response.questions.length; i++){
  115. let date = new Date(response.questions[i].createdAt);
  116. date = date.toLocaleString("en-US");
  117. let question = template.cloneNode(true);
  118. question.querySelector(".questTitle").innerText = response.questions[i].title;
  119. question.querySelector(".questName").innerText = response.questions[i].name;
  120. question.querySelector(".questDate").innerText = date;
  121. question.querySelector(".questContent").innerText = response.questions[i].content;
  122. questionContainer.appendChild(question);
  123. //Populate answers
  124. response.questions[i].answers.reverse();
  125. for(let j = 0; j < response.questions[i].answers.length; j++){
  126. let answer = response.questions[i].answers[j];
  127. let answerDate = new Date(answer.createdAt);
  128. answerDate = answerDate.toLocaleString("en-US");
  129. let elem = answerTemplate.cloneNode(true);
  130. elem.querySelector(".answerName").innerText = answer.name;
  131. elem.querySelector(".answerDate").innerText = answerDate;
  132. elem.querySelector(".answerContent").innerText = answer.content;
  133. question.querySelector(".answerContainer").appendChild(elem);
  134. }
  135. }
  136. })
  137. .catch((err)=>{});
  138. //New Question
  139. let form = document.getElementById("questionForm");
  140. let formTitle = document.getElementById("questionHeader");
  141. let lecture = window.location.href.split("/");
  142. lecture = lecture[lecture.length-1];
  143. document.getElementById("questionCancel").onclick = ()=>{form.style.display = "none"};
  144. document.getElementById("questionButton").onclick = ()=>{
  145. form.style.display = "flex";
  146. form.route = "/learn/questions/create";
  147. formTitle.innerText = "Ask a Question";
  148. };
  149. document.getElementById("questionAsk").onclick = ()=>{
  150. event.preventDefault();
  151. form.style.display = "none";
  152. let data = {
  153. lecture: lecture,
  154. name: document.getElementById("questionName").value,
  155. title: document.getElementById("questionTitle").value,
  156. content: document.getElementById("questionContent").value
  157. };
  158. fetch(form.route, {
  159. method: "post",
  160. headers: {
  161. "Content-Type": "application/json"
  162. },
  163. body: JSON.stringify(data)
  164. })
  165. .then(response => response.json())
  166. .then((response)=>{
  167. if(typeof(response) !== "string"){
  168. let template = document.getElementById("question").content.children[0];
  169. let questionContainer = document.getElementById("questionContainer");
  170. let date = new Date(response.createdAt);
  171. date = date.toLocaleString("en-US");
  172. let question = template.cloneNode(true);
  173. question.querySelector(".questTitle").innerText = response.title;
  174. question.querySelector(".questName").innerText = response.name;
  175. question.querySelector(".questDate").innerText = date;
  176. question.querySelector(".questContent").innerText = response.content;
  177. questionContainer.insertBefore(question, questionContainer.firstChild);
  178. }
  179. })
  180. .catch((err)=>{});
  181. }
  182. </script>
  183. </body>
  184. </html>