From b9c2418532a7e0f3a79bf12e5c9a22341d3fae95 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 1 Mar 2024 19:07:33 +0100 Subject: [PATCH] Update SMART --- GPW.CORE.SMART/Components/DtCard.razor | 36 +++-- GPW.CORE.SMART/Components/DtCard.razor.css | 8 +- GPW.CORE.SMART/Components/DtCard.razor.less | 8 +- .../Components/DtCard.razor.min.css | 2 +- GPW.CORE.SMART/GPW.CORE.SMART.csproj | 2 +- GPW.CORE.SMART/Pages/_Layout.cshtml | 11 +- GPW.CORE.SMART/wwwroot/lib/boot.js | 149 ++++++++++++++++++ Resources/ChangeLog.html | 2 +- Resources/VersNum.txt | 2 +- Resources/manifest.xml | 4 +- 10 files changed, 197 insertions(+), 27 deletions(-) create mode 100644 GPW.CORE.SMART/wwwroot/lib/boot.js diff --git a/GPW.CORE.SMART/Components/DtCard.razor b/GPW.CORE.SMART/Components/DtCard.razor index 1d78bc2..43b223e 100644 --- a/GPW.CORE.SMART/Components/DtCard.razor +++ b/GPW.CORE.SMART/Components/DtCard.razor @@ -1,8 +1,13 @@ @if (IsRicTimb) { -
-
- @($"{oraRichiesta:dddd dd MMMM}") +
+
+
+ @($"{oraRichiesta:dddd}") +
+
+ @($"{oraRichiesta:dd MMMM}") +
@@ -13,10 +18,14 @@ else { @if (!isCompactMode) { - -
-
- @($"{dtCurr:dddd dd MMMM}") +
+
+
+ @($"{dtCurr:dddd}") +
+
+ @($"{dtCurr:dd MMMM}") +
@@ -33,11 +42,16 @@ else } else { -
+
- @($"{dtCurr:dddd}") - @($"{dtCurr:dd MMMM}") - +
+
+ @($"{dtCurr:dddd}") +
+
+ @($"{dtCurr:dd MMMM}") +
+
diff --git a/GPW.CORE.SMART/Components/DtCard.razor.css b/GPW.CORE.SMART/Components/DtCard.razor.css index d47ac82..5d54eda 100644 --- a/GPW.CORE.SMART/Components/DtCard.razor.css +++ b/GPW.CORE.SMART/Components/DtCard.razor.css @@ -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; diff --git a/GPW.CORE.SMART/Components/DtCard.razor.less b/GPW.CORE.SMART/Components/DtCard.razor.less index af086d1..2d1f4d8 100644 --- a/GPW.CORE.SMART/Components/DtCard.razor.less +++ b/GPW.CORE.SMART/Components/DtCard.razor.less @@ -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; diff --git a/GPW.CORE.SMART/Components/DtCard.razor.min.css b/GPW.CORE.SMART/Components/DtCard.razor.min.css index 4ab9494..eccbd16 100644 --- a/GPW.CORE.SMART/Components/DtCard.razor.min.css +++ b/GPW.CORE.SMART/Components/DtCard.razor.min.css @@ -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;}} \ No newline at end of file +.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;}} \ No newline at end of file diff --git a/GPW.CORE.SMART/GPW.CORE.SMART.csproj b/GPW.CORE.SMART/GPW.CORE.SMART.csproj index 1f1d3fb..8ddf13e 100644 --- a/GPW.CORE.SMART/GPW.CORE.SMART.csproj +++ b/GPW.CORE.SMART/GPW.CORE.SMART.csproj @@ -3,7 +3,7 @@ net6.0 enable - 3.0.2402.2715 + 3.0.2403.0119 enable www.egalware.com GPW Smart UI diff --git a/GPW.CORE.SMART/Pages/_Layout.cshtml b/GPW.CORE.SMART/Pages/_Layout.cshtml index 3247b1f..17a3b95 100644 --- a/GPW.CORE.SMART/Pages/_Layout.cshtml +++ b/GPW.CORE.SMART/Pages/_Layout.cshtml @@ -40,6 +40,10 @@ + @* Modifica da https://github.com/dotnet/aspnetcore/issues/32113 *@ + + + @*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)*@ @* *@ - + *@ + + + @* Versione alternativa da testare... https://github.com/dotnet/aspnetcore/issues/10325 *@ diff --git a/GPW.CORE.SMART/wwwroot/lib/boot.js b/GPW.CORE.SMART/wwwroot/lib/boot.js new file mode 100644 index 0000000..88acaca --- /dev/null +++ b/GPW.CORE.SMART/wwwroot/lib/boot.js @@ -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 + } + }); +})(); \ No newline at end of file diff --git a/Resources/ChangeLog.html b/Resources/ChangeLog.html index e6dd827..9fb36e4 100644 --- a/Resources/ChangeLog.html +++ b/Resources/ChangeLog.html @@ -1,6 +1,6 @@ GPW - Gestione Presenze Web -

Versione: 3.0.2402.2816

+

Versione: 3.0.2403.0119


Note di rilascio:
  • diff --git a/Resources/VersNum.txt b/Resources/VersNum.txt index 204b3cd..6363fc4 100644 --- a/Resources/VersNum.txt +++ b/Resources/VersNum.txt @@ -1 +1 @@ -3.0.2402.2816 +3.0.2403.0119 diff --git a/Resources/manifest.xml b/Resources/manifest.xml index 5d988df..93a7d0b 100644 --- a/Resources/manifest.xml +++ b/Resources/manifest.xml @@ -1,7 +1,7 @@ - 3.0.2402.2816 - http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.UI.zip + 3.0.2403.0119 + http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.Smart.zip http://nexus.steamware.net/repository/SWS/GPW/stable/ChangeLog.html false