|
@@ -0,0 +1,510 @@ |
|
|
|
|
|
/* |
|
|
|
|
|
* ВЫБОР ФАЙЛА |
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
|
|
|
|
|
|
|
ЗадатьУказанныйФайл = 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() { |
|
|
|
|
|
мир.уведомить("не сохранили изменения"); |
|
|
|
|
|
}); |
|
|
|
|
|
мир.модули.сохранить(мир.редактируемыйМодуль.указатель); |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
*/ |