CrazyIter_Bin 5 月之前
父節點
當前提交
4aab4847a4
共有 47 個文件被更改,包括 403 次插入785 次删除
  1. 2 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/.browserslistrc
  2. 21 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/.gitignore
  3. 24 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/README.md
  4. 5 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/babel.config.js
  5. 22 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/package.json
  6. 5 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/postcss.config.js
  7. 0 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/public/favicon.ico
  8. 17 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/public/index.html
  9. 17 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/src/App.vue
  10. 二進制
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/src/assets/logo.png
  11. 5 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/src/views/About.vue
  12. 55 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/src/views/Home.vue
  13. 39 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/tsconfig.json
  14. 19 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/tslint.json
  15. 6 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/vue.config.js
  16. 32 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Controllers/HomeController.cs
  17. 11 5
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Controllers/WeatherForecastController.cs
  18. 0 6
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/IES.ExamServer.Server.http
  19. 53 18
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/IES.ExamServer.csproj
  20. 9 0
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Models/ErrorViewModel.cs
  21. 38 13
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Program.cs
  22. 12 29
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Properties/launchSettings.json
  23. 5 3
      TEAMModelOS.Extension/IES.Exam/IES.ExamServer/WeatherForecast.cs
  24. 0 6
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/.editorconfig
  25. 0 30
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/.gitignore
  26. 0 11
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/IES.ExamWebview.esproj
  27. 0 35
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/README.md
  28. 0 17
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/eslint.config.js
  29. 0 13
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/index.html
  30. 0 8
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/jsconfig.json
  31. 0 10
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/nuget.config
  32. 0 23
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/package.json
  33. 0 47
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/App.vue
  34. 0 86
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/assets/base.css
  35. 0 1
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/assets/logo.svg
  36. 0 35
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/assets/main.css
  37. 0 87
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/HelloWorld.vue
  38. 0 90
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/TheWelcome.vue
  39. 0 87
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/WelcomeItem.vue
  40. 0 7
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconCommunity.vue
  41. 0 7
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconDocumentation.vue
  42. 0 7
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconEcosystem.vue
  43. 0 7
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconSupport.vue
  44. 0 19
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconTooling.vue
  45. 0 6
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/main.js
  46. 0 57
      TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/vite.config.js
  47. 6 15
      TEAMModelOS.sln

+ 2 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/.browserslistrc

@@ -0,0 +1,2 @@
+> 1%
+last 2 versions

+ 21 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/.gitignore

@@ -0,0 +1,21 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 24 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/README.md

@@ -0,0 +1,24 @@
+# clientapp
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).

+ 5 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset'
+  ]
+}

+ 22 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/package.json

@@ -0,0 +1,22 @@
+{
+  "name": "ies.examwebview",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
+    "fix-memory-limit": "cross-env LIMIT=4096 increase-memory-limit",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "axios": "^0.21.4",
+    "core-js": "^3.1.2",
+    "vue": "^2.6.10",
+    "vue-router": "^3.0.6"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "^4.0.0",
+    "@vue/cli-service": "^4.5.13",
+    "vue-template-compiler": "^2.6.10"
+  }
+}

+ 5 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/postcss.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  plugins: {
+    autoprefixer: {}
+  }
+}

TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/public/favicon.ico → TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/public/favicon.ico


+ 17 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/public/index.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title>clientapp</title>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but clientapp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+</html>

+ 17 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/src/App.vue

@@ -0,0 +1,17 @@
+<template>
+  <div id="app">
+    <div id="nav">
+      <router-link to="/">Home</router-link> |
+      <router-link to="/about">About</router-link>
+    </div>
+    <router-view/>
+  </div>
+</template>
+
+<script lang="ts">
+import { Component, Vue} from 'vue-property-decorator';
+@Component
+export default class App extends Vue {
+
+}
+</script>

二進制
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/src/assets/logo.png


+ 5 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/src/views/About.vue

@@ -0,0 +1,5 @@
+<template>
+  <div class="about">
+    <h1>This is an about page</h1>
+  </div>
+</template>

+ 55 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/src/views/Home.vue

@@ -0,0 +1,55 @@
+<template>
+  <div class="home">
+    <img alt="Vue logo" src="../assets/logo.png">
+    <h1>Welcome to Your Vue.js App</h1>
+     <table>
+      <thead>
+        <tr>
+          <th v-for="(item, index) in forecastCols" v-bind:key="index"> 
+            {{ item.label | capitalize }}
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr v-for="(item, index) in forecasts" v-bind:key="index">
+          <td v-for="(col, index) in forecastCols" v-bind:key="index">
+            {{ col.field(item) }}
+          </td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</template>
+
+<script lang="ts">
+import { Component, Vue} from 'vue-property-decorator';
+import { IWeatherForecast } from '../models/IWeatherForecast';
+import axios from 'axios';
+
+@Component({
+  filters: {
+    capitalize: (value: string) => {
+      if (!value) { return ''; }
+      value = value.toString();
+      return value.charAt(0).toUpperCase() + value.slice(1);
+    },
+  },
+})
+export default class Home extends Vue {
+  private forecasts: IWeatherForecast[] = [{ summary: 'No data.' } as IWeatherForecast];
+  private forecastCols: any[] = [
+    { name: 'Summary', label: 'Summary', field: (row: IWeatherForecast) => row.summary },
+    { name: 'F',       label: 'F',       field: (row: IWeatherForecast) => row.temperatureF },
+    { name: 'C',       label: 'C',       field: (row: IWeatherForecast) => row.temperatureC },
+    { name: 'Date',     label: 'Date',   field: (row: IWeatherForecast) => row.date },
+  ];
+
+  public async mounted() {
+    try {
+      this.forecasts = (await axios.get('api/weatherforecast')).data;
+    } catch {
+      this.forecasts = [{ summary: 'No data.' } as IWeatherForecast];
+    }
+  }
+}
+</script>

