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

100
wwwroot/css/common.css Normal file
View File

@@ -0,0 +1,100 @@
:focus {
outline: none;
}
.page-title-color {
color: #b32d00; /* #b74040; <20>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
}
/* Footer styles */
.footer {
display: flex;
flex-grow: 1;
align-items: center;
flex-flow: column nowrap;
}
/* Header styles */
.navbar {
background-color: #355b9c; /* <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> = title <20>1d4a9b, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> #e3f2fd*/
}
.navbar-brand > img {
height: 2em;
}
.navbar-brand > span {
font-size: smaller;
margin-left: 10px;
color: #04763a; /* <20>. <20><><EFBFBD><EFBFBD><EFBFBD> */
text-decoration: none;
}
.navbar-brand:hover > span {
font-size: smaller;
margin-left: 10px;
color: #1560a1; /* <20>.<2E><><EFBFBD> */
text-decoration: underline;
}
.nav-link, .nav-link:visited, .nav-link:active {
color: #04763a !important; /* <20>.<2E><><EFBFBD><EFBFBD><EFBFBD> */
text-decoration: none;
}
.nav-link:hover {
color: #1560a1 !important; /* <20>.<2E><><EFBFBD> */
text-decoration: underline;
}
/* Navigation tree (sitemap) styles */
.nav_tree .nav_tree_item_container:first-child {
border-top: 1px solid rgba(0, 0, 0, 0.125);
}
.nav_tree_item_container:hover {
background-color: antiquewhite; /* #faebd7 - <20><>.<2E><><EFBFBD><EFBFBD><EFBFBD> */
}
.nav_tree_item_container {
display: flex;
align-items: center;
border: 1px solid rgba(0, 0, 0, 0.125);
border-top: none;
}
.nav_tree_item_container span.indent {
margin-left: 1em;
margin-right: 1em;
}
.nav_tree_item_data {
display: flex;
flex-grow: 1;
align-items: flex-start;
flex-flow: column nowrap;
padding: 0.25rem 0.5rem;
border-left: 1px solid rgba(0, 0, 0, 0.125);
}
.nav_tree_item_data span {
color: #033;
font-size: smaller;
font-weight: bold;
float: right;
}
.nav_tree_item_data a,
.nav_tree_item_data a:visited {
color: #033;
text-decoration: underline;
}
.nav_tree_item_data a:hover {
color: #099;
text-decoration: underline;
}

141
wwwroot/css/pdf_view.css Normal file
View File

