remove logging - invert if

remove unused imports
remove unused variables
refactor namespace
minimize the number of visible toasts
bump CSS file name version
This commit is contained in:
Frede Hundewadt 2023-06-15 09:08:17 +02:00
parent 79ec577930
commit 1afb245c7c
7 changed files with 148 additions and 400 deletions

View file

@ -54,8 +54,7 @@ public class CabinetDrawerService : ICabinetDrawerService
var drawer = await _asyncStorageService var drawer = await _asyncStorageService
.GetItemAsync<ActivityDrawer>($"{companyId}.{ActivityDrawer.Label}"); .GetItemAsync<ActivityDrawer>($"{companyId}.{ActivityDrawer.Label}");
if (drawer == null) force = true; if (drawer == null) force = true;
if (force) if (!force) return drawer ?? new ActivityDrawer();
{
var result = await _activityRepo.GetCustomerActivities(companyId); var result = await _activityRepo.GetCustomerActivities(companyId);
drawer = new ActivityDrawer drawer = new ActivityDrawer
{ {
@ -63,8 +62,6 @@ public class CabinetDrawerService : ICabinetDrawerService
Content = result Content = result
}; };
await StoreActivityDrawerAsync(companyId, drawer); await StoreActivityDrawerAsync(companyId, drawer);
}
_logger.LogDebug("ActivityDrawer {}", JsonSerializer.Serialize(drawer, _options));
return drawer ?? new ActivityDrawer(); return drawer ?? new ActivityDrawer();
} }
@ -81,8 +78,7 @@ public class CabinetDrawerService : ICabinetDrawerService
.GetItemAsync<CatalogDrawer>($"{countryCode}.{CatalogDrawer.Label}"); .GetItemAsync<CatalogDrawer>($"{countryCode}.{CatalogDrawer.Label}");
if (drawer == null) force = true; if (drawer == null) force = true;
if (force) if (!force) return drawer ?? new CatalogDrawer();
{
var result = await _catalogRepo.GetPriceList(countryCode); var result = await _catalogRepo.GetPriceList(countryCode);
drawer = new CatalogDrawer drawer = new CatalogDrawer
{ {
@ -90,8 +86,6 @@ public class CabinetDrawerService : ICabinetDrawerService
Content = result Content = result
}; };
await StoreCatalogDrawerAsync(countryCode, drawer); await StoreCatalogDrawerAsync(countryCode, drawer);
}
_logger.LogDebug("CatalogDrawer {}", JsonSerializer.Serialize(drawer, _options));
return drawer ?? new CatalogDrawer(); return drawer ?? new CatalogDrawer();
} }
@ -108,8 +102,7 @@ public class CabinetDrawerService : ICabinetDrawerService
.GetItemAsync<InfoDrawer>($"{companyId}.{InfoDrawer.Label}"); .GetItemAsync<InfoDrawer>($"{companyId}.{InfoDrawer.Label}");
if (drawer == null) force = true; if (drawer == null) force = true;
if (force) if (!force) return drawer ?? new InfoDrawer();
{
var result = await _customerRepo.GetCompanyById(companyId); var result = await _customerRepo.GetCompanyById(companyId);
drawer = new InfoDrawer drawer = new InfoDrawer
{ {
@ -117,8 +110,6 @@ public class CabinetDrawerService : ICabinetDrawerService
Content = result Content = result
}; };
await StoreInfoDrawerAsync(companyId, drawer); await StoreInfoDrawerAsync(companyId, drawer);
}
_logger.LogDebug("InfoDrawer {}", JsonSerializer.Serialize(drawer, _options));
return drawer ?? new InfoDrawer(); return drawer ?? new InfoDrawer();
} }
@ -135,8 +126,7 @@ public class CabinetDrawerService : ICabinetDrawerService
.GetItemAsync<InventoryDrawer>($"{companyId}.{InventoryDrawer.Label}"); .GetItemAsync<InventoryDrawer>($"{companyId}.{InventoryDrawer.Label}");
if (drawer == null) force = true; if (drawer == null) force = true;
if (force) if (!force) return drawer ?? new InventoryDrawer();
{
var result = await _historyRepo.GetInventory(companyId); var result = await _historyRepo.GetInventory(companyId);
drawer = new InventoryDrawer drawer = new InventoryDrawer
{ {
@ -144,8 +134,6 @@ public class CabinetDrawerService : ICabinetDrawerService
Content = result Content = result
}; };
await StoreInventoryDrawerAsync(companyId, drawer); await StoreInventoryDrawerAsync(companyId, drawer);
}
_logger.LogDebug("InventoryDrawer {}", JsonSerializer.Serialize(drawer, _options));
return drawer ?? new InventoryDrawer(); return drawer ?? new InventoryDrawer();
} }
@ -161,8 +149,7 @@ public class CabinetDrawerService : ICabinetDrawerService
var drawer = await _asyncStorageService var drawer = await _asyncStorageService
.GetItemAsync<InvoiceDrawer>($"{companyId}.{InvoiceDrawer.Label}"); .GetItemAsync<InvoiceDrawer>($"{companyId}.{InvoiceDrawer.Label}");
if (drawer == null) force = true; if (drawer == null) force = true;
if (force) if (!force) return drawer ?? new InvoiceDrawer();
{
var result = await _historyRepo.GetInvoiceList(companyId); var result = await _historyRepo.GetInvoiceList(companyId);
drawer = new InvoiceDrawer drawer = new InvoiceDrawer
{ {
@ -170,9 +157,6 @@ public class CabinetDrawerService : ICabinetDrawerService
Content = result Content = result
}; };
await StoreInvoiceDrawerAsync(companyId, drawer); await StoreInvoiceDrawerAsync(companyId, drawer);
}
_logger.LogDebug("InvoiceDrawer {}", JsonSerializer.Serialize(drawer, _options));
return drawer ?? new InvoiceDrawer(); return drawer ?? new InvoiceDrawer();
} }
@ -189,8 +173,7 @@ public class CabinetDrawerService : ICabinetDrawerService
.GetItemAsync<StatisticDrawer>($"{companyId}.{StatisticDrawer.Label}"); .GetItemAsync<StatisticDrawer>($"{companyId}.{StatisticDrawer.Label}");
if (drawer == null) force = true; if (drawer == null) force = true;
if (force) if (!force) return drawer ?? new StatisticDrawer();
{
var result = await _historyRepo.GetProductInvoiceLines(companyId); var result = await _historyRepo.GetProductInvoiceLines(companyId);
var content = result.Select(x => new HistoryFilter var content = result.Select(x => new HistoryFilter
{ {
@ -207,8 +190,6 @@ public class CabinetDrawerService : ICabinetDrawerService
Content = content Content = content
}; };
await StoreStatisticDrawerAsync(companyId, drawer); await StoreStatisticDrawerAsync(companyId, drawer);
}
_logger.LogDebug("StatisticDrawer {}", JsonSerializer.Serialize(drawer, _options));
return drawer ?? new StatisticDrawer(); return drawer ?? new StatisticDrawer();
} }