+ 39 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/tsconfig.json

@@ -0,0 +1,39 @@
+{
+  "compilerOptions": {
+    "target": "esnext",
+    "module": "esnext",
+    "strict": true,
+    "jsx": "preserve",
+    "importHelpers": true,
+    "moduleResolution": "node",
+    "experimentalDecorators": true,
+    "esModuleInterop": true,
+    "allowSyntheticDefaultImports": true,
+    "sourceMap": true,
+    "baseUrl": ".",
+    "types": [
+      "webpack-env"
+    ],
+    "paths": {
+      "@/*": [
+        "src/*"
+      ]
+    },
+    "lib": [
+      "esnext",
+      "dom",
+      "dom.iterable",
+      "scripthost"
+    ]
+  },
+  "include": [
+    "src/**/*.ts",
+    "src/**/*.tsx",
+    "src/**/*.vue",
+    "tests/**/*.ts",
+    "tests/**/*.tsx"
+  ],
+  "exclude": [
+    "node_modules"
+  ]
+}

+ 19 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/tslint.json

@@ -0,0 +1,19 @@
+{
+  "defaultSeverity": "warning",
+  "extends": [
+    "tslint:recommended"
+  ],
+  "linterOptions": {
+    "exclude": [
+      "node_modules/**"
+    ]
+  },
+  "rules": {
+    "indent": [true, "spaces", 2],
+    "interface-name": false,
+    "no-consecutive-blank-lines": false,
+    "object-literal-sort-keys": false,
+    "ordered-imports": false,
+    "quotemark": [true, "single"]
+  }
+}

+ 6 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/ClientApp/vue.config.js

@@ -0,0 +1,6 @@
+// vue.config.js
+module.exports = {
+    devServer: {
+      progress: false
+    }
+  }

+ 32 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Controllers/HomeController.cs

@@ -0,0 +1,32 @@
+using IES.ExamServer.Models;
+using Microsoft.AspNetCore.Mvc;
+using System.Diagnostics;
+
+namespace IES.ExamServer.Controllers
+{
+    public class HomeController : Controller
+    {
+        private readonly ILogger<HomeController> _logger;
+
+        public HomeController(ILogger<HomeController> logger)
+        {
+            _logger = logger;
+        }
+
+        public IActionResult Index()
+        {
+            return View();
+        }
+
+        public IActionResult Privacy()
+        {
+            return View();
+        }
+
+        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
+        public IActionResult Error()
+        {
+            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
+        }
+    }
+}

+ 11 - 5
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Controllers/WeatherForecastController.cs

@@ -1,9 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
 