@@ -0,0 +1,141 @@
body, main {
padding: 0;
margin: 0;
border: 0;
}
a {
text-decoration: none;
}
img {
vertical-align: middle;
}
.pdf-page-link {
display: block !important;
width: 135px;
height: 250px;
position: relative;
border: 1px solid #ccc;
margin: 5px;
}
.pdf-page-link.selected,
.pdf-page-link.selected:active,
.pdf-page-link.selected:hover {
border: 1px solid #f96;
cursor: auto;
}
.pdf-page-link:hover {
border: 1px solid #9f9;
}
.pdf-page-link:active {
border: 1px solid #cfc;
}
.pdf-page-link > .pdf-page-thumb {
margin: 0;
position: absolute;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.pdf-page-link > .pdf-page-label {
display: inline;
position: absolute;
width: 100%;
z-index: 1;
text-align: center;
color: #000;
background-color: #ccc;
margin: 0;
padding: 0;
}
.pdf-page-link.selected > .pdf-page-label,
.pdf-page-link.selected:active > .pdf-page-label,
.pdf-page-link.selected:hover > .pdf-page-label {
background-color: #f96;
}
.pdf-page-link:hover > .pdf-page-label {
background-color: #9f9;
}
.pdf-page-link:active > .pdf-page-label {
background-color: #cfc;
}
.full-width {
width: 100%;
}
.full-height {
height: 100%;
}
.full-view-height {
height: 100vh;
}
.no-padding {
padding: 0;
}
.vlayout {
display: flex;
flex-direction: column;
}
.hlayout {
display: flex;
flex-direction: row;
}
.layout-scale-1 {
flex-grow: 1;
}
.header {
align-self: stretch;
background-color: #444;
color: #fff;
display: flex;
padding: 10px;
flex-direction: row;
}
.header-info-bar {
flex-grow: 1;
align-self: center;
}
.header-paging-bar {
text-align: center;
align-self: center;
}
.overflow-auto {
overflow: auto;
}
.navigation-bar {
align-self: stretch;
overflow: auto;
flex-grow: 0;
width: 160px;
min-width: 160px;
background-color: #444;
}
.content-area {
background-color: #999;
align-self: stretch;
flex-grow: 1;
text-align: center;
}

11228
wwwroot/css/vendor/bootstrap.css vendored Normal file

File diff suppressed because it is too large Load Diff

1
wwwroot/css/vendor/bootstrap.css.map vendored Normal file

File diff suppressed because one or more lines are too long

7937
wwwroot/css/vendor/fontawesome/css/all.css vendored Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
wwwroot/img/vtu/book_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
wwwroot/img/vtu/book_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
wwwroot/img/vtu/book_47.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
wwwroot/img/vtu/book_48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
wwwroot/img/vtu/logo_sm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 810 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
wwwroot/img/zagore/z3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

174
wwwroot/js/common.js Normal file
View File

@@ -0,0 +1,174 @@
'use strict';
$.defaultHandlers = {
disableSubmitButton: function( form , disable) {
form.find(":submit").attr("disabled", disable);
},
startWait: function( ) {
$('#pleaseWaitDialog').modal('show');
},
endWait: function( ) {
$('#pleaseWaitDialog').modal('hide');
},
showErrorMessage: function( form , message ) {
var div = form.find(".form-error-message");
if (div.length) {
div.show();
div.html(message);
} else {
alert(message);
}
},
hideErrorMessage: function( form ) {
var div = form.find(".form-error-message");
if (div.length)
div.hide();
},
validateResponse: function( response ) {
if (!response)
return { Success: false, ErrorMessage: "Системна грешка." };
return {
Success: response.Success ?? false,
Result: response.Result ,
ErrorMessage: response.ErrorMessage ?? "Системна грешка."
};
},
postProcessSuccess: function( caller , response ) {
// if data-navigate="" is set, go there
var navigate_url = caller.data("navigate");
if (navigate_url) {
window.location = navigate_url.replace(':response', response);
return;
}
// fallback: refresh the page
window.location.reload();
} ,
processResponse: function( form , response ) {
var result = $.defaultHandlers.validateResponse( response );
if (!result.Success) {
$.defaultHandlers.showErrorMessage(form, result.ErrorMessage);
return;
}
$.defaultHandlers.postProcessSuccess(form, result.Result);
},
submitHandler: function( element , event ) {
event.preventDefault();
var form = $(element);
$.defaultHandlers.hideErrorMessage(form);
$.defaultHandlers.disableSubmitButton(form, true);
$.defaultHandlers.startWait();
$.ajax({
url: form.data("service"),
type: 'POST',
data: new FormData(element),
async: true,
cache: false,
contentType: false,
enctype: 'multipart/form-data',
processData: false,
success: function( response ) {
$.defaultHandlers.disableSubmitButton(form, false);
$.defaultHandlers.processResponse(form, response);
$.defaultHandlers.endWait();
},
error: function( xhr , status , error ) {
$.defaultHandlers.disableSubmitButton(form, false);
$.defaultHandlers.showErrorMessage(form, "XHR:" + xhr.responseText + "\n<br>Status: " + status + "\n<br>Error: " + error);
$.defaultHandlers.endWait();
}
});
return false;
} ,
processRestLinkResponse: function( sender , response ) {
var result = $.defaultHandlers.validateResponse( response );
if (!result.Success) {
alert( result.ErrorMessage );
return;
}
$.defaultHandlers.postProcessSuccess(sender, result.Result);
} ,
restLinkHandler: function( event ) {
event.preventDefault();
var sender = $(event.target);
sender.attr("disabled", true);
$.defaultHandlers.startWait();
$.ajax({
url: sender.data("service"),
type: 'GET',
async: true,
cache: false,
processData: false,
success: function( response ) {
sender.attr("disabled", false);
$.defaultHandlers.processRestLinkResponse(sender, response);
$.defaultHandlers.endWait();
},
error: function( xhr , status , error ) {
sender.attr("disabled", false);
alert("XHR:" + xhr.responseText + "\n<br>Status: " + status + "\n<br>Error: " + error);
$.defaultHandlers.endWait();
}
});
return false;
}
};
$(document).ready(function( ) {
//$("#pleaseWaitDialog").modal({ backdrop: 'static', keyboard: false });
//$("#pleaseWaitDialog").modal({ show:true, backdrop: 'static', keyboard: false });
// $("#pleaseWaitDialog").modal("show");
$('#pleaseWaitDialog').modal({ show: true, backdrop: 'static', keyboard: false });
// setTimeout(function () { $('#pleaseWaitDialog').modal('show'); }, 1000);
// setTimeout(function () { $('#pleaseWaitDialog').modal('hide'); }, 3000);
$('form.js_default').each(function( ) {
$(this).validate({});
});
$('form.js_service').each(function () {
$(this).validate({ submitHandler: $.defaultHandlers.submitHandler });
});
$('a.js_service').click(
$.defaultHandlers.restLinkHandler
);
$('button.js_service').click(
$.defaultHandlers.restLinkHandler
);
$('a.toggle_dialog').click(function( e ) {
$("#" + $(this).data('hide')).modal("hide");
var dialog = $("#" + $(this).data('show'));
dialog.modal("show");
dialog.find('[autofocus]').focus();
e.preventDefault();
return false;
});
$('a.js_dialog').click(function( e ) {
var dialog = $('#' + $(this).data('target'));
dialog.modal("toggle");
dialog.find('[autofocus]').focus();
e.preventDefault();
return false;
});
});

23
wwwroot/js/pdf_view.js Normal file
View File

@@ -0,0 +1,23 @@
'use strict';
$(document).ready(function () {
$('a.pdf-page-link').click(function (e) {
e.preventDefault();
if ($(this).hasClass('selected')) {
return false;
}
$('a.pdf-page-link').each(function (a) {
$(this).removeClass("selected");
});
$(this).addClass("selected");
$("#current_page").html($(this).data('page'));
$("#page_preview").attr("src", $(this).attr('href'));
$("#content_div").animate({ scrollTop: 0 });
return false;
});
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
wwwroot/js/vendor/jquery-3.6.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
wwwroot/js/vendor/messages_bg.min.js vendored Normal file
View File

@@ -0,0 +1,4 @@
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
* https://jqueryvalidation.org/
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Полето е задължително.",remote:"Моля, въведете правилната стойност.",email:"Моля, въведете валиден email.",url:"Моля, въведете валидно URL.",date:"Моля, въведете валидна дата.",dateISO:"Моля, въведете валидна дата (ISO).",number:"Моля, въведете валиден номер.",digits:"Моля, въведете само цифри.",creditcard:"Моля, въведете валиден номер на кредитна карта.",equalTo:"Моля, въведете същата стойност отново.",extension:"Моля, въведете стойност с валидно разширение.",maxlength:a.validator.format("Моля, въведете не повече от {0} символа."),minlength:a.validator.format("Моля, въведете поне {0} символа."),rangelength:a.validator.format("Моля, въведете стойност с дължина между {0} и {1} символа."),range:a.validator.format("Моля, въведете стойност между {0} и {1}."),max:a.validator.format("Моля, въведете стойност по-малка или равна на {0}."),min:a.validator.format("Моля, въведете стойност по-голяма или равна на {0}.")}),a});