View file

@ -16,8 +16,6 @@
using System.Text.Json; using System.Text.Json;
using Blazored.LocalStorage; using Blazored.LocalStorage;
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using Wonky.Client.Models;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
namespace Wonky.Client.Local.Services; namespace Wonky.Client.Local.Services;

View file

@ -15,7 +15,9 @@
using System.Text.Json; using System.Text.Json;
using Blazored.LocalStorage; using Blazored.LocalStorage;
using Blazored.Toast;
using Blazored.Toast.Services; using Blazored.Toast.Services;
using Blazored.Toast.Configuration;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Components.Forms;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -47,7 +49,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
[Inject] public VatInfoLookupService VatService { get; set; } [Inject] public VatInfoLookupService VatService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; } [Inject] public IUserInfoService UserInfoService { get; set; }
[Inject] public IOptions<AppInfo?>? AppInfo { get; set; } [Inject] public IOptions<AppInfo>? AppInfo { get; set; }
[Inject] public ICabinetDrawerService DrawerService { get; set; } [Inject] public ICabinetDrawerService DrawerService { get; set; }
// ########################################################################### // ###########################################################################
@ -65,8 +67,8 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
private List<ContactDto> _contacts = new(); private List<ContactDto> _contacts = new();
private string VatState { get; set; } = "the-ugly"; private string VatState { get; set; } = "the-ugly";
private bool _validVat; private bool _validVat;
private bool _hasFolded; // private bool _hasFolded;
private string _currentVat = ""; // private string _currentVat = "";
private string _countryCode = "dk"; private string _countryCode = "dk";
private string _visitStateCss = "the-ugly"; private string _visitStateCss = "the-ugly";
private int _enableActivity = 1; private int _enableActivity = 1;
@ -81,14 +83,16 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
private string _invoiceLink = ""; private string _invoiceLink = "";
private string _newActivityLink = ""; private string _newActivityLink = "";
private int _enableLink = 1; private int _enableLink = 1;
private ActivityDrawer _activityDrawer = new(); // private ActivityDrawer _activityDrawer = new();
private InventoryDrawer _inventoryDrawer = new(); // private InventoryDrawer _inventoryDrawer = new();
private InvoiceDrawer _invoiceDrawer = new(); // private InvoiceDrawer _invoiceDrawer = new();
private StatisticDrawer _statisticDrawer = new(); // private StatisticDrawer _statisticDrawer = new();
private UserManagerEditView _userInfo = new(); private UserManagerEditView _userInfo = new();
private InfoDrawer _infoDrawer = new(); private InfoDrawer _infoDrawer = new();
private CompanyDto _company = new(); private CompanyDto _company = new();
private string _companyId = ""; // private string _companyId = "";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
/* /*
@ -153,7 +157,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
* toggle view button text * toggle view button text
*/ */
_toggleButtonText = _company.IsHidden == 0 ? "Udelad kunde i oversigt" : "Brug Normal Visning"; _toggleButtonText = _company.IsHidden == 0 ? "Udelad kunde i oversigt" : "Brug Normal Visning";
_currentVat = _company.VatNumber; // _currentVat = _company.VatNumber;
_company.CountryCode = _userInfo.CountryCode.ToLower(); _company.CountryCode = _userInfo.CountryCode.ToLower();
/* /*
* visit interval init * visit interval init
@ -193,7 +197,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
/* /*
* this is only used if user has selected to show closed companies * this is only used if user has selected to show closed companies
*/ */
_hasFolded = true; // _hasFolded = true;
VatState = "the-dead"; VatState = "the-dead";
_visitStateCss = "the-dead"; _visitStateCss = "the-dead";
} }
@ -206,14 +210,11 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_validVat = _company.ValidVat == 1; // true/false flag set if InfoDrawer.Company has a valid vatNumber _validVat = _company.ValidVat == 1; // true/false flag set if InfoDrawer.Company has a valid vatNumber
VatState = _company.ValidVat == 1 ? "the-good" : "no-vat"; // assign css class VatState = _company.ValidVat == 1 ? "the-good" : "no-vat"; // assign css class
} }
/*
* create search address from address
*/
if (_countryIsDk) if (_countryIsDk)
{ {
_companyVatAddress = PrepareVatAddress(_company); _companyVatAddress = PrepareVatAddress(_company);
} }
await GetContacts(CompanyId);
} }
/* /*
* remove loading image * remove loading image
@ -221,39 +222,43 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_working = false; _working = false;
} }
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (string.IsNullOrWhiteSpace(_companyId)) if (firstRender)
{ {
_companyId = CompanyId; await GetContacts(CompanyId);
_ = await HistoryRepo.RequestErpSync(CompanyId, _company.HistorySync, false); _ = await HistoryRepo.RequestErpSync(CompanyId, _company.HistorySync, false);
_invoiceDrawer = await DrawerService.GetInvoiceDrawerAsync(CompanyId, true); _ = await DrawerService.GetInvoiceDrawerAsync(CompanyId);
_inventoryDrawer = await DrawerService.GetInventoryDrawerAsync(CompanyId, true); _ = await DrawerService.GetInventoryDrawerAsync(CompanyId);
_activityDrawer = await DrawerService.GetActivityDrawerAsync(CompanyId, true); _ = await DrawerService.GetActivityDrawerAsync(CompanyId);
_statisticDrawer = await DrawerService.GetStatisticDrawerAsync(CompanyId, true); _ = await DrawerService.GetStatisticDrawerAsync(CompanyId);
} }
} }
private async Task ReloadHistory() private async Task ReloadHistory()
{ {
Toaster.ShowInfo("Afventer svar fra tjenester ...");
_enableLink = 0; _enableLink = 0;
_enableActivity = 0; _enableActivity = 0;
var newSync = await HistoryRepo.RequestErpSync(CompanyId, _company.HistorySync, true);
Toaster.ShowWarning("Arbejder på sagen ...");
var newSync = await HistoryRepo.RequestErpSync(CompanyId, _company.HistorySync, false);
if (!string.IsNullOrWhiteSpace(newSync)) if (!string.IsNullOrWhiteSpace(newSync))
{ {
_infoDrawer = await DrawerService.GetInfoDrawerAsync(CompanyId, true); _infoDrawer = await DrawerService.GetInfoDrawerAsync(CompanyId, true);
_invoiceDrawer = await DrawerService.GetInvoiceDrawerAsync(CompanyId, true); _company = _infoDrawer.Content;
_inventoryDrawer = await DrawerService.GetInventoryDrawerAsync(CompanyId, true); _ = await DrawerService.GetInvoiceDrawerAsync(CompanyId, true);
_activityDrawer = await DrawerService.GetActivityDrawerAsync(CompanyId, true); _ = await DrawerService.GetInventoryDrawerAsync(CompanyId, true);
_statisticDrawer = await DrawerService.GetStatisticDrawerAsync(CompanyId, true); _ = await DrawerService.GetActivityDrawerAsync(CompanyId, true);
_ = await DrawerService.GetStatisticDrawerAsync(CompanyId, true);
} }
Toaster.ShowSuccess("Data er snart klar ....");
_enableLink = 1; _enableLink = 1;
_enableActivity = _company.ValidVat; _enableActivity = _company.ValidVat;
// StateHasChanged();
Toaster.ShowSuccess("Alle tjenester har svaret.");
} }
private void ToggleErpEdit() private void ToggleErpEdit()
{ {
_erpEditDisabled = !_erpEditDisabled; _erpEditDisabled = !_erpEditDisabled;
@ -280,6 +285,9 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
} }
/*
* Request contacts for company
*/
private async Task GetContacts(string companyId) private async Task GetContacts(string companyId)
{ {
/* /*
@ -293,12 +301,18 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
} }
/*
* Show vat number lookup form only danish companies
*/
private void OpenVatLookupModal() private void OpenVatLookupModal()
{ {
_vatLookupPopup.Show(); _vatLookupPopup.Show();
} }
/*
* Callback from vat lookup overlay with registration infomration
*/
private void SelectedCompanyCallback(VirkRegInfo regInfo) private void SelectedCompanyCallback(VirkRegInfo regInfo)
{ {
_validVat = regInfo.States[0].State.ToLower() == "normal"; _validVat = regInfo.States[0].State.ToLower() == "normal";
@ -320,6 +334,9 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
} }
/*
* Show contact overlay
*/
private void OpenContactPopup(ContactDto contact) private void OpenContactPopup(ContactDto contact)
{ {
/* /*
@ -332,10 +349,11 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_contactViewPopup.Show(); _contactViewPopup.Show();
} }
/// <summary>
/// Create request to update contact information /*
/// </summary> * Callback from contact overlay
/// <param name="contact"></param> * Create / Update contact depending on contactId present
*/
private async Task WriteContactCallback(ContactDto contact) private async Task WriteContactCallback(ContactDto contact)
{ {
if (_working) if (_working)
@ -369,10 +387,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_working = false; _working = false;
} }
/// <summary>
/// Delete contact information /*
/// </summary> * Delete contact callback
/// <param name="contactId"></param> */
private async Task DeleteContactCallback(string contactId) private async Task DeleteContactCallback(string contactId)
{ {
if (_working) if (_working)
@ -393,10 +411,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_working = false; _working = false;
} }
/// <summary>
/// Update CRM data /*
/// </summary> * Execute post requset - updating CRM data (non ERP related)
/// <returns>true/false</returns> */
private async Task PostCrmData() private async Task PostCrmData()
{ {
if (_working) if (_working)
@ -417,10 +435,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Toaster.ShowSuccess("Dine CRM data er opdateret."); Toaster.ShowSuccess("Dine CRM data er opdateret.");
} }
/// <summary>
/// Update ERP data /*
/// </summary> * Execute post requset - updating ERP data (notifying office)
/// <returns></returns> */
private async Task UpdateErpData() private async Task UpdateErpData()
{ {
if (_working) if (_working)
@ -439,12 +457,19 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Toaster.ShowSuccess("ERP data er opdateret. Notifikation til kontoret er sendt."); Toaster.ShowSuccess("ERP data er opdateret. Notifikation til kontoret er sendt.");
} }
/// <summary>
/// Update Vat Number /*
/// </summary> * Execute post requset - updating CVR/VAT/MOMS/ORG
/// <returns>true/false</returns> * many names for the same thing
* execpt moms is local - VAT is global
*/
private async Task UpdateVatNumber() private async Task UpdateVatNumber()
{ {
/*
* prevent duped actions
*/
if (_working)
return;
/* /*
* VAT format validation * VAT format validation
*/ */
@ -453,9 +478,6 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Toaster.ShowError($"Moms Nummer ugyldigt"); Toaster.ShowError($"Moms Nummer ugyldigt");
return; return;
} }
if (_working)
return;
_working = true; _working = true;
_vatEditDisabled = true; _vatEditDisabled = true;
Toaster.ShowInfo("Vent venligst ..."); Toaster.ShowInfo("Vent venligst ...");
@ -470,11 +492,11 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Toaster.ShowSuccess("Moms Nr. er opdateret."); Toaster.ShowSuccess("Moms Nr. er opdateret.");
} }
/// <summary>
/// Prepare vat address from InfoDrawer.Company model /*
/// </summary> * Prepare vat address
/// <param name="company"></param> * used to lookup danish company
/// <returns></returns> */
private static VatAddress PrepareVatAddress(CompanyDto company) private static VatAddress PrepareVatAddress(CompanyDto company)
{ {
var digits = "1234567890".ToCharArray(); var digits = "1234567890".ToCharArray();
@ -511,19 +533,18 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
} }
/// <summary> /*
/// Force enable activity * Force enable activioty - even if company has turned keys and shut down
/// </summary> */
private void ForceActivity() private void ForceActivity()
{ {
_enableActivity = _enableActivity == 0 ? 1 : 0; _enableActivity = _enableActivity == 0 ? 1 : 0;
} }
/// <summary>
/// Context field change event callback /*
/// </summary> * Input form field change event
/// <param name="sender"></param> */
/// <param name="e"></param>
private void HandleFieldChanged(object? sender, FieldChangedEventArgs? e) private void HandleFieldChanged(object? sender, FieldChangedEventArgs? e)
{ {
@ -544,11 +565,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
StateHasChanged(); StateHasChanged();
} }
/// <summary>
/// Context validation change event callback /*
/// </summary> * Input form validation process
/// <param name="sender"></param> */
/// <param name="e"></param>
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e) private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
{ {
_erpContext.OnFieldChanged -= HandleFieldChanged; _erpContext.OnFieldChanged -= HandleFieldChanged;
@ -560,9 +580,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_erpContext.OnValidationStateChanged += ValidationChanged!; _erpContext.OnValidationStateChanged += ValidationChanged!;
} }
/// <summary>
/// Dispose /*
/// </summary> * Required IDispose interface implementation
*/
public void Dispose() public void Dispose()
{ {
Interceptor.DisposeEvent(); Interceptor.DisposeEvent();

View file

@ -93,7 +93,7 @@ public partial class SystemUserCreatePage : IDisposable
/* /*
* Map form input to a model the backend expects * Map form input to a model the backend expects
*/ */
NewUserDto = Mapper.MapCreateUser(UserForm); NewUserDto = MapUtils.MapCreateUser(UserForm);
/* /*
* Send Post Request * Send Post Request
*/ */

View file

@ -34,7 +34,7 @@
<div class="content d-none d-print-block"> <div class="content d-none d-print-block">
@Body @Body
</div> </div>
<BlazoredToasts Position="ToastPosition.TopRight" Timeout="10" /> <BlazoredToasts Position="ToastPosition.TopRight" Timeout="5" MaxToastCount="3" ShowProgressBar="true" />
</main> </main>
</div> </div>

View file

@ -1,252 +0,0 @@
body {
font-size: 16px;
}
.draft-expires-msg {
font-size: 0.8em;
}
.busy-signal {
float: right;
z-index: 100;
position: relative;
top: 1px;
right: 10px;
}
.workDate {
font-variant: small-caps;
}
.action-link-element {
cursor: pointer;
}
.i-larger {
font-size: 1.3rem;
}
.btn.btn-edit {
color: #030303;
background-color: #a2a2ec;
}
html, body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
h1,h2:focus {
outline: none;
}
a, .btn-link {
color: #0071c1;
}
/*.btn-primary {*/
/* color: #fff;*/
/* background-color: #1b6ec2;*/
/* border-color: #1861ac;*/
/*}*/
.inno {
color: #ffaa00;
}
.inno-display {
display: block;
}
.inno-hidden {
display: none;
}
.content {
padding-top: 1.1rem;
}
.valid.modified:not([type=checkbox]) {
outline: 1px solid #26b050;
}
.invalid {
outline: 1px solid red;
}
.validation-message {
color: red;
}
/* begin state elements */
.state {
width: 16px;
height: 16px;
min-width: 16px;
min-height: 16px;
}
.the-good {
color: green;
}
.the-bad {
color: orange;
}
.the-ugly {
color: red;
}
.the-dead {
color: black;
}
.the-fast {
color: orange;
}
.the-draw {
color: mediumpurple;
}
.the-good-bg {
background-color: green;
}
.the-bad-bg {
background-color: orange;
}
.the-ugly-bg {
background-color: red;
}
.the-draw-bg {
background-color: mediumpurple;
}
.no-vat-bg {
background-color: lightskyblue;
}
.the-dead-bg {
background-color: black;
}
/* end state elements */
/* led elements */
.led-box {
height: 24px;
width: 24px;
margin: auto;
float: left;
}
.led-red {
margin: 5px;
width: 24px;
height: 24px;
background-color: #F00;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 12px;
-webkit-animation: blinkRed 0.5s infinite;
-moz-animation: blinkRed 0.5s infinite;
-ms-animation: blinkRed 0.5s infinite;
-o-animation: blinkRed 0.5s infinite;
animation: blinkRed 0.5s infinite;
animation-iteration-count: infinite;
}
@-webkit-keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
@-moz-keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
@-ms-keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
@-o-keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
@keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
.led-yellow {
margin: 0 auto;
width: 24px;
height: 24px;
background-color: #FF0;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 12px;
-webkit-animation: blinkYellow 1s infinite;
-moz-animation: blinkYellow 1s infinite;
-ms-animation: blinkYellow 1s infinite;
-o-animation: blinkYellow 1s infinite;
animation: blinkYellow 1s infinite;
}
@-webkit-keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
@-moz-keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
@-ms-keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
@-o-keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
@keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
.led-green {
margin: 0 auto;
width: 24px;
height: 24px;
background-color: #ABFF00;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #304701 0 -1px 9px, #89FF00 0 2px 12px;
}
.led-blue {
margin: 0 auto;
width: 24px;
height: 24px;
background-color: #24E0FF;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #006 0 -1px 9px, #3F8CFF 0 2px 14px;
}
/* end led elements */
.footer {
border-top: 2px solid orange;
position: relative;
margin-top: -150px;
height: 150px;
width: 100%;
clear: both;
padding-top: 20px;
}
footer.version {
display: block;
font-weight: bold;
padding: 0 10px 0 0;
}
.back-to-top {
position: fixed;
bottom: 25px;
right: 25px;
display: none;
}

View file

@ -14,7 +14,7 @@
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" > <link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" >
<link href="/bootstrap/css/bootstrap-icons.min.css" rel="stylesheet" > <link href="/bootstrap/css/bootstrap-icons.min.css" rel="stylesheet" >
<link href="/flag-icons/flag-icons.css" rel="stylesheet" > <link href="/flag-icons/flag-icons.css" rel="stylesheet" >
<link href="/css/20230607.css" rel="stylesheet" > <link href="/css/20230614.css" rel="stylesheet" >
<link href="/css/print.css" rel="stylesheet" > <link href="/css/print.css" rel="stylesheet" >
<link href="/Wonky.Client.styles.css" rel="stylesheet" > <link href="/Wonky.Client.styles.css" rel="stylesheet" >
<link href="/_content/Blazored.Toast/blazored-toast.min.css" rel="stylesheet" > <link href="/_content/Blazored.Toast/blazored-toast.min.css" rel="stylesheet" >