-namespace IES.ExamServer.Server.Controllers
+namespace VueCliSample.Controllers
 {
     [ApiController]
-    [Route("[controller]")]
+    [Route("api/[controller]")]
     public class WeatherForecastController : ControllerBase
     {
         private static readonly string[] Summaries = new[]
@@ -21,11 +26,12 @@ namespace IES.ExamServer.Server.Controllers
         [HttpGet]
         public IEnumerable<WeatherForecast> Get()
         {
+            var rng = new Random();
             return Enumerable.Range(1, 5).Select(index => new WeatherForecast
             {
-                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
-                TemperatureC = Random.Shared.Next(-20, 55),
-                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
+                Date = DateTime.Now.AddDays(index),
+                TemperatureC = rng.Next(-20, 55),
+                Summary = Summaries[rng.Next(Summaries.Length)]
             })
             .ToArray();
         }

+ 0 - 6
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/IES.ExamServer.Server.http

@@ -1,6 +0,0 @@
-@IES.ExamServer.Server_HostAddress = http://localhost:5147
-
-GET {{IES.ExamServer.Server_HostAddress}}/weatherforecast/
-Accept: application/json
-
-###

+ 53 - 18
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/IES.ExamServer.csproj

@@ -1,24 +1,59 @@
 <Project Sdk="Microsoft.NET.Sdk.Web">
 
-  <PropertyGroup>
-    <TargetFramework>net8.0</TargetFramework>
-    <Nullable>enable</Nullable>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <SpaRoot>..\IES.ExamWebview</SpaRoot>
-    <SpaProxyLaunchCommand>npm run dev</SpaProxyLaunchCommand>
-    <SpaProxyServerUrl>https://localhost:5173</SpaProxyServerUrl>
-  </PropertyGroup>
+	<PropertyGroup>
+		<TargetFramework>net6.0</TargetFramework>
+		<Nullable>enable</Nullable>
+		<ImplicitUsings>enable</ImplicitUsings>
+	</PropertyGroup>
+	<PropertyGroup>
+		<SpaRoot>ClientApp\</SpaRoot>
+		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
+	</PropertyGroup>
 
-  <ItemGroup>
-    <ProjectReference Include="..\IES.ExamWebview\IES.ExamWebview.esproj">
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
+	<ItemGroup>
+		<!-- Don't publish the SPA source files, but do show them in the project files list -->
+		<Content Remove="$(SpaRoot)**" />
+		<None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
+	</ItemGroup>
 
-  <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.SpaProxy">
-      <Version>8.*-*</Version>
-    </PackageReference>
-  </ItemGroup>
+	<ItemGroup>
+		<Folder Include="ClientApp\src\models\" />
+		<Folder Include="wwwroot\" />
+	</ItemGroup>
 
+	<ItemGroup>
+	  <PackageReference Include="VueCliMiddleware" Version="6.0.0" />
+	</ItemGroup>
+	<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build">
+	<!-- Build Target:  Ensure Node.js is installed -->
+	<Exec Command="node --version" ContinueOnError="true">
+		<Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
+	</Exec>
+	<Exec Command="npm --version" ContinueOnError="true">
+		<Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
+	</Exec>
+	<Error Condition="'$(ErrorCode)' != '0'" Text="Node.js and npm are required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
+	</Target>
+
+	<Target Name="EnsureNodeModulesInstalled" BeforeTargets="Build" Inputs="package.json" Outputs="packages-lock.json" Condition="!Exists('$(SpaRoot)node_modules')">
+		<!-- Build Target: Restore NPM packages using npm -->
+		<Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
+		<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
+	</Target>
+
+	<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
+		<!-- Build Target: Run webpack dist build -->
+		<Message Importance="high" Text="Running npm build..." />
+		<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />
+
+		<!-- Include the newly-built files in the publish output -->
+		<ItemGroup>
+			<DistFiles Include="$(SpaRoot)dist\**" />
+			<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
+				<RelativePath>%(DistFiles.Identity)</RelativePath>
+				<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
+				<ExcludeFromSingleFile>True</ExcludeFromSingleFile>
+			</ResolvedFileToPublish>
+		</ItemGroup>
+	</Target>
 </Project>

+ 9 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Models/ErrorViewModel.cs

@@ -0,0 +1,9 @@
+namespace IES.ExamServer.Models
+{
+    public class ErrorViewModel
+    {
+        public string? RequestId { get; set; }
+
+        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
+    }
+}

+ 38 - 13
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Program.cs

@@ -1,32 +1,57 @@
-namespace IES.ExamServer.Server
+using Microsoft.AspNetCore.SpaServices;
+using VueCliMiddleware;
+
+namespace IES.ExamServer
 {
     public class Program
     {
         public static void Main(string[] args)
         {
             var builder = WebApplication.CreateBuilder(args);
-
+            builder.Services.AddSpaStaticFiles(opt => opt.RootPath = "ClientApp/dist");
             // Add services to the container.
-
-            builder.Services.AddControllers();
+            builder.Services.AddControllersWithViews();
 
             var app = builder.Build();
 
-            app.UseDefaultFiles();
-            app.UseStaticFiles();
-
             // Configure the HTTP request pipeline.
+            if (!app.Environment.IsDevelopment())
+            {
+                app.UseExceptionHandler("/Home/Error");
+                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+                app.UseHsts();
+            }
+            else { app.UseDeveloperExceptionPage(); }
 
             app.UseHttpsRedirection();
+            app.UseStaticFiles();
 
-            app.UseAuthorization();
-
-
-            app.MapControllers();
+            app.UseRouting();
 
-            app.MapFallbackToFile("/index.html");
+            app.UseAuthorization();
 
+            //app.MapControllerRoute(
+            //    name: "default",
+            //    pattern: "{controller=Home}/{action=Index}/{id?}");
+            app.UseEndpoints(endpoints =>
+            {
+                endpoints.MapControllers();
+
+                // NOTE: VueCliProxy is meant for developement and hot module reload
+                // NOTE: SSR has not been tested
+                // Production systems should only need the UseSpaStaticFiles() (above)
+                // You could wrap this proxy in either
+                // if (System.Diagnostics.Debugger.IsAttached)
+                // or a preprocessor such as #if DEBUG
+                endpoints.MapToVueCliProxy(
+                    "{*path}",
+                    new SpaOptions { SourcePath = "ClientApp" },
+                    npmScript: (System.Diagnostics.Debugger.IsAttached) ? "serve" : null,
+                    regex: "Compiled successfully",
+                    forceKill: true
+                    );
+            });
             app.Run();
         }
     }
-}
+}

+ 12 - 29
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Properties/launchSettings.json

@@ -1,45 +1,28 @@
-{
-  "$schema": "http://json.schemastore.org/launchsettings.json",
+{
   "iisSettings": {
     "windowsAuthentication": false,
     "anonymousAuthentication": true,
     "iisExpress": {
-      "applicationUrl": "http://localhost:62961",
-      "sslPort": 44325
+      "applicationUrl": "https://localhost:44323/",
+      "sslPort": 44323
     }
   },
+  "$schema": "http://json.schemastore.org/launchsettings.json",
   "profiles": {
-    "http": {
-      "commandName": "Project",
-      "dotnetRunMessages": true,
+    "IIS Express": {
+      "commandName": "IISExpress",
       "launchBrowser": true,
-      "launchUrl": "weatherforecast",
-      "applicationUrl": "http://localhost:5147",
       "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development",
-        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
+        "ASPNETCORE_ENVIRONMENT": "Development"
       }
     },
-    "https": {
+    "IES.ExamServer": {
       "commandName": "Project",
-      "dotnetRunMessages": true,
-      "launchBrowser": true,
-      "launchUrl": "weatherforecast",
-      "applicationUrl": "https://localhost:7181;http://localhost:5147",
-      "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development",
-        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
-      }
-    },
-    "IIS Express": {
-      "commandName": "IISExpress",
       "launchBrowser": true,
-      "launchUrl": "weatherforecast",
       "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development",
-        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
-      }
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      },
+      "applicationUrl": "https://localhost:5001;http://localhost:5000"
     }
   }
-}
-
+}

