Merge branch 'master' into master

This commit is contained in:
worthymelight 2025-06-29 16:22:59 +03:00 committed by GitHub
commit 5c846b9ba7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 590 additions and 418 deletions

View file

@ -2,15 +2,69 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<style> <style>
{var $css = file_get_contents(OPENVK_ROOT . "/Web/static/js/node_modules/@atlassian/aui/dist/aui/aui-prototyping.css")} {var $css = file_get_contents(OPENVK_ROOT . "/Web/static/js/node_modules/@atlassian/aui/dist/aui/aui-prototyping.css")}
{str_replace("fonts/", "/assets/packages/static/openvk/js/node_modules/@atlassian/aui/dist/aui/fonts/", $css)|noescape} {str_replace("fonts/", "/assets/packages/static/openvk/js/node_modules/@atlassian/aui/dist/aui/fonts/", $css)|noescape}
{file_get_contents(OPENVK_ROOT . "/Web/static/js/node_modules/@atlassian/aui/dist/aui/aui-prototyping-darkmode.css")|noescape} {file_get_contents(OPENVK_ROOT . "/Web/static/js/node_modules/@atlassian/aui/dist/aui/aui-prototyping-darkmode.css")|noescape}
.fake-icon {
float: left;
width: 20px;
margin-right: 10px;
}
.aui-sidebar[aria-expanded="false"] .aui-sidebar-group-tier-one .aui-nav > li > .aui-nav-item .fake-icon {
margin-right: 0;
float: none;
}
@media (max-width: 600px) {
.aui-sidebar {
min-width: 0px;
}
.aui-page-sidebar.aui-sidebar-collapsed {
--aui-sidebar-width: 0px;
}
.aui-sidebar[aria-expanded="false"] .aui-sidebar-footer {
position:fixed;
background-color:var(--aui-sidebar-bg-color);
bottom:0;
left:0;
width: 56px;
}
.aui-page-panel {
overflow-x:auto;
width:100vw;
}
table.aui {
white-space: nowrap;
}
form.aui:not(.aui-legacy-forms) .date-select, form.aui:not(.aui-legacy-forms) .field-group, form.aui:not(.aui-legacy-forms) .group {
padding-left: 0;
}
form.aui:not(.aui-legacy-forms) .field-group > aui-label, form.aui:not(.aui-legacy-forms) .field-group > label, form.aui:not(.aui-legacy-forms) legend {
float: none;
margin-left: 0;
padding: 5px 0 5px;
text-align: inherit;
width: 100%;
display: block;
}
form.aui:not(.aui-legacy-forms) > .field-group:has(input[type="checkbox"]) {
display: flex;
}
form.aui:not(.aui-legacy-forms) .select, form.aui:not(.aui-legacy-forms) .text, form.aui:not(.aui-legacy-forms) .textarea {
max-width: 100%;
}
form.aui .field-group::after, form.aui .field-group::before {
display: none;
}
}
</style> </style>
<title>{include title} - {_admin} {$instance_name}</title> <title>{include title} - {_admin} {$instance_name}</title>
</head> </head>
<body> <body class="aui-page aui-page-sidebar">
<div id="page"> <div id="page">
<header id="header" role="banner"> <header id="header" role="banner">
<nav class="aui-header aui-dropdown2-trigger-group" role="navigation"> <nav class="aui-header aui-dropdown2-trigger-group" role="navigation">
@ -70,95 +124,133 @@
</div> </div>
</nav> </nav>
</header> </header>
<div class="aui-page-panel"> <div id="content">
<div class="aui-page-panel-inner"> <div class="aui-sidebar" id="admin-sidebar" aria-label="Admin sidebar">
<div class="aui-page-panel-nav"> <div class="aui-sidebar-wrapper" aria-expanded="true">
<div class="aui-sidebar-body">
<nav class="aui-navgroup aui-navgroup-vertical"> <nav class="aui-navgroup aui-navgroup-vertical">
<div class="aui-navgroup-inner"> <div class="aui-navgroup-inner">
<div class="aui-navgroup-primary"> <div class="aui-sidebar-group aui-sidebar-group-tier-one">
<div class="aui-nav-heading"> <div class="aui-nav-heading">
<strong>{_admin_overview}</strong> <strong>{_admin_overview}</strong>
</div> </div>
<ul class="aui-nav"> <ul class="aui-nav">
<li> <li>
<a href="/admin">{_admin_overview_summary}</a> <a class="aui-nav-item" href="/admin">
<span class="aui-icon aui-icon-small aui-iconfont-dashboard"></span>
<span class="aui-nav-item-label">{_admin_overview_summary}</span>
</a>
</li> </li>
</ul> </ul>
</div>
<div class="aui-sidebar-group aui-sidebar-group-tier-one">
<div class="aui-nav-heading"> <div class="aui-nav-heading">
<strong>{_admin_content}</strong> <strong>{_admin_content}</strong>
</div> </div>
<ul class="aui-nav"> <ul class="aui-nav">
<li> <li>
<a href="/admin/users">{_users}</a> <a class="aui-nav-item" href="/admin/users">
<span class="aui-icon aui-icon-small aui-iconfont-people"></span>
<span class="aui-nav-item-label">{_users}</span>
</a>
</li> </li>
<li> <li>
<a href="/admin/clubs">{_groups}</a> <a class="aui-nav-item" href="/admin/clubs">
<span class="aui-icon aui-icon-small aui-iconfont-group"></span>
<span class="aui-nav-item-label">{_groups}</span>
</a>
</li> </li>
<li> <li>
<a href="/admin/bannedLinks">{_admin_banned_links}</a> <a class="aui-nav-item" href="/admin/bannedLinks">
<span class="aui-icon aui-icon-small aui-iconfont-cross-circle"></span>
<span class="aui-nav-item-label">{_admin_banned_links}</span>
</a>
</li> </li>
<li> <li>
<a href="/admin/music">{_admin_music}</a> <a class="aui-nav-item" href="/admin/music">
<span class="aui-icon aui-icon-small aui-iconfont-audio"></span>
<span class="aui-nav-item-label">{_admin_music}</span>
</a>
</li> </li>
</ul> </ul>
</div>
<div class="aui-sidebar-group aui-sidebar-group-tier-one">
<div class="aui-nav-heading"> <div class="aui-nav-heading">
<strong>Chandler</strong> <strong>Chandler</strong>
</div> </div>
<ul class="aui-nav"> <ul class="aui-nav">
<li> <li>
<a href="/admin/chandler/groups">{_c_groups}</a> <a class="aui-nav-item" href="/admin/chandler/groups">
<span class="aui-icon aui-icon-small aui-iconfont-group"></span>
<span class="aui-nav-item-label">{_c_groups}</span>
</a>
</li> </li>
</ul> </ul>
</div>
<div class="aui-sidebar-group aui-sidebar-group-tier-one">
<div class="aui-nav-heading"> <div class="aui-nav-heading">
<strong>{_admin_services}</strong> <strong>{_admin_services}</strong>
</div> </div>
<ul class="aui-nav"> <ul class="aui-nav">
<li> <li>
<a href="/admin/vouchers">{_vouchers}</a> <a class="aui-nav-item" href="/admin/vouchers">
<span class="aui-icon aui-icon-small aui-iconfont-credit-card"></span>
<span class="aui-nav-item-label">{_vouchers}</span>
</a>
</li> </li>
<li> <li>
<a href="/admin/gifts">{_gifts}</a> <a class="aui-nav-item" href="/admin/gifts">
<span class="fake-icon">🎁</span>
<span class="aui-nav-item-label">{_gifts}</span>
</a>
</li> </li>
</ul> </ul>
</div>
<div class="aui-sidebar-group aui-sidebar-group-tier-one">
<div class="aui-nav-heading"> <div class="aui-nav-heading">
<strong>{_admin_settings}</strong> <strong>{_admin_settings}</strong>
</div> </div>
<ul class="aui-nav"> <ul class="aui-nav">
<li> <li>
<a href="/admin/settings/tuning">{_admin_settings_tuning}</a> <a class="aui-nav-item" href="/admin/logs">
</li> <span class="aui-icon aui-icon-small aui-iconfont-list"></span>
<li> <span class="aui-nav-item-label">{_logs}</span>
<a href="/admin/logs">Логи</a> </a>
</li>
<li>
<a href="/admin/settings/appearance">{_admin_settings_appearance}</a>
</li>
<li>
<a href="/admin/settings/security">{_admin_settings_security}</a>
</li>
<li>
<a href="/admin/settings/integrations">{_admin_settings_integrations}</a>
</li>
<li>
<a href="/admin/settings/system">{_admin_settings_system}</a>
</li> </li>
</ul> </ul>
</div>
<div class="aui-sidebar-group aui-sidebar-group-tier-one">
<div class="aui-nav-heading"> <div class="aui-nav-heading">
<strong>{_admin_about}</strong> <strong>{_admin_about}</strong>
</div> </div>
<ul class="aui-nav"> <ul class="aui-nav">
<li> <li>
<a href="/about:openvk">{_admin_about_version}</a> <a class="aui-nav-item" href="/about:openvk">
<span class="aui-icon aui-icon-small aui-iconfont-info"></span>
<span class="aui-nav-item-label">{_admin_about_version}</span>
</a>
</li> </li>
<li> <li>
<a href="/about">{_admin_about_instance}</a> <a class="aui-nav-item" href="/about">
<span class="aui-icon aui-icon-small aui-iconfont-info-filled"></span>
<span class="aui-nav-item-label">{_admin_about_instance}</span>
</a>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
</nav> </nav>
</div> </div>
<section class="aui-page-panel-content"> <div class="aui-sidebar-footer" style="padding: 10px; text-align: center;">
<button type="button" id="sidebar-toggle" class="aui-button aui-button-subtle aui-sidebar-toggle aui-sidebar-footer-tipsy" aria-label="Toggle sidebar">
<span class="aui-icon aui-icon-small aui-iconfont-chevron-double-left"></span>
</button>
</div>
</div>
</div>
<main class="aui-page-panel" id="main" role="main">
<div class="aui-page-panel-inner">
<div class="aui-page-panel-content">
{ifset $flashMessage} {ifset $flashMessage}
{var $type = ["err" => "error", "warn" => "warning", "info" => "basic", "succ" => "success"][$flashMessage->type]} {var $type = ["err" => "error", "warn" => "warning", "info" => "basic", "succ" => "success"][$flashMessage->type]}
<div class="aui-message aui-message-{$type}" style="margin-bottom: 15px;"> <div class="aui-message aui-message-{$type}" style="margin-bottom: 15px;">
@ -187,20 +279,43 @@
<main> <main>
{include content} {include content}
</main> </main>
</section>
</div> </div>
</div> </div>
</main>
</div>
<footer id="footer" role="contentinfo"> <footer id="footer" role="contentinfo">
<section class="footer-body"> <section class="footer-body">
OpenVK <a href="/about:openvk">{php echo OPENVK_VERSION}</a> | PHP: {phpversion()} | DB: {\Chandler\Database\DatabaseConnection::i()->getConnection()->getPdo()->getAttribute(\PDO::ATTR_SERVER_VERSION)} OpenVK <a href="/about:openvk">{php echo OPENVK_VERSION}</a> | PHP: {phpversion()} | DB: {\Chandler\Database\DatabaseConnection::i()->getConnection()->getPdo()->getAttribute(\PDO::ATTR_SERVER_VERSION)}
</section> </section>
</footer> </footer>
</div>
{script "js/node_modules/jquery/dist/jquery.min.js"} {script "js/node_modules/jquery/dist/jquery.min.js"}
{script "js/node_modules/@atlassian/aui/dist/aui/aui-prototyping.js"} {script "js/node_modules/@atlassian/aui/dist/aui/aui-prototyping.js"}
<script>AJS.tabs.setup();</script> <script>AJS.tabs.setup();</script>
<script>
(function() {
function markActiveNavItems() {
const currentPath = window.location.pathname;
const navLinks = document.querySelectorAll('.aui-nav a');
navLinks.forEach(link => {
const href = link.getAttribute('href');
if (currentPath === href ||
(href !== '/admin' && currentPath.startsWith(href)) ||
(href === '/admin' && currentPath === '/admin')) {
link.parentElement.classList.add('aui-nav-selected');
let parentGroup = link.closest('.aui-sidebar-group');
while (parentGroup) {
parentGroup.classList.add('aui-nav-child-selected');
parentGroup = parentGroup.parentElement.closest('.aui-sidebar-group');
}
}
});
}
document.addEventListener('DOMContentLoaded', markActiveNavItems);
})();
</script>
{ifset scripts} {ifset scripts}
{include scripts} {include scripts}
{/ifset} {/ifset}

