Залил изменения за долгое время

This commit is contained in:
2024-12-12 04:05:09 +03:00
parent 27d4b7fbeb
commit 619a158d13
30 changed files with 1549 additions and 1399 deletions

View File

@@ -1,21 +1,21 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<base href="/"/>
@* TODO: скачать шрифты *@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/styles.css" asp-append-version="true" />
<link rel="icon" type="image/png" href="favicon.png"/>
<HeadOutlet/>
</head>
<body>
<Routes/>
<script src="_framework/blazor.web.js"></script>
</body>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<base href="/"/>
@* TODO: скачать шрифты *@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/styles.css" asp-append-version="true" />
<link rel="icon" type="image/png" href="favicon.png"/>
<HeadOutlet/>
</head>
<body>
<Routes/>
<script src="_framework/blazor.web.js"></script>
</body>
</html>

View File

@@ -1,5 +1,5 @@
@inherits LayoutComponentBase
<body class="flex items-center accent-error justify-center min-h-screen font-roboto text-primary-content">
@Body
@inherits LayoutComponentBase
<body class="flex items-center accent-error justify-center min-h-screen font-roboto text-primary-content">
@Body
</body>

View File

@@ -1,36 +1,36 @@
@using Microsoft.AspNetCore.Components.Authorization
@inherits LayoutComponentBase
<div class="page">
<div class="sidebar">
@* <NavMenu/> *@
</div>
<main>
<div class="top-row px-4">
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
<!-- Add @using Microsoft.AspNetCore.Components.Authorization at the top-->
<CascadingAuthenticationState>
<AuthorizeView>
<Authorized>
<a asp-controller="Home" asp-action="Index">Welcome @context.User.Identity?.Name!</a>
<a href="MicrosoftIdentity/Account/SignOut">Logout</a>
</Authorized>
<NotAuthorized>
<a href="MicrosoftIdentity/Account/SignIn">Login</a>
</NotAuthorized>
</AuthorizeView>
</CascadingAuthenticationState>
</div>
<article class="content px-4">
@Body
</article>
</main>
</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
@using Microsoft.AspNetCore.Components.Authorization
@inherits LayoutComponentBase
<div class="page">
<div class="sidebar">
@* <NavMenu/> *@
</div>
<main>
<div class="top-row px-4">
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
<!-- Add @using Microsoft.AspNetCore.Components.Authorization at the top-->
<CascadingAuthenticationState>
<AuthorizeView>
<Authorized>
<a asp-controller="Home" asp-action="Index">Welcome @context.User.Identity?.Name!</a>
<a href="MicrosoftIdentity/Account/SignOut">Logout</a>
</Authorized>
<NotAuthorized>
<a href="MicrosoftIdentity/Account/SignIn">Login</a>
</NotAuthorized>
</AuthorizeView>
</CascadingAuthenticationState>
</div>
<article class="content px-4">
@Body
</article>
</main>
</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>

View File

@@ -1,96 +1,96 @@
.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 ::deep .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
text-decoration: none;
}
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
text-decoration: underline;
}
.top-row ::deep a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
@media (max-width: 640.98px) {
.top-row {
justify-content: space-between;
}
.top-row ::deep a, .top-row ::deep .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;
}
.top-row.auth ::deep a:first-child {
flex: 1;
text-align: right;
width: 0;
}
.top-row, article {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
}
#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;
}
.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 ::deep .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
text-decoration: none;
}
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
text-decoration: underline;
}
.top-row ::deep a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
@media (max-width: 640.98px) {
.top-row {
justify-content: space-between;
}
.top-row ::deep a, .top-row ::deep .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;
}
.top-row.auth ::deep a:first-child {
flex: 1;
text-align: right;
width: 0;
}
.top-row, article {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
}
#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;
}

View File

