This commit is contained in:
Wiesław Šoltés 2022-02-06 21:18:38 +01:00
Родитель 5db94f96f0
Коммит c59cfd5143
27 изменённых файлов: 453 добавлений и 14 удалений

36
.github/workflows/pages.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,36 @@
name: Deploy to GitHub Pages
on:
push:
branches: [ master ]
jobs:
deploy-to-github-pages:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v1.9.0
- name: Install wasm-tools
run: dotnet workload install wasm-tools
- name: Publish .NET Project
run: dotnet publish src/PackageReferenceEditor.Web/PackageReferenceEditor.Web.csproj -c Release -o release --nologo
- name: Change base-tag in index.html from / to PackageReferenceEditor
run: sed -i 's/<base href="\/" \/>/<base href="\/PackageReferenceEditor\/" \/>/g' release/wwwroot/index.html
- name: copy index.html to 404.html
run: cp release/wwwroot/index.html release/wwwroot/404.html
- name: Add .nojekyll file
run: touch release/wwwroot/.nojekyll
- name: Commit wwwroot to GitHub Pages
uses: JamesIves/github-pages-deploy-action@4.1.7
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH: gh-pages
FOLDER: release/wwwroot

Просмотреть файл

@ -42,6 +42,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "props", "props", "{B8ACA4FA
build\ReferenceAssemblies.props = build\ReferenceAssemblies.props
build\XUnit.props = build\XUnit.props
build\SourceLink.props = build\SourceLink.props
build\Avalonia.Web.Blazor.props = build\Avalonia.Web.Blazor.props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{8A8848E4-0FF5-45C2-84AF-4B9A0F6172C3}"
@ -58,6 +59,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageReferenceEditor.Unit
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageReferenceEditor.Desktop", "src\PackageReferenceEditor.Desktop\PackageReferenceEditor.Desktop.csproj", "{C86BF319-6F07-4ADD-B912-AF96267A8491}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageReferenceEditor.Web", "src\PackageReferenceEditor.Web\PackageReferenceEditor.Web.csproj", "{2F17D71C-A30C-47ED-A22D-B9A714C809C8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -84,6 +87,10 @@ Global
{C86BF319-6F07-4ADD-B912-AF96267A8491}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C86BF319-6F07-4ADD-B912-AF96267A8491}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C86BF319-6F07-4ADD-B912-AF96267A8491}.Release|Any CPU.Build.0 = Release|Any CPU
{2F17D71C-A30C-47ED-A22D-B9A714C809C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2F17D71C-A30C-47ED-A22D-B9A714C809C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2F17D71C-A30C-47ED-A22D-B9A714C809C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2F17D71C-A30C-47ED-A22D-B9A714C809C8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -97,6 +104,7 @@ Global
{41CB9D2A-BCCC-4227-A9B9-6757FDD0E0B6} = {49F71003-4C84-42F3-A10A-6E2CA97DA1DB}
{FCEA0F49-77EE-408F-A319-EFDDD3F9A9DD} = {38368485-AFBE-481D-9D39-CF7319AD5934}
{C86BF319-6F07-4ADD-B912-AF96267A8491} = {5B7FC42E-07EA-474F-8B8C-DAD199066922}
{2F17D71C-A30C-47ED-A22D-B9A714C809C8} = {5B7FC42E-07EA-474F-8B8C-DAD199066922}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {33B60D57-896D-43D2-A23B-244BADB28D81}

Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PackageReference Include="Avalonia.Web.Blazor" Version="0.10.12" />
</ItemGroup>
</Project>

Просмотреть файл

@ -1,4 +1,4 @@
<Application x:Class="PackageReferenceEditor.Avalonia.App"
<Application x:Class="PackageReferenceEditor.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Styles>

Просмотреть файл

@ -7,9 +7,9 @@ using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Newtonsoft.Json;
using PackageReferenceEditor.Avalonia.Views;
using PackageReferenceEditor.Views;
namespace PackageReferenceEditor.Avalonia;
namespace PackageReferenceEditor;
public class App : Application
{
@ -128,4 +128,4 @@ public class App : Application
}
}
}
}
}