View file

@ -37,7 +37,7 @@
<span class="nobold">{_"2fa_code_2"}: </span> <span class="nobold">{_"2fa_code_2"}: </span>
</td> </td>
<td class="regform-right"> <td class="regform-right">
<input id="password" type="password" name="password" required /> <input id="password" type="number" autocomplete="off" name="password" required />
</td> </td>
</tr> </tr>
{/if} {/if}

View file

@ -25,7 +25,7 @@
<span class="nobold">{_code}: </span> <span class="nobold">{_code}: </span>
</td> </td>
<td> <td>
<input type="text" name="code" autocomplete="off" required autofocus /> <input type="number" name="code" autocomplete="off" required autofocus />
</td> </td>
</tr> </tr>
<tr> <tr>

View file

@ -72,7 +72,7 @@
<span class="nobold">{_"2fa_code"}</span> <span class="nobold">{_"2fa_code"}</span>
</td> </td>
<td> <td>
<input type="text" name="email_change_code" style="width: 100%;" /> <input type="number" autocomplete="off" name="email_change_code" style="width: 100%;" />
</td> </td>
</tr> </tr>
<tr> <tr>
@ -161,7 +161,7 @@
<span class="nobold">{_"2fa_code"}</span> <span class="nobold">{_"2fa_code"}</span>
</td> </td>
<td> <td>
<input type="text" name="password_change_code" style="width: 100%;" /> <input type="number" autocomplete="off" name="password_change_code" style="width: 100%;" />
</td> </td>
</tr> </tr>
<tr> <tr>

