@@ -2,23 +2,28 @@ | |||||
0.1.0 | 0.1.0 | ||||
https://git.opengamestudio.org/kornerr/AMYP | https://git.opengamestudio.org/kornerr/AMYP | ||||
x /00🕸jquery🕸jquery-3.5.1.min.js | |||||
/01🕸uikit🕸uikit-icons.min.js | |||||
/01🕸uikit🕸uikit.min.css | |||||
/01🕸uikit🕸uikit.min.js | |||||
x /01🕸uikit🕸🎬.js | |||||
/01🕸uikit🕸🎬.череда | |||||
x /02🕸UIK🕸🎬.js | |||||
/02🕸UIK🕸🎬.череда | |||||
x /00🕸jquery_3.5.1🕸jquery-3.5.1.min.js | |||||
x /01🕸uikit_3.2.0🕸.js | |||||
/01🕸uikit_3.2.0🕸.череда | |||||
/01🕸uikit_3.2.0🕸uikit-icons.min.js | |||||
/01🕸uikit_3.2.0🕸uikit.min.css | |||||
/01🕸uikit_3.2.0🕸uikit.min.js | |||||
x /02🕸UIK🕸.js | |||||
/02🕸UIK🕸.череда | |||||
/02🕸UIK🕸🙈.css | /02🕸UIK🕸🙈.css | ||||
/02🕸UIK🕸🙈.html | /02🕸UIK🕸🙈.html | ||||
x /70🕸механика🕸🎬.js | |||||
/70🕸механика🕸🎬.череда | |||||
x /80🕸морда🕸🎬.js | |||||
/80🕸морда🕸🎬.череда | |||||
x /03🕸isomorphic-git_1.7.2🕸.js | |||||
/03🕸isomorphic-git_1.7.2🕸.череда | |||||
/03🕸isomorphic-git_1.7.2🕸index.js | |||||
/03🕸isomorphic-git_1.7.2🕸index.umd.min.js | |||||
/03🕸isomorphic-git_1.7.2🕸lightning-fs.min.js | |||||
x /70🕸механика🕸.js | |||||
/70🕸механика🕸.череда | |||||
x /80🕸морда🕸.js | |||||
/80🕸морда🕸.череда | |||||
x /80🕸морда🕸📖.js | x /80🕸морда🕸📖.js | ||||
x /81🕸➕🕸🎬.js | |||||
/81🕸➕🕸🎬.череда | |||||
x /81🕸➕🕸.js | |||||
/81🕸➕🕸.череда | |||||
/81🕸➕🕸🙈.html | /81🕸➕🕸🙈.html | ||||
x /90🕸🎬.js | x /90🕸🎬.js | ||||
/90🕸🎬.череда | /90🕸🎬.череда |
@@ -1,10 +1,11 @@ | |||||
УстановитьUIkit = мир => | УстановитьUIkit = мир => | ||||
{ | { | ||||
var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | ||||
var css = м.содержимое["/01🕸uikit🕸uikit.min.css"]; | |||||
var js = м.содержимое["/01🕸uikit🕸uikit.min.js"]; | |||||
var iconsJS = м.содержимое["/01🕸uikit🕸uikit-icons.min.js"]; | |||||
var префикс = ИМЯ_ЭТОГО_ФАЙЛА.substring(0, ИМЯ_ЭТОГО_ФАЙЛА.length - 3); | |||||
var css = м.содержимое[префикс + "uikit.min.css"]; | |||||
var js = м.содержимое[префикс + "uikit.min.js"]; | |||||
var iconsJS = м.содержимое[префикс + "uikit-icons.min.js"]; | |||||
// Применить стиль. | // Применить стиль. | ||||
var style = document.createElement("style"); | var style = document.createElement("style"); |
@@ -60,15 +60,9 @@ | |||||
ЗагрузитьМакетUIK = мир => | ЗагрузитьМакетUIK = мир => | ||||
{ | { | ||||
var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | ||||
var префикс = ИМЯ_ЭТОГО_ФАЙЛА.substring(0, ИМЯ_ЭТОГО_ФАЙЛА.length - 3); | |||||
мир.макет = { | мир.макет = { | ||||
"структура": м.содержимое["/02🕸UIK🕸🙈.html"], | |||||
"вид": м.содержимое["/02🕸UIK🕸🙈.css"], | |||||
"структура": м.содержимое[префикс + "🙈.html"], | |||||
"вид": м.содержимое[префикс + "🙈.css"], | |||||
}; | }; | ||||
}; | }; | ||||
console.debug("обработали модуль UIK") | |||||
@@ -0,0 +1,22 @@ | |||||
УстановитьIsomorphicGit = мир => | |||||
{ | |||||
var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | |||||
var префикс = ИМЯ_ЭТОГО_ФАЙЛА.substring(0, ИМЯ_ЭТОГО_ФАЙЛА.length - 3); | |||||
var isogit = м.содержимое[префикс + "index.umd.min.js"]; | |||||
var http = м.содержимое[префикс + "index.js"]; | |||||
var lfs = м.содержимое[префикс + "lightning-fs.min.js"]; | |||||
function загрузитьСкрипт(код) | |||||
{ | |||||
var скрипт = document.createElement("script"); | |||||
скрипт.innerHTML = код; | |||||
document.body.appendChild(скрипт); | |||||
} | |||||
загрузитьСкрипт(lfs); | |||||
загрузитьСкрипт(isogit); | |||||
eval(http); | |||||
мир.гитHTTP = { request }; | |||||
}; |
@@ -0,0 +1,2 @@ | |||||
ручной пуск | |||||
установить IsomorphicGit |
@@ -0,0 +1,167 @@ | |||||
// https://unpkg.com/isomorphic-git@1.7.2/http/web/index.js | |||||
/** | |||||
* @typedef {Object} GitProgressEvent | |||||
* @property {string} phase | |||||
* @property {number} loaded | |||||
* @property {number} total | |||||
*/ | |||||
/** | |||||
* @callback ProgressCallback | |||||
* @param {GitProgressEvent} progress | |||||
* @returns {void | Promise<void>} | |||||
*/ | |||||
/** | |||||
* @typedef {Object} GitHttpRequest | |||||
* @property {string} url - The URL to request | |||||
* @property {string} [method='GET'] - The HTTP method to use | |||||
* @property {Object<string, string>} [headers={}] - Headers to include in the HTTP request | |||||
* @property {AsyncIterableIterator<Uint8Array>} [body] - An async iterator of Uint8Arrays that make up the body of POST requests | |||||
* @property {ProgressCallback} [onProgress] - Reserved for future use (emitting `GitProgressEvent`s) | |||||
* @property {object} [signal] - Reserved for future use (canceling a request) | |||||
*/ | |||||
/** | |||||
* @typedef {Object} GitHttpResponse | |||||
* @property {string} url - The final URL that was fetched after any redirects | |||||
* @property {string} [method] - The HTTP method that was used | |||||
* @property {Object<string, string>} [headers] - HTTP response headers | |||||
* @property {AsyncIterableIterator<Uint8Array>} [body] - An async iterator of Uint8Arrays that make up the body of the response | |||||
* @property {number} statusCode - The HTTP status code | |||||
* @property {string} statusMessage - The HTTP status message | |||||
*/ | |||||
/** | |||||
* @callback HttpFetch | |||||
* @param {GitHttpRequest} request | |||||
* @returns {Promise<GitHttpResponse>} | |||||
*/ | |||||
/** | |||||
* @typedef {Object} HttpClient | |||||
* @property {HttpFetch} request | |||||
*/ | |||||
// Convert a value to an Async Iterator | |||||
// This will be easier with async generator functions. | |||||
function fromValue(value) { | |||||
let queue = [value]; | |||||
return { | |||||
next() { | |||||
return Promise.resolve({ done: queue.length === 0, value: queue.pop() }) | |||||
}, | |||||
return() { | |||||
queue = []; | |||||
return {} | |||||
}, | |||||
[Symbol.asyncIterator]() { | |||||
return this | |||||
}, | |||||
} | |||||
} | |||||
function getIterator(iterable) { | |||||
if (iterable[Symbol.asyncIterator]) { | |||||
return iterable[Symbol.asyncIterator]() | |||||
} | |||||
if (iterable[Symbol.iterator]) { | |||||
return iterable[Symbol.iterator]() | |||||
} | |||||
if (iterable.next) { | |||||
return iterable | |||||
} | |||||
return fromValue(iterable) | |||||
} | |||||
// Currently 'for await' upsets my linters. | |||||
async function forAwait(iterable, cb) { | |||||
const iter = getIterator(iterable); | |||||
while (true) { | |||||
const { value, done } = await iter.next(); | |||||
if (value) await cb(value); | |||||
if (done) break | |||||
} | |||||
if (iter.return) iter.return(); | |||||
} | |||||
async function collect(iterable) { | |||||
let size = 0; | |||||
const buffers = []; | |||||
// This will be easier once `for await ... of` loops are available. | |||||
await forAwait(iterable, value => { | |||||
buffers.push(value); | |||||
size += value.byteLength; | |||||
}); | |||||
const result = new Uint8Array(size); | |||||
let nextIndex = 0; | |||||
for (const buffer of buffers) { | |||||
result.set(buffer, nextIndex); | |||||
nextIndex += buffer.byteLength; | |||||
} | |||||
return result | |||||
} | |||||
// Convert a web ReadableStream (not Node stream!) to an Async Iterator | |||||
// adapted from https://jakearchibald.com/2017/async-iterators-and-generators/ | |||||
function fromStream(stream) { | |||||
// Use native async iteration if it's available. | |||||
if (stream[Symbol.asyncIterator]) return stream | |||||
const reader = stream.getReader(); | |||||
return { | |||||
next() { | |||||
return reader.read() | |||||
}, | |||||
return() { | |||||
reader.releaseLock(); | |||||
return {} | |||||
}, | |||||
[Symbol.asyncIterator]() { | |||||
return this | |||||
}, | |||||
} | |||||
} | |||||
/* eslint-env browser */ | |||||
/** | |||||
* HttpClient | |||||
* | |||||
* @param {GitHttpRequest} request | |||||
* @returns {Promise<GitHttpResponse>} | |||||
*/ | |||||
async function request({ | |||||
onProgress, | |||||
url, | |||||
method = 'GET', | |||||
headers = {}, | |||||
body, | |||||
}) { | |||||
// streaming uploads aren't possible yet in the browser | |||||
if (body) { | |||||
body = await collect(body); | |||||
} | |||||
const res = await fetch(url, { method, headers, body }); | |||||
const iter = | |||||
res.body && res.body.getReader | |||||
? fromStream(res.body) | |||||
: [new Uint8Array(await res.arrayBuffer())]; | |||||
// convert Header object to ordinary JSON | |||||
headers = {}; | |||||
for (const [key, value] of res.headers.entries()) { | |||||
headers[key] = value; | |||||
} | |||||
return { | |||||
url: res.url, | |||||
method: res.method, | |||||
statusCode: res.status, | |||||
statusMessage: res.statusText, | |||||
body: iter, | |||||
headers: headers, | |||||
} | |||||
} | |||||
var index = { request }; | |||||
//export default index; | |||||
//export { request }; |
@@ -0,0 +1,83 @@ | |||||
ИмпортироватьХранилище = мир => | |||||
{ | |||||
(async() => { | |||||
await git.clone({ | |||||
fs: мир.импортХранилища.фс, | |||||
http: мир.гитHTTP, | |||||
dir: мир.импортХранилища.директория, | |||||
url: мир.импортХранилища.хранилище, | |||||
corsProxy: мир.импортХранилища.прокси, | |||||
}); | |||||
//мир.уведомить("склонировали хранилище"); | |||||
})(); | |||||
}; | |||||
// // // // | |||||
ЗадатьПараметрыИмпортаХранилища = мир => | |||||
{ | |||||
const хранилище = $(`#окно-добавление-хранилища-гит-хранилище`).val(); | |||||
const прокси = $(`#окно-добавление-хранилища-гит-прокси`).val(); | |||||
const имяФС = "git_" + хранилище; | |||||
мир.импортХранилища = { | |||||
"хранилище": хранилище, | |||||
"фс": new LightningFS(имяФС), | |||||
"директория": "/", | |||||
"прокси": прокси, | |||||
}; | |||||
}; | |||||
// // // // | |||||
ОтобразитьОкноДобавленияХранилища = мир => | |||||
{ | |||||
UIkit.modal($("#окно-добавление-хранилища")).show(); | |||||
}; | |||||
// // // // | |||||
ЗадатьПроксиИмпортаПоУмолчанию = мир => | |||||
{ | |||||
$(`#окно-добавление-хранилища-гит-прокси`).val("https://cors.isomorphic-git.org"); | |||||
}; | |||||
// // // // | |||||
СоздатьОкноДобавленияХранилища = мир => | |||||
{ | |||||
var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | |||||
var префикс = ИМЯ_ЭТОГО_ФАЙЛА.substring(0, ИМЯ_ЭТОГО_ФАЙЛА.length - 3); | |||||
var содержимое = м.содержимое[префикс + "🙈.html"]; | |||||
$(document.body).prepend(содержимое); | |||||
$(`#окно-добавление-хранилища-гит-учётка`).submit(function(событие) { | |||||
событие.preventDefault(); | |||||
мир.уведомить("кнопка импорта в окне добавления хранилища"); | |||||
}); | |||||
}; | |||||
// // // // | |||||
СоздатьКнопкуПлюсВШапке = мир => | |||||
{ | |||||
мир.кнопкиШапки.push({ | |||||
"🎃": "шапка-кнопка-плюс", | |||||
"💥": "кнопка плюс в шапке", | |||||
"🍲": "➕", | |||||
}); | |||||
мир.уведомить("изменили кнопки шапки"); | |||||
}; |
@@ -0,0 +1,11 @@ | |||||
пуск амура | |||||
создать кнопку плюс в шапке | |||||
создать окно добавления хранилища | |||||
задать прокси импорта по умолчанию | |||||
кнопка плюс в шапке | |||||
отобразить окно добавления хранилища | |||||
кнопка импорта в окне добавления хранилища | |||||
задать параметры импорта хранилища | |||||
импортировать хранилище |
@@ -1,29 +0,0 @@ | |||||
ОтобразитьОкноДобавленияХранилища = мир => | |||||
{ | |||||
UIkit.modal($("#окно-добавление-хранилища")).show(); | |||||
}; | |||||
// // // // | |||||
ДобавитьОкноДобавленияХранилища = мир => | |||||
{ | |||||
var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | |||||
var содержимое = м.содержимое["/81🕸➕🕸🙈.html"]; | |||||
$(document.body).prepend(содержимое); | |||||
}; | |||||
// // // // | |||||
ДобавитьКнопкуПлюсВШапку = мир => | |||||
{ | |||||
мир.кнопкиШапки.push({ | |||||
"🎃": "шапка-кнопка-плюс", | |||||
"💥": "шапки кнопка плюс", | |||||
"🍲": "➕", | |||||
}); | |||||
мир.уведомить("изменили кнопки шапки"); | |||||
}; |
@@ -1,6 +0,0 @@ | |||||
пуск амура | |||||
добавить кнопку плюс в шапку | |||||
добавить окно добавления хранилища | |||||
шапки кнопка плюс | |||||
отобразить окно добавления хранилища | |||||
@@ -2,9 +2,13 @@ | |||||
<div class="uk-modal-dialog"> | <div class="uk-modal-dialog"> | ||||
<button class="uk-modal-close-default" type="button" uk-close></button> | <button class="uk-modal-close-default" type="button" uk-close></button> | ||||
<div class="uk-modal-header"> | <div class="uk-modal-header"> | ||||
<h2 class="uk-modal-title">Добавить ⚬ 添加 ⚬ Add</h2> | |||||
<h2 class="uk-modal-title">Добавить 🕸 添加 🕸 Add</h2> | |||||
</div> | </div> | ||||
<div id="___окно-со-списком-модулей-список" class="uk-modal-body" uk-overflow-auto> | |||||
<form id="окно-добавление-хранилища-гит-учётка" class="uk-padding"> | |||||
<input id="окно-добавление-хранилища-гит-прокси" class="uk-input uk-margin-small" type="text" placeholder="Прокси 🕸 代理 🕸 Proxy"> | |||||
<input id="окно-добавление-хранилища-гит-хранилище" class="uk-input uk-margin-small" type="text" placeholder="Хранилище 🕸 存储库 🕸 Repository"> | |||||
<button class="uk-button uk-button-primary uk-margin-small">Импортировать 🕸 导入 🕸 Import</button> | |||||
</form> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> |