511 lines
14 KiB
JavaScript
511 lines
14 KiB
JavaScript
/*
|
||
* ВЫБОР ФАЙЛА
|
||
*/
|
||
|
||
/*
|
||
|
||
ЗадатьУказанныйФайл = function(мир)
|
||
{
|
||
мир.файл = мир.файлы[мир.номерВыбранногоФайла];
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НеОтслеживатьРедактирование = function(мир)
|
||
{
|
||
мир.отслеживатьРедактирование = false;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОтслеживатьРедактирование = function(мир)
|
||
{
|
||
мир.отслеживатьРедактирование = true;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьПараметрФайла = function(мир)
|
||
{
|
||
var файл = мир.файлы[мир.номерВыбранногоФайла];
|
||
задатьПараметрВСтрокеПоиска("📁", файл);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОтобразитьСодержимоеВыбранногоФайла = function(мир)
|
||
{
|
||
var файл = мир.файлы[мир.номерВыбранногоФайла];
|
||
var содержимое = мир.временноеСодержимое[файл];
|
||
if (!содержимое)
|
||
{
|
||
содержимое = мир.редактируемыйМодуль.содержимое[файл];
|
||
};
|
||
мир.редактор.session.setValue(содержимое);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОтобразитьВыборФайла = function(мир)
|
||
{
|
||
var id = мир.макет.константы.файл;
|
||
// Очищаем выбор.
|
||
for (var номер in мир.файлы)
|
||
{
|
||
$(`#${id}-${номер}-элемент`).removeClass("uk-active");
|
||
}
|
||
// Отображаем выбор.
|
||
$(`#${id}-${мир.номерВыбранногоФайла}-элемент`).addClass("uk-active");
|
||
};
|
||
|
||
*/
|
||
|
||
/*
|
||
* ПУСК
|
||
*/
|
||
|
||
/*
|
||
|
||
const ИМЯ = "Главред | Glavred";
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьВременноеСодержимое = function(мир)
|
||
{
|
||
мир.временноеСодержимое = {};
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьКнопкуСохранения = function(мир)
|
||
{
|
||
var кнопка = мир.макет.элементы.действие
|
||
.replace("${название}", "💾")
|
||
.replace(/\$\{id\}/g, `${мир.макет.константы.сохранить}`)
|
||
;
|
||
$(`#${мир.макет.константы.действия}`).append(кнопка);
|
||
$(`#${мир.макет.константы.сохранить}-ссылка`).click(function() {
|
||
мир.уведомить("выбрали сохранить");
|
||
});
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НастроитьОтслеживаниеРедактирования = function(мир)
|
||
{
|
||
мир.отслеживатьРедактирование = true;
|
||
|
||
мир.редактор.session.on("change", function(delta) {
|
||
if (мир.отслеживатьРедактирование)
|
||
{
|
||
мир.уведомить("редактирование");
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВыбратьУказанныйФайл = function(мир)
|
||
{
|
||
мир.номерВыбранногоФайла = мир.файлы.indexOf(мир.файл);
|
||
мир.уведомить("выбрали файл");
|
||
}
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВыбратьПервыйФайл = function(мир)
|
||
{
|
||
мир.номерВыбранногоФайла = 0;
|
||
мир.уведомить("выбрали файл");
|
||
}
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПроверитьНаличиеУказанногоФайла = function(мир)
|
||
{
|
||
if (
|
||
мир.файл &&
|
||
мир.файлы.includes(мир.файл)
|
||
) {
|
||
мир.уведомить("указанный файл существует");
|
||
}
|
||
else
|
||
{
|
||
мир.уведомить("указанный файл не существует");
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НастроитьAce = function(мир)
|
||
{
|
||
мир.редактор = window.ace.edit("редактор");
|
||
мир.редактор.session.setMode("ace/mode/javascript");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОтслеживатьВыборФайла = function(мир)
|
||
{
|
||
var id = мир.макет.константы.файл;
|
||
for (var номер in мир.файлы)
|
||
{
|
||
const номерФайла = номер;
|
||
$(`#${id}-${номер}-ссылка`).click(function() {
|
||
мир.номерВыбранногоФайла = номерФайла;
|
||
мир.уведомить("выбрали файл");
|
||
});
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьСписокФайлов = function(мир)
|
||
{
|
||
var м = мир.редактируемыйМодуль;
|
||
мир.файлы = Object.keys(м.структура).sort();
|
||
|
||
var содержимое = "";
|
||
|
||
var заголовок = мир.макет.элементы.заголовокМеню.replace("${название}", "📦 " + м.имя);
|
||
содержимое += заголовок;
|
||
var id = мир.макет.константы.файл;
|
||
for (var номер in мир.файлы)
|
||
{
|
||
var файл = мир.файлы[номер];
|
||
содержимое += мир.макет.элементы.пунктМеню
|
||
.replace("${название}", файл)
|
||
.replace(/\$\{id\}/g, `${id}-${номер}`)
|
||
;
|
||
}
|
||
|
||
$(`#${мир.макет.константы.меню}`).html(содержимое);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
УведомитьОбОшибкеЗагрузкиСодержимогоРедактируемогоМодуля = function(мир)
|
||
{
|
||
var сообщение = "ОШИБКА Не удалось загрузить редактируемый модуль из хранилища бразуера | ERROR The module to be edited couldn't be loaded from the browser's storage";
|
||
console.error(сообщение);
|
||
console.error(мир.указатель);
|
||
$(`#${мир.макет.константы.содержимое}`).html(`
|
||
<div class="ошибка">
|
||
<p>${сообщение}</p>
|
||
<p>${мир.указатель}</p>
|
||
</div>
|
||
`);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗагрузитьСодержимоеРедактируемогоМодуля = function(мир)
|
||
{
|
||
// Пропускаем загрузку, если содержимое уже присутствует.
|
||
if (мир.редактируемыйМодуль.содержимое)
|
||
{
|
||
мир.уведомить("загрузили содержимое");
|
||
return;
|
||
}
|
||
|
||
// Загружаем содержимое.
|
||
мир.модули.загрузилиСодержимоеСохранённогоМодуля.подписатьРаз(function() {
|
||
мир.уведомить("загрузили содержимое");
|
||
});
|
||
мир.модули.неЗагрузилиСодержимоеСохранённогоМодуля.подписатьРаз(function() {
|
||
мир.уведомить("не загрузили содержимое");
|
||
});
|
||
мир.модули.загрузитьСодержимоеСохранённогоМодуля(мир.указатель);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПродолжитьЗагрузку = мир =>
|
||
{
|
||
мир.уведомить("загрузили содержимое");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьПараметрМодуляРедактором = function(мир)
|
||
{
|
||
задатьПараметрВСтрокеПоиска("📦", мир.редактируемыйМодуль.указатель);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НазначитьРедактируемымМодульРедактора = function(мир)
|
||
{
|
||
мир.редактируемыйМодуль = мир.модули.модульПоИмени(ИМЯ);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПроверитьНаличиеРедактируемогоМодуля = function(мир)
|
||
{
|
||
мир.редактируемыйМодуль = мир.модули.модульПоУказателю(мир.указатель);
|
||
if (мир.редактируемыйМодуль)
|
||
{
|
||
мир.уведомить("редактируемый модуль существует");
|
||
}
|
||
else
|
||
{
|
||
мир.уведомить("редактируемый модуль не существует");
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьЗаголовокИВерсию = function(мир)
|
||
{
|
||
var м = мир.ведущийМодуль;
|
||
$(`#${мир.макет.константы.заголовок}`).text(м.имя);
|
||
$(`#${мир.макет.константы.версия}`).text(м.версия);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОчиститьМакетОтЗаглушек = function(мир)
|
||
{
|
||
$(`#${мир.макет.константы.заголовок}`).text("");
|
||
$(`#${мир.макет.константы.версия}`).text("");
|
||
$(`#${мир.макет.константы.действия}`).text("");
|
||
$(`#${мир.макет.константы.меню}`).text("");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
УстановитьМакет = function(мир)
|
||
{
|
||
document.body.innerHTML = мир.макет.структура;
|
||
|
||
var вид = document.createElement("style");
|
||
document.head.appendChild(вид);
|
||
вид.innerHTML = мир.макет.вид;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НастроитьМакет = function(мир)
|
||
{
|
||
// Вырезаем тело из макета.
|
||
var html = мир.макет.структура;
|
||
var начало = html.indexOf("<!-- МАКЕТ_НАЧАЛО -->");
|
||
var конец = html.indexOf("<!-- МАКЕТ_КОНЕЦ -->");
|
||
html = html.substring(начало, конец);
|
||
|
||
var название = "редактор";
|
||
мир.макет.константы = {
|
||
"заголовок": `${название}-макет-шапка-заголовок`,
|
||
"версия": `${название}-макет-шапка-версия`,
|
||
"действия": `${название}-макет-шапка-действия`,
|
||
"меню": `${название}-макет-меню`,
|
||
"файл": `${название}-макет-меню-файл`,
|
||
"содержимое": "редактор",
|
||
"сохранить": `${название}-макет-сохранить`,
|
||
};
|
||
// Заменяем константы в макете.
|
||
for (var константа in мир.макет.константы)
|
||
{
|
||
var старое = "${" + константа + "}";
|
||
var новое = мир.макет.константы[константа];
|
||
html = html.replace(старое, новое);
|
||
}
|
||
|
||
мир.макет.структура = html;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗагрузитьМакет = function(мир)
|
||
{
|
||
var м = мир.ведущийМодуль;
|
||
var json = JSON.parse(м.содержимое["/макет|template.json"]);
|
||
мир.макет = {
|
||
"структура": м.содержимое["/макет|template.html"],
|
||
"вид": м.содержимое["/макет|template.css"],
|
||
"элементы": json,
|
||
};
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьВедущийМодуль = function(мир)
|
||
{
|
||
// Редактор является ведущим модулем.
|
||
мир.ведущийМодуль = мир.модули.модульПоИмени(ИМЯ);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
РазобратьПараметры = function(мир)
|
||
{
|
||
мир.указатель = null;
|
||
мир.файл = null;
|
||
|
||
var параметры = new URLSearchParams(window.location.search);
|
||
for (var имя of параметры.keys())
|
||
{
|
||
var значение = decodeURI(параметры.get(имя));
|
||
var имя = decodeURI(имя);
|
||
if (имя == "📦")
|
||
{
|
||
мир.указатель = значение;
|
||
}
|
||
else if (имя == "📁")
|
||
{
|
||
мир.файл = значение;
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВывестиРазобранныеПараметры = function(мир)
|
||
{
|
||
console.debug(`
|
||
Разобранные параметры редактора:
|
||
|
||
* 📦: '${мир.указатель}'
|
||
* 📁: '${мир.файл}'
|
||
`);
|
||
};
|
||
|
||
*/
|
||
|
||
/*
|
||
* РЕДАКТИРОВАНИЕ
|
||
*/
|
||
|
||
/*
|
||
|
||
СохранитьВременноеСодержимоеРедактируемогоФайла = function(мир)
|
||
{
|
||
var файл = мир.файлы[мир.номерВыбранногоФайла];
|
||
var содержимое = мир.редактор.session.getValue();
|
||
мир.временноеСодержимое[файл] = содержимое;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПометитьВыбранныйФайлКакИзменённый = function(мир)
|
||
{
|
||
$(`#${мир.макет.константы.файл}-${мир.номерВыбранногоФайла}-изменение`).removeAttr("hidden");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВывестиРедактирование = function(мир)
|
||
{
|
||
console.debug("Редактирование");
|
||
};
|
||
|
||
*/
|
||
|
||
/*
|
||
* СОХРАНЕНИЕ
|
||
*/
|
||
|
||
/*
|
||
|
||
УведомитьОНеудачномСохраненииИзменений = function(мир)
|
||
{
|
||
UIkit.notification("Не удалось сохранить изменения", {status: "danger"});
|
||
UIkit.notification("Could not save changes", {status: "danger"});
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
УведомитьОбУспешномСохраненииИзменений = function(мир)
|
||
{
|
||
UIkit.notification("Сохранили успешно", {status: "success"});
|
||
UIkit.notification("Saved successfully", {status: "success"});
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СохранитьИзменения = function(мир)
|
||
{
|
||
for (var файл in мир.временноеСодержимое)
|
||
{
|
||
var содержимое = мир.временноеСодержимое[файл];
|
||
мир.редактируемыйМодуль.содержимое[файл] = содержимое;
|
||
}
|
||
|
||
мир.временноеСодержимое = {};
|
||
|
||
мир.модули.сохранили.подписатьРаз(function() {
|
||
мир.уведомить("сохранили изменения");
|
||
});
|
||
мир.модули.неСохранили.подписатьРаз(function() {
|
||
мир.уведомить("не сохранили изменения");
|
||
});
|
||
мир.модули.сохранить(мир.редактируемыйМодуль.указатель);
|
||
};
|
||
|
||
*/
|