@@ -1,64 +1,64 @@
@inject NavigationManager Navigation
@code {
private int _lvl = 0;
private Dictionary<string, string> _links = new()
{
{ "Анкета", "/otchislenie/questionnaire" },
{ "Заявление", "/otchislenie/statement" },
{ "Отправка", "/otchislenie/result" },
{ "Свобода", "/otchislenie/congratulation" }
};
// TODO: Упростить это
protected override void OnInitialized()
{
base.OnInitialized();
switch (Navigation.ToBaseRelativePath(Navigation.Uri))
{
case "otchislenie/questionnaire":
case "otchislenie":
_lvl = 1;
break;
case "otchislenie/statement":
_lvl = 2;
break;
case "otchislenie/result":
_lvl = 3;
break;
case "otchislenie/congratulation":
_lvl = 4;
break;
}
}
}
<footer class="card fixed bottom-0 w-96 h-20 bg-base-200 rounded-badge p-4 mb-3">
<div class="flex justify-center items-center">
<ul class="steps justify-center center">
<a href="/" class="step step-primary text-gray-500">Выбор</a>
@foreach (int i in Enumerable.Range(1, 4))
{
if (_lvl == 4 && i == 4)
{
<a href="/otchislenie/congratulation" class="step step-primary select-none " data-content="♿">Свобода</a>
continue;
}
if (_lvl == i)
{
<i class="step select-none step-primary">@_links.ElementAt(i - 1).Key</i>
}
else if (_lvl > i)
{
<a href="@_links.ElementAt(i - 1).Value" class="step step-primary select-none text-gray-500">@_links.ElementAt(i - 1).Key</a>
}
else
{
<i class="step select-none"> @_links.ElementAt(i - 1).Key</i>
}
}
</ul>
</div>
@inject NavigationManager Navigation
@code {
private int _lvl = 0;
private Dictionary<string, string> _links = new()
{
{ "Анкета", "/otchislenie/questionnaire" },
{ "Заявление", "/otchislenie/statement" },
{ "Отправка", "/otchislenie/result" },
{ "Свобода", "/otchislenie/congratulation" }
};
// TODO: Упростить это
protected override void OnInitialized()
{
base.OnInitialized();
switch (Navigation.ToBaseRelativePath(Navigation.Uri))
{
case "otchislenie/questionnaire":
case "otchislenie":
_lvl = 1;
break;
case "otchislenie/statement":
_lvl = 2;
break;
case "otchislenie/result":
_lvl = 3;
break;
case "otchislenie/congratulation":
_lvl = 4;
break;
}
}
}
<footer class="card fixed bottom-0 w-96 h-20 bg-base-200 rounded-badge p-4 mb-3">
<div class="flex justify-center items-center">
<ul class="steps justify-center center">
<a href="/" class="step step-primary text-gray-500">Выбор</a>
@foreach (int i in Enumerable.Range(1, 4))
{
if (_lvl == 4 && i == 4)
{
<a href="/otchislenie/congratulation" class="step step-primary select-none " data-content="♿">Свобода</a>
continue;
}
if (_lvl == i)
{
<i class="step select-none step-primary">@_links.ElementAt(i - 1).Key</i>
}
else if (_lvl > i)
{
<a href="@_links.ElementAt(i - 1).Value" class="step step-primary select-none text-gray-500">@_links.ElementAt(i - 1).Key</a>
}
else
{
<i class="step select-none"> @_links.ElementAt(i - 1).Key</i>
}
}
</ul>
</div>
</footer>

View File

@@ -1,11 +1,11 @@
@using Microsoft.AspNetCore.Authorization
@inherits LayoutComponentBase
@attribute [Authorize]
<div class="flex items-center accent-error justify-center min-h-screen font-roboto text-primary-content">
@Body
<NavMenu/>
@using Microsoft.AspNetCore.Authorization
@inherits LayoutComponentBase
@attribute [Authorize]
<div class="flex items-center accent-error justify-center min-h-screen font-roboto text-primary-content">
@Body
<NavMenu/>
</div>

View File

