initial commit

This commit is contained in:
2026-08-04 14:41:21 +03:00
parent 3cb8fcde60
commit 1a1d6186d8
101 changed files with 23239 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
@model PagingData
@{
bool has_previous = Model.CurrentPage > 0;
bool has_next = Model.CurrentPage < Model.LastPage;
int first_page = Math.Max( 0 , Model.CurrentPage - 3 );
int last_page = Math.Min( first_page + 6 , Model.LastPage );
if ( last_page - first_page < 6 )
first_page = Math.Max( 0 , last_page - 6 );
bool show_dots_before = first_page > 0;
if ( show_dots_before )
first_page += 2; // shift first page to make room for [1][...]
bool show_dots_after = last_page < Model.LastPage;
if (show_dots_after)
last_page -= 2; // shift last page to make room for [...][last]
}
@if ( Model.LastPage > 0 )
{
<nav>
<ul class="pagination justify-content-center pagination-sm">
<li class="page-item @(has_previous ? "" : "disabled")">
<a class="page-link" href="@Model.Url( Model.CurrentPage - 1 )" tabindex="-1">Previous</a>
</li>
@if ( show_dots_before )
{
<li class="page-item"><a class="page-link" href="@Model.Url( 0 )">1</a></li>
<li class="page-item disabled"><span class="page-link">...</span></li>
}
@for ( int p = first_page ; p <= last_page; p++ )
{
if ( Model.CurrentPage == p )
{
<li class="page-item active"><span class="page-link">@(p+1)</span></li>
}
else
{
<li class="page-item"><a class="page-link" href="@Model.Url( p )">@(p+1)</a></li>
}
}
@if ( show_dots_after )
{
<li class="page-item disabled"><span class="page-link">...</span></li>
<li class="page-item"><a class="page-link" href="@Model.Url( Model.LastPage )">@( Model.LastPage + 1 )</a></li>
}
<li class="page-item @(has_next ? "" : "disabled")">
<a class="page-link" href="@Model.Url( Model.CurrentPage + 1 )" tabindex="-1">Next</a>
</li>
</ul>
</nav>
}

View File

@@ -0,0 +1,58 @@
@model BookData
<!-- <div class="col-xs-12 col-sm-12 col-md-4 col-lg-4 px-1 py-1"> -->
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 px-1 py-1">
<div class="card">
<div class="card-header">
@Model.BookTypeName
</div>
<div class="card-body">
@if (!string.IsNullOrEmpty(Model.UUID))
{
<img src="/Repository/Cover/@Model.UUID" style="width: 8em;" />
}
<a href="/Repository/Details/@Model.ID">
<h7 class="card-title display-7"><br><b>@Model.Title</b></h7>
</a>
<p><font size="2">
<b>Автор : </b>@Model.Author<br>
<b>Ключови думи : </b>@Model.Keywords<br>
@if (!string.IsNullOrEmpty(Model.Publisher))
{ <b>Издат.данни : </b> @Model.Publisher<br> }
@if (!string.IsNullOrEmpty(Model.PublishYear))
{ <b>Год.издаване : </b>@Model.PublishYear<br>}
@if (!string.IsNullOrEmpty(Model.Description))
{ <b>Размер : </b>@Model.Description<br> }
@if (!string.IsNullOrEmpty(Model.Opisanie))
{ <b>Описание : </b>@Model.Opisanie<br> }
@if (!string.IsNullOrEmpty(Model.KodDrugi))
{ <b>Език : </b>@Model.KodDrugi<br> }
@if (!string.IsNullOrEmpty(Model.Access))
{ <b>Access : </b>@Model.Access <br> }
</font>
</p>
</div>
</div>
</div>
<!--
<a href="/Repository/Details/@Model.ID">
<h7 class="card-title display-7"><b>@Model.Title</b></h7>
</a>
<p><font size="2"><b>Автор : </b>@Model.Author</font></p>
<p><font size="2"><b>Ключови думи : </b><small class="card-text">@Model.Keywords</small></font></p>
<p><font size="2"><b>Издат.данни : </b><small class="card-text">@Model.Publisher</small></font></p>
<p><font size="2"><b>Год.издаване : </b><small class="card-text">@Model.PublishYear</small></font></p>
<p><font size="2"><b>Размер : </b><small class="card-text">@Model.Description</small></font></p>
<p><font size="2"><b>Описание : </b><small class="card-text">@Model.Opisanie</small></font></p>
<p><font size="2"><b>Език : </b><small class="card-text">@Model.KodDrugi</small></font></p>
<p><b>Автор : </b><class ="h6">@Model.Author</p>
<p><b>Ключови думи : </b><small class="card-text">@Model.Keywords</small></p>
<p><b>Издат.данни : </b><small class="card-text">@Model.Publisher</small></p>
<p><b>Год.издаване : </b><small class="card-text">@Model.PublishYear</small></p>
<p><b>Размер : </b><small class="card-text">@Model.Description</small></p>
<p><b>Описание : </b><small class="card-text">@Model.Opisanie</small></p>
<p><b>Език : </b><small class="card-text">@Model.KodDrugi</small></p>
-->