Просмотреть файл

@ -6,7 +6,7 @@
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<IsPackable>False</IsPackable>
<Nullable>enable</Nullable>
<RootNamespace>PackageReferenceEditor.Avalonia</RootNamespace>
<RootNamespace>PackageReferenceEditor</RootNamespace>
</PropertyGroup>
<PropertyGroup>

Просмотреть файл

@ -1,4 +1,4 @@
<UserControl x:Class="PackageReferenceEditor.Avalonia.Views.MainView"
<UserControl x:Class="PackageReferenceEditor.Views.MainView"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
UseLayoutRounding="True" Focusable="True">

Просмотреть файл

@ -3,7 +3,7 @@ using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
namespace PackageReferenceEditor.Avalonia.Views;
namespace PackageReferenceEditor.Views;
public class MainView : UserControl
{
@ -50,7 +50,12 @@ public class MainView : UserControl
if (DataContext is ReferenceEditor vm)
{
var dlg = new OpenFolderDialog();
var path = await dlg.ShowAsync((Window?)this.VisualRoot);
var window = (Window?)this.VisualRoot;
if (window is null)
{
return;
}
var path = await dlg.ShowAsync(window);
if (!string.IsNullOrWhiteSpace(path))
{
vm.SearchPath = path;
@ -66,4 +71,4 @@ public class MainView : UserControl
}
}
}
}
}

Просмотреть файл

@ -1,7 +1,7 @@
<Window x:Class="PackageReferenceEditor.Avalonia.Views.MainWindow"
<Window x:Class="PackageReferenceEditor.Views.MainWindow"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:views="clr-namespace:PackageReferenceEditor.Avalonia.Views;assembly=PackageReferenceEditor.Base"
xmlns:views="clr-namespace:PackageReferenceEditor.Views;assembly=PackageReferenceEditor.Base"
UseLayoutRounding="True" RenderOptions.BitmapInterpolationMode="HighQuality"
WindowState="Normal" WindowStartupLocation="CenterScreen"
Title="PackageReferenceEditor" Height="600" Width="800">

Просмотреть файл

@ -2,7 +2,7 @@
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace PackageReferenceEditor.Avalonia.Views;
namespace PackageReferenceEditor.Views;
public partial class MainWindow : Window
{
@ -18,4 +18,4 @@ public partial class MainWindow : Window
{
AvaloniaXamlLoader.Load(this);
}
}
}

Просмотреть файл

@ -1,5 +1,5 @@
using Avalonia;
using PackageReferenceEditor.Avalonia;
using PackageReferenceEditor;
namespace PackageReferenceEditor.Desktop;

Просмотреть файл

@ -0,0 +1,10 @@
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>

Просмотреть файл

@ -0,0 +1,14 @@
using Avalonia.Web.Blazor;
namespace PackageReferenceEditor.Web;
public partial class App
{
protected override void OnParametersSet()
{
base.OnParametersSet();
WebAppBuilder.Configure<PackageReferenceEditor.App>()
.SetupWithSingleViewLifetime();
}
}

Просмотреть файл

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<linker>
<assembly fullname="PackageReferenceEditor.Web" preserve="All" />
</linker>

Просмотреть файл

