mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-07 17:28:03 +08:00
Translation of dynamic content
This commit is contained in:
parent
e12e10b609
commit
b8ba5c35d3
@ -84,7 +84,7 @@ public class NetworkPageExporter extends FileExporter {
|
||||
.resolve("index.html");
|
||||
|
||||
Page page = pageFactory.networkPage();
|
||||
export(to, exportPaths.resolveExportPaths(locale.replaceMatchingLanguage(page.toHtml())));
|
||||
export(to, exportPaths.resolveExportPaths(locale.replaceLanguageInHtml(page.toHtml())));
|
||||
}
|
||||
|
||||
public void exportJSON(Path toDirectory, Server server) throws IOException, NotFoundException {
|
||||
|
@ -86,7 +86,7 @@ public class PlayerPageExporter extends FileExporter {
|
||||
|
||||
try {
|
||||
Page page = pageFactory.playerPage(playerUUID);
|
||||
export(to, exportPaths.resolveExportPaths(locale.replaceMatchingLanguage(page.toHtml())));
|
||||
export(to, exportPaths.resolveExportPaths(locale.replaceLanguageInHtml(page.toHtml())));
|
||||
} catch (IllegalStateException notFound) {
|
||||
throw new NotFoundException(notFound.getMessage());
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ public class PlayersPageExporter extends FileExporter {
|
||||
.resolve("index.html");
|
||||
|
||||
Page page = pageFactory.playersPage();
|
||||
export(to, exportPaths.resolveExportPaths(locale.replaceMatchingLanguage(page.toHtml())));
|
||||
export(to, exportPaths.resolveExportPaths(locale.replaceLanguageInHtml(page.toHtml())));
|
||||
}
|
||||
|
||||
private void exportJSON(Path toDirectory) throws NotFoundException, IOException {
|
||||
|
@ -90,7 +90,7 @@ public class ServerPageExporter extends FileExporter {
|
||||
.resolve("index.html");
|
||||
|
||||
Page page = pageFactory.serverPage(serverUUID);
|
||||
export(to, exportPaths.resolveExportPaths(locale.replaceMatchingLanguage(page.toHtml())));
|
||||
export(to, exportPaths.resolveExportPaths(locale.replaceLanguageInHtml(page.toHtml())));
|
||||
}
|
||||
|
||||
public void exportJSON(Path toDirectory, Server server) throws IOException, NotFoundException {
|
||||
|
@ -80,6 +80,7 @@ public class ServerPage implements Page {
|
||||
public String toHtml() throws ParseException {
|
||||
PlaceholderReplacer placeholders = new PlaceholderReplacer();
|
||||
|
||||
placeholders.put("serverUUID", server.getUuid().toString());
|
||||
placeholders.put("serverName", server.getIdentifiableName());
|
||||
placeholders.put("serverDisplayName", server.getName());
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.webserver.response;
|
||||
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -25,8 +26,9 @@ import java.io.IOException;
|
||||
*/
|
||||
public class JavaScriptResponse extends FileResponse {
|
||||
|
||||
JavaScriptResponse(String fileName, PlanFiles files) throws IOException {
|
||||
JavaScriptResponse(String fileName, PlanFiles files, Locale locale) throws IOException {
|
||||
super(format(fileName), files);
|
||||
super.translate(locale::replaceLanguageInJavascript);
|
||||
super.setType(ResponseType.JAVASCRIPT);
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
/**
|
||||
@ -115,8 +116,8 @@ public abstract class Response {
|
||||
this.responseHeaders = responseHeaders;
|
||||
}
|
||||
|
||||
protected void translate(Locale locale) {
|
||||
content = locale.replaceMatchingLanguage(content);
|
||||
protected void translate(Function<String, String> translator) {
|
||||
content = translator.apply(content);
|
||||
}
|
||||
|
||||
protected void fixThemeColors(Theme theme) {
|
||||
|
@ -116,7 +116,7 @@ public class ResponseFactory {
|
||||
|
||||
public Response javaScriptResponse(String fileName) {
|
||||
try {
|
||||
return new JavaScriptResponse(fileName, files);
|
||||
return new JavaScriptResponse(fileName, files, locale);
|
||||
} catch (IOException e) {
|
||||
return notFound404("JS File not found from jar: " + fileName + ", " + e.toString());
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ public class ErrorResponse extends PageResponse {
|
||||
|
||||
@Override
|
||||
public void send(HttpExchange exchange, Locale locale, Theme theme) throws IOException {
|
||||
translate(locale);
|
||||
translate(locale::replaceLanguageInHtml);
|
||||
fixThemeColors(theme);
|
||||
super.send(exchange, locale, theme);
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ public class PageResponse extends Response {
|
||||
|
||||
@Override
|
||||
public void send(HttpExchange exchange, Locale locale, Theme theme) throws IOException {
|
||||
translate(locale);
|
||||
translate(locale::replaceLanguageInHtml);
|
||||
fixThemeColors(theme);
|
||||
super.send(exchange, locale, theme);
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
package com.djrapitops.plan.settings.locale;
|
||||
|
||||
import com.djrapitops.plan.settings.locale.lang.HtmlLang;
|
||||
import com.djrapitops.plan.settings.locale.lang.JSLang;
|
||||
import com.djrapitops.plan.settings.locale.lang.Lang;
|
||||
import com.djrapitops.plan.storage.file.FileResource;
|
||||
import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
@ -101,7 +102,7 @@ public class Locale extends HashMap<Lang, Message> {
|
||||
this.langCode = locale.langCode;
|
||||
}
|
||||
|
||||
public String replaceMatchingLanguage(String from) {
|
||||
public String replaceLanguageInHtml(String from) {
|
||||
if (isEmpty()) {
|
||||
return from;
|
||||
}
|
||||
@ -114,12 +115,8 @@ public class Locale extends HashMap<Lang, Message> {
|
||||
foundScripts.add(scriptMatcher.toMatchResult().group(0));
|
||||
}
|
||||
|
||||
Lang[][] langs = new Lang[][]{
|
||||
HtmlLang.values()
|
||||
};
|
||||
|
||||
TranslatedString translated = new TranslatedString(from);
|
||||
Arrays.stream(langs).flatMap(Arrays::stream)
|
||||
Arrays.stream(HtmlLang.values())
|
||||
// Longest first so that entries that contain each other don't partially replace.
|
||||
.sorted((one, two) -> Integer.compare(
|
||||
two.getIdentifier().length(),
|
||||
@ -135,13 +132,61 @@ public class Locale extends HashMap<Lang, Message> {
|
||||
for (int i = 0; i < parts.length; i++) {
|
||||
complete.append(parts[i]);
|
||||
if (i < parts.length - 1) {
|
||||
complete.append(foundScripts.get(i));
|
||||
complete.append(replaceLanguageInJavascript(foundScripts.get(i)));
|
||||
}
|
||||
}
|
||||
|
||||
return complete.toString();
|
||||
}
|
||||
|
||||
public String replaceLanguageInJavascript(String from) {
|
||||
if (isEmpty()) {
|
||||
return from;
|
||||
}
|
||||
|
||||
TranslatedString translated = new TranslatedString(from);
|
||||
Arrays.stream(JSLang.values())
|
||||
// Longest first so that entries that contain each other don't partially replace.
|
||||
.sorted((one, two) -> Integer.compare(
|
||||
two.getIdentifier().length(),
|
||||
one.getIdentifier().length()
|
||||
))
|
||||
.forEach(lang -> getNonDefault(lang).ifPresent(replacement ->
|
||||
translated.translate(lang.getDefault(), replacement.toString()))
|
||||
);
|
||||
|
||||
for (Lang extra : new Lang[]{
|
||||
HtmlLang.UNIT_NO_DATA,
|
||||
HtmlLang.TITLE_WORLD_PLAYTIME,
|
||||
HtmlLang.LABEL_OPERATOR,
|
||||
HtmlLang.LABEL_BANNED,
|
||||
HtmlLang.SIDE_SESSIONS,
|
||||
HtmlLang.LABEL_PLAYTIME,
|
||||
HtmlLang.LABEL_AFK_TIME,
|
||||
HtmlLang.LABEL_LONGEST_SESSION,
|
||||
HtmlLang.LABEL_SESSION_MEDIAN,
|
||||
HtmlLang.LABEL_PLAYER_KILLS,
|
||||
HtmlLang.LABEL_MOB_KILLS,
|
||||
HtmlLang.LABEL_DEATHS,
|
||||
HtmlLang.LABEL_PLAYERS_ONLINE,
|
||||
HtmlLang.LABEL_REGISTERED,
|
||||
HtmlLang.TITLE_SERVER,
|
||||
HtmlLang.TITLE_LENGTH,
|
||||
HtmlLang.TITLE_AVG_PING,
|
||||
HtmlLang.TITLE_BEST_PING,
|
||||
HtmlLang.TITLE_WORST_PING,
|
||||
HtmlLang.LABEL_FREE_DISK_SPACE,
|
||||
HtmlLang.LABEL_NEW_PLAYERS,
|
||||
HtmlLang.LABEL_UNIQUE_PLAYERS,
|
||||
|
||||
}) {
|
||||
getNonDefault(extra).ifPresent(replacement ->
|
||||
translated.translate(extra.getDefault(), replacement.toString()));
|
||||
}
|
||||
|
||||
return translated.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
|
@ -22,7 +22,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
* Utility for translating String.
|
||||
* <p>
|
||||
* Improves performance by avoiding a double for-each loop since this class can be considered final in the lambda
|
||||
* expression in {@link Locale#replaceMatchingLanguage(String)}.
|
||||
* expression in {@link Locale#replaceLanguageInHtml(String)}.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
|
@ -81,9 +81,6 @@ public enum HtmlLang implements Lang {
|
||||
TITLE_TREND("Trend"),
|
||||
COMPARING_7_DAYS("Comparing 7 days"),
|
||||
// Servers tab
|
||||
LABEL_REGISTERED_PLAYERS("Registered Players"),
|
||||
LINK_SERVER_ANALYSIS("Server Analysis"),
|
||||
LINK_QUICK_VIEW("Quick view"),
|
||||
TITLE_ONLINE_ACTIVITY("Online Activity"),
|
||||
TITLE_30_DAYS("30 days"),
|
||||
TITLE_AS_NUMBERS("as Numbers"),
|
||||
@ -208,13 +205,13 @@ public enum HtmlLang implements Lang {
|
||||
LABEL_NICKNAME("Nickname"),
|
||||
LOCAL_MACHINE("Local Machine"),
|
||||
TITLE_CALENDAR(" Calendar"),
|
||||
LABEL_SESSION_ENDED("Session Ended"),
|
||||
LABEL_SESSION_LENGTH("Session Lenght"),
|
||||
LABEL_OPERATOR("Operator"),
|
||||
LABEL_BANNED("Banned"),
|
||||
LABEL_MOB_KDR("Mob KDR"),
|
||||
WITH("<th>With"),
|
||||
NO_KILLS("No Kills"),
|
||||
LABEL_MAX_FREE_DISK("Max Free Disk"),
|
||||
LABEL_MIN_FREE_DISK("Min Free Disk")
|
||||
;
|
||||
|
||||
private final String defaultValue;
|
||||
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.settings.locale.lang;
|
||||
|
||||
/**
|
||||
* Lang enum for all text included in the javascript files.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public enum JSLang implements Lang {
|
||||
|
||||
TEXT_PREDICTED_RETENTION("This value is a prediction based on previous players"),
|
||||
TEXT_NO_SERVERS("No servers found in the database"),
|
||||
TEXT_NO_SERVER("No server to display online activity for"),
|
||||
LABEL_REGISTERED_PLAYERS("Registered Players"),
|
||||
LINK_SERVER_ANALYSIS("Server Analysis"),
|
||||
LINK_QUICK_VIEW("Quick view"),
|
||||
TEXT_FIRST_SESSION("First session"),
|
||||
LABEL_SESSION_ENDED("Ended"),
|
||||
LINK_PLAYER_PAGE("Player Page"),
|
||||
LABEL_NO_SESSION_KILLS("None"),
|
||||
UNIT_ENTITIES("Entities"),
|
||||
UNIT_CHUNKS("Chunks"),
|
||||
LABEL_RELATIVE_JOIN_ACTIVITY("Relative Join Activity"),
|
||||
LABEL_DAY_OF_WEEK("Day of the Week"),
|
||||
LABEL_WEEK_DAYS("'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'");
|
||||
|
||||
private final String defaultValue;
|
||||
|
||||
JSLang(String defaultValue) {
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
return "HTML - " + name();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefault() {
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
@ -156,7 +156,6 @@ HTML - LABEL_RETENTION || 新玩家留坑率
|
||||
HTML - LABEL_SERVER_DOWNTIME || 关服时间
|
||||
HTML - LABEL_SERVER_OCCUPIED || 开服时间
|
||||
HTML - LABEL_SESSION_ENDED || 时域之末
|
||||
HTML - LABEL_SESSION_LENGTH || 时域长度
|
||||
HTML - LABEL_SESSION_MEDIAN || 平均时域
|
||||
HTML - LABEL_TIMES_KICKED || 被踢次数
|
||||
HTML - LABEL_TOTAL_PLAYERS || 总玩家数
|
||||
|
@ -156,7 +156,6 @@ HTML - LABEL_RETENTION || Erhaltung neuer Spieler
|
||||
HTML - LABEL_SERVER_DOWNTIME || Server Downtime
|
||||
HTML - LABEL_SERVER_OCCUPIED || Server occupied
|
||||
HTML - LABEL_SESSION_ENDED || Session beendet
|
||||
HTML - LABEL_SESSION_LENGTH || Session Länge
|
||||
HTML - LABEL_SESSION_MEDIAN || Session Durchschnitt
|
||||
HTML - LABEL_TIMES_KICKED || Mal gekickt
|
||||
HTML - LABEL_TOTAL_PLAYERS || Total Players
|
||||
|
@ -155,8 +155,7 @@ HTML - LABEL_REGULAR_PLAYERS || Regular Players
|
||||
HTML - LABEL_RETENTION || New Player Retention
|
||||
HTML - LABEL_SERVER_DOWNTIME || Server Downtime
|
||||
HTML - LABEL_SERVER_OCCUPIED || Server occupied
|
||||
HTML - LABEL_SESSION_ENDED || Session Ended
|
||||
HTML - LABEL_SESSION_LENGTH || Session Lenght
|
||||
HTML - LABEL_SESSION_ENDED || Ended
|
||||
HTML - LABEL_SESSION_MEDIAN || Session Median
|
||||
HTML - LABEL_TIMES_KICKED || Times Kicked
|
||||
HTML - LABEL_TOTAL_PLAYERS || Total Players
|
||||
|
@ -156,7 +156,6 @@ HTML - LABEL_RETENTION || Uusien pysyvyys
|
||||
HTML - LABEL_SERVER_DOWNTIME || Palvelin pois päältä
|
||||
HTML - LABEL_SERVER_OCCUPIED || Palvelin pelaajien käytössä
|
||||
HTML - LABEL_SESSION_ENDED || Istunto Päättyi
|
||||
HTML - LABEL_SESSION_LENGTH || Istunnon Pituus
|
||||
HTML - LABEL_SESSION_MEDIAN || Istuntojen Mediaani
|
||||
HTML - LABEL_TIMES_KICKED || Heitetty pihalle
|
||||
HTML - LABEL_TOTAL_PLAYERS || Pelaajia
|
||||
|
@ -156,7 +156,6 @@ HTML - LABEL_RETENTION || Rétention des nouveaux joueu
|
||||
HTML - LABEL_SERVER_DOWNTIME || Temps hors-ligne du serveur
|
||||
HTML - LABEL_SERVER_OCCUPIED || Serveur inoccupé
|
||||
HTML - LABEL_SESSION_ENDED || Session terminée
|
||||
HTML - LABEL_SESSION_LENGTH || Durée de la session
|
||||
HTML - LABEL_SESSION_MEDIAN || Session médiane
|
||||
HTML - LABEL_TIMES_KICKED || Nombre d'éjections
|
||||
HTML - LABEL_TOTAL_PLAYERS || Joueurs totaux
|
||||
|
@ -156,7 +156,6 @@ HTML - LABEL_RETENTION || 新規プレイヤーの継
|
||||
HTML - LABEL_SERVER_DOWNTIME || サーバーダウンタイム
|
||||
HTML - LABEL_SERVER_OCCUPIED || サーバーの占有時間
|
||||
HTML - LABEL_SESSION_ENDED || ログアウト時間
|
||||
HTML - LABEL_SESSION_LENGTH || 最長オンライン
|
||||
HTML - LABEL_SESSION_MEDIAN || 平均オンライン
|
||||
HTML - LABEL_TIMES_KICKED || キック回数
|
||||
HTML - LABEL_TOTAL_PLAYERS || トータルプレイヤー数
|
||||
|
@ -156,7 +156,6 @@ HTML - LABEL_RETENTION || Retenção de Novos Jogadores
|
||||
HTML - LABEL_SERVER_DOWNTIME || Server Downtime
|
||||
HTML - LABEL_SERVER_OCCUPIED || Server occupied
|
||||
HTML - LABEL_SESSION_ENDED || Sessões Finalizadas
|
||||
HTML - LABEL_SESSION_LENGTH || Tempo de Sessões
|
||||
HTML - LABEL_SESSION_MEDIAN || Média de Sessões
|
||||
HTML - LABEL_TIMES_KICKED || Vezes Kickado
|
||||
HTML - LABEL_TOTAL_PLAYERS || Total Players
|
||||
|
@ -156,7 +156,6 @@ HTML - LABEL_RETENTION || New Player Retention
|
||||
HTML - LABEL_SERVER_DOWNTIME || Server Downtime
|
||||
HTML - LABEL_SERVER_OCCUPIED || Server occupied
|
||||
HTML - LABEL_SESSION_ENDED || Oturum Sona Erdi
|
||||
HTML - LABEL_SESSION_LENGTH || Oturum Giriş Süresi
|
||||
HTML - LABEL_SESSION_MEDIAN || Session Median
|
||||
HTML - LABEL_TIMES_KICKED || Kere Atılmış
|
||||
HTML - LABEL_TOTAL_PLAYERS || Total Players
|
||||
|
@ -576,7 +576,7 @@ function worldMap(id, colorMin, colorMax, mapSeries) {
|
||||
|
||||
function worldPie(id, worldSeries, gmSeries, bgColor) {
|
||||
var defaultTitle = '';
|
||||
var defaultSubtitle = 'Click the slices to view used GameMode';
|
||||
var defaultSubtitle = 'Click to expand';
|
||||
var nightMode = window.localStorage.getItem('nightMode') == 'true';
|
||||
var chart = Highcharts.chart(id, {
|
||||
chart: {
|
||||
|
@ -229,7 +229,7 @@ function loadPlayerbaseOverviewValues(json, error) {
|
||||
$(element).find('#data_regular_to_inactive').replaceWith(data.regular_to_inactive + smallTrend(data.regular_to_inactive_trend))
|
||||
}
|
||||
|
||||
function loadServerBoxes(servers, error) {
|
||||
function loadservers(servers, error) {
|
||||
if (error) {
|
||||
displayError($('#servers-tab'), error);
|
||||
return;
|
||||
@ -245,17 +245,17 @@ function loadServerBoxes(servers, error) {
|
||||
|
||||
var serversHtml = '';
|
||||
for (var i = 0; i < servers.length; i++) {
|
||||
serversHtml += createNetworkServerBox(i, servers[i]);
|
||||
serversHtml += createnetworkserverBox(i, servers[i]);
|
||||
}
|
||||
$("#data_server_list").replaceWith(serversHtml);
|
||||
|
||||
for (var i = 0; i < servers.length; i++) {
|
||||
$('#server_quick_view_' + i).click(onViewServer(i, servers));
|
||||
$('#server_quick_view_' + i).click(onViewserver(i, servers));
|
||||
}
|
||||
onViewServer(0, servers)(); // Open first server.
|
||||
onViewserver(0, servers)(); // Open first server.
|
||||
}
|
||||
|
||||
function createNetworkServerBox(i, server) {
|
||||
function createnetworkserverBox(i, server) {
|
||||
return '<div class="card shadow mb-4">' +
|
||||
'<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">' +
|
||||
'<h6 class="m-0 font-weight-bold col-black"><i class="fas fa-fw fa-server col-light-green"></i> ' + server.name + '</h6>' +
|
||||
@ -273,7 +273,7 @@ function createNetworkServerBox(i, server) {
|
||||
'</div>' // /card
|
||||
}
|
||||
|
||||
function onViewServer(i, servers) {
|
||||
function onViewserver(i, servers) {
|
||||
return function () {
|
||||
setTimeout(function () {
|
||||
var server = servers[i];
|
||||
|
@ -129,7 +129,7 @@ function createConnectionsTableBody(connections) {
|
||||
var table = '<tbody>';
|
||||
|
||||
if (connections.length === 0) {
|
||||
table += '<tr><td>No Connection Data</td><td>-</td></tr>'
|
||||
table += '<tr><td>No Data</td><td>-</td></tr>'
|
||||
}
|
||||
|
||||
for (var i = 0; i < connections.length; i++) {
|
||||
@ -142,7 +142,7 @@ function createConnectionsTableBody(connections) {
|
||||
return table;
|
||||
}
|
||||
|
||||
function loadServerAccordion(json, error) {
|
||||
function loadserverAccordion(json, error) {
|
||||
tab = $("#server-overview");
|
||||
if (error) {
|
||||
displayError(tab, error);
|
||||
@ -160,8 +160,8 @@ function loadServerAccordion(json, error) {
|
||||
var serversHtml = '';
|
||||
for (var i = 0; i < servers.length; i++) {
|
||||
var server = servers[i];
|
||||
var title = createServerAccordionTitle(i, server);
|
||||
var body = createServerAccordionBody(i, server);
|
||||
var title = createserverAccordionTitle(i, server);
|
||||
var body = createserverAccordionBody(i, server);
|
||||
|
||||
serversHtml += title + body;
|
||||
}
|
||||
@ -169,11 +169,11 @@ function loadServerAccordion(json, error) {
|
||||
serverTable.append(serversHtml);
|
||||
|
||||
for (var i = 0; i < servers.length; i++) {
|
||||
$('#server_h_' + i).click(onOpenServer(i, servers));
|
||||
$('#server_h_' + i).click(onOpenserver(i, servers));
|
||||
}
|
||||
}
|
||||
|
||||
function onOpenServer(i, servers) {
|
||||
function onOpenserver(i, servers) {
|
||||
var opened = false;
|
||||
return function () {
|
||||
if (opened) {
|
||||
@ -190,7 +190,7 @@ function onOpenServer(i, servers) {
|
||||
}
|
||||
}
|
||||
|
||||
function createServerAccordionTitle(i, server) {
|
||||
function createserverAccordionTitle(i, server) {
|
||||
return '<tr id="server_h_' + i + '" aria-controls="server_t_' + i + '" aria-expanded="false" class="clickable collapsed bg-light-green" data-target="#server_t_' + i + '" data-toggle="collapse"><td>'
|
||||
+ server.server_name +
|
||||
(server.operator ? ' <i class="fab fa-fw fa-superpowers"></i>' : '') +
|
||||
@ -201,7 +201,7 @@ function createServerAccordionTitle(i, server) {
|
||||
+ '<td>' + server.last_seen + '</td></tr>'
|
||||
}
|
||||
|
||||
function createServerAccordionBody(i, server) {
|
||||
function createserverAccordionBody(i, server) {
|
||||
|
||||
return '<tr class="collapse" data-parent="#tableSAccordion" id="server_t_' + i + '">' +
|
||||
'<td colspan="4">' +
|
||||
@ -212,7 +212,7 @@ function createServerAccordionBody(i, server) {
|
||||
(server.operator || server.banned ? '<br>' : '') +
|
||||
'<p><i class="col-teal far fa-fw fa-calendar-check"></i> Sessions<span class="float-right"><b>' + server.session_count + '</b></span></p>' +
|
||||
'<p><i class="col-green far fa-fw fa-clock"></i> Playtime<span class="float-right"><b>' + server.playtime + '</b></span></p>' +
|
||||
'<p><i class="col-grey far fa-fw fa-clock"></i> Time AFK<span class="float-right"><b>' + server.afk_time + '</b></span></p>' +
|
||||
'<p><i class="col-grey far fa-fw fa-clock"></i> AFK Time<span class="float-right"><b>' + server.afk_time + '</b></span></p>' +
|
||||
'<p><i class="col-teal far fa-fw fa-clock"></i> Longest Session<span class="float-right"><b>' + server.longest_session_length + '</b></span></p>' +
|
||||
'<p><i class="col-teal far fa-fw fa-clock"></i> Session Median<span class="float-right"><b>' + server.session_median + '</b></span></p>' +
|
||||
'<br>' +
|
||||
|
@ -41,7 +41,7 @@ function displayError(element, error) {
|
||||
}
|
||||
|
||||
/* This function loads Server Overview tab */
|
||||
function loadServerOverviewValues(json, error) {
|
||||
function loadserverOverviewValues(json, error) {
|
||||
tab = $('#server-overview');
|
||||
|
||||
if (error) {
|
||||
|
@ -80,7 +80,7 @@ function createAccordionBody(i, session) {
|
||||
'<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">' +
|
||||
'<p><i class="col-teal far fa-fw fa-clock"></i> Ended<span class="float-right"><b>' + session.end + '</b></span></p>' +
|
||||
'<p><i class="col-green far fa-fw fa-clock"></i> Length<span class="float-right"><b>' + session.length + '</b></span></p>' +
|
||||
'<p><i class="col-grey far fa-fw fa-clock"></i> Time AFK<span class="float-right"><b>' + session.afk_time + '</b></span></p>' +
|
||||
'<p><i class="col-grey far fa-fw fa-clock"></i> AFK Time<span class="float-right"><b>' + session.afk_time + '</b></span></p>' +
|
||||
'<p><i class="col-green fa fa-fw fa-server"></i> Server<span class="float-right"><b>' + session.server_name + '</b></span></p><br>' +
|
||||
'<p><i class="col-red fa fa-fw fa-crosshairs"></i> Player Kills<span class="float-right"><b>' + session.player_kills.length + '</b></span></p>' +
|
||||
'<p><i class="col-green fa fa-fw fa-crosshairs"></i> Mob Kills<span class="float-right"><b>' + session.mob_kills + '</b></span></p>' +
|
||||
@ -89,7 +89,7 @@ function createAccordionBody(i, session) {
|
||||
'</div><div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">' +
|
||||
'<div id="worldpie_' + i + '" class="chart-pie"></div>' +
|
||||
'<a href="/player/' + session.player_name + '" class="float-right btn bg-blue"><i class="fa fa-user"></i><span> Player Page</span></a>' +
|
||||
(session.network_server ? '<a href="/server/' + session.server_name + '" class="float-right btn bg-light-green mr-2"><i class="fa fa-server"></i><span> Server Page</span></a>' : '') +
|
||||
(session.network_server ? '<a href="/server/' + session.server_name + '" class="float-right btn bg-light-green mr-2"><i class="fa fa-server"></i><span> Server Analysis</span></a>' : '') +
|
||||
'</div>' +
|
||||
'</div></td></tr>'
|
||||
}
|
||||
|
@ -825,7 +825,7 @@
|
||||
try {
|
||||
setLoadingText('Calculating values..');
|
||||
jsonRequest("../v1/network/overview", loadNetworkOverviewValues);
|
||||
jsonRequest("../v1/network/servers", loadServerBoxes);
|
||||
jsonRequest("../v1/network/servers", loadservers);
|
||||
jsonRequest("../v1/network/sessionsOverview", loadSessionValues);
|
||||
jsonRequest("../v1/network/playerbaseOverview", loadPlayerbaseOverviewValues);
|
||||
jsonRequest("../v1/sessions", loadSessionAccordion);
|
||||
|
@ -753,7 +753,7 @@
|
||||
jsonRequest("../v1/player?player=${playerName}", function (json, error) {
|
||||
loadPlayerOverviewValues(json, error);
|
||||
loadSessionAccordion(json, error);
|
||||
loadServerAccordion(json, error);
|
||||
loadserverAccordion(json, error);
|
||||
loadPlayerKills(json, error);
|
||||
loadPlayerDeaths(json, error);
|
||||
loadPvPPvEValues(json, error);
|
||||
|
@ -1299,12 +1299,12 @@
|
||||
<script>
|
||||
try {
|
||||
setLoadingText('Calculating values..');
|
||||
jsonRequest("../v1/serverOverview?server=${serverName}", loadServerOverviewValues);
|
||||
jsonRequest("../v1/onlineOverview?server=${serverName}", loadOnlineActivityOverviewValues);
|
||||
jsonRequest("../v1/sessionsOverview?server=${serverName}", loadSessionValues);
|
||||
jsonRequest("../v1/playerVersus?server=${serverName}", loadPvPPvEValues);
|
||||
jsonRequest("../v1/playerbaseOverview?server=${serverName}", loadPlayerbaseOverviewValues);
|
||||
jsonRequest("../v1/performanceOverview?server=${serverName}", loadPerformanceValues);
|
||||
jsonRequest("../v1/serverOverview?server=${serverUUID}", loadserverOverviewValues);
|
||||
jsonRequest("../v1/onlineOverview?server=${serverUUID}", loadOnlineActivityOverviewValues);
|
||||
jsonRequest("../v1/sessionsOverview?server=${serverUUID}", loadSessionValues);
|
||||
jsonRequest("../v1/playerVersus?server=${serverUUID}", loadPvPPvEValues);
|
||||
jsonRequest("../v1/playerbaseOverview?server=${serverUUID}", loadPlayerbaseOverviewValues);
|
||||
jsonRequest("../v1/performanceOverview?server=${serverUUID}", loadPerformanceValues);
|
||||
setLoadingText('Rendering graphs..');
|
||||
|
||||
// TODO remove
|
||||
@ -1345,10 +1345,10 @@
|
||||
uniquePlayers: 'Unique Players',
|
||||
newPlayers: 'New Players',
|
||||
tps: 'TPS',
|
||||
cpu: 'CPU Usage (%)',
|
||||
ram: 'RAM Usage (MB)',
|
||||
entities: 'Loaded Entities',
|
||||
chunks: 'Loaded Chunks',
|
||||
cpu: 'CPU (%)',
|
||||
ram: 'RAM (MB)',
|
||||
entities: 'Entities',
|
||||
chunks: 'Chunks',
|
||||
maxPing: 'Worst Ping',
|
||||
minPing: 'Best Ping',
|
||||
avgPing: 'Average Ping',
|
||||
@ -1390,7 +1390,7 @@
|
||||
}
|
||||
};
|
||||
|
||||
jsonRequest("../v1/graph?type=performance&server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/graph?type=performance&server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
var series = {
|
||||
playersOnline: {
|
||||
@ -1455,7 +1455,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
jsonRequest("../v1/graph?type=aggregatedPing&server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/graph?type=aggregatedPing&server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
var series = {
|
||||
avgPing: {
|
||||
@ -1486,7 +1486,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
jsonRequest("../v1/graph?type=worldPie&server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/graph?type=worldPie&server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
var worldSeries = {name: 'World Playtime', colorByPoint: true, data: json.world_series};
|
||||
var gmSeries = json.gm_series;
|
||||
@ -1496,7 +1496,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
jsonRequest("../v1/graph?type=activity&server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/graph?type=activity&server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
activityPie('activityPie', {
|
||||
name: 'Players', colorByPoint: true, data: json.activity_pie_series
|
||||
@ -1508,7 +1508,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
jsonRequest("../v1/graph?type=geolocation&server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/graph?type=geolocation&server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
var geolocationSeries = {
|
||||
name: 'Players',
|
||||
@ -1535,7 +1535,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
jsonRequest("../v1/graph?type=uniqueAndNew&server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/graph?type=uniqueAndNew&server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
var uniquePlayers = {
|
||||
name: s.name.uniquePlayers, type: s.type.spline, tooltip: s.tooltip.zeroDecimals,
|
||||
@ -1551,7 +1551,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
jsonRequest("../v1/graph?type=serverCalendar&server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/graph?type=serverCalendar&server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
$('#calendar').text('');
|
||||
onlineActivityCalendar('#calendar', json.data, json.firstDay);
|
||||
@ -1563,7 +1563,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
jsonRequest("../v1/graph?type=punchCard&server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/graph?type=punchCard&server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
var punchCardSeries = {
|
||||
name: 'Relative Join Activity',
|
||||
@ -1578,7 +1578,7 @@
|
||||
|
||||
setLoadingText('Sorting players table..');
|
||||
|
||||
jsonRequest("../v1/players?server=${serverName}", function (json, error) {
|
||||
jsonRequest("../v1/players?server=${serverUUID}", function (json, error) {
|
||||
if (json) {
|
||||
$('.player-table').DataTable({
|
||||
responsive: true,
|
||||
@ -1590,8 +1590,8 @@
|
||||
$('.player-table').text("Failed to load Players table data: " + error);
|
||||
}
|
||||
});
|
||||
jsonRequest("../v1/kills?server=${serverName}", loadPlayerKills);
|
||||
jsonRequest("../v1/pingTable?server=${serverName}", loadPingTable);
|
||||
jsonRequest("../v1/kills?server=${serverUUID}", loadPlayerKills);
|
||||
jsonRequest("../v1/pingTable?server=${serverUUID}", loadPingTable);
|
||||
|
||||
$('.server-name').text('${serverName}');
|
||||
$('.player-plugin-table').DataTable({
|
||||
@ -1601,7 +1601,7 @@
|
||||
setLoadingText('Almost done..');
|
||||
openPage();
|
||||
|
||||
jsonRequest("../v1/sessions?server=${serverName}", loadSessionAccordion);
|
||||
jsonRequest("../v1/sessions?server=${serverUUID}", loadSessionAccordion);
|
||||
|
||||
setLoadingText('Done.');
|
||||
setTimeout(function () {
|
||||
|
Loading…
Reference in New Issue
Block a user