+ 5 - 3
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/WeatherForecast.cs

@@ -1,13 +1,15 @@
-namespace IES.ExamServer.Server
+using System;
+
+namespace VueCliSample
 {
     public class WeatherForecast
     {
-        public DateOnly Date { get; set; }
+        public DateTime Date { get; set; }
 
         public int TemperatureC { get; set; }
 
         public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
 
-        public string? Summary { get; set; }
+        public string Summary { get; set; }
     }
 }

+ 0 - 6
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/.editorconfig

@@ -1,6 +0,0 @@
-[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue}]
-charset = utf-8
-indent_size = 2
-indent_style = space
-insert_final_newline = true
-trim_trailing_whitespace = true

+ 0 - 30
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/.gitignore

@@ -1,30 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-.DS_Store
-dist
-dist-ssr
-coverage
-*.local
-
-/cypress/videos/
-/cypress/screenshots/
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-
-*.tsbuildinfo

+ 0 - 11
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/IES.ExamWebview.esproj

@@ -1,11 +0,0 @@
-<Project Sdk="Microsoft.VisualStudio.JavaScript.Sdk/1.0.1184077">
-  <PropertyGroup>
-    <StartupCommand>npm run dev</StartupCommand>
-    <JavaScriptTestRoot>.\</JavaScriptTestRoot>
-    <JavaScriptTestFramework>Jest</JavaScriptTestFramework>
-    <!-- Allows the build (or compile) script located on package.json to run on Build -->
-    <ShouldRunBuildScript>false</ShouldRunBuildScript>
-    <!-- Folder where production build objects will be placed -->
-    <BuildOutputFolder>$(MSBuildProjectDirectory)\dist</BuildOutputFolder>
-  </PropertyGroup>
-</Project>

+ 0 - 35
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/README.md

