Browse Source

Use KSP template

mj-deploy
Standa Lukeš 4 years ago
parent
commit
8d3347aa3b
  1. 1
      frontend/public/grafik.html
  2. 13
      frontend/src/GraphNode.svelte
  3. 4
      frontend/src/main.ts
  4. 34
      server/.vscode/launch.json
  5. 42
      server/.vscode/tasks.json
  6. 73
      server/Ksp.WebServer/Controllers/GrafikPageController.cs
  7. 2
      server/Ksp.WebServer/Ksp.WebServer.csproj

1
frontend/public/grafik.html

@ -14,5 +14,6 @@
</head>
<body>
<div id="svelte-root"></div>
</body>
</html>

13
frontend/src/GraphNode.svelte

@ -27,11 +27,20 @@
});
</script>
<style>
:global(g):hover > ellipse {
fill: #ffb3a2
}
ellipse {
fill: #69b3a2
}
</style>
<g on:mouseenter={enter} on:mouseleave={leave}>
{#if !hovering}
<ellipse rx={ellipse_rx} ry={ellipse_ry} style="fill: #69b3a2" {cx} {cy} />
<ellipse rx={ellipse_rx} ry={ellipse_ry} {cx} {cy} />
{:else}
<ellipse rx={ellipse_rx} ry={ellipse_ry} style="fill: #ffb3a2" {cx} {cy} />
<ellipse rx={ellipse_rx} ry={ellipse_ry} {cx} {cy} />
{/if}
<text
bind:this={text_element}

4
frontend/src/main.ts

@ -1,10 +1,10 @@
import App from './App.svelte';
const app = new App({
target: document.body,
target: document.getElementById("svelte-root")!,
props: {
name: 'world'
}
});
export default app;
export default app;

34
server/.vscode/launch.json

@ -0,0 +1,34 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/Ksp.WebServer/bin/Debug/netcoreapp3.1/Ksp.WebServer.dll",
"args": [],
"cwd": "${workspaceFolder}/Ksp.WebServer",
"stopAtEntry": false,
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}

42
server/.vscode/tasks.json

@ -0,0 +1,42 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Ksp.WebServer/Ksp.WebServer.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/Ksp.WebServer/Ksp.WebServer.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"${workspaceFolder}/Ksp.WebServer/Ksp.WebServer.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
}

73
server/Ksp.WebServer/Controllers/GrafikPageController.cs

@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using AngleSharp;
using AngleSharp.Dom;
using System.Net.Http;
using System.Net.Http.Headers;
using AngleSharp.Html;
namespace Ksp.WebServer.Controllers
{
[ApiController]
[Route("grafik")]
public class GrafikPageController : ControllerBase
{
private readonly ILogger<TasksController> logger;
private readonly IWebHostEnvironment env;
public GrafikPageController(
ILogger<TasksController> logger,
IWebHostEnvironment env)
{
this.env = env;
this.logger = logger;
}
async Task<string> FetchBlankPage()
{
var c = new HttpClient();
var rq = new HttpRequestMessage(HttpMethod.Get, "https://ksp-test.ks.matfyz.cz/blank");
rq.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
rq.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml"));
rq.Headers.Authorization =
new AuthenticationHeaderValue("Basic", "SECRET");
if (HttpContext.Request.Headers.TryGetValue("Cookie", out var x))
rq.Headers.Add("Cookie", x.AsEnumerable());
var rs = await c.SendAsync(rq);
return await rs.Content.ReadAsStringAsync();
}
[HttpGet]
public async Task<IActionResult> Get()
{
var grafikPage = await System.IO.File.ReadAllTextAsync(Path.Combine(env.ContentRootPath, "../../frontend/public/grafik.html"));
var p = new AngleSharp.Html.Parser.HtmlParser();
var grafik = p.ParseDocument(grafikPage);
var kspTemplate = p.ParseDocument(await FetchBlankPage());
var innerBody = grafik.Body;
innerBody.Replace(kspTemplate.Body);
var page = grafik.Body.QuerySelector("#page");
page.Replace(innerBody.ChildNodes.ToArray());
foreach(var headElement in kspTemplate.Head.QuerySelectorAll("link, script"))
{
headElement.RemoveFromParent();
grafik.Head.AppendChild(headElement);
}
var outputHtml = new StringWriter();
grafik.ToHtml(outputHtml, new PrettyMarkupFormatter() { Indentation = "\t", NewLine = "\n" });
return this.Content(outputHtml.ToString(), "text/html");
}
}
}

2
server/Ksp.WebServer/Ksp.WebServer.csproj

@ -5,7 +5,9 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AngleSharp" Version="0.14.0" />
<PackageReference Include="AspNetCore.Proxy" Version="4.1.0" />
<PackageReference Include="XUnit.Assert" Version="2.4.1" />
</ItemGroup>