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