@@ -1,7 +1,7 @@ | |||||
Архивировать МАОН | Архивировать МАОН | ||||
0.1.0 | |||||
0.2.0 | |||||
https://git.opengamestudio.org/kornerr/APXuBuPOBATb-MAOH | https://git.opengamestudio.org/kornerr/APXuBuPOBATb-MAOH | ||||
x /🔄.js | |||||
/🔄.череда | |||||
/🏁.js | |||||
/🏁.череда | |||||
x /🗄️.js | x /🗄️.js |
@@ -0,0 +1,130 @@ | |||||
// // // // | |||||
ВыдатьАрхивНаСкачивание = мир => | |||||
{ | |||||
// How to create a file in memory for user to download, but not through server? | |||||
// https://stackoverflow.com/a/18197341 | |||||
var ссыль = document.createElement("a"); | |||||
ссыль.setAttribute("href", "data:text/html;charset=utf-8;base64," + мир.содержимоеАрхива); | |||||
var имя = "MAOH.zip"; | |||||
ссыль.setAttribute("download", имя); | |||||
ссыль.style.display = "none"; | |||||
document.body.appendChild(ссыль); | |||||
ссыль.click(); | |||||
document.body.removeChild(ссыль); | |||||
}; | |||||
// // // // | |||||
СгенерироватьАрхив = мир => | |||||
{ | |||||
мир.архив.generateAsync({type: "base64"}).then(function(content) { | |||||
мир.содержимоеАрхива = content; | |||||
console.debug("мир.содержимоеАрхива", мир.содержимоеАрхива); | |||||
мир.уведомить("сгенерировали архив"); | |||||
}); | |||||
}; | |||||
// // // // | |||||
СоздатьАрхивИзЗагруженныхМодулей = мир => | |||||
{ | |||||
var архив = new JSZip(); | |||||
for (var н in мир.указателиМодулей) | |||||
{ | |||||
var ук = мир.указателиМодулей[н]; | |||||
//var ук64 = мир.база64ИзДвоичногоМассива(new Uint8Array(содержимое)); | |||||
var директория = архив.folder(ук); | |||||
директория.file("hello", "yohello"); | |||||
} | |||||
мир.архив = архив; | |||||
}; | |||||
// // // // | |||||
ЗагрузитьМодули = мир => | |||||
{ | |||||
мир.модули.использовали.подписатьРаз(function() { | |||||
мир.уведомить("загрузили модули"); | |||||
}); | |||||
мир.модули.использовать(мир.указателиМодулей); | |||||
}; | |||||
// // // // | |||||
ВывестиУказателиМодулей = мир => | |||||
{ | |||||
console.debug("указатели модулей:", мир.указателиМодулей); | |||||
}; | |||||
// // // // | |||||
РазобратьСписокМодулей = мир => | |||||
{ | |||||
var указатели = []; | |||||
var строки = мир.списокМодулей.split(/\n/); | |||||
for (var номер in строки) | |||||
{ | |||||
var строка = строки[номер].trim(); | |||||
if (!строка.startsWith("#") && строка.length) | |||||
{ | |||||
указатели.push(строка); | |||||
} | |||||
} | |||||
мир.указателиМодулей = указатели; | |||||
}; | |||||
// // // // | |||||
ЗадатьСписокМодулей = мир => | |||||
{ | |||||
мир.списокМодулей = ` | |||||
https://bitbucket.org/gitjs/jquery/raw/3.5.1/0000 | |||||
https://bitbucket.org/gitjs/uikit/raw/3.2.0/0000 | |||||
https://git.opengamestudio.org/mahjong/mahjong-raskladka-layout/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/mahjong/povtorniy-repeating-ui/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/PuCOBATEJlb/PuCOBATEJlb/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/PuCOBATEJlb/PECYPCbl/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/MEXMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/CEHMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/MOPMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PEEMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/OTMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/CYMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/TEMA_M1K/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PACK_M1/raw/branch/master/0000 | |||||
# Убрать после отладки | |||||
https://git.opengamestudio.org/MAOH/TEMA_OT/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PACK_OT/raw/branch/master/0000 | |||||
`; | |||||
}; | |||||
// // // // | |||||
СкрытьКрутилку = мир => | |||||
{ | |||||
document.getElementById("крутилка").style.display = "none"; | |||||
}; |
@@ -0,0 +1,11 @@ | |||||
надо окончить загрузку приложения | |||||
скрыть крутилку | |||||
задать список модулей | |||||
разобрать список модулей | |||||
вывести указатели модулей | |||||
загрузить модули | |||||
загрузили модули | |||||
создать архив из загруженных модулей | |||||
сгенерировать архив | |||||
сгенерировали архив | |||||
выдать архив на скачивание |
@@ -0,0 +1,27 @@ | |||||
# Список указателей на модули для загрузки во время пуска | |||||
# 启动时要加载的模块指针列表 | |||||
# List of module pointers to load at startup | |||||
https://bitbucket.org/gitjs/jquery/raw/3.5.1/0000 | |||||
https://bitbucket.org/gitjs/uikit/raw/3.2.0/0000 | |||||
https://git.opengamestudio.org/mahjong/mahjong-raskladka-layout/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/mahjong/povtorniy-repeating-ui/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/PuCOBATEJlb/PuCOBATEJlb/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/PuCOBATEJlb/PECYPCbl/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/MEXMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/CEHMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/MOPMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PEEMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/OTMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/CYMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/TEMA_M1K/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PACK_M1/raw/branch/master/0000 | |||||
# Убрать после отладки | |||||
https://git.opengamestudio.org/MAOH/TEMA_OT/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PACK_OT/raw/branch/master/0000 | |||||
@@ -1,115 +0,0 @@ | |||||
ПерезагрузитьПриложениеПослеОбновления = мир => | |||||
{ | |||||
window.location.reload(false); | |||||
}; | |||||
// // // // | |||||
УдалитьМодулиПриложенияПередОбновлением = мир => | |||||
{ | |||||
var список = мир.списокМодулейПриложенияДляОбновления; | |||||
for (var номер in список) | |||||
{ | |||||
var указатель = список[номер]; | |||||
localStorage.removeItem(указатель); | |||||
} | |||||
}; | |||||
// // // // | |||||
ПроверитьНаличиеМодулейПриложенияДляОбновления = мир => | |||||
{ | |||||
if (мир.списокМодулейПриложенияДляОбновления.length) | |||||
{ | |||||
мир.уведомить("присутствуют модули приложения для обновления"); | |||||
} | |||||
else | |||||
{ | |||||
мир.уведомить("отсутствуют модули приложения для обновления"); | |||||
} | |||||
} | |||||
// // // // | |||||
СоставитьСписокМодулейПриложенияДляОбновления = мир => | |||||
{ | |||||
var список = []; | |||||
var описания = мир.описанияМодулейПриложения; | |||||
for (var указатель in описания) | |||||
{ | |||||
var описание = описания[указатель]; | |||||
var модуль = мир.модули.модульПоУказателю(указатель); | |||||
if ( | |||||
модуль && | |||||
модуль.версия != описание.версия | |||||
) { | |||||
список.push(указатель); | |||||
} | |||||
} | |||||
мир.списокМодулейПриложенияДляОбновления = список; | |||||
}; | |||||
// // // // | |||||
УведомитьОбОтсутствииОбновленийПриложения = мир => | |||||
{ | |||||
мир.уведомить("обновления приложения отсутствуют"); | |||||
}; | |||||
// // // // | |||||
ЗагрузитьОписаниеВсехМодулейПриложения = мир => | |||||
{ | |||||
var указатели = [УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ]; | |||||
var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | |||||
var содержимое = м.содержимое["/📦"]; | |||||
var строки = содержимое.split(/\n/); | |||||
for (var номер in строки) | |||||
{ | |||||
var строка = строки[номер]; | |||||
if (!строка.startsWith("#") && строка.length) | |||||
{ | |||||
указатели.push(строка); | |||||
} | |||||
} | |||||
мир.описанияМодулейПриложения = []; | |||||
function загрузитьОписание(мир, список, номер, успех, провал) | |||||
{ | |||||
const указатель = список[номер]; | |||||
мир.взять( | |||||
указатель, | |||||
function(содержимое) { | |||||
var описание = мир.разобрать0000(содержимое); | |||||
мир.описанияМодулейПриложения[указатель] = описание; | |||||
успех(); | |||||
}, | |||||
function(ошибка) { | |||||
провал(); | |||||
} | |||||
); | |||||
} | |||||
сделатьПараллельно( | |||||
мир, | |||||
указатели, | |||||
загрузитьОписание, | |||||
function() { | |||||
мир.уведомить("загрузили описание всех модулей приложения"); | |||||
}, | |||||
function() { | |||||
мир.уведомить("не загрузили описание всех модулей приложения"); | |||||
} | |||||
); | |||||
}; |
@@ -1,12 +0,0 @@ | |||||
надо обновить приложение при наличии обновлений | |||||
загрузить описание всех модулей приложения | |||||
не загрузили описание всех модулей приложения | |||||
уведомить об отсутствии обновлений приложения | |||||
загрузили описание всех модулей приложения | |||||
составить список модулей приложения для обновления | |||||
проверить наличие модулей приложения для обновления | |||||
отсутствуют модули приложения для обновления | |||||
уведомить об отсутствии обновлений приложения | |||||
присутствуют модули приложения для обновления | |||||
удалить модули приложения перед обновлением | |||||
перезагрузить приложение после обновления |
@@ -1,4 +1,5 @@ | |||||
var модуль = gitjs.мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | var модуль = gitjs.мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | ||||
document.title = "🀄 Архивировать МАОН"; | |||||
// MARK: /📦 | // MARK: /📦 | ||||
@@ -6,117 +7,29 @@ var модуль = gitjs.мир.модули.модульПоУказателю( | |||||
модуль.содержимое["/📦"] = ` | модуль.содержимое["/📦"] = ` | ||||
# Список указателей на модули для загрузки во время пуска | |||||
# 启动时要加载的模块指针列表 | |||||
# List of module pointers to load at startup | |||||
https://bitbucket.org/gitjs/jquery/raw/3.5.1/0000 | |||||
https://bitbucket.org/gitjs/uikit/raw/3.2.0/0000 | |||||
https://git.opengamestudio.org/mahjong/mahjong-raskladka-layout/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/mahjong/povtorniy-repeating-ui/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/BCE/jszip/raw/branch/master/0000 | |||||
# Из Рисователя берём Base64JS, да, косо-криво, лучше поменять. | |||||
https://git.opengamestudio.org/PuCOBATEJlb/PuCOBATEJlb/raw/branch/master/0000 | https://git.opengamestudio.org/PuCOBATEJlb/PuCOBATEJlb/raw/branch/master/0000 | ||||
https://git.opengamestudio.org/PuCOBATEJlb/PECYPCbl/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/MEXMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/CEHMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/MOPMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PEEMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/OTMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/CYMA/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/TEMA_M1K/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PACK_M1/raw/branch/master/0000 | |||||
# Убрать после отладки | |||||
https://git.opengamestudio.org/MAOH/TEMA_OT/raw/branch/master/0000 | |||||
https://git.opengamestudio.org/MAOH/PACK_OT/raw/branch/master/0000 | |||||
`; | |||||
// MARK: /🙈.html | |||||
модуль.содержимое["/🙈.html"] = ` | |||||
<center> | |||||
<p>Маджонг ⚬ 麻将 ⚬ Mahjong</p> | |||||
<h1>🀄 МАОН</h1> | |||||
<p>${версия}</p> | |||||
</center> | |||||
`; | `; | ||||
// MARK: /🙈.css | |||||
модуль.содержимое["/🙈.css"] = ` | |||||
.фон-экрана | |||||
{ | |||||
background-color: white; | |||||
position: fixed; | |||||
left: 0; | |||||
top: 0; | |||||
right: 0; | |||||
bottom: 0; | |||||
width: 100%; | |||||
height: 100%; | |||||
} | |||||
`; | |||||
// MARK: /🎬.js | |||||
// MARK: /📦.js | |||||
ЗадатьЗаголовок = мир => | |||||
ОкончитьЗагрузкуПриложения = мир => | |||||
{ | { | ||||
document.title = "🀄 МАОН"; | |||||
мир.уведомить("надо окончить загрузку приложения"); | |||||
}; | }; | ||||
// // // // | // // // // | ||||
ОтобразитьСтраницуЗагрузки = мир => | |||||
ЗагрузитьОкончание = мир => | |||||
{ | { | ||||
var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); | ||||
var вид = document.createElement("style"); | |||||
document.head.appendChild(вид); | |||||
вид.innerHTML = м.содержимое["/🙈.css"]; | |||||
var структура = м.содержимое["/🙈.html"] | |||||
.replace(/\${версия}/g, м.версия); | |||||
// Вставляем содержимое в рамку, чтобы применяемые стили UIkit не | |||||
// дёргали надписи. | |||||
// https://stackoverflow.com/a/8322025 | |||||
var рамка = "<iframe id='экран-загрузки' class='фон-экрана' frameBorder='0'></iframe>"; | |||||
document.body.insertAdjacentHTML("afterbegin", рамка); | |||||
document.getElementById("экран-загрузки").src = "data:text/html;charset=utf-8," + структура; | |||||
}; | |||||
// MARK: /🎬.череда | |||||
gitjs.мир.разобрать(` | |||||
пуск | |||||
задать заголовок | |||||
отобразить страницу загрузки | |||||
`); | |||||
// MARK: /📦.js | |||||
ОкончитьЗагрузкуПриложения = мир => | |||||
{ | |||||
мир.уведомить("надо окончить загрузку приложения"); | |||||
eval(м.содержимое["/🏁.js"]); | |||||
мир.разобрать(м.содержимое["/🏁.череда"]); | |||||
}; | }; | ||||
@@ -184,6 +97,7 @@ gitjs.мир.разобрать(` | |||||
обновления приложения отсутствуют | обновления приложения отсутствуют | ||||
загрузить библиотеки приложения | загрузить библиотеки приложения | ||||
загрузили библиотеки приложения | загрузили библиотеки приложения | ||||
загрузить окончание | |||||
окончить загрузку приложения | окончить загрузку приложения | ||||
`); | `); | ||||
@@ -0,0 +1,14 @@ | |||||
.фон-экрана | |||||
{ | |||||
background-color: white; | |||||
position: fixed; | |||||
left: 0; | |||||
top: 0; | |||||
right: 0; | |||||
bottom: 0; | |||||
width: 100%; | |||||
height: 100%; | |||||
} | |||||
@@ -0,0 +1,8 @@ | |||||
<center> | |||||
<p>Маджонг ⚬ 麻将 ⚬ Mahjong</p> | |||||
<h1>🀄 МАОН</h1> | |||||
<p>0.1.0</p> | |||||
</center> | |||||