add penalties for angle info

queue Tell/Say to prevent plugins from throwing exception when server is offlline
fixed CPU usage issue over time
sort penalties by type on webfront
This commit is contained in:
RaidMax
2018-05-03 23:22:10 -05:00
parent f442f251f6
commit 3092a529e9
18 changed files with 775 additions and 548 deletions

View File

@ -13,18 +13,22 @@ namespace WebfrontCore.Controllers
{
public class PenaltyController : BaseController
{
public IActionResult List()
public IActionResult List(int showOnly = (int)SharedLibraryCore.Objects.Penalty.PenaltyType.Any)
{
ViewBag.Description = "List of all the recent penalties (bans, kicks, warnings) on IW4MAdmin";
ViewBag.Title = "Client Penalties";
ViewBag.Keywords = "IW4MAdmin, penalties, ban, kick, warns";
return View();
return View((SharedLibraryCore.Objects.Penalty.PenaltyType)showOnly);
}
public async Task<IActionResult> ListAsync(int offset = 0)
public async Task<IActionResult> ListAsync(int offset = 0, int showOnly = (int)SharedLibraryCore.Objects.Penalty.PenaltyType.Any)
{
return await Task.FromResult(View("_List", offset));
return await Task.FromResult(View("_List", new ViewModels.PenaltyFilterInfo()
{
Offset = offset,
ShowOnly = (SharedLibraryCore.Objects.Penalty.PenaltyType)showOnly
}));
}
public async Task<IActionResult> PublicAsync()

View File

@ -10,9 +10,9 @@ namespace WebfrontCore.ViewComponents
{
public class PenaltyListViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(int offset)
public async Task<IViewComponentResult> InvokeAsync(int offset, Penalty.PenaltyType showOnly)
{
var penalties = await Program.Manager.GetPenaltyService().GetRecentPenalties(12, offset);
var penalties = await Program.Manager.GetPenaltyService().GetRecentPenalties(12, offset, showOnly);
var penaltiesDto = penalties.Select(p => new PenaltyInfo()
{
OffenderId = p.OffenderId,

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace WebfrontCore.ViewModels
{
public class PenaltyFilterInfo
{
public int Offset { get; set; }
public SharedLibraryCore.Objects.Penalty.PenaltyType ShowOnly { get; set; }
}
}

View File

@ -1,4 +1,37 @@
<h4 class="pb-2 text-center ">@ViewBag.Title</h4>
@model SharedLibraryCore.Objects.Penalty.PenaltyType
<h4 class="pb-2 text-center ">@ViewBag.Title</h4>
<div class="row">
<select class="form-control bg-dark text-muted" id="penalty_filter_selection">
@{
foreach (var penaltyType in Enum.GetValues(typeof(SharedLibraryCore.Objects.Penalty.PenaltyType)))
{
if ((SharedLibraryCore.Objects.Penalty.PenaltyType)penaltyType == SharedLibraryCore.Objects.Penalty.PenaltyType.Any)
{
if (Model == SharedLibraryCore.Objects.Penalty.PenaltyType.Any)
{
<option value="@Convert.ToInt32(penaltyType)" selected="selected" )>Show @penaltyType.ToString()</option>
}
else
{
<option value="@Convert.ToInt32(penaltyType)" )>Show @penaltyType.ToString()</option>
}
}
else
{
if ((SharedLibraryCore.Objects.Penalty.PenaltyType)penaltyType == Model)
{
<option value="@Convert.ToInt32(penaltyType)" selected="selected">Show only @penaltyType.ToString()s</option>
}
else
{
<option value="@Convert.ToInt32(penaltyType)" )>Show only @penaltyType.ToString()s</option>
}
}
}
}
</select>
</div>
<div class="row">
<table class="table table-striped">
<thead class="d-none d-md-table-header-group">
@ -11,7 +44,11 @@
</tr>
</thead>
<tbody id="penalty_table" class="border-bottom bg-dark">
@await Component.InvokeAsync("PenaltyList", new { offset = 0 })
@await Component.InvokeAsync("PenaltyList", new WebfrontCore.ViewModels.PenaltyFilterInfo()
{
Offset = 0,
ShowOnly = Model
})
</tbody>
</table>
<table class="table d-table d-md-none">
@ -24,4 +61,4 @@
<environment include="Development">
<script type="text/javascript" src="~/js/penalty.js"></script>
</environment>
}
}

View File

@ -2,6 +2,6 @@
Layout = null;
}
@model int
@model WebfrontCore.ViewModels.PenaltyFilterInfo
@await Component.InvokeAsync("PenaltyList", new { offset = Model })
@await Component.InvokeAsync("PenaltyList", new { offset = Model.Offset, showOnly = Model.ShowOnly })