@ -0,0 +1,68 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>False</IsPackable>
<Nullable>enable</Nullable>
<RootNamespace>PackageReferenceEditor.Web</RootNamespace>
<EmccTotalMemory>16777216</EmccTotalMemory>
<BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>
<BlazorWebAssemblyPreserveCollationData>false</BlazorWebAssemblyPreserveCollationData>
</PropertyGroup>
<!-- In debug, make builds faster by reducing optimizations -->
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<WasmNativeStrip>false</WasmNativeStrip>
<EmccCompileOptimizationFlag>-O1</EmccCompileOptimizationFlag>
<RunAOTCompilation>false</RunAOTCompilation>
<Optimize>true</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<Optimize>true</Optimize>
<WasmNativeStrip>true</WasmNativeStrip>
<EmccCompileOptimizationFlag>-O3</EmccCompileOptimizationFlag>
<EmccLinkOptimizationFlag>-O3</EmccLinkOptimizationFlag>
<RunAOTCompilation>false</RunAOTCompilation>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebuggerSupport>false</DebuggerSupport>
<EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
<EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
<EventSourceSupport>false</EventSourceSupport>
<HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
<InvariantGlobalization>true</InvariantGlobalization>
<MetadataUpdaterSupport>false</MetadataUpdaterSupport>
<UseNativeHttpHandler>true</UseNativeHttpHandler>
<UseSystemResourceKeys>true</UseSystemResourceKeys>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>link</TrimMode>
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
</PropertyGroup>
<ItemGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<BlazorLinkerDescriptor Include="LinkerConfig.xml" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.CSharp" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.CSharp.Scripting" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.Scripting" />
<TrimmableAssembly Include="Avalonia.Controls.DataGrid" />
<TrimmableAssembly Include="Avalonia.Themes.Default" />
</ItemGroup>
<PropertyGroup>
<BlazorEnableCompression>true</BlazorEnableCompression>
</PropertyGroup>
<Import Project="..\..\build\Avalonia.Web.Blazor.props" />
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.0" PrivateAssets="all" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PackageReferenceEditor.Base\PackageReferenceEditor.Base.csproj" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,5 @@
@page "/"
@using Avalonia.Web.Blazor
<AvaloniaView />

Просмотреть файл

@ -0,0 +1,26 @@
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.DependencyInjection;
namespace PackageReferenceEditor.Web;
public class Program
{
public static async Task Main(string[] args)
{
await CreateHostBuilder(args).Build().RunAsync();
}
public static WebAssemblyHostBuilder CreateHostBuilder(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
return builder;
}
}

Просмотреть файл