@@ -1,35 +0,0 @@
-# IES.ExamWebview
-
-This template should help get you started developing with Vue 3 in Vite.
-
-## Recommended IDE Setup
-
-[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
-
-## Customize configuration
-
-See [Vite Configuration Reference](https://vite.dev/config/).
-
-## Project Setup
-
-```sh
-npm install
-```
-
-### Compile and Hot-Reload for Development
-
-```sh
-npm run dev
-```
-
-### Compile and Minify for Production
-
-```sh
-npm run build
-```
-
-### Lint with [ESLint](https://eslint.org/)
-
-```sh
-npm run lint
-```

+ 0 - 17
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/eslint.config.js

@@ -1,17 +0,0 @@
-import js from '@eslint/js'
-import pluginVue from 'eslint-plugin-vue'
-
-export default [
-  {
-    name: 'app/files-to-lint',
-    files: ['**/*.{js,mjs,jsx,vue}'],
-  },
-
-  {
-    name: 'app/files-to-ignore',
-    ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'],
-  },
-
-  js.configs.recommended,
-  ...pluginVue.configs['flat/essential'],
-]

+ 0 - 13
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/index.html

@@ -1,13 +0,0 @@
-<!DOCTYPE html>
-<html lang="">
-  <head>
-    <meta charset="UTF-8">
-    <link rel="icon" href="/favicon.ico">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Vite App</title>
-  </head>
-  <body>
-    <div id="app"></div>
-    <script type="module" src="/src/main.js"></script>
-  </body>
-</html>

+ 0 - 8
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/jsconfig.json

@@ -1,8 +0,0 @@
-{
-  "compilerOptions": {
-    "paths": {
-      "@/*": ["./src/*"]
-    }
-  },
-  "exclude": ["node_modules", "dist"]
-}

+ 0 - 10
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/nuget.config

@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-  <packageSources>
-    <clear />
-    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
-  </packageSources>
-  <disabledPackageSources>
-    <clear />
-  </disabledPackageSources>
-</configuration>

+ 0 - 23
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/package.json

@@ -1,23 +0,0 @@
-{
-  "name": "IES.ExamWebview",
-  "version": "0.0.0",
-  "private": true,
-  "type": "module",
-  "scripts": {
-    "dev": "vite",
-    "build": "vite build",
-    "preview": "vite preview",
-    "lint": "eslint . --fix"
-  },
-  "dependencies": {
-    "vue": "^3.5.13"
-  },
-  "devDependencies": {
-    "@eslint/js": "^9.14.0",
-    "@vitejs/plugin-vue": "^5.2.1",
-    "eslint": "^9.14.0",
-    "eslint-plugin-vue": "^9.30.0",
-    "vite": "^6.0.1",
-    "vite-plugin-vue-devtools": "^7.6.5"
-  }
-}

+ 0 - 47
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/App.vue

@@ -1,47 +0,0 @@
-<script setup>
-import HelloWorld from './components/HelloWorld.vue'
-import TheWelcome from './components/TheWelcome.vue'
-</script>
-
-<template>
-  <header>
-    <img alt="Vue logo" class="logo" src="./assets/logo.svg" width="125" height="125" />
-
-    <div class="wrapper">
-      <HelloWorld msg="You did it!" />
-    </div>
-  </header>
-
-  <main>
-    <TheWelcome />
-  </main>
-</template>
-
-<style scoped>
-header {
-  line-height: 1.5;
-}
-
-.logo {
-  display: block;
-  margin: 0 auto 2rem;
-}
-
-@media (min-width: 1024px) {
-  header {
-    display: flex;
-    place-items: center;
-    padding-right: calc(var(--section-gap) / 2);
-  }
-
-  .logo {
-    margin: 0 2rem 0 0;
-  }
-
-  header .wrapper {
-    display: flex;
-    place-items: flex-start;
-    flex-wrap: wrap;
-  }
-}
-</style>

+ 0 - 86
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/assets/base.css

@@ -1,86 +0,0 @@
-/* color palette from <https://github.com/vuejs/theme> */
-:root {
-  --vt-c-white: #ffffff;
-  --vt-c-white-soft: #f8f8f8;
-  --vt-c-white-mute: #f2f2f2;
-
-  --vt-c-black: #181818;
-  --vt-c-black-soft: #222222;
-  --vt-c-black-mute: #282828;
-
-  --vt-c-indigo: #2c3e50;
-
-  --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
-  --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
-  --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
-  --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
-
-  --vt-c-text-light-1: var(--vt-c-indigo);
-  --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
-  --vt-c-text-dark-1: var(--vt-c-white);
-  --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
-}
-
-/* semantic color variables for this project */
-:root {
-  --color-background: var(--vt-c-white);
-  --color-background-soft: var(--vt-c-white-soft);
-  --color-background-mute: var(--vt-c-white-mute);
-
-  --color-border: var(--vt-c-divider-light-2);
-  --color-border-hover: var(--vt-c-divider-light-1);
-
-  --color-heading: var(--vt-c-text-light-1);
-  --color-text: var(--vt-c-text-light-1);
-
-  --section-gap: 160px;
-}
-
-@media (prefers-color-scheme: dark) {
-  :root {
-    --color-background: var(--vt-c-black);
-    --color-background-soft: var(--vt-c-black-soft);
-    --color-background-mute: var(--vt-c-black-mute);
-
-    --color-border: var(--vt-c-divider-dark-2);
-    --color-border-hover: var(--vt-c-divider-dark-1);
-
-    --color-heading: var(--vt-c-text-dark-1);
-    --color-text: var(--vt-c-text-dark-2);
-  }
-}
-
-*,
-*::before,
-*::after {
-  box-sizing: border-box;
-  margin: 0;
-  font-weight: normal;
-}
-
-body {
-  min-height: 100vh;
-  color: var(--color-text);
-  background: var(--color-background);
-  transition:
-    color 0.5s,
-    background-color 0.5s;
-  line-height: 1.6;
-  font-family:
-    Inter,
-    -apple-system,
-    BlinkMacSystemFont,
-    'Segoe UI',
-    Roboto,
-    Oxygen,
-    Ubuntu,
-    Cantarell,
-    'Fira Sans',
-    'Droid Sans',
-    'Helvetica Neue',
-    sans-serif;
-  font-size: 15px;
-  text-rendering: optimizeLegibility;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}

+ 0 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/assets/logo.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>

+ 0 - 35
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/assets/main.css

@@ -1,35 +0,0 @@
-@import './base.css';
-
-#app {
-  max-width: 1280px;
-  margin: 0 auto;
-  padding: 2rem;
-  font-weight: normal;
-}
-
-a,
-.green {
-  text-decoration: none;
-  color: hsla(160, 100%, 37%, 1);
-  transition: 0.4s;
-  padding: 3px;
-}
-
-@media (hover: hover) {
-  a:hover {
-    background-color: hsla(160, 100%, 37%, 0.2);
-  }
-}
-
-@media (min-width: 1024px) {
-  body {
-    display: flex;
-    place-items: center;
-  }
-
-  #app {
-    display: grid;
-    grid-template-columns: 1fr 1fr;
-    padding: 0 2rem;
-  }
-}

