302 lines
11 KiB
HTML
302 lines
11 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<meta charset="utf-8">
|
||
<head>
|
||
<style>
|
||
table
|
||
{
|
||
border-collapse: collapse;
|
||
width: 100%;
|
||
}
|
||
table, th, td
|
||
{
|
||
border: 1px solid #aaa;
|
||
padding: 0.5em;
|
||
margin-top: 0.5em;
|
||
margin-bottom: 0.5em;
|
||
}
|
||
</style>
|
||
<title>Метки</title>
|
||
</head>
|
||
<body>
|
||
<p>Загружаем метки</p>
|
||
<script>
|
||
function базаБезФайла()
|
||
{
|
||
var база = window.location.href;
|
||
var компоненты = база.split(/\//);
|
||
компоненты.pop();
|
||
return decodeURIComponent(компоненты.join("/"));
|
||
}
|
||
|
||
function ограниченнаяСтрока(строка)
|
||
{
|
||
const предел = 93;
|
||
if (строка.length > предел)
|
||
{
|
||
return строка.substring(0, предел) + ". . .";
|
||
}
|
||
|
||
return строка;
|
||
}
|
||
|
||
// JavaScript equivalent to printf/String.Format
|
||
// https://stackoverflow.com/a/4673436
|
||
function форматСтроки() {
|
||
// How to shift “arguments”
|
||
// https://stackoverflow.com/questions/4775895/how-to-shift-arguments
|
||
var args = Array.prototype.slice.call(arguments);
|
||
var str = args.shift();
|
||
return str.replace(/{(\d+)}/g, function(match, number) {
|
||
return typeof args[number] != 'undefined'
|
||
? args[number]
|
||
: match
|
||
;
|
||
});
|
||
}
|
||
|
||
function взять(адрес, откликУспеха, откликПровала)
|
||
{
|
||
var запрос = new XMLHttpRequest();
|
||
запрос.onreadystatechange = function()
|
||
{
|
||
if (this.readyState == 4)
|
||
{
|
||
if (this.status == 200)
|
||
{
|
||
откликУспеха(this.responseText);
|
||
}
|
||
else if (откликПровала)
|
||
{
|
||
откликПровала(this.status);
|
||
}
|
||
}
|
||
}
|
||
|
||
запрос.open("GET", адрес);
|
||
запрос.send();
|
||
}
|
||
</script>
|
||
<script>
|
||
var м = {};
|
||
м.метки = [];
|
||
|
||
м.таблица = null;
|
||
м.создатьТаблицу = function()
|
||
{
|
||
const интерфейс = `
|
||
<table id="метки">
|
||
<tr>
|
||
<th>Дата</th>
|
||
<th>Имя</th>
|
||
<th>Описание</th>
|
||
<th>Короткий адрес</th>
|
||
<th>Полный адрес</th>
|
||
</tr>
|
||
</table>
|
||
`;
|
||
document.body.innerHTML = интерфейс;
|
||
м.таблица = document.getElementById("метки");
|
||
};
|
||
|
||
м.заполнитьТаблицу = function()
|
||
{
|
||
for (var номер in м.метки)
|
||
{
|
||
var метка = м.метки[номер];
|
||
var ряд = м.таблица.insertRow(-1);
|
||
var номер = 0;
|
||
var ячейки = {
|
||
"дата": ряд.insertCell(номер++),
|
||
"имя": ряд.insertCell(номер++),
|
||
"описание": ряд.insertCell(номер++),
|
||
"коротко": ряд.insertCell(номер++),
|
||
"адрес": ряд.insertCell(номер++),
|
||
};
|
||
ячейки.дата.innerHTML = метка.дата;
|
||
ячейки.имя.innerHTML = метка.имя;
|
||
ячейки.описание.innerHTML = метка.описание;
|
||
ячейки.коротко.innerHTML = базаБезФайла() + "?" + метка.имя;
|
||
ячейки.адрес.innerHTML =
|
||
форматСтроки(
|
||
"<a href='{0}'>{1}</a>",
|
||
метка.адрес,
|
||
ограниченнаяСтрока(метка.адрес)
|
||
);
|
||
}
|
||
};
|
||
|
||
м.имя = null;
|
||
м.разобратьИмяПеренаправления = function()
|
||
{
|
||
const имя = decodeURIComponent(window.location.search.substring(1));
|
||
if (имя.length)
|
||
{
|
||
м.имя = имя;
|
||
}
|
||
};
|
||
|
||
м.адресПоИмени = function(имя)
|
||
{
|
||
if (!имя)
|
||
{
|
||
return null;
|
||
}
|
||
|
||
for (var номер in м.метки)
|
||
{
|
||
var метка = м.метки[номер];
|
||
if (метка.имя == имя)
|
||
{
|
||
return метка.адрес;
|
||
}
|
||
}
|
||
|
||
return null;
|
||
};
|
||
|
||
м.разобратьМетки = function(текст)
|
||
{
|
||
var сейчас = "";
|
||
var метки = [];
|
||
var метка = {
|
||
"имя" : "",
|
||
"дата" : "",
|
||
"адрес" : "",
|
||
"описание" : "",
|
||
};
|
||
|
||
function возможноЗабратьМетку()
|
||
{
|
||
if (
|
||
метка.имя.length &&
|
||
метка.дата.length &&
|
||
метка.адрес.length &&
|
||
метка.описание.length
|
||
) {
|
||
метки.push(метка);
|
||
// Освободить место для следующей метки.
|
||
метка = {
|
||
"имя" : "",
|
||
"дата" : "",
|
||
"адрес" : "",
|
||
"описание" : "",
|
||
};
|
||
}
|
||
}
|
||
|
||
const строки = текст.split(/\n/);
|
||
for (var номер in строки)
|
||
{
|
||
const строка = строки[номер];
|
||
// Ключ.
|
||
if (строка == "ИМЯ")
|
||
{
|
||
возможноЗабратьМетку();
|
||
сейчас = "имя";
|
||
}
|
||
else if (строка == "ДАТА")
|
||
{
|
||
возможноЗабратьМетку();
|
||
сейчас = "дата";
|
||
}
|
||
else if (строка == "ОПИСАНИЕ")
|
||
{
|
||
возможноЗабратьМетку();
|
||
сейчас = "описание";
|
||
}
|
||
else if (строка == "АДРЕС")
|
||
{
|
||
возможноЗабратьМетку();
|
||
сейчас = "адрес";
|
||
}
|
||
// Значение.
|
||
else
|
||
{
|
||
if (сейчас == "имя")
|
||
{
|
||
метка.имя += строка;
|
||
}
|
||
else if (сейчас == "дата")
|
||
{
|
||
метка.дата += строка;
|
||
}
|
||
else if (сейчас == "адрес")
|
||
{
|
||
метка.адрес += строка;
|
||
}
|
||
else if (сейчас == "описание")
|
||
{
|
||
метка.описание += строка + "\n";
|
||
}
|
||
}
|
||
}
|
||
// Последний раз.
|
||
возможноЗабратьМетку();
|
||
м.метки = метки;
|
||
};
|
||
|
||
м.сортироватьМетки = function()
|
||
{
|
||
// Сортируем от новейших меток к старейшим.
|
||
м.метки.sort(function(метка1, метка2){
|
||
if (метка1.дата > метка2.дата)
|
||
{
|
||
return -1;
|
||
}
|
||
if (метка1.дата < метка2.дата)
|
||
{
|
||
return 1;
|
||
}
|
||
return 0;
|
||
});
|
||
};
|
||
|
||
м.загрузитьМетки = function(откликЗавершения)
|
||
{
|
||
взять(
|
||
м.адрес,
|
||
function(текст)
|
||
{
|
||
м.разобратьМетки(текст);
|
||
откликЗавершения();
|
||
}
|
||
);
|
||
};
|
||
|
||
м.сделатьДело = function()
|
||
{
|
||
м.разобратьИмяПеренаправления();
|
||
const адр = м.адресПоИмени(м.имя)
|
||
// Перенаправить.
|
||
if (адр)
|
||
{
|
||
window.location.href = адр;
|
||
}
|
||
// Показать заметки.
|
||
else
|
||
{
|
||
м.сортироватьМетки();
|
||
м.создатьТаблицу();
|
||
м.заполнитьТаблицу();
|
||
|
||
// Уведомить о неверном имени.
|
||
if (м.имя)
|
||
{
|
||
console.log("ВНИМАНИЕ Неверное имя: '" + м.имя + "'");
|
||
}
|
||
}
|
||
};
|
||
|
||
м.запустить = function()
|
||
{
|
||
м.загрузитьМетки(м.сделатьДело);
|
||
};
|
||
</script>
|
||
<script>
|
||
м.адрес = "https://git.opengamestudio.org/kornerr/metki/raw/branch/master/база";
|
||
м.запустить();
|
||
</script>
|
||
</body>
|
||
</html>
|