lecture.html 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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>
  34. </template>
  35. </div>
  36. <form id="questionForm" style="display:none" method="post">
  37. <h1 id="questionHeader"></h1>
  38. <label>Your name
  39. <input id="questionName" type="text">
  40. </label>
  41. <label>Title
  42. <input id="questionTitle" type="text">
  43. </label>
  44. <label>Question
  45. <textarea id="questionContent" minlength="15" required></textarea>
  46. </label>
  47. <button id="questionAsk" type="button">Ask</button>
  48. <button id="questionCancel" type="button">Cancel</button>
  49. </form>
  50. <script>
  51. let video = document.getElementById("video");
  52. let sizeIframe = ()=>{
  53. let width = window.innerWidth;
  54. let height = window.innerHeight;
  55. video.width = width * 0.75;
  56. video.height = height * 0.75;
  57. }
  58. video.onload = sizeIframe();
  59. let id = window.location.href.split("/");
  60. id = id[id.length-1];
  61. fetch(`/learn/lectures/json/one/${id}`)
  62. .then(response => response.json())
  63. .then((response)=>{
  64. let date = new Date(response.createdDate);
  65. document.getElementById("title").innerText = response.title;
  66. document.getElementById("course").innerText = response.course.title;
  67. document.getElementById("date").innerText = date.toDateString();
  68. video.src = response.video;
  69. let documents = document.getElementById("documents");
  70. if(response.documents.length === 0) document.getElementById("resourceTitle").style.display = "none";
  71. for(let i = 0; i < response.documents.length; i++){
  72. let a = document.createElement("a");
  73. a.classList.add("liPad");
  74. a.href = response.documents[i].link;
  75. a.innerText = response.documents[i].name.replaceAll("_", " ");
  76. documents.appendChild(a);
  77. }
  78. let exercises = document.getElementById("exercises");
  79. if(response.exercises.length === 0) document.getElementById("exerciseTitle").style.display = "none";
  80. for(let i = 0; i < response.exercises.length; i++){
  81. let li = document.createElement("li");
  82. li.classList.add("liPad");
  83. li.innerText = response.exercises[i];
  84. exercises.appendChild(li);
  85. }
  86. let readings = document.getElementById("readings");
  87. if(response.furtherReading.length === 0) document.getElementById("readingtitle").style.display = "none";
  88. for(let i = 0; i < response.furtherReading.length; i++){
  89. let li = document.createElement("li");
  90. li.classList.add("liPad");
  91. readings.appendChild(li);
  92. let a = document.createElement("a");
  93. a.href = response.furtherReading[i].link;
  94. a.innerText = response.furtherReading[i].text;
  95. li.appendChild(a);
  96. }
  97. //Populate questions
  98. let template = document.getElementById("question").content.children[0];
  99. let questionContainer = document.getElementById("questionContainer");
  100. response.questions.reverse();
  101. for(let i = 0; i < response.questions.length; i++){
  102. let date = new Date(response.questions[i].createdAt);
  103. date = date.toLocaleString("en-US");
  104. let question = template.cloneNode(true);
  105. question.querySelector(".questTitle").innerText = response.questions[i].title;
  106. question.querySelector(".questName").innerText = response.questions[i].name;
  107. question.querySelector(".questDate").innerText = date;
  108. question.querySelector(".questContent").innerText = response.questions[i].content;
  109. questionContainer.appendChild(question);
  110. }
  111. })
  112. .catch((err)=>{});
  113. //New Question
  114. let form = document.getElementById("questionForm");
  115. let formTitle = document.getElementById("questionHeader");
  116. let lecture = window.location.href.split("/");
  117. lecture = lecture[lecture.length-1];
  118. document.getElementById("questionCancel").onclick = ()=>{form.style.display = "none"};
  119. document.getElementById("questionButton").onclick = ()=>{
  120. form.style.display = "flex";
  121. form.route = "/learn/questions/create";
  122. formTitle.innerText = "Ask a Question";
  123. };
  124. document.getElementById("questionAsk").onclick = ()=>{
  125. event.preventDefault();
  126. form.style.display = "none";
  127. let data = {
  128. lecture: lecture,
  129. name: document.getElementById("questionName").value,
  130. title: document.getElementById("questionTitle").value,
  131. content: document.getElementById("questionContent").value
  132. };
  133. fetch(form.route, {
  134. method: "post",
  135. headers: {
  136. "Content-Type": "application/json"
  137. },
  138. body: JSON.stringify(data)
  139. })
  140. .then(response => response.json())
  141. .then((response)=>{
  142. if(typeof(response) !== "string"){
  143. let template = document.getElementById("question").content.children[0];
  144. let questionContainer = document.getElementById("questionContainer");
  145. let date = new Date(response.createdAt);
  146. date = date.toLocaleString("en-US");
  147. let question = template.cloneNode(true);
  148. question.querySelector(".questTitle").innerText = response.title;
  149. question.querySelector(".questName").innerText = response.name;
  150. question.querySelector(".questDate").innerText = date;
  151. question.querySelector(".questContent").innerText = response.content;
  152. questionContainer.insertBefore(question, questionContainer.firstChild);
  153. }
  154. })
  155. .catch((err)=>{});
  156. }
  157. //New Answer
  158. </script>
  159. </body>
  160. </html>