Отображение и редактирование файлов модуля ГитЖС | Display and editing of GitJS module files
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.

сохранение|saving.js 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. /*
  2. * ВЫБОР ФАЙЛА
  3. */
  4. /*
  5. ЗадатьУказанныйФайл = function(мир)
  6. {
  7. мир.файл = мир.файлы[мир.номерВыбранногоФайла];
  8. };
  9. // // // //
  10. НеОтслеживатьРедактирование = function(мир)
  11. {
  12. мир.отслеживатьРедактирование = false;
  13. };
  14. // // // //
  15. ОтслеживатьРедактирование = function(мир)
  16. {
  17. мир.отслеживатьРедактирование = true;
  18. };
  19. // // // //
  20. ЗадатьПараметрФайла = function(мир)
  21. {
  22. var файл = мир.файлы[мир.номерВыбранногоФайла];
  23. задатьПараметрВСтрокеПоиска("📁", файл);
  24. };
  25. // // // //
  26. ОтобразитьСодержимоеВыбранногоФайла = function(мир)
  27. {
  28. var файл = мир.файлы[мир.номерВыбранногоФайла];
  29. var содержимое = мир.временноеСодержимое[файл];
  30. if (!содержимое)
  31. {
  32. содержимое = мир.редактируемыйМодуль.содержимое[файл];
  33. };
  34. мир.редактор.session.setValue(содержимое);
  35. };
  36. // // // //
  37. ОтобразитьВыборФайла = function(мир)
  38. {
  39. var id = мир.макет.константы.файл;
  40. // Очищаем выбор.
  41. for (var номер in мир.файлы)
  42. {
  43. $(`#${id}-${номер}-элемент`).removeClass("uk-active");
  44. }
  45. // Отображаем выбор.
  46. $(`#${id}-${мир.номерВыбранногоФайла}-элемент`).addClass("uk-active");
  47. };
  48. */
  49. /*
  50. * ПУСК
  51. */
  52. /*
  53. const ИМЯ = "Главред | Glavred";
  54. // // // //
  55. ЗадатьВременноеСодержимое = function(мир)
  56. {
  57. мир.временноеСодержимое = {};
  58. };
  59. // // // //
  60. ЗадатьКнопкуСохранения = function(мир)
  61. {
  62. var кнопка = мир.макет.элементы.действие
  63. .replace("${название}", "💾")
  64. .replace(/\$\{id\}/g, `${мир.макет.константы.сохранить}`)
  65. ;
  66. $(`#${мир.макет.константы.действия}`).append(кнопка);
  67. $(`#${мир.макет.константы.сохранить}-ссылка`).click(function() {
  68. мир.уведомить("выбрали сохранить");
  69. });
  70. };
  71. // // // //
  72. НастроитьОтслеживаниеРедактирования = function(мир)
  73. {
  74. мир.отслеживатьРедактирование = true;
  75. мир.редактор.session.on("change", function(delta) {
  76. if (мир.отслеживатьРедактирование)
  77. {
  78. мир.уведомить("редактирование");
  79. }
  80. });
  81. };
  82. // // // //
  83. ВыбратьУказанныйФайл = function(мир)
  84. {
  85. мир.номерВыбранногоФайла = мир.файлы.indexOf(мир.файл);
  86. мир.уведомить("выбрали файл");
  87. }
  88. // // // //
  89. ВыбратьПервыйФайл = function(мир)
  90. {
  91. мир.номерВыбранногоФайла = 0;
  92. мир.уведомить("выбрали файл");
  93. }
  94. // // // //
  95. ПроверитьНаличиеУказанногоФайла = function(мир)
  96. {
  97. if (
  98. мир.файл &&
  99. мир.файлы.includes(мир.файл)
  100. ) {
  101. мир.уведомить("указанный файл существует");
  102. }
  103. else
  104. {
  105. мир.уведомить("указанный файл не существует");
  106. }
  107. };
  108. // // // //
  109. НастроитьAce = function(мир)
  110. {
  111. мир.редактор = window.ace.edit("редактор");
  112. мир.редактор.session.setMode("ace/mode/javascript");
  113. };
  114. // // // //
  115. ОтслеживатьВыборФайла = function(мир)
  116. {
  117. var id = мир.макет.константы.файл;
  118. for (var номер in мир.файлы)
  119. {
  120. const номерФайла = номер;
  121. $(`#${id}-${номер}-ссылка`).click(function() {
  122. мир.номерВыбранногоФайла = номерФайла;
  123. мир.уведомить("выбрали файл");
  124. });
  125. }
  126. };
  127. // // // //
  128. ЗадатьСписокФайлов = function(мир)
  129. {
  130. var м = мир.редактируемыйМодуль;
  131. мир.файлы = Object.keys(м.структура).sort();
  132. var содержимое = "";
  133. var заголовок = мир.макет.элементы.заголовокМеню.replace("${название}", "📦 " + м.имя);
  134. содержимое += заголовок;
  135. var id = мир.макет.константы.файл;
  136. for (var номер in мир.файлы)
  137. {
  138. var файл = мир.файлы[номер];
  139. содержимое += мир.макет.элементы.пунктМеню
  140. .replace("${название}", файл)
  141. .replace(/\$\{id\}/g, `${id}-${номер}`)
  142. ;
  143. }
  144. $(`#${мир.макет.константы.меню}`).html(содержимое);
  145. };
  146. // // // //
  147. ЗадатьЗаголовокИВерсию = function(мир)
  148. {
  149. var м = мир.ведущийМодуль;
  150. $(`#${мир.макет.константы.заголовок}`).text(м.имя);
  151. $(`#${мир.макет.константы.версия}`).text(м.версия);
  152. };
  153. // // // //
  154. ОчиститьМакетОтЗаглушек = function(мир)
  155. {
  156. $(`#${мир.макет.константы.заголовок}`).text("");
  157. $(`#${мир.макет.константы.версия}`).text("");
  158. $(`#${мир.макет.константы.действия}`).text("");
  159. $(`#${мир.макет.константы.меню}`).text("");
  160. };
  161. // // // //
  162. УстановитьМакет = function(мир)
  163. {
  164. document.body.innerHTML = мир.макет.структура;
  165. var вид = document.createElement("style");
  166. document.head.appendChild(вид);
  167. вид.innerHTML = мир.макет.вид;
  168. };
  169. // // // //
  170. НастроитьМакет = function(мир)
  171. {
  172. // Вырезаем тело из макета.
  173. var html = мир.макет.структура;
  174. var начало = html.indexOf("<!-- МАКЕТ_НАЧАЛО -->");
  175. var конец = html.indexOf("<!-- МАКЕТ_КОНЕЦ -->");
  176. html = html.substring(начало, конец);
  177. var название = "редактор";
  178. мир.макет.константы = {
  179. "заголовок": `${название}-макет-шапка-заголовок`,
  180. "версия": `${название}-макет-шапка-версия`,
  181. "действия": `${название}-макет-шапка-действия`,
  182. "меню": `${название}-макет-меню`,
  183. "файл": `${название}-макет-меню-файл`,
  184. "содержимое": "редактор",
  185. "сохранить": `${название}-макет-сохранить`,
  186. };
  187. // Заменяем константы в макете.
  188. for (var константа in мир.макет.константы)
  189. {
  190. var старое = "${" + константа + "}";
  191. var новое = мир.макет.константы[константа];
  192. html = html.replace(старое, новое);
  193. }
  194. мир.макет.структура = html;
  195. };
  196. // // // //
  197. ЗагрузитьМакет = function(мир)
  198. {
  199. var м = мир.ведущийМодуль;
  200. var json = JSON.parse(м.содержимое["/макет|template.json"]);
  201. мир.макет = {
  202. "структура": м.содержимое["/макет|template.html"],
  203. "вид": м.содержимое["/макет|template.css"],
  204. "элементы": json,
  205. };
  206. };
  207. // // // //
  208. ЗадатьВедущийМодуль = function(мир)
  209. {
  210. // Редактор является ведущим модулем.
  211. мир.ведущийМодуль = мир.модули.модульПоИмени(ИМЯ);
  212. };
  213. // // // //
  214. ВывестиРазобранныеПараметры = function(мир)
  215. {
  216. console.debug(`
  217. Разобранные параметры редактора:
  218. * 📦: '${мир.указатель}'
  219. * 📁: '${мир.файл}'
  220. `);
  221. };
  222. */
  223. /*
  224. * РЕДАКТИРОВАНИЕ
  225. */
  226. /*
  227. СохранитьВременноеСодержимоеРедактируемогоФайла = function(мир)
  228. {
  229. var файл = мир.файлы[мир.номерВыбранногоФайла];
  230. var содержимое = мир.редактор.session.getValue();
  231. мир.временноеСодержимое[файл] = содержимое;
  232. };
  233. // // // //
  234. ПометитьВыбранныйФайлКакИзменённый = function(мир)
  235. {
  236. $(`#${мир.макет.константы.файл}-${мир.номерВыбранногоФайла}-изменение`).removeAttr("hidden");
  237. };
  238. // // // //
  239. ВывестиРедактирование = function(мир)
  240. {
  241. console.debug("Редактирование");
  242. };
  243. */
  244. /*
  245. * СОХРАНЕНИЕ
  246. */
  247. /*
  248. УведомитьОНеудачномСохраненииИзменений = function(мир)
  249. {
  250. UIkit.notification("Не удалось сохранить изменения", {status: "danger"});
  251. UIkit.notification("Could not save changes", {status: "danger"});
  252. };
  253. // // // //
  254. УведомитьОбУспешномСохраненииИзменений = function(мир)
  255. {
  256. UIkit.notification("Сохранили успешно", {status: "success"});
  257. UIkit.notification("Saved successfully", {status: "success"});
  258. };
  259. // // // //
  260. СохранитьИзменения = function(мир)
  261. {
  262. for (var файл in мир.временноеСодержимое)
  263. {
  264. var содержимое = мир.временноеСодержимое[файл];
  265. мир.редактируемыйМодуль.содержимое[файл] = содержимое;
  266. }
  267. мир.временноеСодержимое = {};
  268. мир.модули.сохранили.подписатьРаз(function() {
  269. мир.уведомить("сохранили изменения");
  270. });
  271. мир.модули.неСохранили.подписатьРаз(function() {
  272. мир.уведомить("не сохранили изменения");
  273. });
  274. мир.модули.сохранить(мир.редактируемыйМодуль.указатель);
  275. };
  276. */