View File

@@ -0,0 +1,35 @@
@model BookData
<div class="col-12 py-1">
<div class="card">
<div class="card-header">
@Model.BookTypeName
</div>
<div class="card-body">
@if (!string.IsNullOrEmpty(Model.UUID))
{
<img src="./Repository/Cover/@Model.UUID" style="width: 8em;" />
}
<a href="/Repository/Details/@Model.ID">
<h7 class="card-title display-7"><br><b>@Model.Title</b></h7>
</a>
<p><font size="2">
<b>Автор : </b>@Model.Author<br>
<b>Ключови думи : </b>@Model.Keywords<br>
@if (!string.IsNullOrEmpty(Model.Publisher))
{ <b>Издат.данни : </b> @Model.Publisher<br> }
@if (!string.IsNullOrEmpty(Model.PublishYear))
{ <b>Год.издаване : </b>@Model.PublishYear<br>}
@if (!string.IsNullOrEmpty(Model.Description))
{ <b>Размер : </b>@Model.Description<br> }
@if (!string.IsNullOrEmpty(Model.Opisanie))
{ <b>Описание : </b>@Model.Opisanie<br> }
@if (!string.IsNullOrEmpty(Model.KodDrugi))
{ <b>Език : </b>@Model.KodDrugi<br> }
@if (!string.IsNullOrEmpty(Model.Access))
{ <b>Access : </b>@Model.Access<br> }
</font>
</p>
</div>
</div>
</div>

View File

@@ -0,0 +1,8 @@
@model CategoryTreeData
<div class="nav_tree">
@foreach (CategoryItemData root_item in Model.RootElements)
{
@await Html.PartialAsync( "~/Views/Shared/SiteMapTreeItem.cshtml" , root_item )
}
</div>

View File

@@ -0,0 +1,19 @@
@model CategoryItemData
<div class="nav_tree_item_container">
@for (int x = 0; x < Model.Depth; x++)
{
<span class="indent"></span>
}
<span class="indent"><i class="fa fa-caret-right"></i></span>
<div class="nav_tree_item_data">
<a href="/Repository/@Model.ID">@Model.Name</a>
<span>Публикации: @Model.ElementCount</span>
</div>
</div>
@foreach ( CategoryItemData child in Model.Children )
{
@await Html.PartialAsync( "~/Views/Shared/SiteMapTreeItem.cshtml" , child )
}

View File

@@ -0,0 +1,22 @@
<div class="modal" id="forgotPasswordDialog" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<form class="js_service" data-service="/Api/User/Forgot">
<div class="modal-header">
<h5 class="modal-title">Забравена парола</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="Username">Потребител (e-mail)<span class="text-danger">*</span></label>
<input type="text" name="username" class="form-control" placeholder="Потребител" autocomplete="off" autofocus required>
</div>
<div class="form-error-message mb-3"></div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success mx-auto w-100">Изпрати</button>
</div>
</form>
</div>
</div>
</div>

View File

@@ -0,0 +1,35 @@
<div class="modal" id="loginDialog" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<form class="js_service" data-service="/Api/User/Login">
<div class="modal-header">
<h5 class="modal-title">Вход в системата</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="Username">Потребител<span class="---text-danger">*</span></label>
<input type="text" name="username" >
<!-- <input type="email" name="username" class="form-control" placeholder="Потребител" autocomplete="current-user" autofocus required>-->
</div>
<div class="mb-3">
<label for="Password">Парола<span class="---text-danger">*</span></label>
<input type="password" name="password" class="form-control" placeholder="Парола" autocomplete="current-password" required minlength="5">
<div class="d-flex flex-column align-items-end justify-content-end">
<a class="toggle_dialog link-success" data-hide="loginDialog" data-show="forgotPasswordDialog" href="#"><small>Забравена парола?</small></a>
</div>
</div>
<div class="form-error-message mb-3"></div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success mx-auto w-100">Влез</button>
</div>
<!--<div class="modal-footer d-flex flex-column align-items-center justify-content-center">
Нямате регистрация?
<a class="toggle_dialog link-success" data-hide="loginDialog" data-show="registerDialog" href="#">Регистрирай се</a>
</div>
-->
</form>
</div>
</div>
</div>

View File

@@ -0,0 +1,38 @@
<div class="modal" id="registerDialog" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<form class="js_service" data-service="/Api/User/Register">
<div class="modal-header">
<h5 class="modal-title">Регистрация</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="Username">Потребител (e-mail)<span class="text-danger">*</span></label>
<input type="email" name="username" class="form-control" placeholder="Потребител" autocomplete="off" autofocus required>
</div>
<div class="mb-3">
<label for="Username">Име<span class="text-danger">*</span></label>
<input type="text" name="name" class="form-control" placeholder="Име" autocomplete="off" required minlength="5">
</div>
<div class="mb-3">
<label for="Password">Парола<span class="text-danger">*</span></label>
<input type="password" id="password" name="password" class="form-control" placeholder="Парола" autocomplete="off" required minlength="5">
</div>
<div class="mb-3">
<label for="Password">Парола (отново)<span class="text-danger">*</span></label>
<input type="password" name="repeat" class="form-control" placeholder="Парола" data-rule-equalTo="#password" autocomplete="off" required minlength="5">
</div>
<div class="form-error-message mb-3"></div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success mx-auto w-100">Регистрация</button>
</div>
<div class="modal-footer d-flex flex-column align-items-center justify-content-center">
Вече сте регистриран?
<a class="toggle_dialog link-success" data-hide="registerDialog" data-show="loginDialog" href="#">Влез в системата</a>
</div>
</form>
</div>
</div>
</div>