@@ -1,16 +1,16 @@
@page "/otchislenie/congratulation"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
<div>
<div class="text-center mx-auto mb-4 font-bold text-4xl md:text-5xl w-max justify-center italic">Поздравляем!</div>
<img class="w-96 h-96 mx-auto" src="img/party-popper.svg" alt=""/>
<div class="flex flex-col space-y-4 lg:flex-row lg:space-x-4 lg:space-y-0 mt-4">
<a href="/otchislenie/result" class="btn w-full lg:w-48 h-12 btn-primary rounded-full text-2xl">
Назад
</a>
<a href="/" class="btn w-full lg:w-48 h-12 btn-primary rounded-full text-2xl">
Выход
</a>
</div>
@page "/otchislenie/congratulation"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
<div>
<div class="text-center mx-auto mb-4 font-bold text-4xl md:text-5xl w-max justify-center italic">Поздравляем!</div>
<img class="w-96 h-96 mx-auto" src="img/party-popper.svg" alt=""/>
<div class="flex flex-col space-y-4 lg:flex-row lg:space-x-4 lg:space-y-0 mt-4">
<a href="/otchislenie/result" class="btn w-full lg:w-48 h-12 btn-primary rounded-full text-2xl">
Назад
</a>
<a href="/" class="btn w-full lg:w-48 h-12 btn-primary rounded-full text-2xl">
Выход
</a>
</div>
</div>

View File

@@ -1,22 +1,22 @@
@page "/counter"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
@rendermode InteractiveServer
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
@page "/counter"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
@rendermode InteractiveServer
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}

View File