+ 0 - 87
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/HelloWorld.vue

@@ -1,87 +0,0 @@
-<template>
-    <div class="weather-component">
-        <h1>Weather forecast</h1>
-        <p>This component demonstrates fetching data from the server.</p>
-
-        <div v-if="loading" class="loading">
-            Loading... Please refresh once the ASP.NET backend has started. See <a href="https://aka.ms/jspsintegrationvue">https://aka.ms/jspsintegrationvue</a> for more details.
-        </div>
-
-        <div v-if="post" class="content">
-            <table>
-                <thead>
-                    <tr>
-                        <th>Date</th>
-                        <th>Temp. (C)</th>
-                        <th>Temp. (F)</th>
-                        <th>Summary</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr v-for="forecast in post" :key="forecast.date">
-                        <td>{{ forecast.date }}</td>
-                        <td>{{ forecast.temperatureC }}</td>
-                        <td>{{ forecast.temperatureF }}</td>
-                        <td>{{ forecast.summary }}</td>
-                    </tr>
-                </tbody>
-            </table>
-        </div>
-    </div>
-</template>
-
-<script lang="js">
-    import { defineComponent } from 'vue';
-
-    export default defineComponent({
-        data() {
-            return {
-                loading: false,
-                post: null
-            };
-        },
-        created() {
-            // fetch the data when the view is created and the data is
-            // already being observed
-            this.fetchData();
-        },
-        watch: {
-            // call again the method if the route changes
-            '$route': 'fetchData'
-        },
-        methods: {
-            fetchData() {
-                this.post = null;
-                this.loading = true;
-
-                fetch('weatherforecast')
-                    .then(r => r.json())
-                    .then(json => {
-                        this.post = json;
-                        this.loading = false;
-                        return;
-                    });
-            }
-        },
-    });
-</script>
-
-<style scoped>
-th {
-    font-weight: bold;
-}
-
-th, td {
-    padding-left: .5rem;
-    padding-right: .5rem;
-}
-
-.weather-component {
-    text-align: center;
-}
-
-table {
-    margin-left: auto;
-    margin-right: auto;
-}
-</style>

+ 0 - 90
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/TheWelcome.vue

@@ -1,90 +0,0 @@
-<script setup>
-import WelcomeItem from './WelcomeItem.vue'
-import DocumentationIcon from './icons/IconDocumentation.vue'
-import ToolingIcon from './icons/IconTooling.vue'
-import EcosystemIcon from './icons/IconEcosystem.vue'
-import CommunityIcon from './icons/IconCommunity.vue'
-import SupportIcon from './icons/IconSupport.vue'
-</script>
-
-<template>
-  <WelcomeItem>
-    <template #icon>
-      <DocumentationIcon />
-    </template>
-    <template #heading>Documentation</template>
-
-    Vue’s
-    <a href="https://vuejs.org/" target="_blank" rel="noopener">official documentation</a>
-    provides you with all information you need to get started.
-  </WelcomeItem>
-
-  <WelcomeItem>
-    <template #icon>
-      <ToolingIcon />
-    </template>
-    <template #heading>Tooling</template>
-
-    This project is served and bundled with
-    <a href="https://vite.dev/guide/features.html" target="_blank" rel="noopener">Vite</a>. The
-    recommended IDE setup is
-    <a href="https://code.visualstudio.com/" target="_blank" rel="noopener">VSCode</a>
-    +
-    <a href="https://github.com/johnsoncodehk/volar" target="_blank" rel="noopener">Volar</a>. If
-    you need to test your components and web pages, check out
-    <a href="https://www.cypress.io/" target="_blank" rel="noopener">Cypress</a>
-    and
-    <a href="https://on.cypress.io/component" target="_blank" rel="noopener"
-      >Cypress Component Testing</a
-    >.
-
-    <br />
-
-    More instructions are available in <code>README.md</code>.
-  </WelcomeItem>
-
-  <WelcomeItem>
-    <template #icon>
-      <EcosystemIcon />
-    </template>
-    <template #heading>Ecosystem</template>
-
-    Get official tools and libraries for your project:
-    <a href="https://pinia.vuejs.org/" target="_blank" rel="noopener">Pinia</a>,
-    <a href="https://router.vuejs.org/" target="_blank" rel="noopener">Vue Router</a>,
-    <a href="https://test-utils.vuejs.org/" target="_blank" rel="noopener">Vue Test Utils</a>, and
-    <a href="https://github.com/vuejs/devtools" target="_blank" rel="noopener">Vue Dev Tools</a>. If
-    you need more resources, we suggest paying
-    <a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">Awesome Vue</a>
-    a visit.
-  </WelcomeItem>
-
-  <WelcomeItem>
-    <template #icon>
-      <CommunityIcon />
-    </template>
-    <template #heading>Community</template>
-
-    Got stuck? Ask your question on
-    <a href="https://chat.vuejs.org" target="_blank" rel="noopener">Vue Land</a>, our official
-    Discord server, or
-    <a href="https://stackoverflow.com/questions/tagged/vue.js" target="_blank" rel="noopener"
-      >StackOverflow</a
-    >. You should also subscribe to
-    <a href="https://news.vuejs.org" target="_blank" rel="noopener">our mailing list</a>
-    and follow the official
-    <a href="https://twitter.com/vuejs" target="_blank" rel="noopener">@vuejs</a>
-    twitter account for latest news in the Vue world.
-  </WelcomeItem>
-
-  <WelcomeItem>
-    <template #icon>
-      <SupportIcon />
-    </template>
-    <template #heading>Support Vue</template>
-
-    As an independent project, Vue relies on community backing for its sustainability. You can help
-    us by
-    <a href="https://vuejs.org/sponsor/" target="_blank" rel="noopener">becoming a sponsor</a>.
-  </WelcomeItem>
-</template>

+ 0 - 87
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/WelcomeItem.vue

@@ -1,87 +0,0 @@
-<template>
-  <div class="item">
-    <i>
-      <slot name="icon"></slot>
-    </i>
-    <div class="details">
-      <h3>
-        <slot name="heading"></slot>
-      </h3>
-      <slot></slot>
-    </div>
-  </div>
-</template>
-
-<style scoped>
-.item {
-  margin-top: 2rem;
-  display: flex;
-  position: relative;
-}
-
-.details {
-  flex: 1;
-  margin-left: 1rem;
-}
-
-i {
-  display: flex;
-  place-items: center;
-  place-content: center;
-  width: 32px;
-  height: 32px;
-
-  color: var(--color-text);
-}
-
-h3 {
-  font-size: 1.2rem;
-  font-weight: 500;
-  margin-bottom: 0.4rem;
-  color: var(--color-heading);
-}
-
-@media (min-width: 1024px) {
-  .item {
-    margin-top: 0;
-    padding: 0.4rem 0 1rem calc(var(--section-gap) / 2);
-  }
-
-  i {
-    top: calc(50% - 25px);
-    left: -26px;
-    position: absolute;
-    border: 1px solid var(--color-border);
-    background: var(--color-background);
-    border-radius: 8px;
-    width: 50px;
-    height: 50px;
-  }
-
-  .item:before {
-    content: ' ';
-    border-left: 1px solid var(--color-border);
-    position: absolute;
-    left: 0;
-    bottom: calc(50% + 25px);
-    height: calc(50% - 25px);
-  }
-
-  .item:after {
-    content: ' ';
-    border-left: 1px solid var(--color-border);
-    position: absolute;
-    left: 0;
-    top: calc(50% + 25px);
-    height: calc(50% - 25px);
-  }
-
-  .item:first-of-type:before {
-    display: none;
-  }
-
-  .item:last-of-type:after {
-    display: none;
-  }
-}
-</style>

File diff suppressed because it is too large
+ 0 - 7
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconCommunity.vue


File diff suppressed because it is too large
+ 0 - 7
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconDocumentation.vue


File diff suppressed because it is too large
+ 0 - 7
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconEcosystem.vue


+ 0 - 7
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconSupport.vue

@@ -1,7 +0,0 @@
-<template>
-  <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
-    <path
-      d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z"
-    />
-  </svg>
-</template>

+ 0 - 19
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/components/icons/IconTooling.vue

@@ -1,19 +0,0 @@
-<!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license-->
-<template>
-  <svg
-    xmlns="http://www.w3.org/2000/svg"
-    xmlns:xlink="http://www.w3.org/1999/xlink"
-    aria-hidden="true"
-    role="img"
-    class="iconify iconify--mdi"
-    width="24"
-    height="24"
-    preserveAspectRatio="xMidYMid meet"
-    viewBox="0 0 24 24"
-  >
-    <path
-      d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z"
-      fill="currentColor"
-    ></path>
-  </svg>
-</template>

+ 0 - 6
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/src/main.js

@@ -1,6 +0,0 @@
-import './assets/main.css'
-
-import { createApp } from 'vue'
-import App from './App.vue'
-
-createApp(App).mount('#app')

+ 0 - 57
TEAMModelOS.Extension/IES.Exam/IES.ExamWebview/vite.config.js

