Browse Source

add new lang

master
filesite 5 days ago
parent
commit
485e4ea1e3
  1. 40
      i18n/de.json
  2. 40
      i18n/es.json
  3. 40
      i18n/hi.json
  4. 40
      i18n/ru.json
  5. 283
      public/de/index.html
  6. 4
      public/en-us/index.html
  7. 283
      public/es/index.html
  8. 283
      public/hi/index.html
  9. 4
      public/ja/index.html
  10. 283
      public/ru/index.html
  11. 4
      public/template/index.html
  12. 4
      public/zh/index.html

40
i18n/de.json

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
{
"Current Lang": "Deutsch",
"HeroUnion - Open source web crawler union.": "HeroUnion – Open-Source-Webcrawler-Union.",
"HeroUnion.website": "HeroUnion.website",
"HeroUnion<small> - Open source web crawler union</small>": "HeroUnion <small>– Open-Source-Webcrawler-Union</small>",
"HeroUnion Stats": "HeroUnion-Statistiken",
"It's running": "Es läuft",
"Tasks Stats": "Aufgabenstatistiken",
"Last": "Zuletzt",
"Waiting": "Warten",
"Running": "Läuft",
"Total": "Gesamt",
"Done": "Erledigt",
"Failed": "Fehlgeschlagen",
"Notify Stats": "Benachrichtigungsstatistiken",
"Bot Stats": "Bot-Statistiken",
"Idle": "Leerlauf",
"Busy": "Beschäftigt",
"Offline": "Offline",
"JSON Data": "JSON-Daten",
"Covenant of the Alliance": "Pakt der Allianz",
"Please abide by the following conventions and stick to it for a better tomorrow for yourself and the whole society!": "Bitte halten Sie sich an die folgenden Konventionen und bleiben Sie dabei, für eine bessere Zukunft für sich selbst und die gesamte Gesellschaft!",
"Comply with local/national laws and regulations": "Halten Sie lokale/nationale Gesetze und Vorschriften ein",
"Data that requires login or VIP status to access will not be crawled": "Daten, für deren Zugriff eine Anmeldung oder ein VIP-Status erforderlich ist, werden nicht gecrawlt.",
"Data that is explicitly prohibited from being collected by the target website will not be crawled": "Daten, deren Erfassung durch die Zielwebsite ausdrücklich verboten ist, werden nicht gecrawlt.",
"The commercial core data of the target website is not crawled": "Die kommerziellen Kerndaten der Zielwebsite werden nicht gecrawlt",
"Low concurrency, low frequency, does not affect the normal operation of the target website": "Geringe Parallelität, niedrige Frequenz, beeinträchtigt nicht den normalen Betrieb der Zielwebsite",
"Bots": "Bots",
"HeroUnion App": "HeroUnion App",
"HeroUnion download": "HeroUnion herunterladen",
"HeroBot download": "HeroBot herunterladen",
"HeroUnion<strong> is only responsible for the scheduling of crawlers and tasks</strong>.": "HeroUnion <strong>ist nur für die Planung von Crawlern und Aufgaben verantwortlich</strong> .",
"The contracts supported by crawlers and the specific content of tasks have nothing to do with the alliance.": "Die von den Crawlern unterstützten Verträge und die konkreten Aufgabeninhalte haben nichts mit der Allianz zu tun.",
"Website monitor": "Website-Monitor",
"Web Scraper": "Web Scraper",
"Disclaimer": "Haftungsausschluss",
"Information protected by law will not be crawled": "Gesetzlich geschützte Informationen werden nicht gecrawlt",
"for example": "Zum Beispiel",
"personal privacy data mobile phone number, ID number, etc.": "Persönliche Datenschutzdaten, Handynummer, Ausweisnummer usw."
}

40
i18n/es.json

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
{
"Current Lang": "Español",
"HeroUnion - Open source web crawler union.": "HeroUnion - Unión de rastreadores web de código abierto.",
"HeroUnion.website": "Sitio web de HeroUnion",
"HeroUnion<small> - Open source web crawler union</small>": "HeroUnion <small>- Unión de rastreadores web de código abierto</small>",
"HeroUnion Stats": "Estadísticas de HeroUnion",
"It's running": "Esta corriendo",
"Tasks Stats": "Estadísticas de tareas",
"Last": "Último",
"Waiting": "Espera",
"Running": "Correr",
"Total": "Total",
"Done": "Hecho",
"Failed": "Fallido",
"Notify Stats": "Notificar estadísticas",
"Bot Stats": "Estadísticas del bot",
"Idle": "Inactivo",
"Busy": "Ocupado",
"Offline": "Desconectado",
"JSON Data": "Datos JSON",
"Covenant of the Alliance": "Pacto de la Alianza",
"Please abide by the following conventions and stick to it for a better tomorrow for yourself and the whole society!": "¡Por favor, respete las siguientes convenciones y cúmplalas para un mejor mañana para usted y para toda la sociedad!",
"Comply with local/national laws and regulations": "Cumplir con las leyes y regulaciones locales/nacionales",
"Data that requires login or VIP status to access will not be crawled": "No se rastrearán los datos que requieren inicio de sesión o estado VIP para acceder.",
"Data that is explicitly prohibited from being collected by the target website will not be crawled": "No se rastrearán los datos cuya recopilación esté explícitamente prohibida por el sitio web de destino.",
"The commercial core data of the target website is not crawled": "No se rastrean los datos comerciales principales del sitio web de destino",
"Low concurrency, low frequency, does not affect the normal operation of the target website": "Baja concurrencia, baja frecuencia, no afecta el funcionamiento normal del sitio web de destino.",
"Bots": "Bots",
"HeroUnion App": "Aplicación HeroUnion",
"HeroUnion download": "Descarga de HeroUnion",
"HeroBot download": "Descargar HeroBot",
"HeroUnion<strong> is only responsible for the scheduling of crawlers and tasks</strong>.": "HeroUnion <strong>solo es responsable de la programación de rastreadores y tareas</strong> .",
"The contracts supported by crawlers and the specific content of tasks have nothing to do with the alliance.": "Los contratos respaldados por los rastreadores y el contenido específico de las tareas no tienen nada que ver con la alianza.",
"Website monitor": "Monitor de sitios web",
"Web Scraper": "Raspador web",
"Disclaimer": "Descargo de responsabilidad",
"Information protected by law will not be crawled": "La información protegida por la ley no será rastreada",
"for example": "Por ejemplo",
"personal privacy data mobile phone number, ID number, etc.": "Datos personales de privacidad: número de teléfono móvil, número de identificación, etc."
}