View File

@@ -0,0 +1,14 @@
<div class="modal" id="pleaseWaitDialog" data-backdrop="static" data-keyboard="true" role="dialog">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Моля изчакайте...</h4>
</div>
<div class="modal-body">
<div class="text-center py-5">
<div class="spinner-border text-success" role="status" style="width: 5rem; height: 5rem;"></div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,98 @@
@model BasePageModel
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Виртуална библиотека</title>
<link rel="stylesheet" href="~/css/vendor/bootstrap.css" />
<link rel="stylesheet" href="~/css/vendor/fontawesome/css/all.css" />
<link rel="stylesheet" href="~/css/common.css" />
@await RenderSectionAsync("Styles", required: false)
</head>
<body class="d-flex flex-column min-vh-100">
<header>
<nav class="navbar navbar-expand-lg navbar navbar-dark">
<div class="container-fluid">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo03" aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Покажи">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand hstack" href="/Home/Index">
<img src="~/@Configuration["Images"]/logo_sm.png" alt="Дигитална библиотека" width="40" height="80">
<span>
<font color="#ffffff">
<b> Дигитална библиотека</b>
<br />
@Configuration["OB_project"]
<br />
Университетска библиотека
</font>
</span>
</a>
<div class="collapse navbar-collapse" id="navbarTogglerDemo03">
<div class="flex-grow-1"></div>
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="/Repository"><font color="#ffffff"><b><u>ДИГИТАЛНИ КОЛЕКЦИИ</u></b></font></a>
<a class="nav-link" href="/Search"><font color="#ffffff"><b><u>ТЪРСЕНЕ</u></b></font></a>
</li>
<li class="nav-item">
@if (Model.UserData == null)
{
<a class="nav-link"><font color="#ffffff">Непознат потребител</font></a>
<a class="nav-link js_dialog" href="#" data-target="loginDialog"><font color="#ffffff"><b><u>ВХОД</u></b></font></a>
}
else
{
<div class="btn-group flex-wrap">
<button class="btn btn-success btn-sm dropdown-toggle" type="button" id="dropdownAdminMenu" data-bs-toggle="dropdown" aria-expanded="false">
@Model.UserData.Name
</button>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdownAdminMenu">
<li><a class="link-danger dropdown-item js_service" href="#" data-navigate="/" data-service="/Api/User/Logout">Излез</a></li>
</ul>
</div>
}
</li>
</ul>
</div>
</div>
</nav>
</header>
<main role="main" class="my-3">
<div class="container-xl">
@RenderBody( )
</div>
</main>
<footer class="mt-auto border-top text-muted">
<div class="footer">
<div class="text-center">&copy; 2022 - Дигитална библиотека InexLib/INEX-Project Ltd.</div>
<div class="text-center">@Configuration["SN_project"]</div>
</div>
</footer>
@if (Model.UserData == null)
{
@await Html.PartialAsync( "~/Views/Shared/_DialogLogin.cshtml" );
@await Html.PartialAsync( "~/Views/Shared/_DialogRegister.cshtml" );
@await Html.PartialAsync( "~/Views/Shared/_DialogForgotPassword.cshtml" );
@await Html.PartialAsync( "~/Views/Shared/_DialogWait.cshtml" );
}
<script src="~/js/vendor/jquery-3.6.0.min.js"></script>
<script src="~/js/vendor/jquery.validate.min.js"></script>
<script src="~/js/vendor/messages_bg.min.js"></script>
<script src="~/js/vendor/bootstrap.bundle.min.js"></script>
<script src="~/js/common.js"></script>
<view-script append-version="false" />
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>

View File

@@ -0,0 +1,30 @@
@model BasePageModel
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Виртуална библиотека</title>
<link rel="stylesheet" href="~/css/vendor/bootstrap.css" />
<link rel="stylesheet" href="~/css/vendor/fontawesome/css/all.css" />
<link rel="stylesheet" href="~/css/common.css" />
@await RenderSectionAsync("Styles", required: false)
</head>
<body class="vh-100">
<main role="main" class="vh-100">
@RenderBody( )
</main>
<script src="~/js/vendor/jquery-3.6.0.min.js"></script>
<script src="~/js/vendor/jquery.validate.min.js"></script>
<script src="~/js/vendor/messages_bg.min.js"></script>
<script src="~/js/vendor/bootstrap.bundle.min.js"></script>
<script src="~/js/common.js"></script>
<view-script append-version="false" />
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>