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

376 line
9.9KB

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