Commit aa1d6cd7 authored by SergeevaAA's avatar SergeevaAA

Merge branch 'bug/#20-UI' into 'develop'

#20 - Правки UI

See merge request !16
parents 5ff095d9 382a04f4
......@@ -28,7 +28,7 @@
/// <summary>
/// Дата и время
/// </summary>
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy HH:MM}")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy hh:mm:ss}")]
public virtual DateTime DateTime { get; set; }
/// <summary>
......
......@@ -23,7 +23,7 @@
/// <summary>
/// Дата и время добавления
/// </summary>
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy HH:MM}")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy hh:mm:ss}")]
public virtual DateTime UploadDateTime { get; set; }
/// <summary>
......
......@@ -285,22 +285,22 @@
{
if (size >= tb) //больше или равно 1 Тб
{
return $"{Math.Round(size / tb, 2)} Тб";
return $"{Math.Round(size / tb, 2)} Тб".Replace(',', '.');
}
if (size >= gb) //больше или равно 1 Гб
{
return $"{Math.Round(size / gb, 2)} Гб";
return $"{Math.Round(size / gb, 2)} Гб".Replace(',', '.');
}
if (size >= mb) //больше или равно 1 Мб
{
return $"{Math.Round(size / mb, 2)} Мб";
return $"{Math.Round(size / mb, 2)} Мб".Replace(',', '.');
}
if (size >= kb) //больше или равно 1 кб
{
return $"{Math.Round(size / kb, 2)} кб";
return $"{Math.Round(size / kb, 2)} кб".Replace(',', '.');
}
return $"{size} б";
......
......@@ -3,7 +3,8 @@
@{
ViewData["Title"] = "Статистика действий с файлами";
}
<h1>@ViewData["Title"]</h1>
<h1>@ViewData["Title"]</h1><br/>
@if (Model != null && Model.Any())
{
......@@ -19,16 +20,20 @@
{
<tr>
<td>
<input hidden asp-for="@statistics.Id" />
<input hidden asp-for="@statistics.FileId" />
<input asp-for="@statistics.FileName" />
@Html.HiddenFor(m => statistics.Id)
@Html.HiddenFor(m => statistics.FileId)
@Html.DisplayFor(m => statistics.FileName)
</td>
<td>
@Html.DisplayFor(m => statistics.DateTime)
</td>
<td>
@Html.DisplayFor(m => statistics.ActionType)
</td>
<td><input asp-for="@statistics.DateTime" /></td>
<td><input asp-for="@statistics.ActionType" /></td>
<td><input asp-for="@statistics.UserLogin" /></td>
<td> @Html.DisplayFor(m => statistics.UserLogin)</td>
<td>
<button type="submit" class="download" onclick="downloadFile(@statistics.FileId)" title="Скачать файл" />
<button type="submit" class="delete" onclick="deleteFile(@statistics.FileId)" title="Удалить файл" />
<button type="submit" class="btn download" onclick="downloadFile(@statistics.FileId)" title="Скачать файл" />
<button type="submit" class="btn delete" onclick="deleteFile(@statistics.FileId)" title="Удалить файл" />
</td>
</tr>
}
......@@ -36,47 +41,5 @@
}
else
{
<br />
<h4>С файлами не производилось никаких действий.</h4>
}
<script>
function downloadFile(id) {
$.get('@Url.Action("GetDownloadUrl", "File")', { id: id })
.done(function (url) {
location.href = url;
})
.fail(function (xhr) {
searchFiles();
alert(xhr.responseText);
})
}
function deleteFile(id) {
$.get('@Url.Action("Delete", "File")', { id: id })
.done(function (message) {
searchFiles();
alert(message);
})
.fail(function (xhr) {
searchFiles();
alert(xhr.responseText);
})
}
</script>
<style>
.download {
height: 30px;
width: 30px;
background-image: url(/images/Download.png);
background-size: cover;
}
.delete {
height: 30px;
width: 30px;
background-image: url(/images/Delete.png);
background-size: cover;
}
</style>
\ No newline at end of file
<h4>С файлами еще не производилось никаких действий.</h4>
}
\ No newline at end of file
......@@ -2,28 +2,17 @@
ViewData["Title"] = "Все файлы";
}
<h1>@ViewData["Title"]</h1>
<a asp-action="Upload" asp-controller="File">Добавить файл</a>
<br />
Поиск по описанию:
<input type="search" id="searchString" placeholder="Введите слова для поиска через пробел и нажмите Enter" onsearch="searchFiles()" />
@Html.ActionLink("Добавить файл", "Upload", "File")
<br />
<br />
<input type="search" id="searchString" placeholder="Введите через пробел слова для поиска по описанию и нажмите Enter" onsearch="searchFiles()" class="full-width" />
<br />
<input type="checkbox" id="isCaseSensitive" /> Учитывать регистр
<br />
<br />
<div id="search-results">
@Html.Action("Search", "File")
</div>
<script>
function searchFiles() {
$.get('@Url.Action("Search", "File")', { searchString: $('#searchString').val(), isCaseSensitive: $('#isCaseSensitive')[0].checked })
.done(function (data) {
$('#search-results').html(data);
})
.fail(function (xhr, status, error) {
$('#search-results').html(xhr.responseText);
})
}
</script>
\ No newline at end of file
</div>
\ No newline at end of file
@model FileDesk.Domain.ViewModels.UploadViewModel
@{
ViewData["Title"] = "Загрузка файла";
ViewData["Title"] = "Добавление файла";
}
<h1>@ViewData["Title"]</h1>
<h1>@ViewData["Title"]</h1><br/>
<form asp-action="Upload" asp-controller="File" asp-anti-forgery="true" enctype="multipart/form-data">
<div class="validation" asp-validation-summary="All"></div>
<div>
<div class="form-group">
<label asp-for="File">Выберите файл</label><br />
<input type="file" asp-for="File" />
<span asp-validation-for="File" />
<b>@Html.DisplayNameFor(m => m.File)</b><br/>
@Html.EditorFor(m => m.File, new { @class = "btn btn-secondary" })
@Html.ValidationMessageFor(m => m.File)
</div>
<div class="form-group">
<label asp-for="Name">Название файла</label><br />
<input asp-for="Name" />
<span asp-validation-for="Name" />
<b>@Html.DisplayNameFor(m => m.Name)</b><br />
@Html.TextBoxFor(m => m.Name, new { @class = "full-width" })
@Html.ValidationMessageFor(m => m.Name)
</div>
<div class="form-group">
<label asp-for="Description">Описание файла</label><br />
<textarea asp-for="Description"></textarea>
<span asp-validation-for="Description" />
<b>@Html.DisplayNameFor(m => m.Description)</b><br />
@Html.TextAreaFor(m => m.Description, new { @class = "full-width high-textarea" })
@Html.ValidationMessageFor(m => m.Description)
</div>
<div class="form-group">
<input type="submit" value="Загрузить" class="btn-primary" />
<input type="submit" value="Загрузить" class="btn btn-primary" />
</div>
</div>
</form>
\ No newline at end of file
......@@ -39,7 +39,7 @@
}
<li>
<b>@Html.ActionLink("Добавить файл", "Upload", "File")</b> <br />
<b>@Html.ActionLink("Добавление файла", "Upload", "File")</b> <br />
На этой странице Вы можете загрузить новый файл. Для этого нужно будет выбрать его с помощью диалогового окна, а также ввести имя и описание.
</li>
......
Доступ к запрашиваемой странице запрещен. Требуются права администратора.
\ No newline at end of file
@{
ViewData["Title"] = "Доступ запрещен";
}
<h1>@ViewData["Title"]</h1>
<br />
Доступ к запрашиваемой странице запрещен. Требуются права администратора.
\ No newline at end of file
......@@ -3,13 +3,15 @@
ViewData["Title"] = "Ошибка";
}
<h1 class="text-danger">Ошибка</h1>
<h2>Во время обработки Вашего запроса произошла ошибка. Сообщите о ней <a asp-area="" asp-controller="Home" asp-action="Contacts">разработчику</a></h2>
<h1>@ViewData["Title"]</h1>
<br />
<h2>Во время обработки Вашего запроса произошла ошибка. Сообщите о ней @Html.ActionLink("разработчику", "Contacts", "Home").</h2>
@if (!string.IsNullOrEmpty(Model))
{
<p>
<strong class="text-danger">Текст ошибки: </strong>
<code>@Model</code>
</p>
<p>
<strong class="text-danger">Текст ошибки: </strong>
<code>@Model</code>
</p>
}
\ No newline at end of file
......@@ -11,26 +11,17 @@
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-controller="File" asp-action="Index">FileDesk</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="About">О сайте</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Contacts">Контакты</a>
</li>
<div class="left-float">
<a class="navbar-brand left-float" asp-area="" asp-controller="File" asp-action="Index"><img src="~/images/Logo.png" />FileDesk</a>
<ul class="navbar-nav flex-grow-1 left-float">
@if (User.Identity.IsAuthenticated)
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="File" asp-action="Index">Все файлы</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="File" asp-action="Upload">Добавить файл</a>
<a class="nav-link text-dark" asp-area="" asp-controller="File" asp-action="Upload">Добавление файла</a>
</li>
@if (User.IsInRole("admin"))
{
......@@ -38,8 +29,22 @@
<a class="nav-link text-dark" asp-area="" asp-controller="Action" asp-action="Index">Просмотр статистики</a>
</li>
}
}
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="About">О сайте</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Contacts">Контакты</a>
</li>
</ul>
</div>
<div class="ledt-float right-align">
<ul class="navbar-nav flex-grow-1">
@if (User.Identity.IsAuthenticated)
{
<li class="nav-item">
<p class="nav-link text-dark">Вы вошли как @User.Identity.Name</p>
<a class="nav-link text-dark">Вы вошли как @User.Identity.Name</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="User" asp-action="Logout">Выход</a>
......@@ -67,12 +72,17 @@
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2020 - FileDesk - <a asp-area="" asp-controller="Home" asp-action="About">О сайте</a>
&copy; 2020 - FileDesk - @Html.ActionLink("О сайте", "About", "Home")
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
<script>
var searchUrl = '@Url.Action("Search", "File")';
var downloadUrl = '@Url.Action("GetDownloadUrl", "File")';
var deleteUrl = '@Url.Action("Delete", "File")';
</script>
@RenderSection("Scripts", required: false)
</body>
</html>
</html>
\ No newline at end of file
......@@ -16,20 +16,20 @@
{
<tr>
<td>
<input hidden asp-for="@file.Id" />
@Html.HiddenFor(m => file.Id)
<img src="~/images/@String.Format("{0}.png", file.Format)" title="@file.FormatDisplayName" />
</td>
<td><input asp-for="@file.Name" /></td>
<td><input asp-for="@file.Size" /></td>
<td><input asp-for="@file.UploadDateTime" /></td>
<td><input asp-for="@file.User" /></td>
<td><input asp-for="@file.Description" /></td>
<td>@Html.DisplayFor(m => file.Name)</td>
<td>@Html.DisplayFor(m => file.Size)</td>
<td>@Html.DisplayFor(m => file.UploadDateTime)</td>
<td>@Html.DisplayFor(m => file.User)</td>
<td>@Html.DisplayFor(m => file.Description)</td>
<td>
<button type="submit" class="download" onclick="downloadFile(@file.Id)" title="Скачать файл" />
<button type="submit" class="btn download" onclick="downloadFile(@file.Id)" title="Скачать файл" />
@if (User.IsInRole("admin"))
{
<button type="submit" class="delete" onclick="deleteFile(@file.Id)" title="Удалить файл" />
<button type="submit" class="btn delete" onclick="deleteFile(@file.Id)" title="Удалить файл" />
}
</td>
......@@ -39,52 +39,6 @@
}
else
{
<br /><h4>Файлы не найдены.</h4>
<h4>Файлы не найдены.</h4>
}
</div>
<script>
function downloadFile(id) {
$.get('@Url.Action("GetDownloadUrl", "File")', { id: id })
.done(function (url) {
location.href = url;
})
.fail(function (xhr) {
searchFiles();
alert(xhr.responseText);
})
}
function deleteFile(id) {
$.get('@Url.Action("Delete", "File")', { id: id })
.done(function (message) {
searchFiles();
alert(message);
})
.fail(function (xhr) {
searchFiles();
alert(xhr.responseText);
})
}
</script>
<style>
img {
height: 30px;
width: 30px;
}
.download {
height: 30px;
width: 30px;
background-image: url(/images/Download.png);
background-size: cover;
}
.delete {
height: 30px;
width: 30px;
background-image: url(/images/Delete.png);
background-size: cover;
}
</style>
\ No newline at end of file
</div>
\ No newline at end of file
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
\ No newline at end of file
......@@ -3,25 +3,25 @@
@{
ViewData["Title"] = "Вход на сайт";
}
<h1>@ViewData["Title"]</h1>
<h1>@ViewData["Title"]</h1><br/>
<a asp-action="Register" asp-controller="User">Регистрация</a>
@Html.ActionLink("Регистрация", "Register", "User")
<form asp-action="Login" asp-controller="User" asp-anti-forgery="true">
<div class="validation" asp-validation-summary="All"></div>
<div>
<div class="form-group">
<label asp-for="Login">Введите логин</label><br />
<input type="text" asp-for="Login" />
<span asp-validation-for="Login" />
<b>@Html.DisplayNameFor(m => m.Login)</b><br />
@Html.TextBoxFor(m => m.Login)
@Html.ValidationMessageFor(m => m.Login)
</div>
<div class="form-group">
<label asp-for="Password">Введите пароль</label><br />
<input asp-for="Password" />
<span asp-validation-for="Password" />
<b>@Html.DisplayNameFor(m => m.Password)</b><br />
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="form-group">
<input type="submit" value="Войти" class="btn-primary" />
<input type="submit" value="Войти" class="btn btn-primary" />
</div>
</div>
</form>
\ No newline at end of file
......@@ -4,28 +4,29 @@
ViewData["Title"] = "Регистрация на сайте";
}
<h1>@ViewData["Title"]</h1>
<br />
<a asp-action="Login" asp-controller="User">Авторизация</a>
@Html.ActionLink("Авторизация", "Login", "User")
<form asp-action="Register" asp-controller="User" asp-anti-forgery="true">
<div class="validation" asp-validation-summary="All"></div>
<div>
<div class="form-group">
<label asp-for="Login">Введите логин</label><br />
<input type="text" asp-for="Login" />
<span asp-validation-for="Login" />
<b>@Html.DisplayNameFor(m => m.Login)</b><br />
@Html.TextBoxFor(m => m.Login)
@Html.ValidationMessageFor(m => m.Login)
</div>
<div class="form-group">
<label asp-for="Password">Введите пароль</label><br />
<input asp-for="Password" />
<span asp-validation-for="Password" />
<b>@Html.DisplayNameFor(m => m.Password)</b><br />
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="form-group">
<label asp-for="ConfirmPassword">Повторите пароль</label><br />
<input asp-for="ConfirmPassword" />
<span asp-validation-for="ConfirmPassword" />
<b>@Html.DisplayNameFor(m => m.ConfirmPassword)</b><br />
@Html.PasswordFor(m => m.ConfirmPassword)
@Html.ValidationMessageFor(m => m.ConfirmPassword)
</div>
<div class="form-group">
<input type="submit" value="Регистрация" class="btn-primary" />
<input type="submit" value="Регистрация" class="btn btn-primary" />
</div>
</div>
</form>
\ No newline at end of file
......@@ -70,3 +70,71 @@ body {
white-space: nowrap;
line-height: 60px; /* Vertically center the text there */
}
/*My own css
-------------------------------------------------------*/
img {
height: 30px;
width: 30px;
}
.download {
height: 30px;
width: 30px;
background-image: url(/images/Download.png);
background-size: cover;
display: inline-block;
border: none;
border-radius: 5px;
outline: none;
text-decoration: none;
margin-right: 10px;
}
.delete {
height: 30px;
width: 30px;
background-image: url(/images/Delete.png);
background-size: cover;
display: inline-block;
border: none;
border-radius: 5px;
outline: none;
text-decoration: none;
margin-right: 10px;
}
.full-width {
width: 100%;
}
.high-textarea {
min-height: 130px;
}
.right-align {
text-align: right;
}
.left-float {
float: left;
}
input {
border-width: thin;
border-color: lightgray;
border-radius: 5px;
box-shadow: none;
}
textarea {
border-width: thin;
border-color: lightgray;
border-radius: 5px;
box-shadow: none;
}
:active, :hover, :focus {
outline: none !important;
outline-offset: 0 !important;
}
\ No newline at end of file
// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
// for details on configuring this project to bundle and minify static web assets.
function searchFiles() {
$.get(searchUrl, { searchString: $('#searchString').val(), isCaseSensitive: $('#isCaseSensitive')[0].checked })
.done(function (data) {
$('#search-results').html(data);
})
.fail(function (xhr) {
$('#search-results').html(xhr.responseText);
})
}
// Write your JavaScript code.
function downloadFile(id) {
$.get(downloadUrl, { id: id })
.done(function (url) {
location.href = url;
})
.fail(function (xhr) {