Player page plugins tabs

This commit is contained in:
Rsl1122 2019-07-26 12:40:10 +03:00
parent 227c66961a
commit f905f3c879
6 changed files with 56 additions and 130 deletions

View File

@ -36,7 +36,7 @@ import java.util.*;
/**
* Responsible for generating /server page plugin tabs based on DataExtension API data.
* <p>
* Currently very similar to {@link InspectPluginTab}.
* Currently very similar to {@link PlayerPluginTab}.
* This will become more complex once tables are added, since some big tables will be moved to their own tabs.
*
* @author Rsl1122
@ -91,9 +91,9 @@ public class AnalysisPluginTabs {
private void generate() {
if (serverData.isEmpty()) {
nav = new NavLink(Icon.called("cubes").build(), "Overview (No Data)").toHtml();
tab = "<div class=\"tab\"><div class=\"row clearfix\">" +
"<div class=\"col-md-12\">" + Html.CARD.parse("<div class=\"card-body\"><p>No Extension Data</p></div>") +
"</div></div></div>";
tab = wrapInTab(
"<div class=\"col-md-12\">" + Html.CARD.parse("<div class=\"card-body\"><p>No Extension Data</p></div>") + "</div>"
);
} else {
nav = new NavLink(Icon.called("cubes").build(), "Overview").toHtml();
tab = generatePageTab();

View File

@ -147,16 +147,16 @@ public class PageFactory {
);
}
public InspectPluginTab inspectPluginTabs(UUID playerUUID) {
public PlayerPluginTab inspectPluginTabs(UUID playerUUID) {
Database database = dbSystem.get().getDatabase();
Map<UUID, List<ExtensionPlayerData>> extensionPlayerData = database.query(new ExtensionPlayerDataQuery(playerUUID));
if (extensionPlayerData.isEmpty()) {
return new InspectPluginTab("No Extensions", Collections.emptyList(), formatters.get());
return new PlayerPluginTab("", Collections.emptyList(), formatters.get());
}
List<InspectPluginTab> inspectPluginTabs = new ArrayList<>();
List<PlayerPluginTab> playerPluginTabs = new ArrayList<>();
for (Map.Entry<UUID, Server> entry : database.query(ServerQueries.fetchPlanServerInformation()).entrySet()) {
UUID serverUUID = entry.getKey();
String serverName = entry.getValue().getIdentifiableName();
@ -166,18 +166,18 @@ public class PageFactory {
continue;
}
inspectPluginTabs.add(new InspectPluginTab(serverName, ofServer, formatters.get()));
playerPluginTabs.add(new PlayerPluginTab(serverName, ofServer, formatters.get()));
}
StringBuilder navs = new StringBuilder();
StringBuilder tabs = new StringBuilder();
inspectPluginTabs.stream().sorted().forEach(tab -> {
playerPluginTabs.stream().sorted().forEach(tab -> {
navs.append(tab.getNav());
tabs.append(tab.getTab());
});
return new InspectPluginTab(navs.toString(), tabs.toString());
return new PlayerPluginTab(navs.toString(), tabs.toString());
}
/**

View File

@ -113,7 +113,7 @@ public class PlayerPage implements Page {
replacer.put("backButton", "<li><a title=\"to Server page\" href=\"/server\"><i class=\"material-icons\">arrow_back</i><i class=\"material-icons\">storage</i></a></li>");
}
InspectPluginTab pluginTabs = pageFactory.inspectPluginTabs(playerUUID);
PlayerPluginTab pluginTabs = pageFactory.inspectPluginTabs(playerUUID);
replacer.put("navPluginsTabs", pluginTabs.getNav());
replacer.put("pluginsTabs", pluginTabs.getTab());

View File

@ -28,6 +28,7 @@ import com.djrapitops.plan.utilities.formatting.Formatter;
import com.djrapitops.plan.utilities.formatting.Formatters;
import com.djrapitops.plan.utilities.html.Html;
import com.djrapitops.plan.utilities.html.icon.Icon;
import com.djrapitops.plan.utilities.html.structure.NavLink;
import com.djrapitops.plan.utilities.html.structure.TabsElement;
import java.util.*;
@ -37,7 +38,7 @@ import java.util.*;
*
* @author Rsl1122
*/
public class InspectPluginTab implements Comparable<InspectPluginTab> {
public class PlayerPluginTab implements Comparable<PlayerPluginTab> {
private String serverName;
private List<ExtensionPlayerData> playerData;
@ -52,12 +53,12 @@ public class InspectPluginTab implements Comparable<InspectPluginTab> {
private boolean hasWideTable;
public InspectPluginTab(String nav, String tab) {
public PlayerPluginTab(String nav, String tab) {
this.nav = nav;
this.tab = tab;
}
public InspectPluginTab(
public PlayerPluginTab(
String serverName,
List<ExtensionPlayerData> playerData,
Formatters formatters
@ -89,12 +90,12 @@ public class InspectPluginTab implements Comparable<InspectPluginTab> {
private void generate() {
if (playerData.isEmpty()) {
nav = "<li><a class=\"nav-button\" href=\"javascript:void(0)\">" + serverName + " (No Data)</a></li>";
tab = "<div class=\"tab\"><div class=\"row clearfix\">" +
"<div class=\"col-md-12\">" + Html.CARD.parse("<p>No Data (" + serverName + ")</p>") +
"</div></div></div>";
nav = NavLink.collapsed(Icon.called("cubes").build(), serverName + " (No Data)").toHtml();
tab = wrapInTab(
"<div class=\"col-md-12\">" + Html.CARD.parse("<div class=\"card-body\"><p>No Extension Data</p></div>") + "</div>"
);
} else {
nav = "<li><a class=\"nav-button\" href=\"javascript:void(0)\">" + serverName + "</a></li>";
nav = NavLink.collapsed(Icon.called("cubes").build(), serverName).toHtml();
tab = generatePageTab();
}
}
@ -126,7 +127,13 @@ public class InspectPluginTab implements Comparable<InspectPluginTab> {
}
private String wrapInTab(String content) {
return "<div class=\"tab\"><div class=\"row clearfix\">" + content + "</div></div>";
return "<div class=\"tab\"><div class=\"container-fluid mt-4\">" +
// Page heading
"<div class=\"d-sm-flex align-items-center justify-content-between mb-4\">" +
"<h1 class=\"h3 mb-0 text-gray-800\"><i class=\"sidebar-toggler fa fa-fw fa-bars\"></i>${playerName} &middot; " + serverName + " Plugins</h1>" +
"</div>" +
// End Page heading
"<div class=\"row clearfix\">" + content + "</div></div></div>";
}
private TabsElement.Tab wrapToTabElementTab(ExtensionTabData tabData) {
@ -202,9 +209,9 @@ public class InspectPluginTab implements Comparable<InspectPluginTab> {
private String wrapInContainer(ExtensionInformation information, String tabsElement) {
String colWidth = hasWideTable ? "col-md-8 col-lg-8" : "col-md-4 col-lg-4";
return "<div class=\"col-xs-12 col-sm-12 " + colWidth + "\"><div class=\"card\">" +
"<div class=\"header\">" +
"<h2>" + Icon.fromExtensionIcon(information.getIcon()) + ' ' + information.getPluginName() + "</h2>" +
return "<div class=\"col-xs-12 col-sm-12 " + colWidth + "\"><div class=\"card shadow mb-0\">" +
"<div class=\"card-header py-3\">" +
"<h6 class=\"m-0 font-weight-bold col-black\">" + Icon.fromExtensionIcon(information.getIcon()) + ' ' + information.getPluginName() + "</h6>" +
"</div>" +
tabsElement +
"</div></div>";
@ -213,8 +220,8 @@ public class InspectPluginTab implements Comparable<InspectPluginTab> {
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof InspectPluginTab)) return false;
InspectPluginTab that = (InspectPluginTab) o;
if (!(o instanceof PlayerPluginTab)) return false;
PlayerPluginTab that = (PlayerPluginTab) o;
return Objects.equals(serverName, that.serverName) &&
Objects.equals(nav, that.nav);
}
@ -225,7 +232,7 @@ public class InspectPluginTab implements Comparable<InspectPluginTab> {
}
@Override
public int compareTo(InspectPluginTab other) {
public int compareTo(PlayerPluginTab other) {
return String.CASE_INSENSITIVE_ORDER.compare(this.serverName, other.serverName);
}
}

View File

@ -27,13 +27,32 @@ public class NavLink {
private final Icon icon;
private final String tabName;
private final boolean collapsed;
public NavLink(Icon icon, String tabName) {
this(icon, tabName, false);
}
private NavLink(Icon icon, String tabName, boolean collapsed) {
this.icon = icon;
this.tabName = tabName;
this.collapsed = collapsed;
}
public static NavLink main(Icon icon, String tabName) {
return new NavLink(icon, tabName, false);
}
public static NavLink collapsed(Icon icon, String tabName) {
return new NavLink(icon, tabName, true);
}
public String toHtml() {
if (collapsed) {
return "<a class=\"collapse-item nav-button\" href=\"javascript:void(0)\">" +
icon.toHtml() + ' ' +
tabName + "</a>";
}
return "<li class=\"nav-item nav-button\">" +
"<a class=\"nav-link\" href=\"javascript:void(0)\">" +
icon.toHtml() +

View File

@ -93,12 +93,7 @@
</a>
<div aria-labelledby="headingPages" class="collapse" data-parent="#accordionSidebar" id="pluginsPages">
<div class="bg-white py-2 collapse-inner rounded">
<a class="collapse-item nav-button" href="javascript:void(0)"><i class="fas fa-fw fa-cubes"></i>
Server 1</a>
<a class="collapse-item nav-button" href="javascript:void(0)"><i class="fa fa-fw fa-cubes"></i>
Server 2</a>
<a class="collapse-item nav-button" href="javascript:void(0)"><i class="fa fa-fw fa-cubes"></i>
Server 3</a>
${navPluginsTabs}
</div>
</div>
</li>
@ -422,8 +417,7 @@
</thead>
<tbody>
<tr>
<td><b><i class="col-red fa fa-fw fa-crosshairs"></i></b> Average KDR / Player
</td>
<td><b><i class="col-red fa fa-fw fa-crosshairs"></i> KDR</b></td>
<td id="data_player_kdr_total"></td>
<td id="data_player_kdr_30d"></td>
<td id="data_player_kdr_7d"></td>
@ -443,7 +437,7 @@
</tbody>
<tbody>
<tr>
<td><b><i class="col-green fa fa-fw fa-crosshairs"></i></b> Average Mob KDR</td>
<td><b><i class="col-green fa fa-fw fa-crosshairs"></i> Mob KDR</b></td>
<td id="data_mob_kdr_total"></td>
<td id="data_mob_kdr_30d"></td>
<td id="data_mob_kdr_7d"></td>
@ -571,101 +565,7 @@
</div>
</div> <!-- /.container-fluid -->
</div> <!-- End of Servers Overview Tab-->
<!-- Begin Server 1 Plugins Tab -->
<div class="tab">
<div class="container-fluid mt-4">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800"><i
class="sidebar-toggler fa fa-fw fa-bars"></i>${playerName}
&middot; Server 1 Plugins</h1>
<a class="btn bg-plan btn-icon-split" href="network">
<span class="icon text-white-50">
<i class="fas fa-fw fa-arrow-left"></i><i class="fas fa-fw fa-cloud"></i>
</span>
<span class="text">Network page</span>
</a>
</div>
<div class="row">
<div class="col-lg-4 mb-4 col-sm-12">
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold col-black"><i
class="fa fa-fw fa-star col-green"></i>
AdvancedAchievements</h6>
</div>
<div class="card-body">
<p><i class="far fa-fw fa-check-circle col-green"></i> Achievements<span
class="float-right"><b>9</b></p>
</div>
</div>
</div>
</div>
</div> <!-- /.container-fluid -->
</div> <!-- End of Server 1 Plugins tab -->
<!-- Begin Server 2 Plugins Tab -->
<div class="tab">
<div class="container-fluid mt-4">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800"><i
class="sidebar-toggler fa fa-fw fa-bars"></i>${playerName}
&middot; Server 2 Plugins</h1>
<a class="btn bg-plan btn-icon-split" href="network">
<span class="icon text-white-50">
<i class="fas fa-fw fa-arrow-left"></i><i class="fas fa-fw fa-cloud"></i>
</span>
<span class="text">Network page</span>
</a>
</div>
<div class="row">
<div class="col-lg-4 mb-4 col-sm-12">
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold col-black"><i
class="fa fa-fw fa-university col-brown"></i>
Towny</h6>
</div>
<div class="card-body">
<p><i class="fa fa-fw fa-university col-brown"></i> Town<span
class="float-right"><b>Cayon</b></p>
</div>
</div>
</div>
</div>
</div> <!-- /.container-fluid -->
</div> <!-- End of Server 2 Plugins tab -->
<!-- Begin Server 3 Plugins Tab -->
<div class="tab">
<div class="container-fluid mt-4">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800"><i
class="sidebar-toggler fa fa-fw fa-bars"></i>${playerName}
&middot; Server 3 Plugins</h1>
<a class="btn bg-plan btn-icon-split" href="network">
<span class="icon text-white-50">
<i class="fas fa-fw fa-arrow-left"></i><i class="fas fa-fw fa-cloud"></i>
</span>
<span class="text">Network page</span>
</a>
</div>
<div class="row">
<div class="col-lg-4 mb-4 col-sm-12">
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold col-black"><i
class="far fa-fw fa-grin-beam-sweat"></i>
No Plugins</h6>
</div>
<div class="card-body">
<p>Server 3 has no plugins with Plan support enabled.</p>
</div>
</div>
</div>
</div>
</div> <!-- /.container-fluid -->
</div> <!-- End of Server 3 Plugins tab -->
${pluginsTabs}
<div class="tab"></div>
<div class="tab"></div>
<div class="tab"></div>