40
i18n/hi.json

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
{
"Current Lang": "हि",
"HeroUnion - Open source web crawler union.": "हियन - ओपन सस वब कलर यियन।",
"HeroUnion.website": "HeroUnion.वबसइट",
"HeroUnion<small> - Open source web crawler union</small>": "हियन <small>- ओपन सस वब कलर यियन</small>",
"HeroUnion Stats": "हियन आकड",
"It's running": "यह कम कर रह",
"Tasks Stats": "कय आकड",
"Last": "अिम",
"Waiting": "इतजर म",
"Running": "द",
"Total": "कल",
"Done": "ह गय",
"Failed": "असफल",
"Notify Stats": "आकडित कर",
"Bot Stats": "बट आकड",
"Idle": "निठल",
"Busy": "वयसत",
"Offline": "ऑफलइन",
"JSON Data": "JSON ड",
"Covenant of the Alliance": "गठबधन क",
"Please abide by the following conventions and stick to it for a better tomorrow for yourself and the whole society!": "कपयिनलिित परपरलन कर और अपन तथ समज कहतर कल किए इसकलन कर!",
"Comply with local/national laws and regulations": "सय/रय क और विियम अनलन कर",
"Data that requires login or VIP status to access will not be crawled": "जिस ड तक पहचनिए लिन यआईपटस क आवशयकत, उसल नहिएग",
"Data that is explicitly prohibited from being collected by the target website will not be crawled": "लकय वबसइट द एकतर किए जपषट रप सरतिित डल नहिएग",
"The commercial core data of the target website is not crawled": "लकय वबसइट कििक कर डल नहि गय",
"Low concurrency, low frequency, does not affect the normal operation of the target website": "कम समवर, कम आवि, लकय वबसइट कय सलन करभित नह करत",
"Bots": "बट",
"HeroUnion App": "हियन ऐप",
"HeroUnion download": "HeroUnion डउनलड",
"HeroBot download": "HeroBot डउनलड कर",
"HeroUnion<strong> is only responsible for the scheduling of crawlers and tasks</strong>.": "हियन <strong>कवल कलरस और किग किए जिर ह</strong> ।",
"The contracts supported by crawlers and the specific content of tasks have nothing to do with the alliance.": "कलरस द समरित अन और कििट समग गठबधन सई ल-द नह।",
"Website monitor": "वबसइट मिटर",
"Web Scraper": "वब सपर",
"Disclaimer": "असकरण",
"Information protected by law will not be crawled": "कन दरकित जनकल नहिएग",
"for example": "उदहरण किए",
"personal privacy data mobile phone number, ID number, etc.": "वयकिगत गपनयत, मइल फन नबर, आईडबर, आदि।"
}

40
i18n/ru.json

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
{
"Current Lang": "Русский",
"HeroUnion - Open source web crawler union.": "HeroUnion — объединение веб-сканеров с открытым исходным кодом.",
"HeroUnion.website": "HeroUnion.сайт",
"HeroUnion<small> - Open source web crawler union</small>": "HeroUnion <small>- Союз веб-сканеров с открытым исходным кодом</small>",
"HeroUnion Stats": "Статистика HeroUnion",
"It's running": "Он работает",
"Tasks Stats": "Статистика задач",
"Last": "Последний",
"Waiting": "Ожидающий",
"Running": "Бег",
"Total": "Общий",
"Done": "Сделанный",
"Failed": "Неуспешный",
"Notify Stats": "Уведомить статистику",
"Bot Stats": "Статистика ботов",
"Idle": "Праздный",
"Busy": "Занятый",
"Offline": "Оффлайн",
"JSON Data": "Данные JSON",
"Covenant of the Alliance": "Соглашение Альянса",
"Please abide by the following conventions and stick to it for a better tomorrow for yourself and the whole society!": "Пожалуйста, соблюдайте следующие правила и придерживайтесь их ради лучшего будущего для себя и всего общества!",
"Comply with local/national laws and regulations": "Соблюдайте местные/национальные законы и правила",
"Data that requires login or VIP status to access will not be crawled": "Данные, для доступа к которым требуется вход в систему или VIP-статус, не будут сканироваться.",
"Data that is explicitly prohibited from being collected by the target website will not be crawled": "Данные, сбор которых явно запрещен целевым веб-сайтом, не будут сканироваться.",
"The commercial core data of the target website is not crawled": "Коммерческие основные данные целевого веб-сайта не сканируются.",
"Low concurrency, low frequency, does not affect the normal operation of the target website": "Низкая степень параллелизма, низкая частота, не влияет на нормальную работу целевого веб-сайта.",
"Bots": "Боты",
"HeroUnion App": "Приложение HeroUnion",
"HeroUnion download": "HeroUnion скачать",
"HeroBot download": "HeroBot скачать",
"HeroUnion<strong> is only responsible for the scheduling of crawlers and tasks</strong>.": "HeroUnion <strong>отвечает только за планирование работы сканеров и задач</strong> .",
"The contracts supported by crawlers and the specific content of tasks have nothing to do with the alliance.": "Контракты, поддерживаемые краулерами, и конкретное содержание задач не имеют никакого отношения к альянсу.",
"Website monitor": "Монитор веб-сайта",
"Web Scraper": "Веб-скрейпер",
"Disclaimer": "Отказ от ответственности",
"Information protected by law will not be crawled": "Информация, защищенная законом, не будет сканироваться",
"for example": "например",
"personal privacy data mobile phone number, ID number, etc.": "персональные данные, номер мобильного телефона, номер удостоверения личности и т. д."
}

283
public/de/index.html