@@ -1,36 +1,36 @@
@page "/Error"
@using System.Diagnostics
<PageTitle>Error</PageTitle>
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
@code{
[CascadingParameter] private HttpContext? HttpContext { get; set; }
private string? RequestId { get; set; }
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
protected override void OnInitialized() =>
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
@page "/Error"
@using System.Diagnostics
<PageTitle>Error</PageTitle>
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
@code{
[CascadingParameter] private HttpContext? HttpContext { get; set; }
private string? RequestId { get; set; }
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
protected override void OnInitialized() =>
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
}

View File

@@ -1,86 +1,86 @@
@using Microsoft.AspNetCore.Components.Authorization
@inject AuthenticationStateProvider AuthenticationStateProvider
@page "/"
<PageTitle>Отчислятор 3000</PageTitle>
@code {
private MarkupString GetLinkIfAuth(string link) => new MarkupString(AuthenticationStateProvider.GetAuthenticationStateAsync().Result.User.Identity?.IsAuthenticated == true ? link : "MicrosoftIdentity/Account/SignIn");
}
<div class="relative">
@* TODO: Дописать модальное окно *@
<dialog id="info_modal" class="modal modal-bottom sm:modal-middle">
<div class="modal-box">
<h3 class="text-lg font-bold">Сервис отчислений</h3>
<p class="py-4">Привет, это сервис отчислений!<br>Автор: <a target="_blank" href="https://t.me/serega404">@@serega404</a></p>
<div class="modal-action">
<form method="dialog">
<button class="btn">Закрыть</button>
</form>
</div>
</div>
</dialog>
@* TODO: Исправить расположение названия *@
<div class="text-center font-bold text-4xl md:text-5xl w-max absolute left-1/2 -top-1/3 transform -translate-x-1/2 italic"><br>Отчислятор 3000</div>
<div class="flex flex-col space-y-4 w-96">
<div class="card rounded-badge bg-base-200 p-4">
<h2 class="card-title text-center text-3xl justify-center my-4">Мне нужно...</h2>
<div class="flex flex-col space-y-4 mt-1">
<a href="@GetLinkIfAuth("otchislenie")" class="btn h-16 btn-primary rounded-full text-2xl relative">
Отчислиться
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
@{
if (new Random().Next(0, 100) < 10)
{
<img class="p-2" src="img/soldier.svg" alt=""/>
}
else
{
<img class="p-3" src="img/wheelchair.svg" alt=""/>
}
}
</div>
</a>
<button class="btn h-16 btn-primary rounded-full text-2xl relative">
Понизить курс
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<svg class="p-2" fill="none" viewBox="0 0 24 24" id="down-trend-round" xmlns="http://www.w3.org/2000/svg">
<path id="primary" d="M3,7l5.79,5.79a1,1,0,0,0,1.42,0l2.58-2.58a1,1,0,0,1,1.42,0L21,17" style="fill: none; stroke: rgb(0, 0, 0); stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5;"></path><polyline id="primary-2" data-name="primary" points="17 17 21 17 21 13" style="fill: none; stroke: rgb(0, 0, 0); stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5;"></polyline>
</svg>
</div>
<i class="absolute text-sm bottom-0 text-base-200 font-medium">временно не доступно</i>
</button>
<button class="btn h-16 btn-primary p-0 rounded-full text-2xl relative">
Уйти в академ
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<img class="p-2" src="img/akadem.svg" alt=""/>
</div>
<i class="absolute text-sm bottom-0 text-base-200 font-medium">временно не доступно</i>
</button>
<div class="divider"></div>
<CascadingAuthenticationState>
<AuthorizeView>
<Authorized>
<a href="MicrosoftIdentity/Account/SignOut" class="btn btn-lg btn-primary rounded-full text-2xl relative">
@context.User.Identity?.Name!.Split("@")[0]
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<svg class="p-3" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.5 15V19.5H5.5V5.5H16.5V10M10 12.5H22.5" stroke="#121923" stroke-width="1.2"/>
<path d="M20 10L22.5 12.5L20 15" stroke="#121923" stroke-width="1.2"/>
</svg>
</div>
</a>
</Authorized>
<NotAuthorized>
<a class="btn btn-lg bg-green-300 rounded-full text-2xl" href="MicrosoftIdentity/Account/SignIn">Начать</a>
</NotAuthorized>
</AuthorizeView>
</CascadingAuthenticationState>
</div>
</div>
<div class="text-center">
<button onclick="info_modal.showModal()" class="btn btn-sm btn-primary bg-base-200 rounded-full text-1xl">?</button>
</div>
</div>
@using Microsoft.AspNetCore.Components.Authorization
@inject AuthenticationStateProvider AuthenticationStateProvider
@page "/"
<PageTitle>Отчислятор 3000</PageTitle>
@code {
private MarkupString GetLinkIfAuth(string link) => new MarkupString(AuthenticationStateProvider.GetAuthenticationStateAsync().Result.User.Identity?.IsAuthenticated == true ? link : "MicrosoftIdentity/Account/SignIn");
}
<div class="relative">
@* TODO: Дописать модальное окно *@
<dialog id="info_modal" class="modal modal-bottom sm:modal-middle">
<div class="modal-box">
<h3 class="text-lg font-bold">Сервис отчислений</h3>
<p class="py-4">Привет, это сервис отчислений!<br>Автор: <a target="_blank" href="https://t.me/serega404">@@serega404</a></p>
<div class="modal-action">
<form method="dialog">
<button class="btn">Закрыть</button>
</form>
</div>
</div>
</dialog>
@* TODO: Исправить расположение названия *@
<div class="text-center font-bold text-4xl md:text-5xl w-max absolute left-1/2 -top-1/3 transform -translate-x-1/2 italic"><br>Отчислятор 3000</div>
<div class="flex flex-col space-y-4 w-96">
<div class="card rounded-badge bg-base-200 p-4">
<h2 class="card-title text-center text-3xl justify-center my-4">Мне нужно...</h2>
<div class="flex flex-col space-y-4 mt-1">
<a href="@GetLinkIfAuth("otchislenie")" class="btn h-16 btn-primary rounded-full text-2xl relative">
Отчислиться
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
@{
if (new Random().Next(0, 100) < 10)
{
<img class="p-2" src="img/soldier.svg" alt=""/>
}
else
{
<img class="p-3" src="img/wheelchair.svg" alt=""/>
}
}
</div>
</a>
<button class="btn h-16 btn-primary rounded-full text-2xl relative">
Понизить курс
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<svg class="p-2" fill="none" viewBox="0 0 24 24" id="down-trend-round" xmlns="http://www.w3.org/2000/svg">
<path id="primary" d="M3,7l5.79,5.79a1,1,0,0,0,1.42,0l2.58-2.58a1,1,0,0,1,1.42,0L21,17" style="fill: none; stroke: rgb(0, 0, 0); stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5;"></path><polyline id="primary-2" data-name="primary" points="17 17 21 17 21 13" style="fill: none; stroke: rgb(0, 0, 0); stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5;"></polyline>
</svg>
</div>
<i class="absolute text-sm bottom-0 text-base-200 font-medium">временно не доступно</i>
</button>
<button class="btn h-16 btn-primary p-0 rounded-full text-2xl relative">
Уйти в академ
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<img class="p-2" src="img/akadem.svg" alt=""/>
</div>
<i class="absolute text-sm bottom-0 text-base-200 font-medium">временно не доступно</i>
</button>
<div class="divider"></div>
<CascadingAuthenticationState>
<AuthorizeView>
<Authorized>
<a href="MicrosoftIdentity/Account/SignOut" class="btn btn-lg btn-primary rounded-full text-2xl relative">
@context.User.Identity?.Name!.Split("@")[0]
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<svg class="p-3" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.5 15V19.5H5.5V5.5H16.5V10M10 12.5H22.5" stroke="#121923" stroke-width="1.2"/>
<path d="M20 10L22.5 12.5L20 15" stroke="#121923" stroke-width="1.2"/>
</svg>
</div>
</a>
</Authorized>
<NotAuthorized>
<a class="btn btn-lg bg-green-300 rounded-full text-2xl" href="MicrosoftIdentity/Account/SignIn">Начать</a>
</NotAuthorized>
</AuthorizeView>
</CascadingAuthenticationState>
</div>
</div>
<div class="text-center">
<button onclick="info_modal.showModal()" class="btn btn-sm btn-primary bg-base-200 rounded-full text-1xl">?</button>
</div>
</div>
</div>

View File

@@ -1,9 +1,146 @@
@page "/otchislenie"
@page "/otchislenie/questionnaire"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
<a href="/otchislenie/statement">questionnaire</a>
@code {
}
@page "/otchislenie"
@page "/otchislenie/questionnaire"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
<style>
.button-cover, .knobs, .layer
{
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.button-custom
{
position: relative;
top: 50%;
width: 74px;
height: 36px;
margin: -20px auto 0 auto;
overflow: hidden;
}
.button-custom.r, .button-custom.r .layer
{
border-radius: 100px;
}
.checkbox-custom
{
position: relative;
width: 100%;
height: 100%;
padding: 0;
margin: 0;
opacity: 0;
cursor: pointer;
z-index: 3;
}
.knobs
{
z-index: 2;
}
/* button-custom 1 */
#button-custom-1 .knobs:before
{
content: 'D';
position: absolute;
top: 4px;
left: 4px;
width: 20px;
height: 10px;
color: #fff;
font-size: 10px;
font-weight: bold;
text-align: center;
line-height: 1;
padding: 14px 14px;
background-color: #03A9F4;
border-radius: 50%;
transition: 0.3s cubic-bezier(0.18, 0.89, 0.35, 1.15) all;
}
#button-custom-1 .checkbox-custom:checked + .knobs:before
{
content: '$';
left: 42px;
background-color: #89E592;
}
</style>
<div class="relative">
<div class="text-center font-bold text-4xl md:text-5xl w-max absolute left-1/2 -top-1/3 transform -translate-x-1/2 italic"><br>Небольшая анкета</div>
<div class="flex flex-col space-y-4 w-96">
<div class="card rounded-badge bg-base-200 p-4">
<h2 class="card-title text-center text-3xl justify-center my-4">Кто ты воин?</h2>
<div class="join rounded-full justify-center">
<input class="join-item btn bg-white w-1/3" type="radio" name="options" aria-label="Баклан"/>
<input class="join-item btn bg-white w-1/3" type="radio" name="options" aria-label="Спец" checked="checked"/>
<input class="join-item btn bg-white w-1/3" type="radio" name="options" aria-label="Маг"/>
</div>
<div class="flex flex-col space-y-4 mt-1">
<button class="btn h-16 btn-primary rounded-full text-2xl relative">
Понизить курс
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<svg class="p-2" fill="none" viewBox="0 0 24 24" id="down-trend-round" xmlns="http://www.w3.org/2000/svg">
<path id="primary" d="M3,7l5.79,5.79a1,1,0,0,0,1.42,0l2.58-2.58a1,1,0,0,1,1.42,0L21,17" style="fill: none; stroke: rgb(0, 0, 0); stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5;"></path><polyline id="primary-2" data-name="primary" points="17 17 21 17 21 13" style="fill: none; stroke: rgb(0, 0, 0); stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5;"></polyline>
</svg>
</div>
<i class="absolute text-sm bottom-0 text-base-200 font-medium">временно не доступно</i>
</button>
<button class="btn h-16 btn-primary p-0 rounded-full text-2xl relative">
Уйти в академ
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<img class="p-2" src="img/akadem.svg" alt=""/>
</div>
<i class="absolute text-sm bottom-0 text-base-200 font-medium">временно не доступно</i>
</button>
<div class="divider"></div>
</div>
</div>
</div>
</div>
@* <div class="relative"> *@
@* <div class="text-center font-bold text-4xl md:text-5xl w-max absolute -top-1/3 italic">Небольшая анкета</div> *@
@* *@
@* <div class="relative"> *@
@*
@* <div class="mb-4"> *@
@* <h2 class="text-xl font-semibold mb-2">Курс?</h2> *@
@* <div class="join"> *@
@* <input class="join-item btn" type="radio" name="kurs" aria-label="1" checked="checked"/> *@
@* <input class="join-item btn" type="radio" name="kurs" aria-label="2"/> *@
@* <input class="join-item btn" type="radio" name="kurs" aria-label="3"/> *@
@* <input class="join-item btn" type="radio" name="kurs" aria-label="4"/> *@
@* <input class="join-item btn" type="radio" name="kurs" aria-label="5"/> *@
@* </div> *@
@* </div> *@
@* <div class="mb-4"> *@
@* <h2 class="text-xl font-semibold mb-2">Платник?</h2> *@
@* <div class="button-custom r" id="button-custom-1"> *@
@* <input type="checkbox" class="checkbox-custom"> *@
@* <div class="knobs"></div> *@
@* <div class="layer" style="background-color: white;"></div> *@
@* </div> *@
@* <div class="btn-group btn-group-horizontal"> *@
@* <button class="btn btn-outline btn-primary">+</button> *@
@* <button class="btn btn-outline">7</button> *@
@* <button class="btn btn-outline">9</button> *@
@* <button class="btn btn-outline">9</button> *@
@* <button class="btn btn-outline">9</button> *@
@* <button class="btn btn-outline">6</button> *@
@* <button class="btn btn-outline">6</button> *@
@* <button class="btn btn-outline">6</button> *@
@* <button class="btn btn-outline">3</button> *@
@* <button class="btn btn-outline">3</button> *@
@* </div> *@
@* </div> *@
@* </div></div> *@

View File

@@ -1,54 +1,54 @@
@page "/otchislenie/result"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
<script>
function showCongratulation() {
document.getElementById('congratulation').classList.remove('hidden');
}
</script>
<dialog id="SendToDirectorModal" class="modal modal-bottom sm:modal-middle">
<div class="modal-box">
<h3 class="text-lg font-bold">Отправка письма</h3>
<p class="py-4">Вы уверены что хотите отправить ваше заявление директору?<br>Отменить отправку невозможно!</p>
<div class="modal-action">
<form method="dialog">
<button class="btn btn-primary">Нет</button>
<a href="/otchislenie/congratulation" class="btn btn-error">Да</a>
</form>
</div>
</div>
</dialog>
<div class="w-full">
<div class="flex flex-col space-y-4 w-96 mx-auto">
<div class="card rounded-badge bg-base-200 p-4">
<div class="flex flex-col space-y-4 mt-1">
<button onclick="SendToDirectorModal.showModal()" class="btn h-16 btn-primary rounded-full text-2xl relative">
Отправить директору
</button>
<button id="downloadPDF" onclick="showCongratulation()" class="btn h-16 btn-primary rounded-full text-2xl relative">
Скачать PDF
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<img class="p-3" src="img/pdf.svg" alt=""/>
</div>
</button>
</div>
</div>
</div>
@* TODO: Сделать адаптив *@
@* <div class="mt-9 flex flex-col space-y-4 lg:flex-row lg:space-x-4 lg:space-y-0 w-96 mx-auto" > *@
<div class="mt-9 flex flex-col space-y-4 w-96 mx-auto" >
<a href="/otchislenie/statement" class="btn w-96 h-14 btn-primary rounded-full text-2xl">
Назад
</a>
<a href="/" class="btn w-96 h-14 btn-primary rounded-full text-2xl">
Выход
</a>
</div>
<div class="w-96 mx-auto mt-6">
<a id="congratulation" href="/otchislenie/congratulation" class="btn w-full h-16 btn-primary rounded-full text-2xl hidden">
Страница поздравления
</a>
</div>
@page "/otchislenie/result"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
<script>
function showCongratulation() {
document.getElementById('congratulation').classList.remove('hidden');
}
</script>
<dialog id="SendToDirectorModal" class="modal modal-bottom sm:modal-middle">
<div class="modal-box">
<h3 class="text-lg font-bold">Отправка письма</h3>
<p class="py-4">Вы уверены что хотите отправить ваше заявление директору?<br>Отменить отправку невозможно!</p>
<div class="modal-action">
<form method="dialog">
<button class="btn btn-primary">Нет</button>
<a href="/otchislenie/congratulation" class="btn btn-error">Да</a>
</form>
</div>
</div>
</dialog>
<div class="w-full">
<div class="flex flex-col space-y-4 xl:w-1/2 sm:w-full mx-auto">
<div class="card rounded-badge bg-base-200 p-4">
<div class="flex flex-col space-y-4 mt-1">
<button onclick="SendToDirectorModal.showModal()" class="btn h-16 btn-primary rounded-full text-2xl relative">
Отправить директору
</button>
<button id="downloadPDF" onclick="showCongratulation()" class="btn h-16 btn-primary rounded-full text-2xl relative">
Скачать PDF
<div class="absolute bg-base-200 rounded-full right-1 w-14 h-14">
<img class="p-3" src="img/pdf.svg" alt=""/>
</div>
</button>
</div>
</div>
</div>
@* TODO: Сделать адаптив *@
@* <div class="mt-9 flex flex-col space-y-4 lg:flex-row lg:space-x-4 lg:space-y-0 w-96 mx-auto" > *@
<div class="mt-9 flex flex-col space-y-4 w-96 mx-auto" >
<a href="/otchislenie/statement" class="btn w-96 h-14 btn-primary rounded-full text-2xl">
Назад
</a>
<a href="/" class="btn w-96 h-14 btn-primary rounded-full text-2xl">
Выход
</a>
</div>
<div class="w-96 mx-auto mt-6">
<a id="congratulation" href="/otchislenie/congratulation" class="btn w-full h-16 btn-primary rounded-full text-2xl hidden">
Страница поздравления
</a>
</div>
</div>

View File

@@ -1,8 +1,8 @@
@page "/otchislenie/statement"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
<a href="/otchislenie/result">Statement</a>
@code {
@page "/otchislenie/statement"
@using Otchinslator.Components.Layout
@layout OtchislenieLayout
<a href="/otchislenie/result">Statement</a>
@code {
}

View File

@@ -1,6 +1,6 @@
<Router AppAssembly="typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)"/>
<FocusOnNavigate RouteData="routeData" Selector="h1"/>
</Found>
</Router>
<Router AppAssembly="typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)"/>
<FocusOnNavigate RouteData="routeData" Selector="h1"/>
</Found>
</Router>

View File

@@ -1,10 +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 static Microsoft.AspNetCore.Components.Web.RenderMode
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using Otchinslator
@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 static Microsoft.AspNetCore.Components.Web.RenderMode
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using Otchinslator
@using Otchinslator.Components