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

386 lines
10KB

  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. UIkit.notification("Обновили локальную копию Гит");
  69. UIkit.notification("Finished refreshing local Git copy");
  70. };
  71. // // // //
  72. УведомитьОНеобходимостиПерезагрузки = мир =>
  73. {
  74. var сообщение = `ВНИМАНИЕ Произведена очистка локальной копии Гита. Перезагрузите страницу руками и повторите публикацию | WARNING Local Git copy has just been removed. Reload this page manually and repeat the publication ${мир.ошибка}`;
  75. UIkit.modal.alert(сообщение);
  76. console.error(сообщение);
  77. };
  78. // // // //
  79. ОчиститьФайловуюСистему = мир =>
  80. {
  81. // Очищаем IndexedDB.
  82. мир.fs = new LightningFS(мир.имяФС, { wipe: true });
  83. };
  84. // // // //
  85. ОбновитьХранилище = мир =>
  86. {
  87. (async() => {
  88. try
  89. {
  90. await git.pull({
  91. fs: мир.fs,
  92. http: мир.гитHTTP,
  93. dir: мир.директория,
  94. url: мир.хранилище,
  95. depth: 1,
  96. author: мир.автор,
  97. corsProxy: мир.прокси,
  98. });
  99. мир.уведомить("обновили хранилище");
  100. }
  101. catch (ошибка)
  102. {
  103. мир.ошибка = ошибка;
  104. мир.уведомить("не обновили хранилище");
  105. }
  106. })();
  107. };
  108. // // // //
  109. СклонироватьХранилище = мир =>
  110. {
  111. (async() => {
  112. await git.clone({
  113. fs: мир.fs,
  114. http: мир.гитHTTP,
  115. dir: мир.директория,
  116. url: мир.хранилище,
  117. depth: 1,
  118. corsProxy: мир.прокси,
  119. });
  120. мир.уведомить("склонировали хранилище");
  121. })();
  122. };
  123. // // // //
  124. УведомитьОбОшибкеПодготовкиДиректории = мир =>
  125. {
  126. var сообщение = `Не удалось подготовить директорию для хранилища Гит | Could not prepare a directory for Git repository ${мир.ошибка}`;
  127. UIkit.modal.alert(сообщение);
  128. console.error(сообщение);
  129. };
  130. // // // //
  131. ПодготовитьДиректорию = мир =>
  132. {
  133. (async() => {
  134. try
  135. {
  136. await мир.fs.promises.mkdir(мир.директория);
  137. мир.уведомить("подготовили директорию");
  138. }
  139. catch (ошибка)
  140. {
  141. мир.ошибка = ошибка;
  142. мир.уведомить("не подготовили директорию");
  143. }
  144. })();
  145. };
  146. // // // //
  147. ПроверитьНаличиеДиректории = мир =>
  148. {
  149. мир.fs = new LightningFS(мир.имяФС);
  150. (async() => {
  151. try
  152. {
  153. await мир.fs.promises.readdir(мир.директория);
  154. мир.уведомить("директория присутствует");
  155. }
  156. catch (ошибка)
  157. {
  158. мир.ошибка = ошибка;
  159. мир.уведомить("директория отсутствует");
  160. }
  161. })();
  162. };
  163. // // // //
  164. ЗадатьНастройки = мир =>
  165. {
  166. мир.хранилище = $(`#издатель-гит-хранилище`).val();
  167. мир.имяФС = "fs_" + мир.хранилище;
  168. мир.пользователь = $(`#издатель-гит-имя`).val();
  169. мир.пароль = $(`#издатель-гит-пароль`).val();
  170. мир.автор = {
  171. "name": "Главред | Glavred",
  172. "email": "glavred@gitjs.org",
  173. };
  174. мир.ветка = "master";
  175. мир.директория = "/" + мир.ветка;
  176. мир.источник = "origin";
  177. мир.сообщение = "Изменения от Главреда ГитЖС | Changes of GitJS Glavred";
  178. //мир.прокси = "https://cors.isomorphic-git.org";
  179. };
  180. // // // //
  181. ВключитьКнопкуПубликацииВГит = мир =>
  182. {
  183. $(`#издатель-гит-опубликовать`).prop("disabled", false);
  184. };
  185. // // // //
  186. ОтключитьКнопкуПубликацииВГит = мир =>
  187. {
  188. $(`#издатель-гит-опубликовать`).prop("disabled", true);
  189. };
  190. // // // //
  191. УведомитьОНачалеПубликацииВГит = мир =>
  192. {
  193. UIkit.notification("Начали публикацию в Гит");
  194. UIkit.notification("Started publishing to Git");
  195. };
  196. // // // //
  197. СообщитьОНедостаточностиУчётныхДанных = мир =>
  198. {
  199. var сообщение = "Недостаточно учётных данных для публикации | Not enough credentials to publish";
  200. UIkit.modal.alert(сообщение);
  201. console.error(сообщение);
  202. };
  203. // // // //
  204. ПроверитьДостаточностьУчётныхДанных = мир =>
  205. {
  206. if (
  207. $(`#издатель-гит-имя`).val() &&
  208. $(`#издатель-гит-пароль`).val() &&
  209. $(`#издатель-гит-хранилище`).val()
  210. ) {
  211. мир.уведомить("учётных данных достаточно");
  212. }
  213. else
  214. {
  215. мир.уведомить("учётных данных недостаточно");
  216. }
  217. };
  218. // // // //
  219. ОтслеживатьКнопкуПубликацииВГит = мир =>
  220. {
  221. $(`#издатель-гит-учётка`).submit(function(событие) {
  222. событие.preventDefault();
  223. мир.уведомить("кнопка публикации в гит");
  224. });
  225. };
  226. // // // //
  227. ОтобразитьАдресХранилищаГита = мир =>
  228. {
  229. $(`#издатель-гит-хранилище`).val(мир.редактируемыйМодуль["🏠"]);
  230. };
  231. // // // //
  232. ОтобразитьСодержимоеПунктаГитИздателя = мир =>
  233. {
  234. $(`#${мир.макет.константы.содержимое}`).html(`
  235. <div class="издатель-гит-отступ">
  236. <form id="издатель-гит-учётка">
  237. <input id="издатель-гит-имя" class="uk-input uk-margin-small" type="text" placeholder="Имя | Name">
  238. <input id="издатель-гит-пароль" class="uk-input uk-margin-small" type="password" placeholder="Пароль | Password">
  239. <input id="издатель-гит-хранилище" class="uk-input uk-margin-small" type="text" placeholder="Хранилище | Repository" readonly>
  240. <button id="издатель-гит-опубликовать" class="uk-button uk-button-primary uk-margin-small">Опубликовать | Publish</button>
  241. </form>
  242. </div>
  243. `);
  244. };
  245. // // // //
  246. ОтобразитьВыборПунктаГитИздателя = мир =>
  247. {
  248. $(`#издатель-гит`).addClass("uk-active");
  249. };
  250. // // // //
  251. ЗадатьВидСодержимогоМенюИздателя = мир =>
  252. {
  253. задатьВид(`
  254. .издатель-гит-отступ
  255. {
  256. padding: 1em;
  257. }
  258. `)
  259. };
  260. // // // //
  261. ЗадатьРазделМенюИздателя = мир =>
  262. {
  263. $(`#${мир.макет.константы.меню}`).append(`
  264. <ul class="uk-nav uk-nav-default tm-nav">
  265. <li class="uk-nav-header">📓 Издание | Publishing</li>
  266. <li id="издатель-гит">
  267. <a id="издатель-гит-ссылка">Гит | Git</a>
  268. </li>
  269. </ul>
  270. `);
  271. $(`#издатель-гит-ссылка`).click(function() {
  272. мир.уведомить("выбрали пункт гит издателя");
  273. });
  274. };