@ -0,0 +1,30 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:13961",
"sslPort": 44319
}
},
"profiles": {
"PackageReferenceEditor.Web - IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"PackageReferenceEditor.Web": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

Просмотреть файл

@ -0,0 +1,7 @@
@inherits LayoutComponentBase
<div class="page">
<div class="main">
@Body
</div>
</div>

Просмотреть файл

@ -0,0 +1,70 @@
.page {
position: relative;
display: flex;
flex-direction: column;
}
.main {
flex: 1;
}
.sidebar {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
}
.top-row {
background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5;
justify-content: flex-end;
height: 3.5rem;
display: flex;
align-items: center;
}
.top-row ::deep a, .top-row .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
}
.top-row a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
@media (max-width: 640.98px) {
.top-row:not(.auth) {
display: none;
}
.top-row.auth {
justify-content: space-between;
}
.top-row a, .top-row .btn-link {
margin-left: 0;
}
}
@media (min-width: 641px) {
.page {
flex-direction: row;
}
.sidebar {
width: 250px;
height: 100vh;
position: sticky;
top: 0;
}
.top-row {
position: sticky;
top: 0;
z-index: 1;
}
.main > div {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
}

Просмотреть файл

@ -0,0 +1,10 @@
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using PackageReferenceEditor.Web
@using PackageReferenceEditor.Web.Shared

Просмотреть файл

@ -0,0 +1,5 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30.4661 34.928C30.5364 34.928 30.6052 34.928 30.6754 34.928C32.8596 34.928 34.654 33.2918 34.9053 31.1752L34.9356 16.9955C34.6872 7.56697 26.9662 0 17.4777 0C7.83263 0 0.0137329 7.8189 0.0137329 17.464C0.0137329 27.0059 7.66618 34.7631 17.1687 34.928H30.4661Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.5239 5.948C12.0268 5.948 7.42967 9.80117 6.286 14.954C7.38092 15.2609 8.18385 16.2664 8.18385 17.4593C8.18385 18.6523 7.38092 19.6577 6.286 19.9647C7.42966 25.1175 12.0268 28.9706 17.5239 28.9706C19.525 28.9706 21.4068 28.4601 23.0462 27.562V28.8927H29.0352V17.9365C29.0407 17.7908 29.0352 17.6063 29.0352 17.4593C29.0352 11.1018 23.8814 5.948 17.5239 5.948ZM12.0098 17.4593C12.0098 14.414 14.4786 11.9452 17.5239 11.9452C20.5693 11.9452 23.038 14.414 23.038 17.4593C23.038 20.5047 20.5693 22.9734 17.5239 22.9734C14.4786 22.9734 12.0098 20.5047 12.0098 17.4593Z" fill="#8B44AC"/>
<path d="M7.36841 17.4517C7.36841 18.4691 6.54368 19.2938 5.52631 19.2938C4.50894 19.2938 3.6842 18.4691 3.6842 17.4517C3.6842 16.4343 4.50894 15.6096 5.52631 15.6096C6.54368 15.6096 7.36841 16.4343 7.36841 17.4517Z" fill="#8B44AC"/>
</svg>

После

Ширина:  |  Высота:  |  Размер: 1.2 KiB

Просмотреть файл

@ -0,0 +1,79 @@
html, body {
font-family: "Nunito", sans-serif;
margin: 0;
height: 100vh;
overflow: hidden;
}
a {
text-decoration: none;
color: white;
}
#blazor-error-ui {
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}
.canvas-container {
opacity:1;
position:fixed;
width:100%;
height:100%;
top:0px;
left:0px;
z-index:500;
}
canvas
{
opacity:1;
position:fixed;
width:100%;
height:100%;
top:0px;
left:0px;
z-index:500;
}
#app, .page {
height: 100%;
background: #171C2C;
color: white;
}
.navbar-brand {
font-size: 22px;
}
.overlay{
opacity:0.0;
position:fixed;
width:100vw;
height:100vh;
top:0px;
left:0px;
z-index:1000;
}
#splash {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
min-height: 100vh;
}

Двоичные данные
src/PackageReferenceEditor.Web/wwwroot/favicon.ico Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 172 KiB

Просмотреть файл

@ -0,0 +1,54 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>PackageReferenceEditor</title>
<base href="/" />
<link href="css/app.css" rel="stylesheet" />
</head>
<body>
<div id="app">
<div id="splash">
<h2>Powered by</h2>
<a class="navbar-brand" href="https://www.avaloniaui.net/" target="_blank">
<img src="Logo.svg" alt="Avalonia Logo" width="30" height="24" class="d-inline-block align-text-top">
Avalonia
</a>
</div>
</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
<script src="js/app.js"></script>
<script src="_framework/blazor.webassembly.js" autostart="true"></script>
<!--<script type="module">
import { BrotliDecode } from './js/decode.min.js';
Blazor.start({
loadBootResource: function (type, name, defaultUri, integrity) {
if (type !== 'dotnetjs' && location.hostname !== 'localhost') {
return (async function () {
const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
if (!response.ok) {
throw new Error(response.statusText);
}
const originalResponseBuffer = await response.arrayBuffer();
const originalResponseArray = new Int8Array(originalResponseBuffer);
const decompressedResponseArray = BrotliDecode(originalResponseArray);
const contentType = type ===
'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
return new Response(decompressedResponseArray,
{ headers: { 'content-type': contentType } });
})();
}
}
});
</script>-->
</body>
</html>

Просмотреть файл

@ -0,0 +1 @@


1
src/PackageReferenceEditor.Web/wwwroot/js/decode.min.js поставляемый Normal file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны