Редактирование структуры модулей ГитЖС | Editing of GitJS modules' structure
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

490 lines
17KB

  1. // // // //
  2. СохранитьФлагиФайлаМодуля = мир =>
  3. {
  4. var файлы = Object.keys(мир.редактируемыйМодуль.структура).sort();
  5. var файл = файлы[мир.номерФайлаМодуля];
  6. var флаги = {};
  7. for (var номер = 0; номер < мир.флагиФайлаМодуля.length; ++номер)
  8. {
  9. var флаг = мир.флагиФайлаМодуля[номер];
  10. console.debug("флаг", флаг);
  11. if (флаг == "x")
  12. {
  13. флаги["исполнить"] = true;
  14. }
  15. else if (флаг == "2")
  16. {
  17. флаги["двоичный"] = true;
  18. }
  19. }
  20. мир.редактируемыйМодуль.структура[файл] = флаги;
  21. console.debug("сохранить флаги файла модуля", файл, флаги)
  22. };
  23. // // // //
  24. ОтслеживатьСменуФлаговУФайловМодуля = мир =>
  25. {
  26. var файлы = Object.keys(мир.редактируемыйМодуль.структура).sort();
  27. for (var номер in файлы)
  28. {
  29. const idФлаги = мир.макет.зав.файлыСписокФлаги.replace("%номер%", номер);
  30. const номерФайла = номер;
  31. $(`#${idФлаги}`).on("input", function() {
  32. мир.номерФайлаМодуля = номерФайла;
  33. мир.флагиФайлаМодуля = $(`#${idФлаги}`).val();
  34. мир.уведомить("сменили флаги у файла модуля");
  35. });
  36. }
  37. };
  38. // // // //
  39. СоздатьХранилищеПереименованийФайловМодуля = мир =>
  40. {
  41. мир.переименования = {}
  42. };
  43. // // // //
  44. СохранитьПереименованиеФайловМодуля = мир =>
  45. {
  46. for (var было in мир.переименования)
  47. {
  48. var стало = мир.переименования[было];
  49. мир.редактируемыйМодуль.структура[стало] = мир.редактируемыйМодуль.структура[было];
  50. мир.редактируемыйМодуль.содержимое[стало] = мир.редактируемыйМодуль.содержимое[было];
  51. delete мир.редактируемыйМодуль.структура[было];
  52. delete мир.редактируемыйМодуль.содержимое[было];
  53. }
  54. мир.переименования = {};
  55. };
  56. // // // //
  57. ЗапомнитьПереименованиеФайлаМодуля = мир =>
  58. {
  59. var файлы = Object.keys(мир.редактируемыйМодуль.структура).sort();
  60. var файл = файлы[мир.номерФайлаМодуля];
  61. мир.переименования[файл] = мир.имяФайлаМодуля;
  62. console.debug(`НАДО переименовать '${файл}' в '${мир.имяФайлаМодуля}'`)
  63. };
  64. // // // //
  65. ОтслеживатьПереименованиеФайловМодуля = мир =>
  66. {
  67. var файлы = Object.keys(мир.редактируемыйМодуль.структура).sort();
  68. for (var номер in файлы)
  69. {
  70. const idИмя = мир.макет.зав.файлыСписокИмя.replace("%номер%", номер);
  71. const номерФайла = номер;
  72. $(`#${idИмя}`).on("input", function() {
  73. мир.номерФайлаМодуля = номерФайла;
  74. мир.имяФайлаМодуля = $(`#${idИмя}`).val();
  75. мир.уведомить("переименовали файл модуля");
  76. });
  77. }
  78. };
  79. // // // //
  80. УдалитьФайлМодуля = мир =>
  81. {
  82. var файлы = Object.keys(мир.редактируемыйМодуль.структура).sort();
  83. var файл = файлы[мир.номерФайлаМодуля];
  84. delete мир.редактируемыйМодуль.структура[файл];
  85. delete мир.редактируемыйМодуль.содержимое[файл];
  86. };
  87. // // // //
  88. СпроситьПодтверждениеУдаленияФайлаМодуля = мир =>
  89. {
  90. var файлы = Object.keys(мир.редактируемыйМодуль.структура).sort();
  91. var файл = файлы[мир.номерФайлаМодуля];
  92. $(`#${мир.макет.зав.файлыПодтверждениеУдаленияИмя}`).html(файл);
  93. UIkit.modal($(`#${мир.макет.зав.файлыПодтверждениеУдаления}`)).show();
  94. };
  95. // // // //
  96. СоздатьДиалогПодтвержденияУдаленияФайлаМодуля = мир =>
  97. {
  98. $(`#${мир.макет.константы.содержимое}`).append(`
  99. <div id="${мир.макет.зав.файлыПодтверждениеУдаления}" uk-modal>
  100. <div class="uk-modal-dialog">
  101. <div class="uk-modal-header">
  102. <h2 class="uk-modal-title">Удалить файл? | Delete the file? </h2>
  103. </div>
  104. <div class="uk-modal-body">
  105. <p id="${мир.макет.зав.файлыПодтверждениеУдаленияИмя}"></p>
  106. </div>
  107. <div class="uk-modal-footer uk-text-right">
  108. <button class="uk-button uk-button-default uk-modal-close" type="button">Отмена | Cancel</button>
  109. <button id="${мир.макет.зав.файлыПодтверждениеУдаленияУдалить}" class="uk-button uk-button-danger uk-modal-close" type="button">Удалить | Delete</button>
  110. </div>
  111. </div>
  112. </div>
  113. `);
  114. $(`#${мир.макет.зав.файлыПодтверждениеУдаленияУдалить}`).click(function() {
  115. мир.уведомить("подтвердили удаление файла модуля");
  116. });
  117. };
  118. // // // //
  119. ОтслеживатьУдалениеФайлаМодуля = мир =>
  120. {
  121. var файлы = Object.keys(мир.редактируемыйМодуль.структура).sort();
  122. for (var номер in файлы)
  123. {
  124. var idУдалить = мир.макет.зав.файлыСписокУдалить.replace("%номер%", номер);
  125. const номерФайла = номер;
  126. $(`#${idУдалить}`).click(function() {
  127. мир.номерФайлаМодуля = номерФайла;
  128. мир.уведомить("кнопка удаления файла модуля");
  129. });
  130. }
  131. };
  132. // // // //
  133. ОчиститьИзменениеФайловМодуля = мир =>
  134. {
  135. $(`#${мир.макет.зав.файлыИзменение}`).attr("hidden", true);
  136. };
  137. // // // //
  138. ОтобразитьИзменениеФайловМодуля = мир =>
  139. {
  140. $(`#${мир.макет.зав.файлыИзменение}`).removeAttr("hidden");
  141. };
  142. // // // //
  143. ДобавитьФайлМодуля = мир =>
  144. {
  145. мир.редактируемыйМодуль.структура[мир.имяФайлаМодуля] = {};
  146. мир.редактируемыйМодуль.содержимое[мир.имяФайлаМодуля] = "";
  147. };
  148. // // // //
  149. СообщитьОНаличииДубляФайла = мир =>
  150. {
  151. var сообщение = "Такое имя файла уже существует | Such file name is already present";
  152. UIkit.modal.alert(сообщение);
  153. console.error(сообщение);
  154. };
  155. // // // //
  156. ПроверитьОтсутствиеДубляФайла = мир =>
  157. {
  158. for (var файл in мир.редактируемыйМодуль.структура)
  159. {
  160. if (файл == мир.имяФайлаМодуля)
  161. {
  162. мир.уведомить("дубль файла присутствует");
  163. return;
  164. }
  165. мир.уведомить("дубль файла отсутствует");
  166. }
  167. };
  168. // // // //
  169. ОтслеживатьДобавлениеФайлаМодуля = мир =>
  170. {
  171. $(`#${мир.макет.зав.добавитьФайлКнопка}`).click(function() {
  172. мир.имяФайлаМодуля = $(`#${мир.макет.зав.добавитьФайлИмя}`).val();
  173. мир.уведомить("кнопка добавления файла модуля");
  174. });
  175. };
  176. // // // //
  177. ОтобразитьСписокФайловМодуля = мир =>
  178. {
  179. var список = "";
  180. var файлы = Object.keys(мир.редактируемыйМодуль.структура).sort();
  181. for (var номер in файлы)
  182. {
  183. // Файл.
  184. var файл = файлы[номер];
  185. // Флаги.
  186. var строкаФлагов = "";
  187. var флаги = мир.редактируемыйМодуль.структура[файл];
  188. for (var флаг in флаги)
  189. {
  190. if (флаг == "исполнить")
  191. {
  192. строкаФлагов += "x";
  193. }
  194. else if (флаг == "двоичный")
  195. {
  196. строкаФлагов += "2";
  197. }
  198. }
  199. // id.
  200. var idИмя = мир.макет.зав.файлыСписокИмя.replace("%номер%", номер);
  201. var idФлаги = мир.макет.зав.файлыСписокФлаги.replace("%номер%", номер);
  202. var idУдалить = мир.макет.зав.файлыСписокУдалить.replace("%номер%", номер);
  203. var имяФайла = файл;
  204. if (мир.переименования[файл]) {
  205. имяФайла = мир.переименования[файл];
  206. }
  207. список += `
  208. <tr>
  209. <td>
  210. <input id="${idИмя}" value="${имяФайла}" class="uk-input uk-margin-small" type="text" placeholder="Имя | Name">
  211. </td>
  212. <td>
  213. <input id="${idФлаги}" value="${строкаФлагов}" class="uk-input uk-margin-small" type="text" placeholder="Флаги | Flags">
  214. </td>
  215. <td>
  216. <button id="${idУдалить}" class="uk-button uk-button-danger">
  217. <span uk-icon="minus"></span>
  218. </button>
  219. </td>
  220. </tr>
  221. `;
  222. }
  223. $(`#${мир.макет.зав.файлыСписок}`).html(список);
  224. };
  225. // // // //
  226. ОтобразитьСтруктуруПунктаФайловЗава = мир =>
  227. {
  228. $(`#${мир.макет.константы.содержимое}`).html(`
  229. <div class="зав-отступ">
  230. <div uk-grid style="margin-left: 0px">
  231. <input id="${мир.макет.зав.добавитьФайлИмя}" class="uk-input uk-width-expand" type="text" placeholder="Имя файла | File name">
  232. <button id="${мир.макет.зав.добавитьФайлКнопка}" class="uk-button uk-button-primary uk-width-auto uk-margin-left">Добавить файл | Add a file</button>
  233. </div>
  234. <hr class="uk-divider-icon">
  235. <table class="uk-table uk-table-hover uk-table-divider">
  236. <thead>
  237. <tr>
  238. <th>Файл | File</th>
  239. <th>Флаги | Flags</th>
  240. <th>Действия | Actions</th>
  241. </tr>
  242. </thead>
  243. <tbody id="${мир.макет.зав.файлыСписок}">
  244. </tbody>
  245. </table>
  246. </div>
  247. `);
  248. };
  249. // // // //
  250. СохранитьВременноеОписание = мир =>
  251. {
  252. var м = мир.редактируемыйМодуль;
  253. м.имя = $(`#${мир.макет.зав.описаниеИмя}`).val()
  254. м.версия = $(`#${мир.макет.зав.описаниеВерсия}`).val()
  255. м["🏠"] = $(`#${мир.макет.зав.описаниеХранилище}`).val()
  256. };
  257. // // // //
  258. ОчиститьИзменениеОписания = мир =>
  259. {
  260. $(`#${мир.макет.зав.описаниеИзменение}`).attr("hidden", true);
  261. };
  262. // // // //
  263. ОтобразитьИзменениеОписания = мир =>
  264. {
  265. $(`#${мир.макет.зав.описаниеИзменение}`).removeAttr("hidden");
  266. };
  267. // // // //
  268. ОтслеживатьИзменениеОписанияМодуля = мир =>
  269. {
  270. $(`#${мир.макет.зав.описаниеИмя}`).on("input", function() {
  271. мир.уведомить("изменили описание модуля");
  272. });
  273. $(`#${мир.макет.зав.описаниеВерсия}`).on("input", function() {
  274. мир.уведомить("изменили описание модуля");
  275. });
  276. $(`#${мир.макет.зав.описаниеХранилище}`).on("input", function() {
  277. мир.уведомить("изменили описание модуля");
  278. });
  279. };
  280. // // // //
  281. ОтобразитьОписаниеМодуля = мир =>
  282. {
  283. var м = мир.редактируемыйМодуль;
  284. $(`#${мир.макет.зав.описаниеИмя}`).val(м.имя);
  285. $(`#${мир.макет.зав.описаниеВерсия}`).val(м.версия);
  286. $(`#${мир.макет.зав.описаниеХранилище}`).val(м["🏠"]);
  287. };
  288. // // // //
  289. ОтобразитьСтруктуруПунктаОписанияЗава = мир =>
  290. {
  291. $(`#${мир.макет.константы.содержимое}`).html(`
  292. <div class="зав-отступ">
  293. <form>
  294. <input id="${мир.макет.зав.описаниеИмя}" class="uk-input uk-margin-small" type="text" placeholder="Имя | Name">
  295. <input id="${мир.макет.зав.описаниеВерсия}" class="uk-input uk-margin-small" type="text" placeholder="Версия | Version">
  296. <input id="${мир.макет.зав.описаниеХранилище}" class="uk-input uk-margin-small" type="text" placeholder="Хранилище | Repository">
  297. </form>
  298. </div>
  299. `);
  300. };
  301. // // // //
  302. ЗадатьВидСодержимогоМенюЗава = мир =>
  303. {
  304. задатьВид(`
  305. .зав-отступ
  306. {
  307. padding: 1em;
  308. }
  309. `)
  310. };
  311. // // // //
  312. ОтобразитьВыборПунктаФайловЗава = мир =>
  313. {
  314. $(`#${мир.макет.зав.файлы}`).addClass("uk-active");
  315. };
  316. // // // //
  317. ОтобразитьВыборПунктаОписанияЗава = мир =>
  318. {
  319. $(`#${мир.макет.зав.описание}`).addClass("uk-active");
  320. };
  321. // // // //
  322. ЗадатьРазделМенюЗава = мир =>
  323. {
  324. мир.макет.зав = {
  325. "описание": "зав-описание",
  326. "описаниеСсылка": "зав-описание-ссылка",
  327. "описаниеИзменение": "зав-описание-изменение",
  328. "описаниеИмя": "зав-описание-имя",
  329. "описаниеВерсия": "зав-описание-версия",
  330. "описаниеХранилище": "зав-описание-хранилище",
  331. "файлы": "зав-файлы",
  332. "файлыСсылка": "зав-файлы-ссылка",
  333. "файлыИзменение": "зав-файлы-изменение",
  334. "файлыСписок": "зав-файлы-список",
  335. "файлыСписокИмя": "зав-файлы-список-имя-%номер%",
  336. "файлыСписокФлаги": "зав-файлы-список-флаги-%номер%",
  337. "файлыСписокУдалить": "зав-файлы-список-удалить-%номер%",
  338. "файлыПодтверждениеУдаления": "зав-файлы-подтверждение-удаления",
  339. "файлыПодтверждениеУдаленияИмя": "зав-файлы-подтверждение-удаления-имя",
  340. "файлыПодтверждениеУдаленияУдалить": "зав-файлы-подтверждение-удаления-удалить",
  341. "добавитьФайлИмя": "зав-файлы-добавить-файл-имя",
  342. "добавитьФайлКнопка": "зав-файлы-добавить-файл-кнопка",
  343. };
  344. $(`#${мир.макет.константы.меню}`).append(`
  345. <ul class="uk-nav uk-nav-default tm-nav">
  346. <li class="uk-nav-header">📦 Модуль | Module</li>
  347. <li id="${мир.макет.зав.описание}">
  348. <a id="${мир.макет.зав.описаниеСсылка}"><span id="${мир.макет.зав.описаниеИзменение}" hidden>&#8226; </span>Описание | Description</a>
  349. </li>
  350. <li id="${мир.макет.зав.файлы}">
  351. <a id="${мир.макет.зав.файлыСсылка}"><span id="${мир.макет.зав.файлыИзменение}" hidden>&#8226; </span>Файлы | Files</a>
  352. </li>
  353. </ul>
  354. `);
  355. $(`#${мир.макет.зав.описаниеСсылка}`).click(function() {
  356. мир.уведомить("выбрали пункт описания зава");
  357. });
  358. $(`#${мир.макет.зав.файлыСсылка}`).click(function() {
  359. мир.уведомить("выбрали пункт файлов зава");
  360. });
  361. };