View File

@ -2,14 +2,14 @@
"name": "asp.net",
"private": true,
"dependencies": {
"bootstrap": "v4.1.0",
"bootstrap": "v4.1.1",
"jquery": "3.3.1",
"popper.js": "v1.12.9",
"open-iconic": "1.1.1",
"moment-timezone": "0.5.14"
},
"resolutions": {
"bootstrap": "v4.1.0",
"bootstrap": "v4.1.1",
"jquery": "3.3.1"
}
}

View File

@ -1,4 +1,32 @@
@import '../lib/bootstrap/scss/bootstrap.scss';
$white: #fff !default;
$blue: #007ACC !default;
$red: rgba(255, 69, 69, 0.85) !default;
$green: rgba(116,147,99, 1) !default;
$orange: #fd7e14 !default;
$primary: $blue !default;
$secondary: $orange !default;
$light: rgb(204, 204, 204) !default;
$dark: rgb(24, 24, 24) !default;
$body-bg: rgb(34,34,34) !default;
$body-color: $white !default;
$link-color: $white !default;
$link-decoration: none !default;
$link-hover-color: $primary !default;
$link-hover-decoration: none !default;
$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
$navbar-padding-y: 0 !default;
$navbar-nav-link-padding-x: 2rem !default;
$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`
$h5-font-size: $font-size-base * 1.25 !default;
$h1-font-size: $font-size-base * 2.5 !default;
$navbar-brand-font-size: $h1-font-size !default;
$navbar-toggler-font-size: $h5-font-size !default;
$navbar-dark-hover-color: $primary !default;
@import '../lib/bootstrap/scss/bootstrap.scss';
/*custom variables*/
@ -83,10 +111,17 @@ a.link-inverse:hover {
border-bottom-color: $orange;
}
form * {
form *, select {
border-radius: 0 !important;
}
select {
border-left: none !important;
border-right: none !important;
border-bottom: none !important;
border-top: 2px solid rgba(0, 122, 204, 0.5) !important;
}
.oi-fix-navbar {
line-height: 1.5 !important;
top: 0 !important;

View File

@ -5,6 +5,7 @@
function showLoader() {
$('.layout-loading-icon').attr('style', 'visibility:visible');
$('.layout-loading-icon').removeClass('text-danger');
$('.layout-loading-icon').removeClass('text-muted');
$('.layout-loading-icon').fadeIn();
}
@ -12,6 +13,10 @@ function errorLoader() {
$('.layout-loading-icon').addClass('text-danger');
}
function staleLoader() {
$('.layout-loading-icon').addClass('text-muted');
}
$(document).ready(function () {
hideLoader();

View File

@ -8,9 +8,12 @@ function loadMorePenalties() {
showLoader();
isLoading = true;
$.get('/Penalty/ListAsync', { offset: offset })
$.get('/Penalty/ListAsync', { offset: offset, showOnly : $('#penalty_filter_selection').val() })
.done(function (response) {
$('#penalty_table').append(response);
if (response.trim().length === 0) {
staleLoader();
}
hideLoader();
isLoading = false;
})
@ -22,7 +25,13 @@ function loadMorePenalties() {
}
if ($('#penalty_table').length === 1) {
/*
$('#penalty_filter_selection').change(function() {
// if (offset === 0) {
location = location.href.split('?')[0] + "?showOnly=" + $('#penalty_filter_selection').val();
// }
});
/*
https://stackoverflow.com/questions/19731730/jquery-js-detect-users-scroll-attempt-without-any-window-overflow-to-scroll
*/

File diff suppressed because it is too large Load Diff