Add web version
This commit is contained in:
Родитель
accc720bfd
Коммит
5398c3c797
|
@ -0,0 +1,36 @@
|
|||
name: Deploy to GitHub Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
|
||||
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 samples/SpreadsheetSample.Web/SpreadsheetSample.Web.csproj -c Release -o release --nologo
|
||||
|
||||
- name: Change base-tag in index.html from / to Spreadsheet
|
||||
run: sed -i 's/<base href="\/" \/>/<base href="\/Spreadsheet\/" \/>/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
|
|
@ -49,6 +49,7 @@ ProjectSection(SolutionItems) = preProject
|
|||
build\SourceLink.props = build\SourceLink.props
|
||||
build\XUnit.props = build\XUnit.props
|
||||
build\DocumentFormat.OpenXml.props = build\DocumentFormat.OpenXml.props
|
||||
build\Avalonia.Web.Blazor.props = build\Avalonia.Web.Blazor.props
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spreadsheet.UnitTests", "tests\Spreadsheet.UnitTests\Spreadsheet.UnitTests.csproj", "{77965AB6-3756-4ED0-BE3D-FF0EA4CEFCE8}"
|
||||
|
@ -57,6 +58,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "_build", "build\build\_buil
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpreadsheetSample.Desktop", "samples\SpreadsheetSample.Desktop\SpreadsheetSample.Desktop.csproj", "{0C3B3788-6F93-4141-8759-8AE2B09508FF}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpreadsheetSample.Web", "samples\SpreadsheetSample.Web\SpreadsheetSample.Web.csproj", "{CF2F2875-B13E-427A-B506-5FA3DEBEAFDC}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -83,6 +86,10 @@ Global
|
|||
{0C3B3788-6F93-4141-8759-8AE2B09508FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0C3B3788-6F93-4141-8759-8AE2B09508FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0C3B3788-6F93-4141-8759-8AE2B09508FF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CF2F2875-B13E-427A-B506-5FA3DEBEAFDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CF2F2875-B13E-427A-B506-5FA3DEBEAFDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CF2F2875-B13E-427A-B506-5FA3DEBEAFDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CF2F2875-B13E-427A-B506-5FA3DEBEAFDC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{A2725609-49CC-4C22-A9FB-C2EDFEB0C7B1} = {B8DCFA10-262E-44CB-BBA8-A647AE3B2181}
|
||||
|
@ -93,5 +100,6 @@ Global
|
|||
{77965AB6-3756-4ED0-BE3D-FF0EA4CEFCE8} = {29F297F4-F15E-4207-903A-F38C98F2BED3}
|
||||
{FBC2BF04-87A5-434D-BF13-E3584A2E92AC} = {B8DCFA10-262E-44CB-BBA8-A647AE3B2181}
|
||||
{0C3B3788-6F93-4141-8759-8AE2B09508FF} = {082D1C12-E076-42BD-B58C-7E21A6ECDA45}
|
||||
{CF2F2875-B13E-427A-B506-5FA3DEBEAFDC} = {082D1C12-E076-42BD-B58C-7E21A6ECDA45}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -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>
|
|
@ -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,16 @@
|
|||
using Avalonia.ReactiveUI;
|
||||
using Avalonia.Web.Blazor;
|
||||
|
||||
namespace SpreadsheetSample.Web;
|
||||
|
||||
public partial class App
|
||||
{
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
base.OnParametersSet();
|
||||
|
||||
WebAppBuilder.Configure<SpreadsheetSample.App>()
|
||||
.UseReactiveUI()
|
||||
.SetupWithSingleViewLifetime();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<linker>
|
||||
<assembly fullname="SpreadsheetSample.Web" preserve="All" />
|
||||
</linker>
|
|
@ -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 SpreadsheetSample.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": {
|
||||
"SpreadsheetSample.Web - IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"SpreadsheetSample.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,68 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<IsPackable>False</IsPackable>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>SpreadsheetSample.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="..\SpreadsheetSample.Base\SpreadsheetSample.Base.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -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 SpreadsheetSample.Web
|
||||
@using SpreadsheetSample.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;
|
||||
}
|
Двоичный файл не отображается.
После Ширина: | Высота: | Размер: 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>Spreadsheet Sample</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 @@
|
|||
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Загрузка…
Ссылка в новой задаче