Отображение и редактирование файлов модуля ГитЖС | Display and editing of GitJS module files
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

сохранение|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. */