Редактирование структуры модулей ГитЖС | Editing of GitJS modules' structure
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

445 рядки
16KB

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