Публикация модулей ГитЖС | Publishing of GitJS modules
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.

414 lines
11KB

  1. // // // //
  2. УведомитьОЗавершенииПубликации = мир =>
  3. {
  4. UIkit.notification("Опубликовали");
  5. UIkit.notification("Published");
  6. };
  7. // // // //
  8. ОпубликоватьСодержимое = мир =>
  9. {
  10. (async() => {
  11. await git.push({
  12. fs: мир.fs,
  13. http: мир.гитHTTP,
  14. dir: мир.директория,
  15. remote: мир.источник,
  16. ref: мир.ветка,
  17. onAuth: url => {
  18. var auth = {
  19. "username": мир.пользователь,
  20. "password": мир.пароль,
  21. };
  22. //var json = JSON.stringify(auth);
  23. //console.debug(`Auth url: '${url}' auth: '${json}'`);
  24. return auth;
  25. }
  26. });
  27. мир.уведомить("опубликовали содержимое");
  28. })();
  29. };
  30. // // // //
  31. ПродублироватьСодержимоеПубликуемогоМодуляВЛокальнуюКопиюГит = мир =>
  32. {
  33. (async() => {
  34. // Файлы.
  35. var содержимое = мир.редактируемыйМодуль.содержимое;
  36. for (var файл in содержимое)
  37. {
  38. var содержимоеФайла = содержимое[файл];
  39. // НАДО Поддержать сохранение двоичных файлов.
  40. await мир.fs.promises.writeFile(мир.директория + файл, содержимоеФайла, "utf8");
  41. var путь = файл.substr(1);
  42. await git.add({
  43. fs: мир.fs,
  44. dir: мир.директория,
  45. filepath: путь,
  46. });
  47. }
  48. // Файл 0000.
  49. var файл0000 = мир.собрать0000(мир.редактируемыйМодуль);
  50. await мир.fs.promises.writeFile(мир.директория + "/0000", файл0000, "utf8");
  51. await git.add({
  52. fs: мир.fs,
  53. dir: мир.директория,
  54. filepath: "0000",
  55. });
  56. await git.commit({
  57. fs: мир.fs,
  58. dir: мир.директория,
  59. message: мир.сообщение,
  60. author: мир.автор,
  61. })
  62. мир.уведомить("продублировали содержимое");
  63. })();
  64. };
  65. // // // //
  66. УдалитьКорневыеФайлы = мир =>
  67. {
  68. (async() => {
  69. var файлы = await мир.fs.promises.readdir(мир.директория);
  70. for (var номер in файлы)
  71. {
  72. var файл = файлы[номер];
  73. var путь = мир.директория + "/" + файл;
  74. var статус = await мир.fs.promises.stat(путь);
  75. // Удаляем лишь файлы.
  76. if (статус.isFile())
  77. {
  78. await git.remove({
  79. fs: мир.fs,
  80. dir: мир.директория,
  81. filepath: файл,
  82. });
  83. await мир.fs.promises.unlink(путь)
  84. }
  85. }
  86. мир.уведомить("удалили корневые файлы");
  87. })();
  88. }
  89. // // // //
  90. УведомитьОЗавершенииОбновления = мир =>
  91. {
  92. UIkit.notification("Обновили локальную копию Гит");
  93. UIkit.notification("Finished refreshing local Git copy");
  94. };
  95. // // // //
  96. УведомитьОНеобходимостиПерезагрузки = мир =>
  97. {
  98. var сообщение = `ВНИМАНИЕ Произведена очистка локальной копии Гита. Перезагрузите страницу руками и повторите публикацию | WARNING Local Git copy has just been removed. Reload this page manually and repeat the publication ${мир.ошибка}`;
  99. UIkit.modal.alert(сообщение);
  100. console.error(сообщение);
  101. };
  102. // // // //
  103. ОчиститьФайловуюСистему = мир =>
  104. {
  105. // Очищаем IndexedDB.
  106. мир.fs = new LightningFS(мир.имяФС, { wipe: true });
  107. };
  108. // // // //
  109. ОбновитьХранилище = мир =>
  110. {
  111. (async() => {
  112. try
  113. {
  114. await git.pull({
  115. fs: мир.fs,
  116. http: мир.гитHTTP,
  117. dir: мир.директория,
  118. url: мир.хранилище,
  119. depth: 1,
  120. author: мир.автор,
  121. corsProxy: мир.прокси,
  122. });
  123. мир.уведомить("обновили хранилище");
  124. }
  125. catch (ошибка)
  126. {
  127. мир.ошибка = ошибка;
  128. мир.уведомить("не обновили хранилище");
  129. }
  130. })();
  131. };
  132. // // // //
  133. СклонироватьХранилище = мир =>
  134. {
  135. (async() => {
  136. await git.clone({
  137. fs: мир.fs,
  138. http: мир.гитHTTP,
  139. dir: мир.директория,
  140. url: мир.хранилище,
  141. depth: 1,
  142. corsProxy: мир.прокси,
  143. });
  144. мир.уведомить("склонировали хранилище");
  145. })();
  146. };
  147. // // // //
  148. УведомитьОбОшибкеПодготовкиДиректории = мир =>
  149. {
  150. var сообщение = `Не удалось подготовить директорию для хранилища Гит | Could not prepare a directory for Git repository ${мир.ошибка}`;
  151. UIkit.modal.alert(сообщение);
  152. console.error(сообщение);
  153. };
  154. // // // //
  155. ПодготовитьДиректорию = мир =>
  156. {
  157. (async() => {
  158. try
  159. {
  160. await мир.fs.promises.mkdir(мир.директория);
  161. мир.уведомить("подготовили директорию");
  162. }
  163. catch (ошибка)
  164. {
  165. мир.ошибка = ошибка;
  166. мир.уведомить("не подготовили директорию");
  167. }
  168. })();
  169. };
  170. // // // //
  171. ПроверитьНаличиеДиректории = мир =>
  172. {
  173. мир.fs = new LightningFS(мир.имяФС);
  174. (async() => {
  175. try
  176. {
  177. await мир.fs.promises.readdir(мир.директория);
  178. мир.уведомить("директория присутствует");
  179. }
  180. catch (ошибка)
  181. {
  182. мир.ошибка = ошибка;
  183. мир.уведомить("директория отсутствует");
  184. }
  185. })();
  186. };
  187. // // // //
  188. ЗадатьНастройки = мир =>
  189. {
  190. мир.хранилище = $(`#издатель-гит-хранилище`).val();
  191. мир.имяФС = "fs_" + мир.хранилище;
  192. мир.пользователь = $(`#издатель-гит-имя`).val();
  193. мир.пароль = $(`#издатель-гит-пароль`).val();
  194. мир.автор = {
  195. "name": "Главред | Glavred",
  196. "email": "glavred@gitjs.org",
  197. };
  198. мир.ветка = "master";
  199. мир.директория = "/" + мир.ветка;
  200. мир.источник = "origin";
  201. мир.сообщение = "Изменения от Главреда ГитЖС | Changes of GitJS Glavred";
  202. //мир.прокси = "https://cors.isomorphic-git.org";
  203. };
  204. // // // //
  205. ВключитьКнопкуПубликацииВГит = мир =>
  206. {
  207. $(`#издатель-гит-опубликовать`).prop("disabled", false);
  208. };
  209. // // // //
  210. ОтключитьКнопкуПубликацииВГит = мир =>
  211. {
  212. $(`#издатель-гит-опубликовать`).prop("disabled", true);
  213. };
  214. // // // //
  215. УведомитьОНачалеПубликацииВГит = мир =>
  216. {
  217. UIkit.notification("Начали публикацию в Гит");
  218. UIkit.notification("Started publishing to Git");
  219. };
  220. // // // //
  221. СообщитьОНедостаточностиУчётныхДанных = мир =>
  222. {
  223. var сообщение = "Недостаточно учётных данных для публикации | Not enough credentials to publish";
  224. UIkit.modal.alert(сообщение);
  225. console.error(сообщение);
  226. };
  227. // // // //
  228. ПроверитьДостаточностьУчётныхДанных = мир =>
  229. {
  230. if (
  231. $(`#издатель-гит-имя`).val() &&
  232. $(`#издатель-гит-пароль`).val() &&
  233. $(`#издатель-гит-хранилище`).val()
  234. ) {
  235. мир.уведомить("учётных данных достаточно");
  236. }
  237. else
  238. {
  239. мир.уведомить("учётных данных недостаточно");
  240. }
  241. };
  242. // // // //
  243. ОтслеживатьКнопкуПубликацииВГит = мир =>
  244. {
  245. $(`#издатель-гит-учётка`).submit(function(событие) {
  246. событие.preventDefault();
  247. мир.уведомить("кнопка публикации в гит");
  248. });
  249. };
  250. // // // //
  251. ОтобразитьАдресХранилищаГита = мир =>
  252. {
  253. $(`#издатель-гит-хранилище`).val(мир.редактируемыйМодуль["🏠"]);
  254. };
  255. // // // //
  256. ОтобразитьСодержимоеПунктаГитИздателя = мир =>
  257. {
  258. $(`#${мир.макет.константы.содержимое}`).html(`
  259. <div class="издатель-гит-отступ">
  260. <form id="издатель-гит-учётка">
  261. <input id="издатель-гит-имя" class="uk-input uk-margin-small" type="text" placeholder="Имя | Name">
  262. <input id="издатель-гит-пароль" class="uk-input uk-margin-small" type="password" placeholder="Пароль | Password">
  263. <input id="издатель-гит-хранилище" class="uk-input uk-margin-small" type="text" placeholder="Хранилище | Repository" readonly>
  264. <button id="издатель-гит-опубликовать" class="uk-button uk-button-primary uk-margin-small">Опубликовать | Publish</button>
  265. </form>
  266. </div>
  267. `);
  268. };
  269. // // // //
  270. ОтобразитьВыборПунктаГитИздателя = мир =>
  271. {
  272. $(`#издатель-гит`).addClass("uk-active");
  273. };
  274. // // // //
  275. ЗадатьВидСодержимогоМенюИздателя = мир =>
  276. {
  277. задатьВид(`
  278. .издатель-гит-отступ
  279. {
  280. padding: 1em;
  281. }
  282. `)
  283. };
  284. // // // //
  285. ЗадатьРазделМенюИздателя = мир =>
  286. {
  287. $(`#${мир.макет.константы.меню}`).append(`
  288. <ul class="uk-nav uk-nav-default tm-nav">
  289. <li class="uk-nav-header">📓 Издание | Publishing</li>
  290. <li id="издатель-гит">
  291. <a id="издатель-гит-ссылка">Гит | Git</a>
  292. </li>
  293. </ul>
  294. `);
  295. $(`#издатель-гит-ссылка`).click(function() {
  296. мир.уведомить("выбрали пункт гит издателя");
  297. });
  298. };