Update MON

This commit is contained in:
Samuele Locatelli
2022-04-13 10:58:13 +02:00
parent f28f7ee815
commit 519c8d2130
19 changed files with 589 additions and 489 deletions
+7 -7
View File
@@ -15,7 +15,7 @@ namespace MP.Data.DatabaseModels
public string CodArticolo { get; set; }
public string Disegno { get; set; }
public int? NumPezzi { get; set; }
public decimal? Tcassegnato { get; set; }
public decimal? TCAssegnato { get; set; }
public DateTime? DataInizioOdl { get; set; }
public string Semaforo { get; set; }
public int? IdxStato { get; set; }
@@ -26,11 +26,11 @@ namespace MP.Data.DatabaseModels
public decimal? TempoOn { get; set; }
public decimal? TempoAuto { get; set; }
public decimal? TempoRun { get; set; }
public decimal? Tcmedio { get; set; }
public decimal? Tclav { get; set; }
public decimal? Tceff { get; set; }
public decimal? TcmedioRt { get; set; }
public decimal? TclavRt { get; set; }
public decimal? TceffRt { get; set; }
public decimal? TCMedio { get; set; }
public decimal? TCLav { get; set; }
public decimal? TCEff { get; set; }
public decimal? TCMedioRt { get; set; }
public decimal? TCLavRt { get; set; }
public decimal? TCEffRt { get; set; }
}
}
+7 -7
View File
@@ -153,37 +153,37 @@ namespace MP.Data
.HasMaxLength(50)
.HasDefaultValueSql("('')");
entity.Property(e => e.Tcassegnato)
entity.Property(e => e.TCAssegnato)
.HasColumnType("decimal(18, 8)")
.HasColumnName("TCAssegnato")
.HasDefaultValueSql("((1))");
entity.Property(e => e.Tceff)
entity.Property(e => e.TCEff)
.HasColumnType("decimal(18, 8)")
.HasColumnName("TCEff")
.HasDefaultValueSql("((0))");
entity.Property(e => e.TceffRt)
entity.Property(e => e.TCEffRt)
.HasColumnType("decimal(18, 8)")
.HasColumnName("TCEffRT")
.HasDefaultValueSql("((0))");
entity.Property(e => e.Tclav)
entity.Property(e => e.TCLav)
.HasColumnType("decimal(18, 8)")
.HasColumnName("TCLav")
.HasDefaultValueSql("((0))");
entity.Property(e => e.TclavRt)
entity.Property(e => e.TCLavRt)
.HasColumnType("decimal(18, 8)")
.HasColumnName("TCLavRT")
.HasDefaultValueSql("((0))");
entity.Property(e => e.Tcmedio)
entity.Property(e => e.TCMedio)
.HasColumnType("decimal(18, 8)")
.HasColumnName("TCMedio")
.HasDefaultValueSql("((0))");
entity.Property(e => e.TcmedioRt)
entity.Property(e => e.TCMedioRt)
.HasColumnType("decimal(18, 8)")
.HasColumnName("TCMedioRT")
.HasDefaultValueSql("((0))");
-13
View File
@@ -1,13 +0,0 @@
namespace MP.Mon.Data
{
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
}
-20
View File
@@ -1,20 +0,0 @@
namespace MP.Mon.Data
{
public class WeatherForecastService
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate)
{
return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = startDate.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
}).ToArray());
}
}
}
+8
View File
@@ -6,6 +6,14 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Content Remove="compilerconfig.json" />
</ItemGroup>
<ItemGroup>
<None Include="compilerconfig.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog" Version="4.7.15" />
-18
View File
@@ -1,18 +0,0 @@
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
-48
View File
@@ -1,48 +0,0 @@
@page "/fetchdata"
<PageTitle>Weather forecast</PageTitle>
@using MP.Mon.Data
@inject WeatherForecastService ForecastService
<h1>Weather forecast</h1>
<p>This component demonstrates fetching data from a service.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
}
}
+62 -8
View File
@@ -6,12 +6,7 @@
<div class="row">
<div class="col-12">
<h1>Hello, world!</h1>
Welcome to your new app.
</div>
<div class="row statusMap mx-1 my-1">
@if (ListMSE == null)
{
<div class="col-12">
@@ -28,11 +23,70 @@
}
else
{
int currIdx = 0;
foreach (var macchina in ListMSE)
{
<div class="col">
<b>@macchina.CodMacchina</b>
<div class="col px-0 pe-1">
<div class="@cssStatus(macchina.Semaforo) p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">@macchina.Nome</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pe-0">Art.</div>
<div class="col-8 ps-0 text-right ui-art">@macchina.CodArticolo</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>@macchina.DescrizioneStato</b></div>
<div class="col-3 ps-0 text-right">@($"{macchina.Durata:0.00}")</div>
@*<div class="col-6 pe-0">OEE</div>
<div class="col-6 ps-0 text-right">xx%</div>*@
<div class="col-4 pe-0">T.Ciclo</div>
<div class="col-4 ps-0 text-right">std: @getMinSec(macchina.TCAssegnato)</div>
<div class="col-4 ps-0 text-right">act: @getMinSec(macchina.TCLavRt)</div>
<div class="col-6 pe-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 ps-0 text-right">@macchina.PezziProd / @macchina.NumPezzi</div>
</div>
</div>
<div class="@cssComStatus(macchina.Semaforo, macchina.LastUpdate) p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
@if (showComErr(macchina.LastUpdate))
{
<div class="col text-warning">
<b>C.101</b>
</div>
}
<div class="col text-end">
@macchina.LastUpdate
</div>
</div>
</div>
</div>
</div>
</div>
</div>
currIdx++;
if (currIdx >= maxCol)
{
@*</div>
<div class="row statusMap mx-1 my-1">*@
currIdx = 0;
@((MarkupString)"</div><div class=\"row statusMap mx-1 my-1\">")
;
}
}
// controllo se devo "chiudere riga...
int currNum = (currIdx % maxCol);
while (currNum < (maxCol))
{
@((MarkupString)"<div class=\"col px-0\">&nbsp;</div>")
;
currNum++;
}
}
</div>
+56
View File
@@ -24,12 +24,28 @@ namespace MP.Mon.Pages
{
protected List<MappaStatoExpl>? ListMSE = null;
protected int keepAliveMin = 5; // leggere da conf?
protected int maxCol = 6; // leggere da conf?
protected bool doAnimate = true; // leggere da conf?
//protected string baseCss = "sem";
//protected string baseCss = "semBlink";
protected string baseCss = "";
protected override async Task OnInitializedAsync()
{
setupConf();
await reloadData();
//return base.OnInitializedAsync();
}
private void setupConf()
{
baseCss = doAnimate ? "semBlink" : "sem";
}
[Inject]
protected MpDataService MMDataService { get; set; }
@@ -38,5 +54,45 @@ namespace MP.Mon.Pages
ListMSE = await MMDataService.MseGetAll();
}
private string cssStatus(string codSemaforo)
{
return $"{baseCss}{codSemaforo.Substring(1,2)}";
}
private string cssComStatus(string semaforo, DateTime? lastUpdateN)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
string answ = cssStatus(semaforo);
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * 60 / 2))
{
answ = $"{baseCss}Ro";
}
return answ;
}
private bool showComErr(DateTime? lastUpdateN)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
bool answ = false;
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * 60 / 2))
{
answ = true;
}
return answ;
}
private string getMinSec(decimal? currTimeMin)
{
string answ = "nd";
TimeSpan tSpan = new TimeSpan(0);
try
{
tSpan = TimeSpan.FromMinutes((double)currTimeMin);
answ = tSpan.ToString("mm:ss");
}
catch
{ }
return answ;
}
}
}
-2
View File
@@ -29,8 +29,6 @@ builder.Services.AddSingleton<IConnectionMultiplexer>(redisMultiplexer);
builder.Services.AddSingleton<MpDataService>();
//builder.Services.AddScoped<MessageService>();
builder.Services.AddSingleton<WeatherForecastService>();
var app = builder.Build();
// Configure the HTTP request pipeline.
+13 -7
View File
@@ -3,16 +3,22 @@
<PageTitle>MP.Mon</PageTitle>
<div class="page">
<div class="sidebar">
<NavMenu />
</div>
<main>
<div class="top-row px-4">
<a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
<div class="top-row px-4 justify-content-between">
<div class="px-2">
<img class="logoImg img-fluid" src="images/LogoMapo.png" width="80" />
<span class="mainHead p-3"><b><span style="color: #DEDEDE;">MP MON</span>itor</b></span>
</div>
<div class="px-2">
<span id="text-white text-right">
@($"{DateTime.Now:dddd dd MMMM yyyy, HH:mm}")
</span>
<img class="logoImg img-fluid" src="images/logoCliente.png" width="32" />
EgalWare
</div>
</div>
<article class="content px-4">
<article class="content p-0">
@Body
</article>
+10 -10
View File
@@ -8,19 +8,19 @@ main {
flex: 1;
}
.sidebar,.sidebarSmall {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 20%, #3aa6ff 90%);
}
.top-row {
background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5;
justify-content: flex-end;
height: 3.5rem;
background-color: #000000;
/*border-bottom: 1px solid #696969;*/
color: #696969;
font-size: 1.4em;
height: 3rem;
display: flex;
align-items: center;
/*justify-content: space-evenly;
display: flex;*/
justify-content: space-evenly;
}
.mainHead{
font-size: 1.7rem;
}
.top-row ::deep a,
+10
View File
@@ -0,0 +1,10 @@
[
{
"outputFile": "wwwroot/css/site.css",
"inputFile": "wwwroot/css/site.less"
},
{
"outputFile": "wwwroot/css/fonts.css",
"inputFile": "wwwroot/css/fonts.less"
}
]
+71
View File
@@ -0,0 +1,71 @@
{
"compilers": {
"less": {
"autoPrefix": "",
"cssComb": "none",
"ieCompat": true,
"math": null,
"strictMath": false,
"strictUnits": false,
"relativeUrls": true,
"rootPath": "",
"sourceMapRoot": "",
"sourceMapBasePath": "",
"sourceMap": false
},
"sass": {
"autoPrefix": "",
"loadPaths": "",
"style": "expanded",
"relativeUrls": true,
"sourceMap": false
},
"nodesass": {
"autoPrefix": "",
"includePath": "",
"indentType": "space",
"indentWidth": 2,
"outputStyle": "nested",
"precision": 5,
"relativeUrls": true,
"sourceMapRoot": "",
"lineFeed": "",
"sourceMap": false
},
"stylus": {
"sourceMap": false
},
"babel": {
"sourceMap": false
},
"coffeescript": {
"bare": false,
"runtimeMode": "node",
"sourceMap": false
},
"handlebars": {
"root": "",
"noBOM": false,
"name": "",
"namespace": "",
"knownHelpersOnly": false,
"forcePartial": false,
"knownHelpers": [],
"commonjs": "",
"amd": false,
"sourceMap": false
}
},
"minifiers": {
"css": {
"enabled": true,
"termSemicolons": true,
"gzip": false
},
"javascript": {
"enabled": true,
"termSemicolons": true,
"gzip": false
}
}
}
+161 -181
View File
@@ -15,10 +15,17 @@ display-4 {
font-family: 'Lato', sans-serif;
}
html,
body {
height: 100%;
}
html,
body {
/*font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;*/
font-family: 'Roboto Condensed', sans-serif;
line-height: 1.3;
background-image: linear-gradient(180deg, #010816 20%, #3aa6ff 90%);
background-size: auto 100%;
background-repeat: no-repeat;
}
h1:focus {
outline: none;
@@ -53,89 +60,6 @@ a,
.striked {
text-decoration: line-through;
}
/* Gestione dropdown menu x week planner */
.dropdown {
position: relative;
display: inline-block;
}
.dropdown:hover .dropdown-content,
.dropdown:hover .dropdown-content-top,
.dropdown:hover .dropdown-content-left,
.dropdown:hover .dropdown-content-top-left {
display: block;
}
.dropdown-content {
display: none;
position: absolute;
left: -10em;
min-width: 8em;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
}
.dropdown-content .a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content .a:hover {
background-color: #ddd;
}
.dropdown-content-top {
display: none;
position: absolute;
min-width: 8em;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
top: -13.5em;
left: -10em;
}
.dropdown-content-top .a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content-top .a:hover {
background-color: #ddd;
}
.dropdown-content-left {
display: none;
position: absolute;
left: -10em;
min-width: 8em;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
left: -24em;
}
.dropdown-content-left .a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content-left .a:hover {
background-color: #ddd;
}
.dropdown-content-top-left {
display: none;
position: absolute;
left: -10em;
min-width: 8em;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
top: -13.5em;
left: -24em;
}
.dropdown-content-top-left .a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content-top-left .a:hover {
background-color: #ddd;
}
.textTrim {
white-space: nowrap;
overflow: hidden;
@@ -216,109 +140,165 @@ a,
.blazor-error-boundary::after {
content: "An error has occurred.";
}
/*------------------------------------------------------------------
[ Shortcuts / .shortcuts ]
*/
.shortcuts {
text-align: center;
/* Gestione specifica oggetti MON*/
/* MAIN: gestione layout dinamico mappa... */
.fontSmall {
font-size: 0.75em;
}
.shortcuts .shortcut-icon {
font-size: 2rem;
.fontSmaller {
font-size: 0.6em;
}
.shortcuts .shortcut {
min-width: 9rem;
min-height: 5rem;
display: inline-block;
padding: 2rem/3 0;
margin: 0 2px 1em;
vertical-align: top;
text-decoration: none;
background: #F3F3F3;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee));
background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%);
background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%);
background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 1rem/2;
.statusMap {
background: #222;
}
.shortcuts .shortcut-sm {
min-width: 4.5rem;
min-height: 3rem;
display: inline-block;
padding: 1rem/4 0;
margin: 0 2px 1em;
vertical-align: top;
text-decoration: none;
background: #F3F3F3;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee));
background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%);
background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%);
background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 1rem/2;
}
.shortcuts .shortcut .shortcut-icon {
width: 100%;
margin-top: 0;
margin-bottom: 0;
font-size: 2rem;
color: #333;
}
.shortcuts .shortcut-sm .shortcut-icon {
width: 100%;
margin-top: 0;
margin-bottom: 0;
font-size: 2rem;
color: #333;
}
.shortcuts .shortcut:hover {
background: #E8E8E8;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1));
background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%);
background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%);
background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0);
}
.shortcuts .shortcut-sm:hover {
background: #E8E8E8;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1));
background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%);
background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%);
background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0);
}
.shortcuts .shortcut:active {
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.shortcuts .shortcut-sm:active {
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.shortcuts .shortcut:hover .shortcut-icon {
color: #C93;
}
.shortcuts .shortcut-sm:hover .shortcut-icon {
color: #666;
}
.shortcuts .shortcut-label {
display: block;
margin-top: 0.75em;
.statusMap .ui-title,
.statusMap .ui-li-aside {
font-weight: 400;
color: #666;
text-transform: uppercase;
font-size: 2.5em;
line-height: 1.1em;
color: #DEDEDE;
text-shadow: 2px 2px 4px #000;
text-align: center;
background: linear-gradient(270deg, rgba(20, 20, 20, 0.7), rgba(100, 100, 100, 0.7), rgba(20, 20, 20, 0.7));
}
@media (max-width: 640px) {
.shortcuts .shortcut {
min-width: 8rem;
min-height: 4rem;
.statusMap .ui-footer {
color: #CDCDCD;
background: linear-gradient(270deg, rgba(10, 10, 10, 0.7), rgba(80, 80, 80, 0.7), rgba(10, 10, 10, 0.7));
}
/* END: gestione layout dinamico mappa... */
/* area semafori*/
.semBlinkVe,
.semFixVe,
.semFixVe_b,
.semVe,
.semVe_b {
background: #009036;
background: rgba(0, 255, 80, 0.6);
color: #FFFFAA;
}
.semBlinkGr,
.semFixGr,
.semFixGr_b,
.semGr,
.semGr_b {
background-color: #bcbcbc;
background: rgba(180, 180, 180, 0.6);
}
.semGi {
text-align: left;
background: #8a8d27;
background: rgba(230, 210, 0, 0.6);
padding: 0px 4px 0px 4px;
color: #000;
}
.semGi_b,
.semFixGi,
.semFixGi_b {
text-align: left;
background: #f9ff18;
background: rgba(255, 255, 0, 0.8);
padding: 0px 4px 0px 4px;
color: #333;
}
.semBl {
text-align: left;
background: #000E7A;
background: rgba(0, 5, 200, 0.6);
padding: 0px 4px 0px 4px;
color: #959500;
}
.semBl_b,
.semFixBl,
.semFixBl_b {
text-align: left;
background: #243FFF;
background: rgba(60, 80, 255, 0.8);
padding: 0px 4px 0px 4px;
color: #ffff32;
}
.semRo {
text-align: left;
background-color: #7a000e;
background: rgba(200, 0, 5, 0.6);
padding: 0px 4px 0px 4px;
color: #959500;
}
.semRo_b,
.semFixRo,
.semFixRo_b {
text-align: left;
background-color: #ff243f;
background: rgba(255, 60, 80, 0.8);
padding: 0px 4px 0px 4px;
color: #ffff32;
}
/* semafori con animazione blinking */
.no-cpu {
-moz-transform: translateZ(0);
-o-transform: translateZ(0);
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
}
@-webkit-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
body {
font-size: 0.8em;
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@-moz-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@-o-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
.semBlinkGi {
background: linear-gradient(270deg, #8a8d27, #f9ff18);
background-size: 400% 400%;
-webkit-animation: blinkBack 2s ease infinite;
-moz-animation: blinkBack 2s ease infinite;
-o-animation: blinkBack 2s ease infinite;
animation: blinkBack 2s ease infinite;
}
.semBlinkRo {
background: linear-gradient(270deg, #7a000e, #ff243f);
background-size: 400% 400%;
-webkit-animation: blinkBack 2s ease infinite;
-moz-animation: blinkBack 2s ease infinite;
-o-animation: blinkBack 2s ease infinite;
animation: blinkBack 2s ease infinite;
color: Yellow;
}
+183 -167
View File
@@ -6,10 +6,17 @@ h1, h2, h3, h4, h5, h6, b, display-1, display-2, display-3, display-4 {
font-family: 'Lato', sans-serif;
}
html, body {
height: 100%;
}
html, body {
/*font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;*/
font-family: 'Roboto Condensed', sans-serif;
line-height: 1.3;
background-image: linear-gradient(180deg, rgb(1, 8, 22) 20%, #3aa6ff 90%);
background-size: auto 100%;
background-repeat: no-repeat;
}
@@ -55,61 +62,6 @@ a, .btn-link {
text-decoration: line-through;
}
/* Gestione dropdown menu x week planner */
@dropTop: -13.5em;
@dropLeftL: -10em;
@dropLeftR: -24em;
.dropdown {
position: relative;
display: inline-block;
&:hover .dropdown-content, &:hover .dropdown-content-top, &:hover .dropdown-content-left, &:hover .dropdown-content-top-left {
display: block;
}
}
.dropdown-content {
display: none;
position: absolute;
left: @dropLeftL;
min-width: 8em;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
.a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.a:hover {
background-color: #ddd;
}
}
.dropdown-content-top {
.dropdown-content();
top: @dropTop;
left: @dropLeftL;
}
.dropdown-content-left {
.dropdown-content();
left: @dropLeftR;
}
.dropdown-content-top-left {
.dropdown-content();
top: @dropTop;
left: @dropLeftR;
}
.textTrim {
white-space: nowrap;
overflow: hidden;
@@ -191,128 +143,192 @@ a, .btn-link {
.blazor-error-boundary::after {
content: "An error has occurred."
}
/*------------------------------------------------------------------
[ Shortcuts / .shortcuts ]
*/
@blSCut: 1rem;
.shortcuts {
text-align: center;
/* Gestione specifica oggetti MON*/
/* MAIN: gestione layout dinamico mappa... */
.fontSmall {
font-size: 0.75em;
}
.shortcuts .shortcut-icon {
font-size: 2*@blSCut;
.fontSmaller {
font-size: 0.6em;
}
.shortcuts .shortcut {
min-width: @blSCut * 9;
min-height: @blSCut * 5;
display: inline-block;
padding: @blSCut*2/3 0;
margin: 0 2px 1em;
vertical-align: top;
text-decoration: none;
background: #F3F3F3;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee));
background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%);
background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%);
background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: @blSCut/2;
.statusMap {
background: #222;
}
.shortcuts .shortcut-sm {
min-width: @blSCut * 4.5;
min-height: @blSCut * 3;
display: inline-block;
padding: @blSCut/4 0;
margin: 0 2px 1em;
vertical-align: top;
text-decoration: none;
background: #F3F3F3;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee));
background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%);
background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%);
background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: @blSCut/2;
}
.shortcuts .shortcut .shortcut-icon {
width: 100%;
margin-top: 0;
margin-bottom: 0;
font-size: @blSCut*2;
color: #333;
}
.shortcuts .shortcut-sm .shortcut-icon {
width: 100%;
margin-top: 0;
margin-bottom: 0;
font-size: @blSCut*2;
color: #333;
}
.shortcuts .shortcut:hover {
background: #E8E8E8;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1));
background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%);
background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%);
background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0);
}
.shortcuts .shortcut-sm:hover {
background: #E8E8E8;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1));
background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%);
background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%);
background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0);
}
.shortcuts .shortcut:active {
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.shortcuts .shortcut-sm:active {
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.shortcuts .shortcut:hover .shortcut-icon {
color: #C93;
}
.shortcuts .shortcut-sm:hover .shortcut-icon {
color: #666;
}
.shortcuts .shortcut-label {
display: block;
margin-top: .75em;
.statusMap .ui-title, .statusMap .ui-li-aside {
font-weight: 400;
color: #666;
text-transform: uppercase;
font-size: 2.5em;
line-height: 1.1em;
color: #DEDEDE;
text-shadow: 2px 2px 4px #000;
text-align: center;
background: linear-gradient(270deg, rgba(20,20,20,0.7), rgba(100,100,100,0.7), rgba(20,20,20,0.7));
}
@media (max-width: 640px) {
.shortcuts .shortcut {
min-width: @blSCut * 8;
min-height: @blSCut * 4;
.statusMap .ui-art {
}
.statusMap .ui-footer {
color: #CDCDCD;
background: linear-gradient(270deg, rgba(10,10,10,0.7), rgba(80,80,80,0.7), rgba(10,10,10,0.7));
}
/* END: gestione layout dinamico mappa... */
/* area semafori*/
.semBlinkVe,
.semFixVe,
.semFixVe_b,
.semVe,
.semVe_b {
background: #009036;
background: rgba(0,255,80,.6);
color: #FFFFAA;
}
.semBlinkGr,
.semFixGr,
.semFixGr_b,
.semGr,
.semGr_b {
background-color: #bcbcbc;
background: rgba(180,180,180,.6);
}
.semGi {
text-align: left;
background: #8a8d27;
background: rgba(230,210,0,.6);
padding: 0px 4px 0px 4px;
color: #000;
}
.semGi_b,
.semFixGi,
.semFixGi_b {
text-align: left;
background: #f9ff18;
background: rgba(255,255,0,.8);
padding: 0px 4px 0px 4px;
color: #333;
}
.semBl {
text-align: left;
background: #000E7A;
background: rgba(0,5,200,.6);
padding: 0px 4px 0px 4px;
color: #959500;
}
.semBl_b,
.semFixBl,
.semFixBl_b {
text-align: left;
background: #243FFF;
background: rgba(60,80,255,.8);
padding: 0px 4px 0px 4px;
color: #ffff32;
}
.semRo {
text-align: left;
background-color: #7a000e;
background: rgba(200,0,5,.6);
padding: 0px 4px 0px 4px;
color: #959500;
}
.semRo_b,
.semFixRo,
.semFixRo_b {
text-align: left;
background-color: #ff243f;
background: rgba(255,60,80,.8);
padding: 0px 4px 0px 4px;
color: #ffff32;
}
/* semafori con animazione blinking */
.no-cpu {
-moz-transform: translateZ(0);
-o-transform: translateZ(0);
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
}
@-webkit-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
body {
font-size: 0.8em;
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@-moz-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@-o-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
.semBlinkGi {
background: linear-gradient(270deg, #8a8d27, #f9ff18);
background-size: 400% 400%;
-webkit-animation: blinkBack 2s ease infinite;
-moz-animation: blinkBack 2s ease infinite;
-o-animation: blinkBack 2s ease infinite;
animation: blinkBack 2s ease infinite;
}
.semBlinkRo {
background: linear-gradient(270deg, #7a000e, #ff243f);
background-size: 400% 400%;
-webkit-animation: blinkBack 2s ease infinite;
-moz-animation: blinkBack 2s ease infinite;
-o-animation: blinkBack 2s ease infinite;
animation: blinkBack 2s ease infinite;
color: Yellow;
}
+1 -1
View File
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB