lecture.html 9.6 KB

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