classes.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * ЭЛЕКТРОННЫЙ ЖУРНАЛ «ШКАЛА»: БЛОК РЕДАКТИРОВАНИЯ СПИСКА КЛАССОВ
  3. * Copyright © 2019, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // Массив названий классов
  7. let classesList = [];
  8. // Публикация списка классов на страничке из массива clArr
  9. const clListPubl = clArr => {
  10. if (!clArr.length) {
  11. dqs("#clList").innerHTML = "Классов не найдено.";
  12. return;
  13. }
  14. // Сначала сортируем массив классов правильным образом,
  15. // затем публикуем с иконками удаления
  16. let massiv = classSort(clArr); // определена в ini.js
  17. let cont = '',
  18. currNum = Number(massiv[0].substr(0, massiv[0].length - 1));
  19. for (let currCl of massiv) {
  20. let num = Number(currCl.substr(0, currCl.length - 1));
  21. if (num != currNum) {
  22. currNum = num;
  23. cont += "<br>";
  24. }
  25. cont += `<span>
  26. <div onclick="classNumDel('${currCl}')">&#10060;</div>${currCl}</span>`;
  27. }
  28. dqs("#clList").innerHTML = cont;
  29. };
  30. // Отправка запроса к API для добавления класса
  31. const classAdd = async () => {
  32. let newClassName = dqs("#addClassNum").value.toString()
  33. + dqs("#addClassLit").value;
  34. dqs("#addClassNum").value = '1';
  35. dqs("#addClassLit").value = 'А';
  36. let apiResp = await apireq("classAdd", newClassName);
  37. if (apiResp == "none") info(1, "Запрашиваемая операция отклонена.");
  38. else {
  39. classesList.push(newClassName);
  40. clListPubl(classesList);
  41. }
  42. };
  43. // Удаление класса
  44. const classNumDel = async (clNum) => {
  45. if (!confirm("Вы уверены?")) return;
  46. let apiResp = await apireq("classDel", clNum);
  47. if (apiResp == "none") info(1, "Запрашиваемая операция отклонена.");
  48. else {
  49. let clIndex = classesList.indexOf(clNum);
  50. if (clIndex > -1) classesList.splice(clIndex, 1);
  51. clListPubl(classesList);
  52. }
  53. }
  54. // Формирование контента странички
  55. createSection("classes", `
  56. <h3>Список классов</h3>
  57. <div id="clList"></div><br>
  58. <select id="addClassNum"></select>
  59. <select id="addClassLit"></select>
  60. <button type="button" onclick="classAdd()">Добавить</button>
  61. `);
  62. // Формирование опций селектов для добавления класса
  63. let clNumOpt = '', clLitOpt = '', clLiters = "АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЭЮЯ";
  64. for (let i = 1; i < 12; i++)
  65. clNumOpt += `<option>${i}</option>`;
  66. for (let i = 0; i < clLiters.length; i++)
  67. clLitOpt += `<option>${clLiters.charAt(i)}</option>`;
  68. dqs("#addClassNum").innerHTML = clNumOpt;
  69. dqs("#addClassLit").innerHTML = clLitOpt;
  70. // Динамически подгружаем список классов в массив classesList
  71. // с помощью API и публикуем его на страничке (имя метода = имени пункта меню!)
  72. getContent.classes = async () => {
  73. let apiResp = await apireq("classesList");
  74. if (apiResp != "none") classesList = JSON.parse(apiResp);
  75. clListPubl(classesList);
  76. }