View file

@ -1462,7 +1462,7 @@
"error_access_denied_short" = "Ошибка доступа"; "error_access_denied_short" = "Ошибка доступа";
"error_access_denied" = "У вас недостаточно прав, чтобы редактировать этот ресурс"; "error_access_denied" = "У вас недостаточно прав, чтобы редактировать этот ресурс";
"success" = "Успешно"; "success" = "Успешно";
"comment_will_not_appear" = "Этот комментарий больше не будет показыватся."; "comment_will_not_appear" = "Этот комментарий больше не будет показываться.";
"error_when_gifting" = "Не удалось подарить"; "error_when_gifting" = "Не удалось подарить";
"error_user_not_exists" = "Пользователь или набор не существуют."; "error_user_not_exists" = "Пользователь или набор не существуют.";

View file

@ -1,30 +1,35 @@
body { body {
background: url("/themepack/openvk_modern/0.0.1.0/resource/1.png") repeat-x fixed; background: url("/themepack/openvk_modern/0.0.1.0/resource/1.png") repeat-x
fixed;
} }
.page_header { .page_header {
position: fixed; position: fixed;
height: 42px; height: 42px;
background: #3C3C3C; background: #3c3c3c;
z-index: 199; z-index: 199;
} }
.home_button { .home_button {
background: #3C3C3C url("/themepack/openvk_modern/0.0.1.0/resource/2.png") no-repeat; background: #3c3c3c url("/themepack/openvk_modern/0.0.1.0/resource/2.png")
no-repeat;
background-size: 80%; background-size: 80%;
background-position-y: 0px; background-position-y: 0px;
background-position-x: 1px; background-position-x: 1px;
} }
.home_button_custom { .home_button_custom {
background: #3C3C3C url("/themepack/openvk_modern/0.0.1.0/resource/4.png") no-repeat; background: #3c3c3c url("/themepack/openvk_modern/0.0.1.0/resource/4.png")
no-repeat;
background-size: 80%; background-size: 80%;
background-position-y: 0px; background-position-y: 0px;
background-position-x: 1px; background-position-x: 1px;
width: 145px !important;
text-shadow: none; text-shadow: none;
} }
.header_navigation .link, .header_navigation .header_divider_stick { .header_navigation .link,
.header_navigation .header_divider_stick {
background: unset !important; background: unset !important;
} }
@ -32,9 +37,21 @@ body {
text-decoration: none; text-decoration: none;
} }
.header_navigation #search_box .search_box_button {
border: solid 1px #606060;
box-shadow: unset;
}
.header_navigation #search_box .search_box_button:active {
background-color: #606060;
box-shadow: unset;
}
.sidebar { .sidebar {
margin-top: 47px; margin-top: 47px;
position: fixed; position: fixed;
background-color: #fff;
z-index: 199;
} }
.page_body { .page_body {
@ -59,8 +76,8 @@ body {
} }
.content_subtitle { .content_subtitle {
border-top: #F0F0F0 solid 1px; border-top: #f0f0f0 solid 1px;
border-bottom: 1px solid #F0F0F0; border-bottom: 1px solid #f0f0f0;
} }
.user-alert { .user-alert {
@ -80,15 +97,18 @@ body {
} }
.navigation .link:hover { .navigation .link:hover {
border-top: 1px solid #E4E4E4; border-top: 1px solid #e4e4e4;
} }
#profile_link, .profile_link { #profile_link,
.profile_link {
border-bottom: 1px solid transparent; border-bottom: 1px solid transparent;
} }
.completeness-gauge-gold { .completeness-gauge {
border: 1px solid #f6ebbb; width: 100%;
border: unset;
border-top: unset;
} }
.post-author { .post-author {
@ -103,18 +123,18 @@ body {
} }
.page_yellowheader { .page_yellowheader {
background: #E2E2E2; background: #e2e2e2;
border-right: solid 1px #E2E2E2; border-right: solid 1px #e2e2e2;
border-left: solid 1px #E2E2E2; border-left: solid 1px #e2e2e2;
border-bottom: solid 1px #E2E2E2; border-bottom: solid 1px #e2e2e2;
} }
.page_yellowheader span { .page_yellowheader span {
color: #BBBBBB; color: #bbbbbb;
} }
.page_yellowheader a { .page_yellowheader a {
color: #5C5C5C; color: #5c5c5c;
} }
.page-wrap { .page-wrap {
@ -130,8 +150,8 @@ body {
} }
#wrapHI { #wrapHI {
border-right: solid 1px #E2E2E2; border-right: solid 1px #e2e2e2;
border-left: solid 1px #E2E2E2; border-left: solid 1px #e2e2e2;
} }
.left_small_block { .left_small_block {
@ -139,35 +159,44 @@ body {
} }
.menu_divider { .menu_divider {
background: #E5E5E5; background: #e5e5e5;
} }
.postFeedWrapper { .postFeedWrapper {
border-bottom: 1px solid rgb(240,240,240); border-bottom: 1px solid rgb(240, 240, 240);
} }
.container_gray { .container_gray {
border-top: #EBEBEB solid 1px; border-top: #ebebeb solid 1px;
} }
.container_gray .content { .container_gray .content {
border: #E5E5E5 solid 1px; border: #e5e5e5 solid 1px;
} }
.accent-box { .accent-box {
border: 1px solid white; border: 1px solid white;
} }
input[type="text"], input[type="password"], input[type~="text"], input[type="text"],
input[type~="password"], input[type="email"], input[type="phone"], input[type="password"],
input[type~="email"], input[type~="phone"], input[type="date"], input[type~="text"],
input[type~="date"], input[type="search"], input[type~="search"], input[type~="password"],
textarea, select { input[type="email"],
border: 1px solid #E5E5E5; input[type="phone"],
input[type~="email"],
input[type~="phone"],
input[type="date"],
input[type~="date"],
input[type="search"],
input[type~="search"],
textarea,
select {
border: 1px solid #e5e5e5;
} }
input[type=checkbox] { input[type="checkbox"] {
background-image: url("/themepack/openvk_modern/0.0.1.0/resource/6.png") background-image: url("/themepack/openvk_modern/0.0.1.0/resource/6.png");
} }
ul { ul {
@ -175,6 +204,16 @@ ul {
list-style-type: disc; list-style-type: disc;
} }
.like_tooltip_wrapper .like_tooltip_head {
background: #515151;
box-shadow: unset;
border: solid 1px #515151;
}
.like_tooltip_wrapper .like_tooltip_body {
border: 1px solid #515151;
}
.mb_tab#active div { .mb_tab#active div {
border: 2px solid #898989; border: 2px solid #898989;
} }
@ -197,20 +236,20 @@ ul {
} }
.crp-entry:first-of-type { .crp-entry:first-of-type {
border-color: #E5E5E5; border-color: #e5e5e5;
} }
.crp-entry { .crp-entry {
width: 593px; width: 593px;
border-color: #E5E5E5; border-color: #e5e5e5;
} }
#faqhead { #faqhead {
border: 1px solid #FBF3C3; border: 1px solid #fbf3c3;
} }
#faqcontent { #faqcontent {
border: 1px solid #FAFAFA; border: 1px solid #fafafa;
} }
.ovk-diag { .ovk-diag {
@ -233,23 +272,25 @@ ul {
border-bottom-right-radius: 2px; border-bottom-right-radius: 2px;
} }
#votesBalance { #votesBalance,
border-bottom: none; #news {
border-bottom: unset;
} }
.floating_sidebar,.floating_sidebar.show { .floating_sidebar,
display:none .floating_sidebar.show {
display: none;
} }
#backdrop:before { #backdrop:before {
content:""; content: "";
display:block; display: block;
position:fixed; position: fixed;
top:0; top: 0;
left:0; left: 0;
height:42px; height: 42px;
width:100%; width: 100%;
background-color:#3c3c3c background-color: #3c3c3c;
} }
.search_box_button { .search_box_button {
@ -276,6 +317,7 @@ ul {
.verticalGrayTabsWrapper { .verticalGrayTabsWrapper {
border-top: unset; border-top: unset;
border-left: unset;
} }
.sugglist { .sugglist {
@ -291,11 +333,13 @@ ul {
filter: contrast(2) !important; filter: contrast(2) !important;
} }
.audioEmbed .track > .selectableTrack, .bigPlayer .selectableTrack { .audioEmbed .track > .selectableTrack,
.bigPlayer .selectableTrack {
border-top: #404040 1px solid !important; border-top: #404040 1px solid !important;
} }
.bigPlayer .paddingLayer .slider, .audioEmbed .track .slider { .bigPlayer .paddingLayer .slider,
.audioEmbed .track .slider {
background: #3c3c3c !important; background: #3c3c3c !important;
} }
@ -318,4 +362,17 @@ ul {
.bigPlayer { .bigPlayer {
position: sticky; position: sticky;
top: 42px; top: 42px;
box-shadow: unset;
}
#audio_upload {
border: 1px solid #ccc;
}
#wallAttachmentMenu {
box-shadow: unset;
}
#backdropEditor {
border: unset;
} }