Merge branch 'release/AddCompoAndExtension01'
@@ -89,21 +89,10 @@ variables:
|
||||
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
- release
|
||||
|
||||
# ---------- BUILD ----------
|
||||
EgwCoreLib.Razor:build:
|
||||
stage: build
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: EgwCoreLib.Razor
|
||||
SOL_NAME: EgwCoreLib
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
EgwCoreLib.Utils:build:
|
||||
stage: build
|
||||
@@ -118,6 +107,50 @@ EgwCoreLib.Utils:build:
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
EgwCoreLib.Razor:build:
|
||||
stage: build
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: EgwCoreLib.Razor
|
||||
SOL_NAME: EgwCoreLib
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
EgwCoreLib.BlazorTest:build:
|
||||
stage: build
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: EgwCoreLib.BlazorTest
|
||||
SOL_NAME: EgwCoreLib
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
# ----- Start DEPLOY develop (IIS01) -----
|
||||
EgwCoreLib.BlazorTest:IIS01:deploy:
|
||||
stage: deploy
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: EgwCoreLib.BlazorTest
|
||||
SOL_NAME: EgwCoreLib
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||
needs: ["EgwCoreLib.BlazorTest:build"]
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
# ---------- Upload Debug/Unstable ----------
|
||||
EgwCoreLib.Razor:release-dev:
|
||||
stage: release
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 1,
|
||||
"isRoot": true,
|
||||
"tools": {}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<div class="d-flex justify-content-between text-light w-100">
|
||||
<div class="px-1 text-left">
|
||||
<b>EgwCoreLib</b> <span class="small">v.@version</span>
|
||||
</div>
|
||||
<div class="px-1 text-end">
|
||||
<span class="small px-1">@adesso</span>
|
||||
<a class="text-light fw-bold" href="https://www.egalware.com/" target="_blank">Egalware<img class="img-fluid" width="16" src="images/EgalwareLogo.svg" /></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
protected DateTime adesso = DateTime.Now;
|
||||
|
||||
Version version = typeof(Program).Assembly.GetName().Version;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<div class="row pt-2">
|
||||
<div class="col-4 px-0">
|
||||
</div>
|
||||
<div class="col-4 px-0 d-none d-lg-block text-center h4 text-truncate">
|
||||
<NavLink class="btn btn-primary" href="" Match="NavLinkMatch.All">
|
||||
<span class="oi oi-home" aria-hidden="true"></span> Home
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="col-4 px-0 text-end d-flex flex-row-reverse">
|
||||
<SearchMod></SearchMod>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
<div class="input-group input-group-sm">
|
||||
<input @bind-value="searchVal" @bind-value:event="oninput" type="text" class="form-control" title="Campo Ricerca" placeholder="Ricerca [ALT-R]" accesskey="R" />
|
||||
<button @onclick="reset" class="btn btn-success input-group-text">reset</button>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> searchUpdated { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string searchVal { get; set; } = "";
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private void reportChange()
|
||||
{
|
||||
searchUpdated.InvokeAsync(searchVal);
|
||||
}
|
||||
|
||||
private void reset()
|
||||
{
|
||||
searchVal = "";
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
<h3>TestJsInterop</h3>
|
||||
|
||||
|
||||
<CopyToClipboard Text="@qrCodeVal"></CopyToClipboard>
|
||||
|
||||
@code {
|
||||
|
||||
protected string qrCodeVal { get; set; } = "Some text for clipboard-copy debug";
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using EgwCoreLib.BlazorTest.Pages;
|
||||
|
||||
namespace EgwCoreLib.BlazorTest.Data
|
||||
{
|
||||
public class TestData
|
||||
{
|
||||
public static Dictionary<string, string> MenuList { get; set; } = new()
|
||||
{
|
||||
{"TestPdfViewer", "Test PdfViewer"},
|
||||
{"TestQrDisplay", "Test QrDisplay"},
|
||||
{"TestGraphCompo", "Test Graph Compo"},
|
||||
{"TestBarcodeReader", "Test BarcodeReader"},
|
||||
{"TestCal_01", "Test Cal.01"},
|
||||
{"TestCal_02", "Test Cal.02"},
|
||||
{"TestLoading", "Test Loading"},
|
||||
{"TestComponenti", "Test Componenti"},
|
||||
{"TestCerchi", "Test Cerchi"},
|
||||
{"TestGauges", "Test Gauges"},
|
||||
{"TestMultiline", "Test Multiline"},
|
||||
{"TestChart", "Test Chart"},
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
namespace EgwCoreLib.BlazorTest.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; }
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
namespace EgwCoreLib.BlazorTest.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, 25).Select(index => new WeatherForecast
|
||||
{
|
||||
Date = startDate.AddDays(index),
|
||||
TemperatureC = Random.Shared.Next(-20, 55),
|
||||
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
|
||||
}).ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,10 @@
|
||||
<Content Remove="compilerconfig.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IIS01.pubxml" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="compilerconfig.json" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
@page "/fetchdata"
|
||||
|
||||
<PageTitle>Weather forecast</PageTitle>
|
||||
|
||||
@using EgwCoreLib.BlazorTest.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<Sorter ParamName="Date" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
|
||||
<th>Temp. (C)<Sorter ParamName="TempC" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
|
||||
<th>Temp. (F)<Sorter ParamName="TempF" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
|
||||
<th>Summary<Sorter ParamName="Summary" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></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>
|
||||
<DataPager PageSize="@numRecord" currPage="@currPage" numRecordChanged="SetNumRec" numPageChanged="SetCurrPage" totalCount="@totalCount" showLoading="@isLoading" PageSizeList="@PageSizeEnab" />
|
||||
}
|
||||
|
||||
|
||||
@@ -1,122 +0,0 @@
|
||||
using EgwCoreLib.BlazorTest.Data;
|
||||
using EgwCoreLib.Razor;
|
||||
|
||||
namespace EgwCoreLib.BlazorTest.Pages
|
||||
{
|
||||
public partial class FetchData
|
||||
{
|
||||
#region Protected Properties
|
||||
|
||||
protected List<int> PageSizeEnab { get; set; } = new List<int>();
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
rawData = await ForecastService.GetForecastAsync(DateTime.Now);
|
||||
PageSizeEnab = new List<int>()
|
||||
{
|
||||
4,8,12,16,20,24,28,32,36,40
|
||||
};
|
||||
await ReloadAllData();
|
||||
}
|
||||
|
||||
protected async Task ReloadAllData()
|
||||
{
|
||||
await Task.Delay(1);
|
||||
totalCount = rawData.Count();
|
||||
List<WeatherForecast> currForecast = rawData.ToList();
|
||||
// effetuo sort...
|
||||
if (!string.IsNullOrEmpty(sortField))
|
||||
{
|
||||
switch (sortField)
|
||||
{
|
||||
case "TempC":
|
||||
if (sortAsc)
|
||||
{
|
||||
currForecast = currForecast.OrderBy(x => x.TemperatureC).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
currForecast = currForecast.OrderByDescending(x => x.TemperatureC).ToList();
|
||||
}
|
||||
break;
|
||||
case "TempF":
|
||||
if (sortAsc)
|
||||
{
|
||||
currForecast = currForecast.OrderBy(x => x.TemperatureF).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
currForecast = currForecast.OrderByDescending(x => x.TemperatureF).ToList();
|
||||
}
|
||||
break;
|
||||
case "Summary":
|
||||
if (sortAsc)
|
||||
{
|
||||
currForecast = currForecast.OrderBy(x => x.Summary).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
currForecast = currForecast.OrderByDescending(x => x.Summary).ToList();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case "Date":
|
||||
if (sortAsc)
|
||||
{
|
||||
currForecast = currForecast.OrderBy(x => x.Date).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
currForecast = currForecast.OrderByDescending(x => x.Date).ToList();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
forecasts = currForecast.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
||||
}
|
||||
|
||||
protected async Task SetCurrPage(int newNum)
|
||||
{
|
||||
currPage = newNum;
|
||||
await ReloadAllData();
|
||||
}
|
||||
|
||||
protected async Task SetNumRec(int newNum)
|
||||
{
|
||||
numRecord = newNum;
|
||||
await ReloadAllData();
|
||||
}
|
||||
|
||||
protected async Task SortRequested(Sorter.SortCallBack e)
|
||||
{
|
||||
sortField = e.ParamName;
|
||||
sortAsc = e.IsAscending;
|
||||
await ReloadAllData();
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private List<WeatherForecast>? forecasts;
|
||||
private WeatherForecast[] rawData { get; set; } = new WeatherForecast[1];
|
||||
private bool sortAsc = true;
|
||||
private string sortField = "";
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private int currPage { get; set; } = 1;
|
||||
private bool isLoading { get; set; } = false;
|
||||
private int numRecord { get; set; } = 8;
|
||||
private int totalCount { get; set; } = 0;
|
||||
|
||||
#endregion Private Properties
|
||||
}
|
||||
}
|
||||
@@ -1,123 +1,45 @@
|
||||
@page "/"
|
||||
@using EgwCoreLib.BlazorTest.Data
|
||||
|
||||
<PageTitle>Index</PageTitle>
|
||||
<div>
|
||||
<PageTitle>EgwCoreLib Test Site</PageTitle>
|
||||
|
||||
<div class="row py-4" style="background-color: #ACDDAC;">
|
||||
<div class="col-4">
|
||||
<NumInput @bind-Value="@valDecimale" ></NumInput>
|
||||
<div class="mt-4 p-4 bg-primary bg-gradient bg-opacity-25 border border-light text-dark rounded shadow">
|
||||
<div class="row">
|
||||
<div class="col-6 col-md-8 pr-0">
|
||||
<h1>EgwCoreLib</h1>
|
||||
<div>
|
||||
<b>@valDecimale</b>
|
||||
Test componenti EgwCoreLib
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="RadialGrad2">
|
||||
<stop offset="0%" stop-color="#000000" />
|
||||
<stop offset="80%" stop-color="#151515" />
|
||||
<stop offset="90%" stop-color="#444444" />
|
||||
<stop offset="100%" stop-color="#878787" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<rect width="100" height="100" rx="50" fill="url(#RadialGrad2)" fill-opacity="0.5">
|
||||
</rect>
|
||||
<text id="TitleElem" x="10%" y="50%" class="text-light" style="font-size:2rem;">Titolo</text>
|
||||
<g>
|
||||
<rect x="10%" y="10%" width="80%" height="80%" fill="white" fill-opacity="0.1">
|
||||
</rect>
|
||||
<text x="10%" y="70%" class="text-light" style="font-size:0.8rem;">
|
||||
testo più lungo... 0123456789
|
||||
<animate attributeName="x"
|
||||
values="10%;10%;-10%;-80%;-100%;-100%;10%"
|
||||
dur="6s"
|
||||
begin="2s"
|
||||
repeatCount="indefinite" />
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="RadialGrad2">
|
||||
<stop offset="0%" stop-color="#000000" />
|
||||
<stop offset="80%" stop-color="#151515" />
|
||||
<stop offset="90%" stop-color="#444444" />
|
||||
<stop offset="100%" stop-color="#878787" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<rect width="10" height="10" rx="5" fill="url(#RadialGrad2)" fill-opacity="0.5">
|
||||
</rect>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
<CircleGaugeMulti Titolo="@($"{currVal1}")" Testo="#pz prod" maxVal="@maxVal" ListInner="@DDemo1" ShowCircleBtn="true"></CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
<CircleGaugeMulti Titolo="@($"{currVal2}")" Testo="#pz prod" maxVal="@maxVal" ListInner="@DDemoIn2" ListOuter="@DDemoOut2" ShowCircleBtn="true"></CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 containerCalendario">
|
||||
<div class="calendario">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div>
|
||||
<CircleGauge Titolo="9:00" Testo="Caricate" maxVal="480" currVal="540" StrokeColorVal="#F1C40F" ShowCircleBtn="true"></CircleGauge>
|
||||
<div class="col-6 col-md-4 text-right pl-0">
|
||||
<div class="d-flex flex-row-reverse">
|
||||
<div class="px-2 badge rounded-pill bg-dark my-4">
|
||||
<div class="p-2" style="font-size: 1.5em;">
|
||||
<a class="text-light" href="https://www.egalware.com/" target="_blank">powered by EgalWare <img width="32" class="img-fluid" src="images/EgalwareLogo.svg" /></a>
|
||||
</div>
|
||||
<div>
|
||||
<CircleGauge Titolo="4:00" Testo="Lavorate" maxVal="480" currVal="240" StrokeColorVal="#00FF00" ShowCircleBtn="true"></CircleGauge>
|
||||
</div>
|
||||
<div>
|
||||
<CircleGauge Titolo="12:00" Testo="Caricate" maxVal="480" currVal="720" StrokeColorVal="#F1C40F" StrokeColorValOuter="#01C4FF" ShowCircleBtn="true"></CircleGauge>
|
||||
</div>
|
||||
</div>
|
||||
<div class="containerBtnTemp">
|
||||
<button class="btn btn-sm btn-warning">
|
||||
TEMP
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card mt-2 shadow my-lg-5">
|
||||
<div class="card-body">
|
||||
<div class="row px-0">
|
||||
@foreach (var item in MenuList)
|
||||
{
|
||||
<div class="col-6 col-md-4 col-lg-3 col-xl-2 mb-1">
|
||||
<NavLink type="button" class="btn btn-primary bg-gradient text-light p-3 w-100" title="@item.Value" href="@item.Key">
|
||||
<i class="fa-solid fa-wrench fa-2x mb-2" aria-hidden="true"></i>
|
||||
<h5>@item.Value</h5>
|
||||
</NavLink>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@code {
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemo1 = new List<CircleGaugeMulti.CircSegm>();
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemoIn2 = new List<CircleGaugeMulti.CircSegm>();
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemoOut2 = new List<CircleGaugeMulti.CircSegm>();
|
||||
|
||||
protected int currVal1 = 1000;
|
||||
protected int currVal2 = 1000;
|
||||
protected int maxVal = 1000;
|
||||
|
||||
protected decimal valDecimale = 12345;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
DDemo1.Clear();
|
||||
currVal1 = 800;
|
||||
DDemo1.Add(new CircleGaugeMulti.CircSegm() { Color = "#DCFD15", Value = 800 });
|
||||
DDemo1.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = 300 });
|
||||
Random rnd = new Random();
|
||||
DDemoIn2.Clear();
|
||||
DDemoOut2.Clear();
|
||||
currVal2 = 1300;
|
||||
DDemoIn2.Add(new CircleGaugeMulti.CircSegm() { Color = "#DCFD15", Value = 1000 });
|
||||
DDemoIn2.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = 600 });
|
||||
DDemoOut2.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = 300 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#1515FD", Value = 700 });
|
||||
// currVal = rnd.Next(maxVal - 200, maxVal + 500);
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = currVal / 4 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#ACFD15", Value = currVal / 4 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#1515FD", Value = currVal / 2 });
|
||||
}
|
||||
private Dictionary<string, string> MenuList { get; set; } = TestData.MenuList;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
@page "/TestBarcodeReader"
|
||||
|
||||
<PageTitle>Test Barcode Reader</PageTitle>
|
||||
|
||||
<div class="card my-2">
|
||||
<div class="card-header"><h4>Test Barcode Reader</h4></div>
|
||||
<div class="card-body">
|
||||
<BarcodeReader ScanResult="(e) => ScanDoneHandler(e)"
|
||||
ScanBtnTitle="Scan"
|
||||
ResetBtnTitle="Reset"
|
||||
CloseBtnTitle="Close"
|
||||
UseBuiltinDiv="false"
|
||||
@ref="barcodeReaderCustom"
|
||||
SelectDeviceBtnTitle="Select Device">
|
||||
</BarcodeReader>
|
||||
|
||||
<div @ref="barcodeReaderCustom.Element" class="d-flex justify-content-center">
|
||||
@* <div style="width: 480px; max-width: 100%"> *@
|
||||
<div class="col-12 col-md-8 col-lg-6">
|
||||
<button class="btn btn-outline-success p-2 m-1 w-25" data-action="startButton">Scan</button>
|
||||
<button class="btn btn-outline-success p-2 m-1 w-25" data-action="resetButton">Reset</button>
|
||||
|
||||
<div data-action="sourceSelectPanel" style="display:none">
|
||||
<label for="sourceSelect">Source:</label>
|
||||
<select data-action="sourceSelect" style="max-width:100%" class="form-control">
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<video id="video" playsinline="true" autoplay="true" class="w-100 h-100 border rounded shadow" muted="true"></video>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private int currentCount = 0;
|
||||
|
||||
protected BarcodeReader barcodeReaderCustom { get; set; } = null!;
|
||||
protected Random rnd = new Random();
|
||||
protected async Task ScanDoneHandler(string value)
|
||||
{
|
||||
await Task.Delay(1);
|
||||
}
|
||||
private void IncrementCount()
|
||||
{
|
||||
currentCount++;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
base.OnInitialized();
|
||||
listBord01 = new();
|
||||
listBord01.Add("");
|
||||
listBord01.Add("White");
|
||||
listBord01.Add("");
|
||||
listBord01.Add("");
|
||||
listBord02 = new();
|
||||
listBord02.Add("");
|
||||
listBord02.Add("White");
|
||||
listBord02.Add("");
|
||||
listBord02.Add("White");
|
||||
listBord03 = new();
|
||||
listBord03.Add("");
|
||||
listBord03.Add("White");
|
||||
listBord03.Add("");
|
||||
listBord03.Add("Blue");
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected List<string> listBord01 { get; set; } = new();
|
||||
protected List<string> listBord02 { get; set; } = new();
|
||||
protected List<string> listBord03 { get; set; } = new();
|
||||
|
||||
protected string qrCodeVal { get; set; } = "https://office.egalware.com/WDC/UI";
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
@page "/provacalendar"
|
||||
@page "/TestCal_01"
|
||||
|
||||
<PageTitle>Index</PageTitle>
|
||||
<div>
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace EgwCoreLib.BlazorTest.Pages
|
||||
{
|
||||
public partial class ProvaCalendar
|
||||
public partial class TestCal_01
|
||||
{
|
||||
#region Protected Methods
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@page "/TestCal"
|
||||
@page "/TestCal_02"
|
||||
|
||||
|
||||
<h3>TestCal</h3>
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace EgwCoreLib.BlazorTest.Pages
|
||||
{
|
||||
public partial class TestCal
|
||||
public partial class TestCal_02
|
||||
{
|
||||
#region Protected Methods
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
@page "/TestCerchi"
|
||||
|
||||
<PageTitle>TestGauges</PageTitle>
|
||||
|
||||
<div>
|
||||
|
||||
<div class="row py-4" style="background-color: #ACDDAC;">
|
||||
<div class="col-4">
|
||||
<NumInput @bind-Value="@valDecimale"></NumInput>
|
||||
<div>
|
||||
<b>@valDecimale</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="RadialGrad2">
|
||||
<stop offset="0%" stop-color="#000000" />
|
||||
<stop offset="80%" stop-color="#151515" />
|
||||
<stop offset="90%" stop-color="#444444" />
|
||||
<stop offset="100%" stop-color="#878787" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<rect width="100" height="100" rx="50" fill="url(#RadialGrad2)" fill-opacity="0.5">
|
||||
</rect>
|
||||
<text id="TitleElem" x="10%" y="50%" class="text-light" style="font-size:2rem;">Titolo</text>
|
||||
<g>
|
||||
<rect x="10%" y="10%" width="80%" height="80%" fill="white" fill-opacity="0.1">
|
||||
</rect>
|
||||
<text x="10%" y="70%" class="text-light" style="font-size:0.8rem;">
|
||||
testo più lungo... 0123456789
|
||||
<animate attributeName="x"
|
||||
values="10%;10%;-10%;-80%;-100%;-100%;10%"
|
||||
dur="6s"
|
||||
begin="2s"
|
||||
repeatCount="indefinite" />
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="RadialGrad2">
|
||||
<stop offset="0%" stop-color="#000000" />
|
||||
<stop offset="80%" stop-color="#151515" />
|
||||
<stop offset="90%" stop-color="#444444" />
|
||||
<stop offset="100%" stop-color="#878787" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<rect width="10" height="10" rx="5" fill="url(#RadialGrad2)" fill-opacity="0.5">
|
||||
</rect>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
<CircleGaugeMulti Titolo="@($"{currVal1}")" Testo="#pz prod" maxVal="@maxVal" ListInner="@DDemo1" ShowCircleBtn="true"></CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
<CircleGaugeMulti Titolo="@($"{currVal2}")" Testo="#pz prod" maxVal="@maxVal" ListInner="@DDemoIn2" ListOuter="@DDemoOut2" ShowCircleBtn="true"></CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 containerCalendario">
|
||||
<div class="calendario">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div>
|
||||
<CircleGauge Titolo="9:00" Testo="Caricate" maxVal="480" currVal="540" StrokeColorVal="#F1C40F" ShowCircleBtn="true"></CircleGauge>
|
||||
</div>
|
||||
<div>
|
||||
<CircleGauge Titolo="4:00" Testo="Lavorate" maxVal="480" currVal="240" StrokeColorVal="#00FF00" ShowCircleBtn="true"></CircleGauge>
|
||||
</div>
|
||||
<div>
|
||||
<CircleGauge Titolo="12:00" Testo="Caricate" maxVal="480" currVal="720" StrokeColorVal="#F1C40F" StrokeColorValOuter="#01C4FF" ShowCircleBtn="true"></CircleGauge>
|
||||
</div>
|
||||
</div>
|
||||
<div class="containerBtnTemp">
|
||||
<button class="btn btn-sm btn-warning">
|
||||
TEMP
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,37 @@
|
||||
using EgwCoreLib.Razor;
|
||||
|
||||
namespace EgwCoreLib.BlazorTest.Pages
|
||||
{
|
||||
public partial class TestCerchi
|
||||
{
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemo1 = new List<CircleGaugeMulti.CircSegm>();
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemoIn2 = new List<CircleGaugeMulti.CircSegm>();
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemoOut2 = new List<CircleGaugeMulti.CircSegm>();
|
||||
|
||||
protected int currVal1 = 1000;
|
||||
protected int currVal2 = 1000;
|
||||
protected int maxVal = 1000;
|
||||
|
||||
protected decimal valDecimale = 12345;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
DDemo1.Clear();
|
||||
currVal1 = 800;
|
||||
DDemo1.Add(new CircleGaugeMulti.CircSegm() { Color = "#DCFD15", Value = 800 });
|
||||
DDemo1.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = 300 });
|
||||
Random rnd = new Random();
|
||||
DDemoIn2.Clear();
|
||||
DDemoOut2.Clear();
|
||||
currVal2 = 1300;
|
||||
DDemoIn2.Add(new CircleGaugeMulti.CircSegm() { Color = "#DCFD15", Value = 1000 });
|
||||
DDemoIn2.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = 600 });
|
||||
DDemoOut2.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = 300 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#1515FD", Value = 700 });
|
||||
// currVal = rnd.Next(maxVal - 200, maxVal + 500);
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = currVal / 4 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#ACFD15", Value = currVal / 4 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#1515FD", Value = currVal / 2 });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
@page "/TestComponenti"
|
||||
|
||||
@inject NavigationManager NavMan
|
||||
|
||||
<PageTitle>Test</PageTitle>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h1>Test Componenti custom</h1>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Test Image
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
<img src="_content/EgwCoreLib.Razor/images/LogoEgw.png" class="img-fluid" width="200" height="200" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Input password
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
Standard
|
||||
<PasswordBox></PasswordBox>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
Cambio label
|
||||
<PasswordBox ItemLabel="pwd"></PasswordBox>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
Show disabilitato
|
||||
<PasswordBox DisableShow="true"></PasswordBox>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Input Speciali
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
<small>Test copia clipboard, GUID (presudo)random</small>
|
||||
<CopyToClipboard Text="@textToCopy"></CopyToClipboard>
|
||||
<hr />
|
||||
<small>Input numerico con gestione cifre (es x double)</small>
|
||||
<NumInput CssClass="form-control" @bind-Value="@valDecimale"></NumInput>
|
||||
<div>
|
||||
<b>@valDecimale</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
QueryString
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
|
||||
|
||||
Test valori QueryString
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
Query string <b>Nome</b>:
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
@qsNome
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
Query string <b>Intero</b>:
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
@qsIntero
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
protected string textToCopy = $"{Guid.NewGuid()}";
|
||||
protected decimal valDecimale = 12345;
|
||||
|
||||
private string qsNome = "";
|
||||
private int qsIntero = 0;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
// base.OnInitialized();
|
||||
qsNome = NavMan.ExtractQueryStringByKey<string>("Nome");
|
||||
qsIntero = NavMan.ExtractQueryStringByKey<int>("Intero");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
@page "/TestGauges"
|
||||
|
||||
<PageTitle>TestGauges</PageTitle>
|
||||
|
||||
<div>
|
||||
|
||||
<div class="row py-4" style="background-color: #ACDDAC;">
|
||||
<div class="col-4">
|
||||
<NumInput @bind-Value="@valDecimale"></NumInput>
|
||||
<div>
|
||||
<b>@valDecimale</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="RadialGrad2">
|
||||
<stop offset="0%" stop-color="#000000" />
|
||||
<stop offset="80%" stop-color="#151515" />
|
||||
<stop offset="90%" stop-color="#444444" />
|
||||
<stop offset="100%" stop-color="#878787" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<rect width="100" height="100" rx="50" fill="url(#RadialGrad2)" fill-opacity="0.5">
|
||||
</rect>
|
||||
<text id="TitleElem" x="10%" y="50%" class="text-light" style="font-size:2rem;">Titolo</text>
|
||||
<g>
|
||||
<rect x="10%" y="10%" width="80%" height="80%" fill="white" fill-opacity="0.1">
|
||||
</rect>
|
||||
<text x="10%" y="70%" class="text-light" style="font-size:0.8rem;">
|
||||
testo più lungo... 0123456789
|
||||
<animate attributeName="x"
|
||||
values="10%;10%;-10%;-80%;-100%;-100%;10%"
|
||||
dur="6s"
|
||||
begin="2s"
|
||||
repeatCount="indefinite" />
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="RadialGrad2">
|
||||
<stop offset="0%" stop-color="#000000" />
|
||||
<stop offset="80%" stop-color="#151515" />
|
||||
<stop offset="90%" stop-color="#444444" />
|
||||
<stop offset="100%" stop-color="#878787" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<rect width="10" height="10" rx="5" fill="url(#RadialGrad2)" fill-opacity="0.5">
|
||||
</rect>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
<CircleGaugeMulti Titolo="@($"{currVal1}")" Testo="#pz prod" maxVal="@maxVal" ListInner="@DDemo1" ShowCircleBtn="true"></CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
<CircleGaugeMulti Titolo="@($"{currVal2}")" Testo="#pz prod" maxVal="@maxVal" ListInner="@DDemoIn2" ListOuter="@DDemoOut2" ShowCircleBtn="true"></CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
<div class="col-2 bg-dark">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 containerCalendario">
|
||||
<div class="calendario">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div>
|
||||
<CircleGauge Titolo="9:00" Testo="Caricate" maxVal="480" currVal="540" StrokeColorVal="#F1C40F" ShowCircleBtn="true"></CircleGauge>
|
||||
</div>
|
||||
<div>
|
||||
<CircleGauge Titolo="4:00" Testo="Lavorate" maxVal="480" currVal="240" StrokeColorVal="#00FF00" ShowCircleBtn="true"></CircleGauge>
|
||||
</div>
|
||||
<div>
|
||||
<CircleGauge Titolo="12:00" Testo="Caricate" maxVal="480" currVal="720" StrokeColorVal="#F1C40F" StrokeColorValOuter="#01C4FF" ShowCircleBtn="true"></CircleGauge>
|
||||
</div>
|
||||
</div>
|
||||
<div class="containerBtnTemp">
|
||||
<button class="btn btn-sm btn-warning">
|
||||
TEMP
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,37 @@
|
||||
using EgwCoreLib.Razor;
|
||||
|
||||
namespace EgwCoreLib.BlazorTest.Pages
|
||||
{
|
||||
public partial class TestGauges
|
||||
{
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemo1 = new List<CircleGaugeMulti.CircSegm>();
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemoIn2 = new List<CircleGaugeMulti.CircSegm>();
|
||||
protected List<CircleGaugeMulti.CircSegm> DDemoOut2 = new List<CircleGaugeMulti.CircSegm>();
|
||||
|
||||
protected int currVal1 = 1000;
|
||||
protected int currVal2 = 1000;
|
||||
protected int maxVal = 1000;
|
||||
|
||||
protected decimal valDecimale = 12345;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
DDemo1.Clear();
|
||||
currVal1 = 800;
|
||||
DDemo1.Add(new CircleGaugeMulti.CircSegm() { Color = "#DCFD15", Value = 800 });
|
||||
DDemo1.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = 300 });
|
||||
Random rnd = new Random();
|
||||
DDemoIn2.Clear();
|
||||
DDemoOut2.Clear();
|
||||
currVal2 = 1300;
|
||||
DDemoIn2.Add(new CircleGaugeMulti.CircSegm() { Color = "#DCFD15", Value = 1000 });
|
||||
DDemoIn2.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = 600 });
|
||||
DDemoOut2.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = 300 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#1515FD", Value = 700 });
|
||||
// currVal = rnd.Next(maxVal - 200, maxVal + 500);
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#13FD67", Value = currVal / 4 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#ACFD15", Value = currVal / 4 });
|
||||
// DataDemo.Add(new CircleGaugeMulti.CircSegm() { Color = "#1515FD", Value = currVal / 2 });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
@page "/TestGraphCompo"
|
||||
|
||||
<PageTitle>Test</PageTitle>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header"><h4>Test Componenti Arrow SVG</h4></div>
|
||||
<div class="card-body">
|
||||
<div class="row bg-secondary py-2">
|
||||
<div class="col">
|
||||
<StepArrow ObjId="123" StepText="Prova Arrow 01" BlockStyle="@($"fill: #123456;")" StrokeWidth="4" ObjW="650" ObjH="100" StrokeColors="@listBord01" TipAngle="90"></StepArrow>
|
||||
</div>
|
||||
<div class="col">
|
||||
<StepArrow ObjId="456" StepText="Prova Arrow 02" BlockStyle="@($"fill: #456789;")" StrokeWidth="4" ObjW="600" ObjH="100" StrokeColors="@listBord02" TipAngle="60"></StepArrow>
|
||||
</div>
|
||||
<div class="col">
|
||||
<StepArrow ObjId="456" StepText="Prova Arrow 03" BlockStyle="@($"fill: #6789AB;")" StrokeWidth="4" ObjW="500" ObjH="100" StrokeColors="@listBord03" TipAngle="120"></StepArrow>
|
||||
</div>
|
||||
<div class="col">
|
||||
<StepArrow ObjId="456" StepText="Prova Arrow 04" BlockStyle="@($"fill: #89ABCD;")" StrokeWidth="0" ObjW="700" ObjH="100" TipAngle="108"></StepArrow>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card my-2">
|
||||
<div class="card-header"><h4>Test progBar singola linea</h4></div>
|
||||
<div class="card-body">
|
||||
<div class="row bg-secondary py-2">
|
||||
<div class="col">
|
||||
<ProgBar singleLine="true" baseUM="$" currVal="@(rnd.Next(50,250))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<ProgBar singleLine="true" baseUM="gg" currVal="@(rnd.Next(200,450))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<ProgBar singleLine="true" baseUM="min" currVal="@(rnd.Next(400,650))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<ProgBar singleLine="true" baseUM="px" currVal="@(rnd.Next(600,900))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<ProgBar singleLine="true" baseUM="h" currVal="@(rnd.Next(500,1000))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card my-2">
|
||||
<div class="card-header"><h4>Test progBar multi linea</h4></div>
|
||||
<div class="card-body">
|
||||
<div class="row bg-dark py-2">
|
||||
<div class="col">
|
||||
<ProgBar singleLine="false" baseUM="$" currVal="@(rnd.Next(50,250))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<ProgBar singleLine="false" baseUM="gg" currVal="@(rnd.Next(200,450))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<ProgBar singleLine="false" baseUM="min" currVal="@(rnd.Next(400,650))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<ProgBar singleLine="false" baseUM="px" currVal="@(rnd.Next(600,900))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<ProgBar singleLine="false" baseUM="h" currVal="@(rnd.Next(500,1000))" maxVal="1000" redLim="200" yelLim="400" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private int currentCount = 0;
|
||||
|
||||
protected Random rnd = new Random();
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
base.OnInitialized();
|
||||
listBord01 = new();
|
||||
listBord01.Add("");
|
||||
listBord01.Add("White");
|
||||
listBord01.Add("");
|
||||
listBord01.Add("");
|
||||
listBord02 = new();
|
||||
listBord02.Add("");
|
||||
listBord02.Add("White");
|
||||
listBord02.Add("");
|
||||
listBord02.Add("White");
|
||||
listBord03 = new();
|
||||
listBord03.Add("");
|
||||
listBord03.Add("White");
|
||||
listBord03.Add("");
|
||||
listBord03.Add("Blue");
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected List<string> listBord01 { get; set; } = new();
|
||||
protected List<string> listBord02 { get; set; } = new();
|
||||
protected List<string> listBord03 { get; set; } = new();
|
||||
|
||||
}
|
||||
@@ -1,14 +1,31 @@
|
||||
@page "/TestLoading"
|
||||
|
||||
<h3>TestLoading</h3>
|
||||
<div>
|
||||
<label class="form-label">Tempo sim</label>
|
||||
<input css="form-control" @bind="@expTime" type="number" />
|
||||
</div>
|
||||
<div>
|
||||
<label class="form-label">Num steps</label>
|
||||
<input css="form-control" @bind="@numSteps" type="number" />
|
||||
</div>
|
||||
<button class="btn btn-success" @onclick="StartLongTimer">Start</button>
|
||||
|
||||
<ProgressDisplay RefreshInterval="100" Title="@titleMsg" MaxVal="@maxVal" CurrVal="@currVal" NextVal="@nextVal" ExpTimeMSec="@expTimeMSec" DisplaySize="ProgressDisplay.ModalSize.Medium" ModalCss="card alert-primary" SlowLimit="0.4"></ProgressDisplay>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3>Test Modale Loading</h3>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<div class="input-group w-100 mb-1">
|
||||
<span class="input-group-text">Tempo sim</span>
|
||||
<input class="form-control" @bind="@expTime" type="number" />
|
||||
</div>
|
||||
<div class="input-group w-100 mb-1">
|
||||
<span class="input-group-text">Num steps</span>
|
||||
<input class="form-control" @bind="@numSteps" type="number" />
|
||||
</div>
|
||||
<button class="btn btn-success w-100" @onclick="StartLongTimer">Start</button>
|
||||
<div>@realTime</div>
|
||||
</div>
|
||||
<div class="col-8 small">
|
||||
<h3>Fake Progressbar</h3>
|
||||
<p>Modale che mostra avanzamento (progressbar con %) di un task lungo.</p>
|
||||
<p>Devono essere definiti il numero degli step attesi e per ogni step la durata attesa di completamento.</p>
|
||||
<p>Viene definito <b>fake</b> poiché l'avanzamento è artificialmente rallentato quando si approssima allo scadere di uno step per dare impressione di un sistema realmente (ri)calcolato di continuo, mentre al superamento di ogni step viene portato avanti il conteggio recuperando eventuali ritardi di stima.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ProgressDisplay RefreshInterval="100" Title="@titleMsg" MaxVal="@maxVal" CurrVal="@currVal" NextVal="@nextVal" ExpTimeMSec="@expTimeMSec" DisplaySize="ProgressDisplay.ModalSize.Medium" ModalCss="card alert-primary" SlowLimit="0.4"></ProgressDisplay>
|
||||
@@ -1,18 +1,24 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace EgwCoreLib.BlazorTest.Pages
|
||||
{
|
||||
public partial class TestLoading
|
||||
{
|
||||
#region Protected Properties
|
||||
|
||||
protected double expTime { get; set; } = 6;
|
||||
protected int numSteps { get; set; } = 4;
|
||||
protected double expTime { get; set; } = 5;
|
||||
protected int numSteps { get; set; } = 10;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected string realTime = "";
|
||||
|
||||
protected async Task StartLongTimer()
|
||||
{
|
||||
Stopwatch sw = new Stopwatch();
|
||||
sw.Start();
|
||||
maxVal = numSteps * 10;
|
||||
double stdWait = expTime / numSteps;
|
||||
int nextWait = 1000;
|
||||
@@ -31,13 +37,15 @@ namespace EgwCoreLib.BlazorTest.Pages
|
||||
nextVal = maxVal;
|
||||
}
|
||||
await InvokeAsync(StateHasChanged);
|
||||
// simulo ritardo importante (da 2 a 3 volte
|
||||
nextWait = (int)(rnd.Next(2000, 3000) * stdWait);
|
||||
// simulo ritardo importante (da 0 a 2 volte)
|
||||
nextWait = (int)(rnd.Next(100, 2000) * stdWait);
|
||||
// attendo step successivi...
|
||||
await Task.Delay(nextWait);
|
||||
}
|
||||
await Task.Delay(1);
|
||||
currVal = maxVal;
|
||||
sw.Stop();
|
||||
realTime = $"Real: {sw.Elapsed.TotalSeconds:N3}s";
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
@page "/TestPdfViewer"
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
<h3>Test pdf display</h3>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<div class="input-group w-100">
|
||||
<span class="input-group-text">File</span>
|
||||
<select class="form-select" @bind="@FileSel">
|
||||
<option value="File01.pdf">File 01</option>
|
||||
<option value="File02.pdf">File 02</option>
|
||||
<option value="File03.pdf">File 03</option>
|
||||
<option value="File04.pdf">File 04</option>
|
||||
<option value="File05.pdf">File 05</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
<PdfDisplay Width="100%" PdfUrl="@($"test/{FileSel}")" HeightList="@heightList"></PdfDisplay>
|
||||
<p class="card-text">Selezione: <b>@FileSel</b></p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,121 @@
|
||||
#if false
|
||||
using CA.Blazor.Pdf;
|
||||
using CA.Blazor.Pdf.Extensions;
|
||||
#endif
|
||||
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using System.Net.Http.Headers;
|
||||
|
||||
namespace EgwCoreLib.BlazorTest.Pages
|
||||
{
|
||||
public partial class TestPdfViewer
|
||||
{
|
||||
#region Public Fields
|
||||
|
||||
public int CompoSel = 1;
|
||||
|
||||
#endregion Public Fields
|
||||
|
||||
#region Public Properties
|
||||
|
||||
public string PdfBase64 { get; set; } = "";
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected string FileSel
|
||||
{
|
||||
get => fileSel;
|
||||
set
|
||||
{
|
||||
if (fileSel != value)
|
||||
{
|
||||
fileSel = value;
|
||||
ReloadData().ConfigureAwait(false);
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected string HeightSel
|
||||
{
|
||||
get => heightSel;
|
||||
set
|
||||
{
|
||||
if (heightSel != value)
|
||||
{
|
||||
heightSel = value;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavMan { get; set; } = null!;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await ReloadData();
|
||||
await Task.Delay(1);
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private string fileSel { get; set; } = "File01.pdf";
|
||||
private string heightSel { get; set; } = "400px";
|
||||
|
||||
private string baseUri = "";
|
||||
private string fileUrl = "";
|
||||
|
||||
private Dictionary<string, string> heightList { get; set; } = new Dictionary<string, string>() { { "200", "200px" }, { "400", "400px" }, { "600", "600px" }, { "800", "800px" }, { "1000", "1000px" } };
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private async Task<string> GetBase64Pdf(string apiUrl)
|
||||
{
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
httpClient.BaseAddress = new Uri(NavMan.BaseUri);
|
||||
|
||||
// Make the API request to get the PDF content
|
||||
var response = await httpClient.GetAsync(apiUrl);
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
// Convert the response content to Base64
|
||||
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
|
||||
var base64String = Convert.ToBase64String(pdfBytes);
|
||||
return $"data:application/pdf;base64,{base64String}";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Handle error scenarios based on your application needs For simplicity, we
|
||||
// return an empty string in case of an error
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReloadData()
|
||||
{
|
||||
baseUri = NavMan.BaseUri;
|
||||
fileUrl = $"{baseUri}/test/{FileSel}";
|
||||
|
||||
#if false
|
||||
// Call the helper method to retrieve the Base64-encoded PDF content
|
||||
PdfBase64 = await GetBase64Pdf(apiUrl);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
@page "/TestQrDisplay"
|
||||
|
||||
<PageTitle>Test Display QRCode</PageTitle>
|
||||
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h1>Test Display QRCode</h1>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row text-center">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header"><b>AZTEC</b></div>
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center" style=" height: 13rem;">
|
||||
<QrCodeDisplay rawCode="@qrCodeVal" ImgFormat="ZXing.BarcodeFormat.AZTEC"></QrCodeDisplay>
|
||||
</div>
|
||||
<hr />
|
||||
<small>Quadrato, control point centrale</small>
|
||||
</div>
|
||||
@* <div class="card-footer"></div> *@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header"><b>QR_CODE</b></div>
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center" style=" height: 13rem;">
|
||||
<QrCodeDisplay rawCode="@qrCodeVal" ImgFormat="ZXing.BarcodeFormat.QR_CODE"></QrCodeDisplay>
|
||||
</div>
|
||||
<hr />
|
||||
<small>Quadrato, 3 control point vertici</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header"><b>DATA_MATRIX</b></div>
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center" style=" height: 13rem;">
|
||||
<QrCodeDisplay rawCode="@qrCodeVal" ImgFormat="ZXing.BarcodeFormat.DATA_MATRIX"></QrCodeDisplay>
|
||||
</div>
|
||||
<hr />
|
||||
<small>Quadrato/Rettangolare (se codice lungo), linee controllo sx/basso</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header"><b>PDF_417</b></div>
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center" style=" height: 13rem;">
|
||||
<QrCodeDisplay rawCode="@qrCodeVal" ImgFormat="ZXing.BarcodeFormat.PDF_417" Width="600" Height="200"></QrCodeDisplay>
|
||||
@* <QrCodeDisplay rawCode="@qrCodeVal" ImgFormat="ZXing.BarcodeFormat.PDF_417" Width="600"></QrCodeDisplay> *@
|
||||
</div>
|
||||
<hr />
|
||||
<small>Rettangolare, linee controllo verticali sx/dx differenti (verso)</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
protected string qrCodeVal { get; set; } = "https://office.egalware.com/WDC/UI";
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
@page "/Test"
|
||||
@page "/TestOld"
|
||||
|
||||
<PageTitle>Test</PageTitle>
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<base href="~/" />
|
||||
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="~/lib/font-awesome/css/all.min.css" />
|
||||
<link href="css/site.css" rel="stylesheet" />
|
||||
<link href="EgwCoreLib.BlazorTest.styles.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="lib/bootstrap/css/bootstrap.css" />
|
||||
<link rel="stylesheet" href="lib/font-awesome/css/all.min.css" />
|
||||
<link rel="stylesheet" href="css/site.css" />
|
||||
<link rel="stylesheet" href="EgwCoreLib.BlazorTest.styles.css" />
|
||||
<component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
|
||||
</head>
|
||||
<body>
|
||||
@@ -28,7 +28,36 @@
|
||||
<a class="dismiss">🗙</a>
|
||||
</div>
|
||||
|
||||
<script src="_framework/blazor.server.js"></script>
|
||||
<script src="lib/bootstrap/js/bootstrap.bundle.js"></script>
|
||||
|
||||
<script src="_framework/blazor.server.js" autostart="false"></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({
|
||||
reconnectionOptions: {
|
||||
maxRetries: 600,
|
||||
retryIntervalMilliseconds: 1000
|
||||
},
|
||||
reconnectionHandler: {
|
||||
onConnectionDown: (options, error) => console.error(error),
|
||||
onConnectionUp: () => console.log("Client reconnected!")
|
||||
}
|
||||
}).then(() => {
|
||||
Object.defineProperty(Blazor.defaultReconnectionHandler, '_reconnectionDisplay', {
|
||||
get() {
|
||||
return this.__reconnectionDisplay;
|
||||
},
|
||||
set(value) {
|
||||
this.__reconnectionDisplay = {
|
||||
show: () => value.show(),
|
||||
update: (d) => value.update(d),
|
||||
rejected: (d) => document.location.reload()
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script src="~/lib/Chart.js/chart.js"></script>
|
||||
</body>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using EgwCoreLib.BlazorTest.Data;
|
||||
|
||||
using EgwCoreLib.BlazorTest;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
|
||||
@@ -7,7 +8,6 @@ var builder = WebApplication.CreateBuilder(args);
|
||||
// Add services to the container.
|
||||
builder.Services.AddRazorPages();
|
||||
builder.Services.AddServerSideBlazor();
|
||||
builder.Services.AddSingleton<WeatherForecastService>();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<WebPublishMethod>MSDeploy</WebPublishMethod>
|
||||
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
|
||||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||
<SiteUrlToLaunchAfterPublish>https://iis01.egalware.com/EgwCoreTest</SiteUrlToLaunchAfterPublish>
|
||||
<ExcludeApp_Data>false</ExcludeApp_Data>
|
||||
<ProjectGuid>9e5a3295-08bf-4603-9fa3-d38a2f1100e5</ProjectGuid>
|
||||
<SelfContained>false</SelfContained>
|
||||
<MSDeployServiceURL>https://iis01.egalware.com:8172/MsDeploy.axd</MSDeployServiceURL>
|
||||
<DeployIisAppPath>Default Web Site/EgwCoreTest</DeployIisAppPath>
|
||||
<RemoteSitePhysicalPath />
|
||||
<SkipExtraFilesOnServer>false</SkipExtraFilesOnServer>
|
||||
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
|
||||
<EnableMSDeployBackup>true</EnableMSDeployBackup>
|
||||
<EnableMsDeployAppOffline>true</EnableMsDeployAppOffline>
|
||||
<UserName>jenkins</UserName>
|
||||
<_SavePWD>true</_SavePWD>
|
||||
<_TargetId>IISWebDeploy</_TargetId>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -3,8 +3,11 @@
|
||||
<PageTitle>EgwCoreLib.BlazorTest</PageTitle>
|
||||
|
||||
<div class="page">
|
||||
<div class="@sideClass">
|
||||
<NavMenu />
|
||||
</div>
|
||||
<main class="w-100">
|
||||
<div class="w-100">
|
||||
<div class="top-row">
|
||||
<CmpTop></CmpTop>
|
||||
</div>
|
||||
|
||||
@@ -12,8 +15,13 @@
|
||||
@Body
|
||||
</article>
|
||||
|
||||
<div class="w-100">
|
||||
<NavBottom></NavBottom>
|
||||
<div class="fixed-bottom bottom-row">
|
||||
<CmpFooter></CmpFooter>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
@code{
|
||||
|
||||
protected bool navLarge { get; set; } = true;
|
||||
protected string sideClass { get; set; } = "sidebar";
|
||||
}
|
||||
@@ -8,22 +8,22 @@ main {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
|
||||
.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;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
/*justify-content: space-evenly;
|
||||
display: flex;*/
|
||||
}
|
||||
|
||||
.top-row ::deep a, .top-row .btn-link {
|
||||
white-space: nowrap;
|
||||
margin-left: 1.5rem;
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
|
||||
.top-row a:first-child {
|
||||
@@ -45,13 +45,34 @@ main {
|
||||
}
|
||||
}
|
||||
|
||||
.bottom-row {
|
||||
color: #dedede;
|
||||
background-color: #000000;
|
||||
height: 1.6rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
@media (max-width: 640.99px) {
|
||||
.main > div {
|
||||
padding-left: 0.5rem !important;
|
||||
padding-right: 0.5rem !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.page {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: 250px;
|
||||
width: 230px;
|
||||
height: 100vh;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.sidebarSmall {
|
||||
width: 80px;
|
||||
height: 100vh;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
@@ -64,7 +85,18 @@ main {
|
||||
}
|
||||
|
||||
.top-row, article {
|
||||
padding-left: 2rem !important;
|
||||
padding-right: 1.5rem !important;
|
||||
padding-left: 1rem !important;
|
||||
padding-right: 1.0rem !important;
|
||||
}
|
||||
|
||||
.bottom-row {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.main > div {
|
||||
/*padding-left: 0.5rem !important;
|
||||
padding-right: 0.5rem !important;*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<div class="top-row ps-3 navbar navbar-dark">
|
||||
@using EgwCoreLib.BlazorTest.Data
|
||||
<div class="top-row ps-3 navbar navbar-dark">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="">EgwCoreLib.BlazorTest</a>
|
||||
<button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
|
||||
@@ -9,26 +10,19 @@
|
||||
|
||||
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
|
||||
<nav class="flex-column">
|
||||
<div class="nav-item px-3">
|
||||
<div class="nav-item px-2">
|
||||
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
|
||||
<span class="oi oi-home" aria-hidden="true"></span> Home
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="TestCal">
|
||||
<span class="oi oi-list-rich" aria-hidden="true"></span> Test Calendario
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="counter">
|
||||
<span class="oi oi-plus" aria-hidden="true"></span> Counter
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="fetchdata">
|
||||
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
|
||||
</NavLink>
|
||||
</div>
|
||||
@foreach (var item in MenuList)
|
||||
{
|
||||
<div class="nav-item px-1">
|
||||
<NavLink class="nav-link px-2" href="@item.Key">
|
||||
<span class="fa-solid fa-wrench pe-2" aria-hidden="true"></span> @item.Value
|
||||
</NavLink>
|
||||
</div>
|
||||
}
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
@@ -41,4 +35,7 @@
|
||||
{
|
||||
collapseNavMenu = !collapseNavMenu;
|
||||
}
|
||||
|
||||
private Dictionary<string, string> MenuList { get; set; } = TestData.MenuList;
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"libraries": [
|
||||
{
|
||||
"library": "bootstrap@5.2.3",
|
||||
"destination": "wwwroot/lib/css/bootstrap/"
|
||||
"destination": "wwwroot/lib/bootstrap/"
|
||||
},
|
||||
{
|
||||
"library": "font-awesome@6.3.0",
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 564 568" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g id="Livello_3"><g><path d="M275.833,117.917l-156.25,-0.417l156.25,0.417Z" style="fill:none;fill-rule:nonzero;"/><path d="M179.167,361.25l62.5,-89.583l-62.5,89.583Z" style="fill:none;fill-rule:nonzero;"/><path d="M563.333,445.833l-443.333,0l-0.417,-328.333l156.25,0.417l83.334,-117.917l-359.167,0l1.667,567.5l561.666,-0.833l0,-120.834Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M290.417,201.25l-48.75,70.417l-62.5,89.583l384.166,-0.417l0,-360.833l-82.083,0l-140,200.833l-50.833,0.417Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M481.25,0l-122.083,0l122.083,0Z" style="fill:#fff;fill-rule:nonzero;"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,9 @@
|
||||
/*!
|
||||
* Chart.js v4.3.0
|
||||
* https://www.chartjs.org
|
||||
* (c) 2023 Chart.js Contributors
|
||||
* Released under the MIT License
|
||||
*/
|
||||
export { H as HALF_PI, b2 as INFINITY, P as PI, b1 as PITAU, b4 as QUARTER_PI, b3 as RAD_PER_DEG, T as TAU, b5 as TWO_THIRDS_PI, R as _addGrace, X as _alignPixel, a2 as _alignStartEnd, p as _angleBetween, b6 as _angleDiff, _ as _arrayUnique, a8 as _attachContext, as as _bezierCurveTo, ap as _bezierInterpolation, ax as _boundSegment, an as _boundSegments, a5 as _capitalize, am as _computeSegments, a9 as _createResolver, aK as _decimalPlaces, aV as _deprecated, aa as _descriptors, ah as _elementsEqual, N as _factorize, aO as _filterBetween, I as _getParentNode, q as _getStartAndCountOfVisiblePoints, W as _int16Range, aj as _isBetween, ai as _isClickEvent, M as _isDomSupported, C as _isPointInArea, S as _limitValue, aN as _longestText, aP as _lookup, B as _lookupByKey, V as _measureText, aT as _merger, aU as _mergerIf, ay as _normalizeAngle, y as _parseObjectDataRadialScale, aq as _pointInLine, ak as _readValueToProps, A as _rlookupByKey, w as _scaleRangesChanged, aG as _setMinAndMaxByKey, aW as _splitKey, ao as _steppedInterpolation, ar as _steppedLineTo, aB as _textX, a1 as _toLeftRightCenter, al as _updateBezierControlPoints, au as addRoundedRectPath, aJ as almostEquals, aI as almostWhole, Q as callback, af as clearCanvas, Y as clipArea, aS as clone, c as color, j as createContext, ad as debounce, h as defined, aE as distanceBetweenPoints, at as drawPoint, aD as drawPointLegend, F as each, e as easingEffects, O as finiteOrDefault, a$ as fontString, o as formatNumber, D as getAngleFromPoint, aR as getHoverColor, G as getMaximumSize, z as getRelativePosition, az as getRtlAdapter, a_ as getStyle, b as isArray, g as isFinite, a7 as isFunction, k as isNullOrUndef, x as isNumber, i as isObject, aQ as isPatternOrGradient, l as listenArrayEvents, aM as log10, a4 as merge, ab as mergeIf, aH as niceNum, aF as noop, aA as overrideTextDirection, J as readUsedSize, Z as renderText, r as requestAnimFrame, a as resolve, f as resolveObjectKey, aC as restoreTextDirection, ae as retinaScale, ag as setsEqual, s as sign, aY as splineCurve, aZ as splineCurveMonotone, K as supportsEventListenerOptions, L as throttled, U as toDegrees, n as toDimension, a0 as toFont, aX as toFontString, b0 as toLineHeight, E as toPadding, m as toPercentage, t as toRadians, av as toTRBL, aw as toTRBLCorners, ac as uid, $ as unclipArea, u as unlistenArrayEvents, v as valueOrDefault } from './chunks/helpers.segment.js';
|
||||
import '@kurkle/color';
|
||||
//# sourceMappingURL=helpers.js.map
|
||||
@@ -0,0 +1 @@
|
||||
export{H as HALF_PI,b2 as INFINITY,P as PI,b1 as PITAU,b4 as QUARTER_PI,b3 as RAD_PER_DEG,T as TAU,b5 as TWO_THIRDS_PI,R as _addGrace,X as _alignPixel,a2 as _alignStartEnd,p as _angleBetween,b6 as _angleDiff,_ as _arrayUnique,a8 as _attachContext,as as _bezierCurveTo,ap as _bezierInterpolation,ax as _boundSegment,an as _boundSegments,a5 as _capitalize,am as _computeSegments,a9 as _createResolver,aK as _decimalPlaces,aV as _deprecated,aa as _descriptors,ah as _elementsEqual,N as _factorize,aO as _filterBetween,I as _getParentNode,q as _getStartAndCountOfVisiblePoints,W as _int16Range,aj as _isBetween,ai as _isClickEvent,M as _isDomSupported,C as _isPointInArea,S as _limitValue,aN as _longestText,aP as _lookup,B as _lookupByKey,V as _measureText,aT as _merger,aU as _mergerIf,ay as _normalizeAngle,y as _parseObjectDataRadialScale,aq as _pointInLine,ak as _readValueToProps,A as _rlookupByKey,w as _scaleRangesChanged,aG as _setMinAndMaxByKey,aW as _splitKey,ao as _steppedInterpolation,ar as _steppedLineTo,aB as _textX,a1 as _toLeftRightCenter,al as _updateBezierControlPoints,au as addRoundedRectPath,aJ as almostEquals,aI as almostWhole,Q as callback,af as clearCanvas,Y as clipArea,aS as clone,c as color,j as createContext,ad as debounce,h as defined,aE as distanceBetweenPoints,at as drawPoint,aD as drawPointLegend,F as each,e as easingEffects,O as finiteOrDefault,a$ as fontString,o as formatNumber,D as getAngleFromPoint,aR as getHoverColor,G as getMaximumSize,z as getRelativePosition,az as getRtlAdapter,a_ as getStyle,b as isArray,g as isFinite,a7 as isFunction,k as isNullOrUndef,x as isNumber,i as isObject,aQ as isPatternOrGradient,l as listenArrayEvents,aM as log10,a4 as merge,ab as mergeIf,aH as niceNum,aF as noop,aA as overrideTextDirection,J as readUsedSize,Z as renderText,r as requestAnimFrame,a as resolve,f as resolveObjectKey,aC as restoreTextDirection,ae as retinaScale,ag as setsEqual,s as sign,aY as splineCurve,aZ as splineCurveMonotone,K as supportsEventListenerOptions,L as throttled,U as toDegrees,n as toDimension,a0 as toFont,aX as toFontString,b0 as toLineHeight,E as toPadding,m as toPercentage,t as toRadians,av as toTRBL,aw as toTRBLCorners,ac as uid,$ as unclipArea,u as unlistenArrayEvents,v as valueOrDefault}from"./chunks/helpers.segment.js";import"@kurkle/color";
|
||||