@ -0,0 +1,283 @@ @@ -0,0 +1,283 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width">
<title>HeroUnion – Open-Source-Webcrawler-Union.</title>
<meta name="author" content="HeroUnion.website">
<meta name="description" content="HeroUnion – Open-Source-Webcrawler-Union.">
<style>
*,body{margin:0;padding:0}
body{padding:8px;max-width:640px;margin:0 auto}
h1{font-size:2em;font-weight:500}
small{font-size:65%;font-weight:400}
pre{background-color:#DDD;padding-bottom:3px;padding-right:3px;border-radius:0 5px 0 5px;max-width:480px}
code{display:block;background-color:#EEE;padding:4px}
dt{background-color:#EEE;padding:4px 6px}
dd{text-indent:1em;margin:4px 0 8px 0}
li{margin-left:1em}
footer{padding-bottom:2em}
.text-center{text-align:center}
.text-right{text-align:right}
.mt-d5{margin-top:.5em}
.mt-1{margin-top:1em}
.mt-2{margin-top:2em}
.mt-4{margin-top:4em}
.mx-d2{margin-left:.5em;margin-right:.2em}
.icon{vertical-align:middle}
.stats{background-color:#EEE;padding:10px 10px 4px 10px}
.col{display:inline-block;padding:13px 4px;width:20%;background:#444;color:#FFF;margin-right:4px;margin-bottom:6px;text-align:center}
.col strong{font-size:24px}
.col label{display:block;font-size:15px}
.info{background-color:darkblue}
.success{background-color:green}
.warning{background-color:orange;color:#444}
.danger{background-color:red}
.disable{background-color:gray}
.langswitcher{position:relative}
.langswitcher button{padding:2px 4px;cursor:pointer}
.dropmenu{display:none;position:absolute;right:0;top:28px;padding:5px;width:80px;background-color:#FFF;border:1px solid #EEE}
.dropmenu li{list-style:none;padding:0;margin:3px 0;text-align:center}
@media(max-width:480px) {
h1 small{display:block}
}
</style>
</head>
<body>
<h1 class="text-center">HeroUnion <small>– Open-Source-Webcrawler-Union</small></h1>
<hr class="mt-d5">
<div class="text-right mt-d5 langswitcher">
<button data-status="closed">
<img src="/globe.svg" alt="Globe language switcher" class="icon">
Deutsch
</button>
<ul class="dropmenu">
<li><a href="/">English</a></li>
<li><a href="/zh/">简体中文</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/hi/">ि</a></li>
</ul>
</div>
<h3 class="mt-2">HeroUnion-Statistiken Es läuft <span class="run_time">...</span></h3>
<h4 class="mt-d5">Aufgabenstatistiken (Zuletzt <span class="cache_time">...</span>)</h4>
<div class="stats taskStatus">
<span class="col info">
<strong class="waiting">...</strong>
<label>Warten</label>
</span>
<span class="col warning">
<strong class="running">...</strong>
<label>Läuft</label>
</span>
<div>
<span class="col">
<strong class="total">...</strong>
<label>Gesamt</label>
</span>
<span class="col success">
<strong class="done">...</strong>
<label>Erledigt</label>
</span>
<span class="col danger">
<strong class="failed">...</strong>
<label>Fehlgeschlagen</label>
</span>
</div>
</div>
<h4 class="mt-d5">Benachrichtigungsstatistiken (Zuletzt <span class="cache_time">...</span>)</h4>
<div class="stats taskNotifyStatus">
<span class="col">
<strong class="total">...</strong>
<label>Gesamt</label>
</span>
<span class="col success">
<strong class="done">...</strong>
<label>Erledigt</label>
</span>
<span class="col danger">
<strong class="failed">...</strong>
<label>Fehlgeschlagen</label>
</span>
</div>
<h4 class="mt-d5">Bot-Statistiken</h4>
<div class="stats heroStatus">
<span class="col">
<strong class="total">...</strong>
<label>Gesamt</label>
</span>
<span class="col success">
<strong class="idle">...</strong>
<label>Leerlauf</label>
</span>
<span class="col warning">
<strong class="busy">...</strong>
<label>Beschäftigt</label>
</span>
<span class="col disable">
<strong class="offline">...</strong>
<label>Offline</label>
</span>
</div>
<h4 class="mt-d5">JSON-Daten</h4>
<pre><code id="herounion_stats">...</code></pre>
<h3 class="mt-2">Pakt der Allianz</h3>
<p class="mt-1">Bitte halten Sie sich an die folgenden Konventionen und bleiben Sie dabei, für eine bessere Zukunft für sich selbst und die gesamte Gesellschaft!</p>
<ul class="mt-d5">
<li>Halten Sie lokale/nationale Gesetze und Vorschriften ein</li>
<li>Gesetzlich geschützte Informationen werden nicht gecrawlt (Zum Beispiel: Persönliche Datenschutzdaten, Handynummer, Ausweisnummer usw.)</li>
<li>Daten, für deren Zugriff eine Anmeldung oder ein VIP-Status erforderlich ist, werden nicht gecrawlt.</li>
<li>Daten, deren Erfassung durch die Zielwebsite ausdrücklich verboten ist, werden nicht gecrawlt.</li>
<li>Die kommerziellen Kerndaten der Zielwebsite werden nicht gecrawlt</li>
<li>Geringe Parallelität, niedrige Frequenz, beeinträchtigt nicht den normalen Betrieb der Zielwebsite</li>
</ul>
<h3 class="mt-2">Bots</h3>
<dl class="mt-d5" id="herobots">...</dl>
<h3 class="mt-2">HeroUnion App</h3>
<ul class="mt-d5">
<li>
<strong>Website-Monitor:</strong>
<a href="https://monitor.filesite.io/d/ddntdyyhv943ke/e7bd91-e7ab99-e79b91-e68ea7?orgId=1" target="_blank">FileSite.io Monitor</a>,
<a href="https://github.com/filesite-io/monit-via-herounion" target="_blank">Monitor source code download</a>
</li>
<li>
<strong>Web Scraper:</strong>
<a href="https://tajian.tv/" target="_blank">TaJian.tv - video box</a>
<a href="https://github.com/filesite-io/machete" target="_blank">Machete source code download</a>
</li>
</ul>
<h3 class="mt-1">HeroUnion herunterladen</h3>
<p><a href="https://github.com/filesite-io/herounion" target="_blank">https://github.com/filesite-io/herounion</a></p>
<h3 class="mt-1">HeroBot herunterladen</h3>
<p><a href="https://github.com/filesite-io/machete_hero" target="_blank">https://github.com/filesite-io/machete_hero</a></p>
<footer class="mt-4">
<p>
<strong>Haftungsausschluss:</strong>
<br>HeroUnion <strong>ist nur für die Planung von Crawlern und Aufgaben verantwortlich</strong> .
Die von den Crawlern unterstützten Verträge und die konkreten Aufgabeninhalte haben nichts mit der Allianz zu tun.
</p>
<p class="mt-2 text-center">&copy;copyright <a href="https://herounion.website/" target="_blank">HeroUnion.Website</a></p>
</footer>
<script src="/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
var toggleLangSwitcher = function(evt) {
var btn = evt.target;
if (!btn) {return false;}
var status = $(btn).attr('data-status');
if (status == 'closed') {
$('.langswitcher .dropmenu').show();
$(btn).attr('data-status', 'opened');
}else {
$('.langswitcher .dropmenu').hide();
$(btn).attr('data-status', 'closed');
}
};
$('.langswitcher button').click(toggleLangSwitcher);
var formatSeconds = function(secs) {
var str = secs + ' seconds';
if (secs > 86400) {
str = Math.floor(secs/86400) + ' days';
}else if (secs > 3600) {
str = Math.floor(secs/3600) + ' hours';
}else if (secs > 300) {
str = Math.floor(secs/60) + ' minutes';
}else if (secs > 86400*365) {
str = Math.floor(secs/86400/365) + ' years'
+ Math.floor( (secs - Math.floor(secs/86400/365)) / 86400 ) + ' days';
}
return str;
};
var renderStats = function(parentCls, data) {
for (var key in data) {
$('.' + parentCls + ' .'+key).text(data[key]);
}
};
var htmlspecialchars = function(str) {
return str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;');
};
var renderHeros = function(heros) {
if (!heros || heros.length == 0) {
$('#herobots').text('There is no bot online.');
return;
}
var txtStatus = {idle: 'Idle', busy: 'Busy', offline: 'Offline'};
var html = '', item;
for (var index in heros) {
item = heros[index];
html += '<dt>' + htmlspecialchars(item['name']) + ' <small>'
+ txtStatus[item['status']] + '</small></dt>';
html += '<dd>'
+ htmlspecialchars(item['description'])
+ '<br>Platforms: ' + JSON.stringify(item['platforms'])
+ ', Contracts: ' + JSON.stringify(item['contracts'])
+ ', Contact: ' + htmlspecialchars(item['contact'])
+ '</dd>';
}
$('#herobots').html(html);
};
var loadUnionStats = function() {
$('.run_time').text('...');
var api = '/api/stats/';
$.ajax({
url: api,
method: 'GET',
dataType: 'json'
}).done(function(data) {
$('#herounion_stats').text(JSON.stringify(data, null, 4));
$('.run_time').text( formatSeconds(data.run_seconds) );
$('.cache_time').text( formatSeconds(data.cache_time) );
renderStats('taskStatus', data.taskStatus);
renderStats('taskNotifyStatus', data.taskNotifyStatus);
renderStats('heroStatus', data.heroStatus);
});
};
var loadHeros = function() {
$('#herobots').text('...');
var api = '/api/heros/';
$.ajax({
url: api,
method: 'GET',
dataType: 'json'
}).done(function(data) {
renderHeros(data);
});
};
//init
loadUnionStats();
loadHeros();
setInterval(loadUnionStats, 20000);
</script>
</body>
</html>

4
public/en-us/index.html

@ -61,6 +61,10 @@ @@ -61,6 +61,10 @@
<li><a href="/">English</a></li>
<li><a href="/zh/">简体中文</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/hi/">ि</a></li>
</ul>
</div>

283
public/es/index.html

@ -0,0 +1,283 @@ @@ -0,0 +1,283 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width">
<title>HeroUnion - Unión de rastreadores web de código abierto.</title>
<meta name="author" content="Sitio web de HeroUnion">
<meta name="description" content="HeroUnion - Unión de rastreadores web de código abierto.">
<style>
*,body{margin:0;padding:0}
body{padding:8px;max-width:640px;margin:0 auto}
h1{font-size:2em;font-weight:500}
small{font-size:65%;font-weight:400}
pre{background-color:#DDD;padding-bottom:3px;padding-right:3px;border-radius:0 5px 0 5px;max-width:480px}
code{display:block;background-color:#EEE;padding:4px}
dt{background-color:#EEE;padding:4px 6px}
dd{text-indent:1em;margin:4px 0 8px 0}
li{margin-left:1em}
footer{padding-bottom:2em}
.text-center{text-align:center}
.text-right{text-align:right}
.mt-d5{margin-top:.5em}
.mt-1{margin-top:1em}
.mt-2{margin-top:2em}
.mt-4{margin-top:4em}
.mx-d2{margin-left:.5em;margin-right:.2em}
.icon{vertical-align:middle}
.stats{background-color:#EEE;padding:10px 10px 4px 10px}
.col{display:inline-block;padding:13px 4px;width:20%;background:#444;color:#FFF;margin-right:4px;margin-bottom:6px;text-align:center}
.col strong{font-size:24px}
.col label{display:block;font-size:15px}
.info{background-color:darkblue}
.success{background-color:green}
.warning{background-color:orange;color:#444}
.danger{background-color:red}
.disable{background-color:gray}
.langswitcher{position:relative}
.langswitcher button{padding:2px 4px;cursor:pointer}
.dropmenu{display:none;position:absolute;right:0;top:28px;padding:5px;width:80px;background-color:#FFF;border:1px solid #EEE}
.dropmenu li{list-style:none;padding:0;margin:3px 0;text-align:center}
@media(max-width:480px) {
h1 small{display:block}
}
</style>
</head>
<body>
<h1 class="text-center">HeroUnion <small>- Unión de rastreadores web de código abierto</small></h1>
<hr class="mt-d5">
<div class="text-right mt-d5 langswitcher">
<button data-status="closed">
<img src="/globe.svg" alt="Globe language switcher" class="icon">
Español
</button>
<ul class="dropmenu">
<li><a href="/">English</a></li>
<li><a href="/zh/">简体中文</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/hi/">ि</a></li>
</ul>
</div>
<h3 class="mt-2">Estadísticas de HeroUnion Esta corriendo <span class="run_time">...</span></h3>
<h4 class="mt-d5">Estadísticas de tareas (Último <span class="cache_time">...</span>)</h4>
<div class="stats taskStatus">
<span class="col info">
<strong class="waiting">...</strong>
<label>Espera</label>
</span>
<span class="col warning">
<strong class="running">...</strong>
<label>Correr</label>
</span>
<div>
<span class="col">
<strong class="total">...</strong>
<label>Total</label>
</span>
<span class="col success">
<strong class="done">...</strong>
<label>Hecho</label>
</span>
<span class="col danger">
<strong class="failed">...</strong>
<label>Fallido</label>
</span>
</div>
</div>
<h4 class="mt-d5">Notificar estadísticas (Último <span class="cache_time">...</span>)</h4>
<div class="stats taskNotifyStatus">
<span class="col">
<strong class="total">...</strong>
<label>Total</label>
</span>
<span class="col success">
<strong class="done">...</strong>
<label>Hecho</label>
</span>
<span class="col danger">
<strong class="failed">...</strong>
<label>Fallido</label>
</span>
</div>
<h4 class="mt-d5">Estadísticas del bot</h4>
<div class="stats heroStatus">
<span class="col">
<strong class="total">...</strong>
<label>Total</label>
</span>
<span class="col success">
<strong class="idle">...</strong>
<label>Inactivo</label>
</span>
<span class="col warning">
<strong class="busy">...</strong>
<label>Ocupado</label>
</span>
<span class="col disable">
<strong class="offline">...</strong>
<label>Desconectado</label>
</span>
</div>
<h4 class="mt-d5">Datos JSON</h4>
<pre><code id="herounion_stats">...</code></pre>
<h3 class="mt-2">Pacto de la Alianza</h3>
<p class="mt-1">¡Por favor, respete las siguientes convenciones y cúmplalas para un mejor mañana para usted y para toda la sociedad!</p>
<ul class="mt-d5">
<li>Cumplir con las leyes y regulaciones locales/nacionales</li>
<li>La información protegida por la ley no será rastreada (Por ejemplo: Datos personales de privacidad: número de teléfono móvil, número de identificación, etc.)</li>
<li>No se rastrearán los datos que requieren inicio de sesión o estado VIP para acceder.</li>
<li>No se rastrearán los datos cuya recopilación esté explícitamente prohibida por el sitio web de destino.</li>
<li>No se rastrean los datos comerciales principales del sitio web de destino</li>
<li>Baja concurrencia, baja frecuencia, no afecta el funcionamiento normal del sitio web de destino.</li>
</ul>
<h3 class="mt-2">Bots</h3>
<dl class="mt-d5" id="herobots">...</dl>
<h3 class="mt-2">Aplicación HeroUnion</h3>
<ul class="mt-d5">
<li>
<strong>Monitor de sitios web:</strong>
<a href="https://monitor.filesite.io/d/ddntdyyhv943ke/e7bd91-e7ab99-e79b91-e68ea7?orgId=1" target="_blank">FileSite.io Monitor</a>,
<a href="https://github.com/filesite-io/monit-via-herounion" target="_blank">Monitor source code download</a>
</li>
<li>
<strong>Raspador web:</strong>
<a href="https://tajian.tv/" target="_blank">TaJian.tv - video box</a>
<a href="https://github.com/filesite-io/machete" target="_blank">Machete source code download</a>
</li>
</ul>
<h3 class="mt-1">Descarga de HeroUnion</h3>
<p><a href="https://github.com/filesite-io/herounion" target="_blank">https://github.com/filesite-io/herounion</a></p>
<h3 class="mt-1">Descargar HeroBot</h3>
<p><a href="https://github.com/filesite-io/machete_hero" target="_blank">https://github.com/filesite-io/machete_hero</a></p>
<footer class="mt-4">
<p>
<strong>Descargo de responsabilidad:</strong>
<br>HeroUnion <strong>solo es responsable de la programación de rastreadores y tareas</strong> .
Los contratos respaldados por los rastreadores y el contenido específico de las tareas no tienen nada que ver con la alianza.
</p>
<p class="mt-2 text-center">&copy;copyright <a href="https://herounion.website/" target="_blank">HeroUnion.Website</a></p>
</footer>
<script src="/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
var toggleLangSwitcher = function(evt) {
var btn = evt.target;
if (!btn) {return false;}
var status = $(btn).attr('data-status');
if (status == 'closed') {
$('.langswitcher .dropmenu').show();
$(btn).attr('data-status', 'opened');
}else {
$('.langswitcher .dropmenu').hide();
$(btn).attr('data-status', 'closed');
}
};
$('.langswitcher button').click(toggleLangSwitcher);
var formatSeconds = function(secs) {
var str = secs + ' seconds';
if (secs > 86400) {
str = Math.floor(secs/86400) + ' days';
}else if (secs > 3600) {
str = Math.floor(secs/3600) + ' hours';
}else if (secs > 300) {
str = Math.floor(secs/60) + ' minutes';
}else if (secs > 86400*365) {
str = Math.floor(secs/86400/365) + ' years'
+ Math.floor( (secs - Math.floor(secs/86400/365)) / 86400 ) + ' days';
}
return str;
};
var renderStats = function(parentCls, data) {
for (var key in data) {
$('.' + parentCls + ' .'+key).text(data[key]);
}
};
var htmlspecialchars = function(str) {
return str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;');
};
var renderHeros = function(heros) {
if (!heros || heros.length == 0) {
$('#herobots').text('There is no bot online.');
return;
}
var txtStatus = {idle: 'Idle', busy: 'Busy', offline: 'Offline'};
var html = '', item;
for (var index in heros) {
item = heros[index];
html += '<dt>' + htmlspecialchars(item['name']) + ' <small>'
+ txtStatus[item['status']] + '</small></dt>';
html += '<dd>'
+ htmlspecialchars(item['description'])
+ '<br>Platforms: ' + JSON.stringify(item['platforms'])
+ ', Contracts: ' + JSON.stringify(item['contracts'])
+ ', Contact: ' + htmlspecialchars(item['contact'])
+ '</dd>';
}
$('#herobots').html(html);
};
var loadUnionStats = function() {
$('.run_time').text('...');
var api = '/api/stats/';
$.ajax({
url: api,
method: 'GET',
dataType: 'json'
}).done(function(data) {
$('#herounion_stats').text(JSON.stringify(data, null, 4));
$('.run_time').text( formatSeconds(data.run_seconds) );
$('.cache_time').text( formatSeconds(data.cache_time) );
renderStats('taskStatus', data.taskStatus);
renderStats('taskNotifyStatus', data.taskNotifyStatus);
renderStats('heroStatus', data.heroStatus);
});
};
var loadHeros = function() {
$('#herobots').text('...');
var api = '/api/heros/';
$.ajax({
url: api,
method: 'GET',
dataType: 'json'
}).done(function(data) {
renderHeros(data);
});
};
//init
loadUnionStats();
loadHeros();
setInterval(loadUnionStats, 20000);
</script>
</body>
</html>

283
public/hi/index.html

@ -0,0 +1,283 @@ @@ -0,0 +1,283 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width">
<title>ियन - ओपन सस वब कलर यियन।</title>
<meta name="author" content="HeroUnion.वबसइट">
<meta name="description" content="हियन - ओपन सस वब कलर यियन।">
<style>
*,body{margin:0;padding:0}
body{padding:8px;max-width:640px;margin:0 auto}
h1{font-size:2em;font-weight:500}
small{font-size:65%;font-weight:400}
pre{background-color:#DDD;padding-bottom:3px;padding-right:3px;border-radius:0 5px 0 5px;max-width:480px}
code{display:block;background-color:#EEE;padding:4px}
dt{background-color:#EEE;padding:4px 6px}
dd{text-indent:1em;margin:4px 0 8px 0}
li{margin-left:1em}
footer{padding-bottom:2em}
.text-center{text-align:center}
.text-right{text-align:right}
.mt-d5{margin-top:.5em}
.mt-1{margin-top:1em}
.mt-2{margin-top:2em}
.mt-4{margin-top:4em}
.mx-d2{margin-left:.5em;margin-right:.2em}
.icon{vertical-align:middle}
.stats{background-color:#EEE;padding:10px 10px 4px 10px}
.col{display:inline-block;padding:13px 4px;width:20%;background:#444;color:#FFF;margin-right:4px;margin-bottom:6px;text-align:center}
.col strong{font-size:24px}
.col label{display:block;font-size:15px}
.info{background-color:darkblue}
.success{background-color:green}
.warning{background-color:orange;color:#444}
.danger{background-color:red}
.disable{background-color:gray}
.langswitcher{position:relative}
.langswitcher button{padding:2px 4px;cursor:pointer}
.dropmenu{display:none;position:absolute;right:0;top:28px;padding:5px;width:80px;background-color:#FFF;border:1px solid #EEE}
.dropmenu li{list-style:none;padding:0;margin:3px 0;text-align:center}
@media(max-width:480px) {
h1 small{display:block}
}
</style>
</head>
<body>
<h1 class="text-center">ियन <small>- ओपन सस वब कलर यियन</small></h1>
<hr class="mt-d5">
<div class="text-right mt-d5 langswitcher">
<button data-status="closed">
<img src="/globe.svg" alt="Globe language switcher" class="icon">
ि
</button>
<ul class="dropmenu">
<li><a href="/">English</a></li>
<li><a href="/zh/">简体中文</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/hi/">ि</a></li>
</ul>
</div>
<h3 class="mt-2">ियन आकड यह कम कर रह <span class="run_time">...</span></h3>
<h4 class="mt-d5">य आकड (अि<span class="cache_time">...</span>)</h4>
<div class="stats taskStatus">
<span class="col info">
<strong class="waiting">...</strong>
<label>तजर म</label>
</span>
<span class="col warning">
<strong class="running">...</strong>
<label></label>
</span>
<div>
<span class="col">
<strong class="total">...</strong>
<label></label>
</span>
<span class="col success">
<strong class="done">...</strong>
<label> गय</label>
</span>
<span class="col danger">
<strong class="failed">...</strong>
<label>असफल</label>
</span>
</div>
</div>
<h4 class="mt-d5">कडित कर (अि<span class="cache_time">...</span>)</h4>
<div class="stats taskNotifyStatus">
<span class="col">
<strong class="total">...</strong>
<label></label>
</span>
<span class="col success">
<strong class="done">...</strong>
<label> गय</label>
</span>
<span class="col danger">
<strong class="failed">...</strong>
<label>असफल</label>
</span>
</div>
<h4 class="mt-d5">ट आकड</h4>
<div class="stats heroStatus">
<span class="col">
<strong class="total">...</strong>
<label></label>
</span>
<span class="col success">
<strong class="idle">...</strong>
<label>िठल</label>
</span>
<span class="col warning">
<strong class="busy">...</strong>
<label>यस</label>
</span>
<span class="col disable">
<strong class="offline">...</strong>
<label>ऑफलइन</label>
</span>
</div>
<h4 class="mt-d5">JSON ड</h4>
<pre><code id="herounion_stats">...</code></pre>
<h3 class="mt-2">गठबधन क</h3>
<p class="mt-1">पयिनलिित परपरलन कर और अपन तथ समज कहतर कल किए इसकलन कर!</p>
<ul class="mt-d5">
<li>य/रय क और विियम अनलन कर</li>
<li>न दरकित जनकल नहिएग (उदहरण किए: वयकिगत गपनयत, मइल फन नबर, आईडबर, आदि।)</li>
<li>िस ड तक पहचनिए लिन यआईपटस क आवशयकत, उसल नहिएग</li>
<li>लकय वबसइट द एकतर किए जपषट रप सरतिित डल नहिएग</li>
<li>लकय वबसइट कििक कर डल नहि गय</li>
<li>कम समवर, कम आवि, लकय वबसइट कय सलन करभित नह करत</li>
</ul>
<h3 class="mt-2"></h3>
<dl class="mt-d5" id="herobots">...</dl>
<h3 class="mt-2">ियन ऐप</h3>
<ul class="mt-d5">
<li>
<strong>बसइट मिटर:</strong>
<a href="https://monitor.filesite.io/d/ddntdyyhv943ke/e7bd91-e7ab99-e79b91-e68ea7?orgId=1" target="_blank">FileSite.io Monitor</a>,
<a href="https://github.com/filesite-io/monit-via-herounion" target="_blank">Monitor source code download</a>
</li>
<li>
<strong>ब सपर:</strong>
<a href="https://tajian.tv/" target="_blank">TaJian.tv - video box</a>
<a href="https://github.com/filesite-io/machete" target="_blank">Machete source code download</a>
</li>
</ul>
<h3 class="mt-1">HeroUnion डउनल</h3>
<p><a href="https://github.com/filesite-io/herounion" target="_blank">https://github.com/filesite-io/herounion</a></p>
<h3 class="mt-1">HeroBot डउनलड कर</h3>
<p><a href="https://github.com/filesite-io/machete_hero" target="_blank">https://github.com/filesite-io/machete_hero</a></p>
<footer class="mt-4">
<p>
<strong>असकरण:</strong>
<br>ियन <strong>वल कलरस और किग किए जिर ह</strong>
लरस द समरित अन और कििट समग गठबधन सई ल-द नह
</p>
<p class="mt-2 text-center">&copy;copyright <a href="https://herounion.website/" target="_blank">HeroUnion.Website</a></p>
</footer>
<script src="/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
var toggleLangSwitcher = function(evt) {
var btn = evt.target;
if (!btn) {return false;}
var status = $(btn).attr('data-status');
if (status == 'closed') {
$('.langswitcher .dropmenu').show();
$(btn).attr('data-status', 'opened');
}else {
$('.langswitcher .dropmenu').hide();
$(btn).attr('data-status', 'closed');
}
};
$('.langswitcher button').click(toggleLangSwitcher);
var formatSeconds = function(secs) {
var str = secs + ' seconds';
if (secs > 86400) {
str = Math.floor(secs/86400) + ' days';
}else if (secs > 3600) {
str = Math.floor(secs/3600) + ' hours';
}else if (secs > 300) {
str = Math.floor(secs/60) + ' minutes';
}else if (secs > 86400*365) {
str = Math.floor(secs/86400/365) + ' years'
+ Math.floor( (secs - Math.floor(secs/86400/365)) / 86400 ) + ' days';
}
return str;
};
var renderStats = function(parentCls, data) {
for (var key in data) {
$('.' + parentCls + ' .'+key).text(data[key]);
}
};
var htmlspecialchars = function(str) {
return str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;');
};
var renderHeros = function(heros) {
if (!heros || heros.length == 0) {
$('#herobots').text('There is no bot online.');
return;
}
var txtStatus = {idle: 'Idle', busy: 'Busy', offline: 'Offline'};
var html = '', item;
for (var index in heros) {
item = heros[index];
html += '<dt>' + htmlspecialchars(item['name']) + ' <small>'
+ txtStatus[item['status']] + '</small></dt>';
html += '<dd>'
+ htmlspecialchars(item['description'])
+ '<br>Platforms: ' + JSON.stringify(item['platforms'])
+ ', Contracts: ' + JSON.stringify(item['contracts'])
+ ', Contact: ' + htmlspecialchars(item['contact'])
+ '</dd>';
}
$('#herobots').html(html);
};
var loadUnionStats = function() {
$('.run_time').text('...');
var api = '/api/stats/';
$.ajax({
url: api,
method: 'GET',
dataType: 'json'
}).done(function(data) {
$('#herounion_stats').text(JSON.stringify(data, null, 4));
$('.run_time').text( formatSeconds(data.run_seconds) );
$('.cache_time').text( formatSeconds(data.cache_time) );
renderStats('taskStatus', data.taskStatus);
renderStats('taskNotifyStatus', data.taskNotifyStatus);
renderStats('heroStatus', data.heroStatus);
});
};
var loadHeros = function() {
$('#herobots').text('...');
var api = '/api/heros/';
$.ajax({
url: api,
method: 'GET',
dataType: 'json'
}).done(function(data) {
renderHeros(data);
});
};
//init
loadUnionStats();
loadHeros();
setInterval(loadUnionStats, 20000);
</script>
</body>
</html>

4
public/ja/index.html

@ -61,6 +61,10 @@ @@ -61,6 +61,10 @@
<li><a href="/">English</a></li>
<li><a href="/zh/">简体中文</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/hi/">ि</a></li>
</ul>
</div>

283
public/ru/index.html

@ -0,0 +1,283 @@ @@ -0,0 +1,283 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width">
<title>HeroUnion — объединение веб-сканеров с открытым исходным кодом.</title>
<meta name="author" content="HeroUnion.сайт">
<meta name="description" content="HeroUnion — объединение веб-сканеров с открытым исходным кодом.">
<style>
*,body{margin:0;padding:0}
body{padding:8px;max-width:640px;margin:0 auto}
h1{font-size:2em;font-weight:500}
small{font-size:65%;font-weight:400}
pre{background-color:#DDD;padding-bottom:3px;padding-right:3px;border-radius:0 5px 0 5px;max-width:480px}
code{display:block;background-color:#EEE;padding:4px}
dt{background-color:#EEE;padding:4px 6px}
dd{text-indent:1em;margin:4px 0 8px 0}
li{margin-left:1em}
footer{padding-bottom:2em}
.text-center{text-align:center}
.text-right{text-align:right}
.mt-d5{margin-top:.5em}
.mt-1{margin-top:1em}
.mt-2{margin-top:2em}
.mt-4{margin-top:4em}
.mx-d2{margin-left:.5em;margin-right:.2em}
.icon{vertical-align:middle}
.stats{background-color:#EEE;padding:10px 10px 4px 10px}
.col{display:inline-block;padding:13px 4px;width:20%;background:#444;color:#FFF;margin-right:4px;margin-bottom:6px;text-align:center}
.col strong{font-size:24px}
.col label{display:block;font-size:15px}
.info{background-color:darkblue}
.success{background-color:green}
.warning{background-color:orange;color:#444}
.danger{background-color:red}
.disable{background-color:gray}
.langswitcher{position:relative}
.langswitcher button{padding:2px 4px;cursor:pointer}
.dropmenu{display:none;position:absolute;right:0;top:28px;padding:5px;width:80px;background-color:#FFF;border:1px solid #EEE}
.dropmenu li{list-style:none;padding:0;margin:3px 0;text-align:center}
@media(max-width:480px) {
h1 small{display:block}
}
</style>
</head>
<body>
<h1 class="text-center">HeroUnion <small>- Союз веб-сканеров с открытым исходным кодом</small></h1>
<hr class="mt-d5">
<div class="text-right mt-d5 langswitcher">
<button data-status="closed">
<img src="/globe.svg" alt="Globe language switcher" class="icon">
Русский
</button>
<ul class="dropmenu">
<li><a href="/">English</a></li>
<li><a href="/zh/">简体中文</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/hi/">ि</a></li>
</ul>
</div>
<h3 class="mt-2">Статистика HeroUnion Он работает <span class="run_time">...</span></h3>
<h4 class="mt-d5">Статистика задач (Последний <span class="cache_time">...</span>)</h4>
<div class="stats taskStatus">
<span class="col info">
<strong class="waiting">...</strong>
<label>Ожидающий</label>
</span>
<span class="col warning">
<strong class="running">...</strong>
<label>Бег</label>
</span>
<div>
<span class="col">
<strong class="total">...</strong>
<label>Общий</label>
</span>
<span class="col success">
<strong class="done">...</strong>
<label>Сделанный</label>
</span>
<span class="col danger">
<strong class="failed">...</strong>
<label>Неуспешный</label>
</span>
</div>
</div>
<h4 class="mt-d5">Уведомить статистику (Последний <span class="cache_time">...</span>)</h4>
<div class="stats taskNotifyStatus">
<span class="col">
<strong class="total">...</strong>
<label>Общий</label>
</span>
<span class="col success">
<strong class="done">...</strong>
<label>Сделанный</label>
</span>
<span class="col danger">
<strong class="failed">...</strong>
<label>Неуспешный</label>
</span>
</div>
<h4 class="mt-d5">Статистика ботов</h4>
<div class="stats heroStatus">
<span class="col">
<strong class="total">...</strong>
<label>Общий</label>
</span>
<span class="col success">
<strong class="idle">...</strong>
<label>Праздный</label>
</span>
<span class="col warning">
<strong class="busy">...</strong>
<label>Занятый</label>
</span>
<span class="col disable">
<strong class="offline">...</strong>
<label>Оффлайн</label>
</span>
</div>
<h4 class="mt-d5">Данные JSON</h4>
<pre><code id="herounion_stats">...</code></pre>
<h3 class="mt-2">Соглашение Альянса</h3>
<p class="mt-1">Пожалуйста, соблюдайте следующие правила и придерживайтесь их ради лучшего будущего для себя и всего общества!</p>
<ul class="mt-d5">
<li>Соблюдайте местные/национальные законы и правила</li>
<li>Информация, защищенная законом, не будет сканироваться (например: персональные данные, номер мобильного телефона, номер удостоверения личности и т. д.)</li>
<li>Данные, для доступа к которым требуется вход в систему или VIP-статус, не будут сканироваться.</li>
<li>Данные, сбор которых явно запрещен целевым веб-сайтом, не будут сканироваться.</li>
<li>Коммерческие основные данные целевого веб-сайта не сканируются.</li>
<li>Низкая степень параллелизма, низкая частота, не влияет на нормальную работу целевого веб-сайта.</li>
</ul>
<h3 class="mt-2">Боты</h3>
<dl class="mt-d5" id="herobots">...</dl>
<h3 class="mt-2">Приложение HeroUnion</h3>
<ul class="mt-d5">
<li>
<strong>Монитор веб-сайта:</strong>
<a href="https://monitor.filesite.io/d/ddntdyyhv943ke/e7bd91-e7ab99-e79b91-e68ea7?orgId=1" target="_blank">FileSite.io Monitor</a>,
<a href="https://github.com/filesite-io/monit-via-herounion" target="_blank">Monitor source code download</a>
</li>
<li>
<strong>Веб-скрейпер:</strong>
<a href="https://tajian.tv/" target="_blank">TaJian.tv - video box</a>
<a href="https://github.com/filesite-io/machete" target="_blank">Machete source code download</a>
</li>
</ul>
<h3 class="mt-1">HeroUnion скачать</h3>
<p><a href="https://github.com/filesite-io/herounion" target="_blank">https://github.com/filesite-io/herounion</a></p>
<h3 class="mt-1">HeroBot скачать</h3>
<p><a href="https://github.com/filesite-io/machete_hero" target="_blank">https://github.com/filesite-io/machete_hero</a></p>
<footer class="mt-4">
<p>
<strong>Отказ от ответственности:</strong>
<br>HeroUnion <strong>отвечает только за планирование работы сканеров и задач</strong> .
Контракты, поддерживаемые краулерами, и конкретное содержание задач не имеют никакого отношения к альянсу.
</p>
<p class="mt-2 text-center">&copy;copyright <a href="https://herounion.website/" target="_blank">HeroUnion.Website</a></p>
</footer>
<script src="/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
var toggleLangSwitcher = function(evt) {
var btn = evt.target;
if (!btn) {return false;}
var status = $(btn).attr('data-status');
if (status == 'closed') {
$('.langswitcher .dropmenu').show();
$(btn).attr('data-status', 'opened');
}else {
$('.langswitcher .dropmenu').hide();
$(btn).attr('data-status', 'closed');
}
};
$('.langswitcher button').click(toggleLangSwitcher);
var formatSeconds = function(secs) {
var str = secs + ' seconds';
if (secs > 86400) {
str = Math.floor(secs/86400) + ' days';
}else if (secs > 3600) {
str = Math.floor(secs/3600) + ' hours';
}else if (secs > 300) {
str = Math.floor(secs/60) + ' minutes';
}else if (secs > 86400*365) {
str = Math.floor(secs/86400/365) + ' years'
+ Math.floor( (secs - Math.floor(secs/86400/365)) / 86400 ) + ' days';
}
return str;
};
var renderStats = function(parentCls, data) {
for (var key in data) {
$('.' + parentCls + ' .'+key).text(data[key]);
}
};
var htmlspecialchars = function(str) {
return str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;');
};
var renderHeros = function(heros) {
if (!heros || heros.length == 0) {
$('#herobots').text('There is no bot online.');
return;
}
var txtStatus = {idle: 'Idle', busy: 'Busy', offline: 'Offline'};
var html = '', item;
for (var index in heros) {
item = heros[index];
html += '<dt>' + htmlspecialchars(item['name']) + ' <small>'
+ txtStatus[item['status']] + '</small></dt>';
html += '<dd>'
+ htmlspecialchars(item['description'])
+ '<br>Platforms: ' + JSON.stringify(item['platforms'])
+ ', Contracts: ' + JSON.stringify(item['contracts'])
+ ', Contact: ' + htmlspecialchars(item['contact'])
+ '</dd>';
}
$('#herobots').html(html);
};
var loadUnionStats = function() {
$('.run_time').text('...');
var api = '/api/stats/';
$.ajax({
url: api,
method: 'GET',
dataType: 'json'
}).done(function(data) {
$('#herounion_stats').text(JSON.stringify(data, null, 4));
$('.run_time').text( formatSeconds(data.run_seconds) );
$('.cache_time').text( formatSeconds(data.cache_time) );
renderStats('taskStatus', data.taskStatus);
renderStats('taskNotifyStatus', data.taskNotifyStatus);
renderStats('heroStatus', data.heroStatus);
});
};
var loadHeros = function() {
$('#herobots').text('...');
var api = '/api/heros/';
$.ajax({
url: api,
method: 'GET',
dataType: 'json'
}).done(function(data) {
renderHeros(data);
});
};
//init
loadUnionStats();
loadHeros();
setInterval(loadUnionStats, 20000);
</script>
</body>
</html>

4
public/template/index.html

@ -61,6 +61,10 @@ @@ -61,6 +61,10 @@
<li><a href="/">English</a></li>
<li><a href="/zh/">简体中文</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/hi/">ि</a></li>
</ul>
</div>

4
public/zh/index.html

@ -61,6 +61,10 @@ @@ -61,6 +61,10 @@
<li><a href="/">English</a></li>
<li><a href="/zh/">简体中文</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/hi/">ि</a></li>
</ul>
</div>

Loading…
Cancel
Save