diff --git a/пуск|run.js b/пуск|run.js index 5eb1d02..f695448 100644 --- a/пуск|run.js +++ b/пуск|run.js @@ -1,62 +1,374 @@ -/* // // // // -УведомитьОНеудачномСохраненииИзменений = мир => +УведомитьОЗавершенииПубликации = мир => { - UIkit.notification("Не удалось сохранить изменения", {status: "danger"}); - UIkit.notification("Could not save changes", {status: "danger"}); + UIkit.notification("Опубликовали"); + UIkit.notification("Published"); }; // // // // -УведомитьОбУспешномСохраненииИзменений = мир => +ОпубликоватьСодержимое = мир => { - UIkit.notification("Сохранили успешно", {status: "success"}); - UIkit.notification("Saved successfully", {status: "success"}); + (async() => { + + await git.push({ + fs: мир.fs, + http: мир.гитHTTP, + dir: мир.директория, + remote: мир.источник, + ref: мир.ветка, + onAuth: url => { + var auth = { + "username": мир.пользователь, + "password": мир.пароль, + }; + //var json = JSON.stringify(auth); + //console.debug(`Auth url: '${url}' auth: '${json}'`); + return auth; + } + }); + + мир.уведомить("опубликовали содержимое"); + + })(); +}; + + +// // // // + + +ПродублироватьСодержимоеПубликуемогоМодуляВЛокальнуюКопиюГит = мир => +{ + (async() => { + + var содержимое = мир.редактируемыйМодуль.содержимое; + for (var файл in содержимое) + { + var содержимоеФайла = содержимое[файл]; + // НАДО Поддержать сохранение двоичных файлов. + await мир.fs.promises.writeFile(мир.директория + файл, содержимоеФайла, "utf8"); + var путь = файл.substr(1); + await git.add({ + fs: мир.fs, + dir: мир.директория, + filepath: путь, + }); + } + await git.commit({ + fs: мир.fs, + dir: мир.директория, + message: мир.сообщение, + author: мир.автор, + }) + + мир.уведомить("продублировали содержимое"); + })(); +}; + + +// // // // + + +УведомитьОЗавершенииОбновления = мир => +{ + UIkit.notification("Обновили локальную копию Гит"); + UIkit.notification("Finished refreshing local Git copy"); +}; + + +// // // // + + +УведомитьОНеобходимостиПерезагрузки = мир => +{ + var сообщение = `ВНИМАНИЕ Произведена очистка локальной копии Гита. Перезагрузите страницу руками и повторите публикацию | WARNING Local Git copy has just been removed. Reload this page manually and repeat the publication ${мир.ошибка}`; + UIkit.modal.alert(сообщение); + console.error(сообщение); +}; + + +// // // // + + +ОчиститьФайловуюСистему = мир => +{ + // Очищаем IndexedDB. + мир.fs = new LightningFS(мир.имяФС, { wipe: true }); +}; + + +// // // // + + +ОбновитьХранилище = мир => +{ + (async() => { + + try + { + await git.pull({ + fs: мир.fs, + http: мир.гитHTTP, + dir: мир.директория, + url: мир.хранилище, + depth: 1, + author: мир.автор, + corsProxy: мир.прокси, + }); + + мир.уведомить("обновили хранилище"); + } + catch (ошибка) + { + мир.ошибка = ошибка; + мир.уведомить("не обновили хранилище"); + } + + })(); +}; + + +// // // // + + +СклонироватьХранилище = мир => +{ + (async() => { + + await git.clone({ + fs: мир.fs, + http: мир.гитHTTP, + dir: мир.директория, + url: мир.хранилище, + depth: 1, + corsProxy: мир.прокси, + }); + + мир.уведомить("склонировали хранилище"); + + })(); +}; + + +// // // // + + +УведомитьОбОшибкеПодготовкиДиректории = мир => +{ + var сообщение = `Не удалось подготовить директорию для хранилища Гит | Could not prepare a directory for Git repository ${мир.ошибка}`; + UIkit.modal.alert(сообщение); + console.error(сообщение); +}; + + +// // // // + + +ПодготовитьДиректорию = мир => +{ + (async() => { + + try + { + await мир.fs.promises.mkdir(мир.директория); + мир.уведомить("подготовили директорию"); + } + catch (ошибка) + { + мир.ошибка = ошибка; + мир.уведомить("не подготовили директорию"); + } + + })(); +}; + + +// // // // + + +ПроверитьНаличиеДиректории = мир => +{ + мир.fs = new LightningFS(мир.имяФС); + + (async() => { + + try + { + await мир.fs.promises.readdir(мир.директория); + мир.уведомить("директория присутствует"); + } + catch (ошибка) + { + мир.ошибка = ошибка; + мир.уведомить("директория отсутствует"); + } + + })(); +}; + + +// // // // + + +ЗадатьНастройки = мир => +{ + мир.хранилище = $(`#издатель-гит-хранилище`).val(); + мир.имяФС = "fs_" + мир.хранилище; + мир.пользователь = $(`#издатель-гит-имя`).val(); + мир.пароль = $(`#издатель-гит-пароль`).val(); + мир.автор = { + "name": "Главред | Glavred", + "email": "glavred@gitjs.org", + }; + мир.ветка = "master"; + мир.директория = "/" + мир.ветка; + мир.источник = "origin"; + мир.сообщение = "Изменения от Главреда ГитЖС | Changes of GitJS Glavred"; + //мир.прокси = "https://cors.isomorphic-git.org"; +}; + + +// // // // + + +ВключитьКнопкуПубликацииВГит = мир => +{ + $(`#издатель-гит-опубликовать`).prop("disabled", false); +}; + + +// // // // + + +ОтключитьКнопкуПубликацииВГит = мир => +{ + $(`#издатель-гит-опубликовать`).prop("disabled", true); +}; + + +// // // // + + +УведомитьОНачалеПубликацииВГит = мир => +{ + UIkit.notification("Начали публикацию в Гит"); + UIkit.notification("Started publishing to Git"); +}; + + +// // // // + + +СообщитьОНедостаточностиУчётныхДанных = мир => +{ + var сообщение = "Недостаточно учётных данных для публикации | Not enough credentials to publish"; + UIkit.modal.alert(сообщение); + console.error(сообщение); }; // // // // -СохранитьИзменения = мир => +ПроверитьДостаточностьУчётныхДанных = мир => { - for (var файл in мир.временноеСодержимое) + if ( + $(`#издатель-гит-имя`).val() && + $(`#издатель-гит-пароль`).val() && + $(`#издатель-гит-хранилище`).val() + ) { + мир.уведомить("учётных данных достаточно"); + } + else { - var содержимое = мир.временноеСодержимое[файл]; - мир.редактируемыйМодуль.содержимое[файл] = содержимое; + мир.уведомить("учётных данных недостаточно"); } +}; - мир.временноеСодержимое = {}; - мир.модули.сохранили.подписатьРаз(function() { - мир.уведомить("сохранили изменения"); - }); - мир.модули.неСохранили.подписатьРаз(function() { - мир.уведомить("не сохранили изменения"); +// // // // + + +ОтслеживатьКнопкуПубликацииВГит = мир => +{ + $(`#издатель-гит-учётка`).submit(function(событие) { + событие.preventDefault(); + мир.уведомить("кнопка публикации в гит"); }); - мир.модули.сохранить(мир.редактируемыйМодуль.указатель); }; // // // // -ЗадатьКнопкуСохранения = мир => +ОтобразитьАдресХранилищаГита = мир => { - $(`#${мир.макет.константы.заголовокПраво}`).append(` -