Merge branch 'release/TestReload_01'

This commit is contained in:
Samuele Locatelli
2024-03-01 19:08:07 +01:00
10 changed files with 197 additions and 27 deletions
+25 -11
View File
@@ -1,8 +1,13 @@
@if (IsRicTimb)
{
<div class="cardContainerMancTimb">
<div class="data">
<span>@($"{oraRichiesta:dddd dd MMMM}")</span>
<div class="cardContainerMancTimb py-2 px-3">
<div class="data d-flex justify-content-between">
<div class="px-0">
<span>@($"{oraRichiesta:dddd}")</span>
</div>
<div class="px-0">
<span>@($"{oraRichiesta:dd MMMM}")</span>
</div>
</div>
<div class="oraRichiesta">
<input @bind="oraRichiesta" type="time" step="300" />
@@ -13,10 +18,14 @@ else
{
@if (!isCompactMode)
{
<div class="cardContainer @cardCss">
<div class="data">
<span>@($"{dtCurr:dddd dd MMMM}")</span>
<div class="cardContainer @cardCss py-2 px-3">
<div class="data d-flex justify-content-between">
<div class="px-0">
<span>@($"{dtCurr:dddd}")</span>
</div>
<div class="px-0">
<span>@($"{dtCurr:dd MMMM}")</span>
</div>
</div>
<div class="ora">
<div class="d-flex justify-content-center">
@@ -33,11 +42,16 @@ else
}
else
{
<div class="cardContainerCompact @cardCss">
<div class="cardContainerCompact @cardCss py-1 px-3">
<div class="dataComp">
<span>@($"{dtCurr:dddd}")</span>
<span>@($"{dtCurr:dd MMMM}")</span>
<div class="data d-flex justify-content-between">
<div class="px-0">
<span>@($"{dtCurr:dddd}")</span>
</div>
<div class="px-0">
<span>@($"{dtCurr:dd MMMM}")</span>
</div>
</div>
<div class="ora">
<div class="d-flex justify-content-center">
<div>
+4 -4
View File
@@ -21,8 +21,8 @@
}
.cardContainerCompact .dataComp {
font-weight: bold;
padding-top: 1.5rem;
padding-left: 1.5rem;
/*padding-top: 1.5rem;*/
/*padding-left: 1.5rem;*/
position: relative;
text-transform: uppercase;
font-size: 1rem;
@@ -49,8 +49,8 @@
}
.data {
font-weight: bold;
padding-top: 1.5rem;
padding-left: 1.5rem;
/*padding-top: 1.5rem;*/
/*padding-left: 1.5rem;*/
position: relative;
font-size: 1.25rem;
text-transform: uppercase;
+4 -4
View File
@@ -19,8 +19,8 @@
.cardContainerCompact .dataComp {
font-weight: bold;
padding-top: 1.5rem;
padding-left: 1.5rem;
/*padding-top: 1.5rem;*/
/*padding-left: 1.5rem;*/
position: relative;
text-transform: uppercase;
font-size: 1rem;
@@ -47,8 +47,8 @@
.data {
font-weight: bold;
padding-top: 1.5rem;
padding-left: 1.5rem;
/*padding-top: 1.5rem;*/
/*padding-left: 1.5rem;*/
position: relative;
font-size: 1.25rem;
text-transform: uppercase;
+1 -1
View File
@@ -1 +1 @@
.cardContainerAll{border-radius:12px;width:100%;box-shadow:0 3px 4px rgba(0,0,0,.7);color:#fff;}.cardContainer{border-radius:12px;width:100%;box-shadow:0 3px 4px rgba(0,0,0,.7);color:#fff;min-height:8.5rem;padding-bottom:1rem;}.cardContainerCompact{border-radius:12px;width:100%;box-shadow:0 3px 4px rgba(0,0,0,.7);color:#fff;min-height:4rem;}.cardContainerCompact .dataComp{font-weight:bold;padding-top:1.5rem;padding-left:1.5rem;position:relative;text-transform:uppercase;font-size:1rem;}.cardContainerCompact .ora{width:100%;font-weight:bold;position:relative;font-size:3.5rem;text-align:center;font-size:2.8rem;}.cardContainerMancTimb{padding-bottom:1rem;min-height:8.5rem;border-radius:12px;width:100%;box-shadow:0 3px 4px rgba(0,0,0,.7);color:#fff;background-color:#2980b9;}.titolo{font-size:1rem;}.data{font-weight:bold;padding-top:1.5rem;padding-left:1.5rem;position:relative;font-size:1.25rem;text-transform:uppercase;display:flex;justify-content:space-between;}.ora{width:100%;font-weight:bold;position:relative;font-size:3.5rem;text-align:center;}.oraRichiesta{width:100%;font-weight:bold;position:relative;font-size:2rem;text-align:center;padding-top:1.5rem;}.oraRichiesta input{border-radius:.5rem;border:0;padding:.25rem;}.defaultCard{background-color:rgba(0,128,255,.8);}.cardEntrata{background-color:#9b59b6;}.cardUscita{background-color:#4caf50;}.txtSec{font-weight:normal;font-size:2rem;}.pulse-warning{box-shadow:0 0 20px 5px rgba(0,128,255,.8);animation:pulse-warning 2.5s infinite;}@-webkit-keyframes pulse-warning{0%{-webkit-box-shadow:0 0 20px 5px rgba(0,128,255,.8);color:#fff;}70%{-webkit-box-shadow:0 0 20px 5px rgba(0,128,255,0);}100%{-webkit-box-shadow:0 0 20px 5px rgba(0,128,255,.8);color:#fff;}}@keyframes pulse-warning{0%{-moz-box-shadow:0 0 20px 5px rgba(0,128,255,.8);box-shadow:0 0 20px 5px rgba(0,128,255,.8);color:#fff;}70%{-moz-box-shadow:0 0 20px 5px rgba(0,128,255,0);box-shadow:0 0 20px 5px rgba(0,128,255,0);}100%{-moz-box-shadow:0 0 20px 5px rgba(255,170,0,.8);box-shadow:0 0 20px 5px rgba(0,128,255,.8);color:#fff;}}
.cardContainerAll{border-radius:12px;width:100%;box-shadow:0 3px 4px rgba(0,0,0,.7);color:#fff;}.cardContainer{border-radius:12px;width:100%;box-shadow:0 3px 4px rgba(0,0,0,.7);color:#fff;min-height:8.5rem;padding-bottom:1rem;}.cardContainerCompact{border-radius:12px;width:100%;box-shadow:0 3px 4px rgba(0,0,0,.7);color:#fff;min-height:4rem;}.cardContainerCompact .dataComp{font-weight:bold;position:relative;text-transform:uppercase;font-size:1rem;}.cardContainerCompact .ora{width:100%;font-weight:bold;position:relative;font-size:3.5rem;text-align:center;font-size:2.8rem;}.cardContainerMancTimb{padding-bottom:1rem;min-height:8.5rem;border-radius:12px;width:100%;box-shadow:0 3px 4px rgba(0,0,0,.7);color:#fff;background-color:#2980b9;}.titolo{font-size:1rem;}.data{font-weight:bold;position:relative;font-size:1.25rem;text-transform:uppercase;display:flex;justify-content:space-between;}.ora{width:100%;font-weight:bold;position:relative;font-size:3.5rem;text-align:center;}.oraRichiesta{width:100%;font-weight:bold;position:relative;font-size:2rem;text-align:center;padding-top:1.5rem;}.oraRichiesta input{border-radius:.5rem;border:0;padding:.25rem;}.defaultCard{background-color:rgba(0,128,255,.8);}.cardEntrata{background-color:#9b59b6;}.cardUscita{background-color:#4caf50;}.txtSec{font-weight:normal;font-size:2rem;}.pulse-warning{box-shadow:0 0 20px 5px rgba(0,128,255,.8);animation:pulse-warning 2.5s infinite;}@-webkit-keyframes pulse-warning{0%{-webkit-box-shadow:0 0 20px 5px rgba(0,128,255,.8);color:#fff;}70%{-webkit-box-shadow:0 0 20px 5px rgba(0,128,255,0);}100%{-webkit-box-shadow:0 0 20px 5px rgba(0,128,255,.8);color:#fff;}}@keyframes pulse-warning{0%{-moz-box-shadow:0 0 20px 5px rgba(0,128,255,.8);box-shadow:0 0 20px 5px rgba(0,128,255,.8);color:#fff;}70%{-moz-box-shadow:0 0 20px 5px rgba(0,128,255,0);box-shadow:0 0 20px 5px rgba(0,128,255,0);}100%{-moz-box-shadow:0 0 20px 5px rgba(255,170,0,.8);box-shadow:0 0 20px 5px rgba(0,128,255,.8);color:#fff;}}
+1 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>3.0.2402.2715</Version>
<Version>3.0.2403.0119</Version>
<ImplicitUsings>enable</ImplicitUsings>
<PackageProjectUrl>www.egalware.com</PackageProjectUrl>
<Description>GPW Smart UI</Description>
+9 -2
View File
@@ -40,6 +40,10 @@
<script src="_framework/blazor.server.js" autostart="false"></script>
@* Modifica da https://github.com/dotnet/aspnetcore/issues/32113 *@
<script src="lib/boot.js"></script>
@*Gestione autoriconnessione: https://github.com/dotnet/aspnetcore/issues/38305 (vedere anche https://docs.microsoft.com/it-it/aspnet/core/blazor/fundamentals/signalr?view=aspnetcore-6.0#modify-the-reconnection-handler-blazor-server)*@
@* <script>
Blazor.start({
@@ -66,7 +70,7 @@
});
});
</script> *@
<script>
@* <script>
Blazor.start({
reconnectionOptions: {
maxRetries: 3000,
@@ -81,7 +85,10 @@
document.location.reload();
}
});
</script>
</script> *@
@* Versione alternativa da testare... https://github.com/dotnet/aspnetcore/issues/10325 *@
<script type="text/javascript" src="lib/font-awesome/js/all.min.js"></script>
<script type="text/javascript" src="lib/Chart.js/chart.js"></script>
+149
View File
@@ -0,0 +1,149 @@
(() => {
class DefaultReconnectionHandler {
_currentReconnectionProcess = null
constructor(overrideDisplay) {
this._reconnectionDisplay = overrideDisplay
this._reconnectCallback = Blazor.reconnect;
}
onConnectionDown(options, _error) {
if (!this._reconnectionDisplay) {
const modal = document.getElementById(options.dialogId)
this._reconnectionDisplay = new UserSpecifiedDisplay(modal, options.maxRetries, document);
}
if (!this._currentReconnectionProcess) {
this._currentReconnectionProcess = new ReconnectionProcess(
options,
this._reconnectCallback,
this._reconnectionDisplay
)
}
}
onConnectionUp() {
if (this._currentReconnectionProcess) {
this._currentReconnectionProcess.dispose()
this._currentReconnectionProcess = null
}
}
}
class ReconnectionProcess {
isDisposed = false
constructor(options, reconnectCallback, display) {
this.reconnectCallback = reconnectCallback
this.reconnectDisplay = display
this.reconnectDisplay.show()
this.attemptPeriodicReconnection(options)
}
dispose() {
this.isDisposed = true
this.reconnectDisplay.hide()
}
async attemptPeriodicReconnection(options) {
for (let i = 0; i < options.maxRetries; i++) {
this.reconnectDisplay.update(i + 1)
if (this.isDisposed) {
break
}
try {
const result = await Blazor.reconnect()
if (!result) {
// If the server responded and refused to reconnect, reload the page
location.reload();
return;
}
return;
} catch (err) {
}
await this.delay(options.retryIntervalMilliseconds)
}
location.reload()
}
delay(durationMilliseconds) {
return new Promise(resolve => setTimeout(resolve, durationMilliseconds))
}
}
class UserSpecifiedDisplay {
static ShowClassName = "components-reconnect-show"
static HideClassName = "components-reconnect-hide"
static FailedClassName = "components-reconnect-failed"
static RejectedClassName = "components-reconnect-rejected"
static MaxRetriesId = "components-reconnect-max-retries"
static CurrentAttemptId = "components-reconnect-current-attempt"
constructor(dialog, maxRetries, document) {
this.dialog = dialog
this.maxRetries = maxRetries
this.document = document
this.document = document
const maxRetriesElement = this.document.getElementById(
UserSpecifiedDisplay.MaxRetriesId
)
if (maxRetriesElement) {
maxRetriesElement.innerText = this.maxRetries.toString()
}
}
show() {
this.removeClasses()
this.dialog.classList.add(UserSpecifiedDisplay.ShowClassName)
}
update(currentAttempt) {
const currentAttemptElement = this.document.getElementById(
UserSpecifiedDisplay.CurrentAttemptId
)
if (currentAttemptElement) {
currentAttemptElement.innerText = currentAttempt.toString()
}
}
hide() {
this.removeClasses()
this.dialog.classList.add(UserSpecifiedDisplay.HideClassName)
}
failed() {
this.removeClasses()
this.dialog.classList.add(UserSpecifiedDisplay.FailedClassName)
}
rejected() {
this.removeClasses()
this.dialog.classList.add(UserSpecifiedDisplay.RejectedClassName)
}
removeClasses() {
this.dialog.classList.remove(
UserSpecifiedDisplay.ShowClassName,
UserSpecifiedDisplay.HideClassName,
UserSpecifiedDisplay.FailedClassName,
UserSpecifiedDisplay.RejectedClassName
)
}
}
Blazor.start({
reconnectionHandler: new DefaultReconnectionHandler(),
reconnectionOptions: {
maxRetries: 6,
retryIntervalMilliseconds: 3000
}
});
})();
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>GPW - Gestione Presenze Web</i>
<h4>Versione: 3.0.2402.2816</h4>
<h4>Versione: 3.0.2403.0119</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
3.0.2402.2816
3.0.2403.0119
+2 -2
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>3.0.2402.2816</version>
<url>http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.UI.zip</url>
<version>3.0.2403.0119</version>
<url>http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.Smart.zip</url>
<changelog>http://nexus.steamware.net/repository/SWS/GPW/stable/ChangeLog.html</changelog>
<mandatory>false</mandatory>
</item>