@@ -1,57 +0,0 @@
-import { fileURLToPath, URL } from 'node:url';
-
-import { defineConfig } from 'vite';
-import plugin from '@vitejs/plugin-vue';
-import fs from 'fs';
-import path from 'path';
-import child_process from 'child_process';
-import { env } from 'process';
-
-const baseFolder =
-    env.APPDATA !== undefined && env.APPDATA !== ''
-        ? `${env.APPDATA}/ASP.NET/https`
-        : `${env.HOME}/.aspnet/https`;
-
-const certificateName = "IES.ExamServer";
-const certFilePath = path.join(baseFolder, `${certificateName}.pem`);
-const keyFilePath = path.join(baseFolder, `${certificateName}.key`);
-
-if (!fs.existsSync(certFilePath) || !fs.existsSync(keyFilePath)) {
-    if (0 !== child_process.spawnSync('dotnet', [
-        'dev-certs',
-        'https',
-        '--export-path',
-        certFilePath,
-        '--format',
-        'Pem',
-        '--no-password',
-    ], { stdio: 'inherit', }).status) {
-        throw new Error("Could not create certificate.");
-    }
-}
-
-const target = env.ASPNETCORE_HTTPS_PORT ? `https://localhost:${env.ASPNETCORE_HTTPS_PORT}` :
-    env.ASPNETCORE_URLS ? env.ASPNETCORE_URLS.split(';')[0] : 'https://localhost:7181';
-
-// https://vitejs.dev/config/
-export default defineConfig({
-    plugins: [plugin()],
-    resolve: {
-        alias: {
-            '@': fileURLToPath(new URL('./src', import.meta.url))
-        }
-    },
-    server: {
-        proxy: {
-            '^/weatherforecast': {
-                target,
-                secure: false
-            }
-        },
-        port: 5173,
-        https: {
-            key: fs.readFileSync(keyFilePath),
-            cert: fs.readFileSync(certFilePath),
-        }
-    }
-})

+ 6 - 15
TEAMModelOS.sln

@@ -35,9 +35,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureCosmosDBEmulator", "Az
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IES.HybridCloud", "IES.HybridCloud\IES.HybridCloud.csproj", "{0FC9DE8A-488B-4ACD-88D5-8DEDECA1FF42}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IES.ExamServer", "TEAMModelOS.Extension\IES.Exam\IES.ExamServer\IES.ExamServer.csproj", "{63A605DC-873F-45D3-8A90-5D87D929454C}"
-EndProject
-Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "IES.ExamWebview", "TEAMModelOS.Extension\IES.Exam\IES.ExamWebview\IES.ExamWebview.esproj", "{83C35616-BEE2-4975-A6D9-A4BF48FAFAAA}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IES.ExamServer", "TEAMModelOS.Extension\IES.Exam\IES.ExamServer\IES.ExamServer.csproj", "{A8C336A0-8272-41C0-9D01-88D6BC652B76}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -107,16 +105,10 @@ Global
 		{0FC9DE8A-488B-4ACD-88D5-8DEDECA1FF42}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0FC9DE8A-488B-4ACD-88D5-8DEDECA1FF42}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0FC9DE8A-488B-4ACD-88D5-8DEDECA1FF42}.Release|Any CPU.Build.0 = Release|Any CPU
-		{63A605DC-873F-45D3-8A90-5D87D929454C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{63A605DC-873F-45D3-8A90-5D87D929454C}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{63A605DC-873F-45D3-8A90-5D87D929454C}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{63A605DC-873F-45D3-8A90-5D87D929454C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{83C35616-BEE2-4975-A6D9-A4BF48FAFAAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{83C35616-BEE2-4975-A6D9-A4BF48FAFAAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{83C35616-BEE2-4975-A6D9-A4BF48FAFAAA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
-		{83C35616-BEE2-4975-A6D9-A4BF48FAFAAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{83C35616-BEE2-4975-A6D9-A4BF48FAFAAA}.Release|Any CPU.Build.0 = Release|Any CPU
-		{83C35616-BEE2-4975-A6D9-A4BF48FAFAAA}.Release|Any CPU.Deploy.0 = Release|Any CPU
+		{A8C336A0-8272-41C0-9D01-88D6BC652B76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A8C336A0-8272-41C0-9D01-88D6BC652B76}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A8C336A0-8272-41C0-9D01-88D6BC652B76}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A8C336A0-8272-41C0-9D01-88D6BC652B76}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -133,8 +125,7 @@ Global
 		{A76FCB84-C9FF-46C6-8B82-FC7538779A98} = {9B74B53F-20E8-46CC-903B-62AEB1583DD7}
 		{5A3E1C89-D2BA-4758-A017-189811E0935F} = {9B74B53F-20E8-46CC-903B-62AEB1583DD7}
 		{0FC9DE8A-488B-4ACD-88D5-8DEDECA1FF42} = {9B74B53F-20E8-46CC-903B-62AEB1583DD7}
-		{63A605DC-873F-45D3-8A90-5D87D929454C} = {9B74B53F-20E8-46CC-903B-62AEB1583DD7}
-		{83C35616-BEE2-4975-A6D9-A4BF48FAFAAA} = {9B74B53F-20E8-46CC-903B-62AEB1583DD7}
+		{A8C336A0-8272-41C0-9D01-88D6BC652B76} = {9B74B53F-20E8-46CC-903B-62AEB1583DD7}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {76440725-5E50-4288-851F-BA5C0BC8E8C6}