lesson.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. var renderer = new marked.Renderer();
  2. renderer.code = function(code, language) {
  3. if (language == "mermaid") return '<pre class="mermaid">' + code + "</pre>";
  4. else return "<pre><code>" + code + "</code></pre>";
  5. };
  6. function lesson_show(id) {
  7. $.get(
  8. "../course/lesson_get.php", {
  9. id: id,
  10. },
  11. function(data, status) {
  12. let arrLesson = JSON.parse(data);
  13. let html = "";
  14. for (const lesson of arrLesson) {
  15. html += '<div class="card" style="display:flex;margin:1em;padding:10px;">';
  16. html += '<div style="flex:7;">';
  17. html += '<div class="pd-10">';
  18. html +=
  19. '<div class="title" style="padding-bottom:5px;font-size:200%;font-weight:600;">' +
  20. lesson["title"] +
  21. "</div>";
  22. html += '<div style="">';
  23. let summary = "";
  24. try {
  25. summary = marked(lesson["summary"], { renderer: renderer });
  26. } catch {}
  27. html += '<div class="summary" style="padding-bottom:5px;">' + summary + "</div>";
  28. let live = "";
  29. try {
  30. live = marked(lesson["live"], { renderer: renderer });
  31. } catch {}
  32. html += '<div class="summary" style="padding-bottom:5px;">' + live + "</div>";
  33. let replay = "";
  34. try {
  35. replay = marked(lesson["replay"], { renderer: renderer });
  36. } catch {}
  37. html += '<div class="summary" style="padding-bottom:5px;">' + replay + "</div>";
  38. let attachment = "";
  39. try {
  40. attachment = note_init(lesson["attachment"]);
  41. } catch {}
  42. html += '<div class="summary" style="padding-bottom:5px;">' + attachment + "</div>";
  43. html += "</div>";
  44. html += "</div>";
  45. html += "</div>";
  46. html += '<div style="flex:3;max-width:15em;">';
  47. let d = new Date();
  48. d.setTime(lesson["date"]);
  49. let strData = d.toLocaleDateString();
  50. let strTime = d.toLocaleTimeString();
  51. html += "<div >" + gLocal.gui.date + ":" + strData + "</div>";
  52. html += "<div >" + gLocal.gui.time + ":" + strTime + "</div>";
  53. let dt = lesson["duration"] / 60;
  54. let sdt = "";
  55. if (dt > 59) {
  56. sdt += Math.floor(dt / 60) + gLocal.gui.h;
  57. }
  58. let m = dt % 60;
  59. if (m > 0) {
  60. sdt += (dt % 60) + gLocal.gui.mins;
  61. }
  62. html += "<div >" + gLocal.gui.duration + ":" + sdt + "</div>";
  63. let now = new Date();
  64. let lesson_time = "";
  65. if (now < lesson["date"]) {
  66. lesson_time = gLocal.gui.not_started;
  67. } else if (now > lesson["date"] && now < lesson["date"] + dt * 1000) {
  68. lesson_time = gLocal.gui.in_progress;
  69. } else {
  70. lesson_time = gLocal.gui.already_over;
  71. }
  72. html += '<div ><span class="lesson_status">' + lesson_time + "</span></div>";
  73. html += "</div>";
  74. html += "</div>";
  75. }
  76. $("#lesson_list").html(html);
  77. note_refresh_new();
  78. mermaid.initialize();
  79. }
  80. );
  81. }
  82. function lesson_load(lesson_id) {
  83. $.get(
  84. "../course/lesson_get.php", {
  85. id: lesson_id,
  86. },
  87. function(data, status) {
  88. let html = "";
  89. let lesson_info = JSON.parse(data);
  90. if (lesson_info) {
  91. //head
  92. html += "<div id='course_info_head' class='course_info_block'>";
  93. html += "<div id='course_info_head_title'>";
  94. html += "<div id='course_title'>" + lesson_info.title + "</div>";
  95. html += "<div id='course_subtitle'>" + lesson_info.subtitle + "</div>";
  96. html += "</div>";
  97. html += "</div>";
  98. //end of head
  99. let d = new Date();
  100. d.setTime(lesson_info.date);
  101. let strData = d.toLocaleDateString();
  102. let strTime = d.toLocaleTimeString();
  103. let dt = lesson_info["duration"] / 60;
  104. let strDuration = "";
  105. if (dt > 59) {
  106. strDuration += Math.floor(dt / 60) + gLocal.gui.h;
  107. }
  108. let m = dt % 60;
  109. if (m > 0) {
  110. strDuration += (dt % 60) + gLocal.gui.mins;
  111. }
  112. html += "<div id='lesson_info_head_2' class='course_info_block'>";
  113. html += "<div class='info_item'>" + "<span>"+gLocal.gui.time_arrange+":</span><span>" + strData + " " + strTime + "</span></div>";
  114. html +=
  115. "<div class='info_item'>" + "<span>" + gLocal.gui.duration + ":</span><span>" + strDuration + "</span></div>";
  116. html += "<div class='info_item'>" + "<span>" + gLocal.gui.speaker + ":<span>";
  117. html +=
  118. "<a href='../uhome/course.php?userid=" +
  119. lesson_info.teacher +
  120. "'>" +
  121. lesson_info.teacher_info.nickname +
  122. "</a>";
  123. html += "</span>";
  124. //html += "<span>地区:缅甸</span>";
  125. html += "</div>";
  126. html += "</div>";
  127. // end of course_info_head_2
  128. //live
  129. if (lesson_info.live && lesson_info.live.length > 0) {
  130. html += "<div id='course_info_live' class='course_info_block'>";
  131. html += "<h2>" + gLocal.gui.notice_live + "</h2>";
  132. try {
  133. html += marked(lesson_info.live);
  134. } catch (e) {
  135. html += e.message;
  136. }
  137. html += "</div>";
  138. }
  139. //end of live
  140. //replay
  141. if (lesson_info.replay && lesson_info.replay.length > 0) {
  142. html += "<div id='course_info_replay' class='course_info_block'>";
  143. html += "<h2>" + gLocal.gui.record_replay + "</h2>";
  144. try {
  145. html += marked(lesson_info.replay);
  146. } catch (e) {
  147. html += e.message;
  148. }
  149. html += "</div>";
  150. }
  151. //end of replay
  152. //attachment
  153. if (lesson_info.attachment && lesson_info.attachment.length > 0) {
  154. html += "<div id='course_info_attachment' class='course_info_block'>";
  155. html += "<h2>" + gLocal.gui.attachment + "</h2>";
  156. try {
  157. html += "<div class='course_info_content'>";
  158. html += note_init(lesson_info.attachment);
  159. html += "</div>";
  160. } catch (e) {
  161. html += e.message;
  162. }
  163. html += "</div>";
  164. }
  165. //end of attachment
  166. //content
  167. if (lesson_info.summary && lesson_info.summary.length > 0) {
  168. html += "<div id='course_info_content' class='course_info_block'>";
  169. html += "<h2>" + gLocal.gui.detaile + "</h2>";
  170. try {
  171. html += marked(lesson_info.summary);
  172. } catch (e) {
  173. html += e.message;
  174. }
  175. html += "</div>";
  176. }
  177. //end of attachment
  178. $("#lesson_info").html(html);
  179. $("#page_title").text(lesson_info.title);
  180. note_refresh_new();
  181. render_course_info(lesson_info.course_id);
  182. render_lesson_list(lesson_info.course_id, lesson_info.id);
  183. }
  184. }
  185. );
  186. }
  187. function render_course_info(course_id) {
  188. $.get(
  189. "../course/course_get.php", {
  190. id: course_id,
  191. },
  192. function(data, status) {
  193. let html = "";
  194. let course_info = JSON.parse(data);
  195. if (course_info) {
  196. let html = "";
  197. html += "<div id='parent_title'>";
  198. html += "<a href='../course/course.php?id=" + course_info.id + "'>";
  199. html += course_info.title;
  200. html += "</a>";
  201. html += "</div>";
  202. html += "<div id='course_button'>";
  203. html += "<button>"+gLocal.gui.watch+"</button>";
  204. html += "<button>"+gLocal.gui.sign_up+"</button>";
  205. html += "</div>";
  206. $("#course_info").html(html);
  207. }
  208. }
  209. );
  210. }
  211. function render_lesson_list(course_id, currLesson) {
  212. $.get(
  213. "../course/lesson_list.php", {
  214. id: course_id,
  215. },
  216. function(data, status) {
  217. let arrLesson = JSON.parse(data);
  218. let html = "";
  219. for (const lesson of arrLesson) {
  220. let currlessonStyle = "";
  221. if (lesson.id == currLesson) {
  222. currlessonStyle = " curr_lesson";
  223. } else {
  224. currlessonStyle = " not_curr_lesson";
  225. }
  226. //计算课程是否已经开始
  227. let now = new Date();
  228. let class_lesson_time = "";
  229. let dt = lesson["duration"] / 60;
  230. if (now < lesson["date"]) {
  231. class_lesson_time = "not_started";
  232. } else if (now > lesson["date"] && now < lesson["date"] + dt * 1000) {
  233. class_lesson_time = "in_progress";
  234. } else {
  235. class_lesson_time = "already_over";
  236. }
  237. html += '<div class="lesson_card ' + currlessonStyle + '" >';
  238. let d = new Date();
  239. d.setTime(lesson["date"]);
  240. let strData = d.toLocaleDateString();
  241. let strTime = d.toLocaleTimeString();
  242. html += '<div class="pd-10">';
  243. html += "<div class='datatime " + class_lesson_time + "'>" + strData + " " + strTime + "</div>";
  244. html +=
  245. '<div class="title" ><a href="../course/lesson.php?id=' +
  246. lesson["id"] +
  247. '">' +
  248. lesson["title"] +
  249. "</a></div>";
  250. html += "</div>";
  251. html += "</div>";
  252. }
  253. $("#lesson_list").html(html);
  254. }
  255. );
  256. }
  257. function lesson_get_timeline_settime(start, div) {
  258. let lessonTime;
  259. if (start) {
  260. lessonTime = new Date(parseInt(start));
  261. } else {
  262. lessonTime = new Date();
  263. }
  264. let month = lessonTime.getMonth() + 1;
  265. month = month > 9 ? month : "0" + month;
  266. let d = lessonTime.getDate();
  267. d = d > 9 ? d : "0" + d;
  268. let data = lessonTime.getFullYear() + "-" + month + "-" + d;
  269. let strData = "<input type='date' id='" + div + "_date' value='" + data + "'/>";
  270. let H = lessonTime.getHours();
  271. H = H > 9 ? H : "0" + H;
  272. let M = lessonTime.getMinutes();
  273. M = M > 9 ? M : "0" + M;
  274. let strTime = "<input type='time' id='" + div + "_time' value='" + H + ":" + M + "'/>";
  275. $("#form_" + div).html(strData + strTime);
  276. }
  277. function lesson_get_timeline_submit() {
  278. let start_date = new Date();
  279. let start_data = $("#start_date").val().split("-");
  280. let start_time = $("#start_time").val().split(":");
  281. start_date.setFullYear(start_data[0], parseInt(start_data[1]) - 1, start_data[2]);
  282. start_date.setHours(start_time[0], start_time[1]);
  283. let end_date = new Date();
  284. let end_data = $("#end_date").val().split("-");
  285. let end_time = $("#end_time").val().split(":");
  286. end_date.setFullYear(end_data[0], parseInt(end_data[1]) - 1, end_data[2]);
  287. end_date.setHours(end_time[0], end_time[1], 0, 0);
  288. location.assign("../course/lesson_get_timeline.php?start=" + start_date.getTime() + "&end=" + end_date.getTime());
  289. }
  290. function lesson_get_timeline_json(start, end) {
  291. $.get(
  292. "../ucenter/active_log_get.php", {
  293. start: start,
  294. end: end,
  295. },
  296. function(data) {
  297. $("#timeline_json").val(data);
  298. let json = JSON.parse(data);
  299. let html = "<table>";
  300. for (const row of json) {
  301. html += "<tr>";
  302. let start_date = new Date(parseInt(row.time));
  303. html += "<td>" + start_date.getHours() + ":" + start_date.getMinutes() + "</td>";
  304. html += "<td>" + gLocal.LogType[row.active] + "</td>";
  305. html += "<td>";
  306. switch (row.active) {
  307. case "30":
  308. html += "<a href='../dict/?word=" + row.content + "' target='_blank'>" + row.content + "</a>";
  309. break;
  310. case "11":
  311. break;
  312. case "20":
  313. break;
  314. default:
  315. html += row.content;
  316. break;
  317. }
  318. html += "</td>";
  319. html += "</tr>";
  320. }
  321. html += "</table>";
  322. $("#timeline_table").html(html);
  323. }
  324. );
  325. }