Files
metki/метки_1.0.0.html

302 řádky
11 KiB
HTML
Surový Trvalý odkaz Blame Historie

Tento soubor obsahuje nejednoznačné znaky Unicode

Tento soubor obsahuje znaky Unicode, které mohou být zaměněny s jinými znaky. Pokud si myslíte, že je to záměrné, můžete toto varování bezpečně ignorovat. Použijte tlačítko Escape sekvence k jejich zobrazení.

<!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>