Skip to content

Commit 19e297a

Browse files
committed
ci: Add GitHub Actions workflow for build and release
1 parent 1cabf44 commit 19e297a

File tree

14 files changed

+474
-1162
lines changed

14 files changed

+474
-1162
lines changed

css/main.css

Lines changed: 70 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -246,15 +246,14 @@ body {
246246
transform: scale(1.02);
247247
}
248248

249-
/* === ИЗМЕНЕНИЕ 1: КЛЮЧЕВОЕ ИСПРАВЛЕНИЕ ДЛЯ FLEXBOX === */
250249
.video-wrapper {
251250
position: relative;
252251
width: 100%;
253-
flex: 1; /* <-- ЗАМЕНА height: 100% */
254-
min-height: 0; /* <-- ДОБАВЛЕНО для правильной работы flex-сжатия */
255-
display: flex; /* <-- Добавлено для внутреннего выравнивания */
256-
align-items: center; /* <-- Добавлено */
257-
justify-content: center; /* <-- Добавлено */
252+
flex: 1;
253+
min-height: 0;
254+
display: flex;
255+
align-items: center;
256+
justify-content: center;
258257
}
259258

260259
.grid-cell .video-canvas,
@@ -269,12 +268,12 @@ body {
269268
}
270269

271270
.grid-cell .overlay-canvas {
272-
pointer-events: none; /* Обязательно, чтобы клики проходили на видео */
273-
z-index: 2; /* Поверх видео */
271+
pointer-events: none;
272+
z-index: 2;
274273
}
275274

276275
.grid-cell .video-canvas {
277-
z-index: 1; /* Базовый слой внутри обертки */
276+
z-index: 1;
278277
}
279278

280279

@@ -320,7 +319,7 @@ body {
320319
position: absolute;
321320
box-sizing: border-box;
322321
pointer-events: none;
323-
z-index: 2; /* Поверх canvas */
322+
z-index: 2;
324323
border: 2px solid red;
325324
background-color: rgba(255, 0, 0, 0.2);
326325
}
@@ -329,7 +328,7 @@ body {
329328
position: absolute;
330329
box-sizing: border-box;
331330
pointer-events: none;
332-
z-index: 2; /* Поверх canvas */
331+
z-index: 2;
333332
border: 2px solid transparent;
334333
background-color: rgba(255, 255, 255, 0.1);
335334
}
@@ -362,9 +361,8 @@ body {
362361
transition: opacity 0.2s ease-in-out;
363362
}
364363

365-
/* === ИЗМЕНЕНИЕ 2: СТАТИСТИКА БОЛЬШЕ НЕ СКРЫВАЕТСЯ ПРИ НАВЕДЕНИИ === */
366364
.grid-cell:hover .cell-controls,
367-
.grid-cell:hover .cell-name { /* <-- Убран .grid-cell:hover .cell-stats */
365+
.grid-cell:hover .cell-name {
368366
opacity: 1;
369367
}
370368

@@ -415,7 +413,6 @@ body {
415413
transition: opacity 0.2s ease-in-out;
416414
}
417415

418-
/* === ИЗМЕНЕНИЕ 3: СТАТИСТИКА СТАЛА ВИДИМОЙ ПО УМОЛЧАНИЮ === */
419416
.cell-stats {
420417
position: absolute;
421418
bottom: 5px;
@@ -427,7 +424,7 @@ body {
427424
font-size: 13px;
428425
font-family: monospace;
429426
pointer-events: none;
430-
opacity: 1; /* <-- ИЗМЕНЕНО с 0 на 1 */
427+
opacity: 1;
431428
transition: opacity 0.2s ease-in-out;
432429
z-index: 10;
433430
}
@@ -677,6 +674,10 @@ body {
677674
z-index: 1000;
678675
}
679676

677+
.modal-backdrop.hidden {
678+
display: none !important;
679+
}
680+
680681
.modal-content {
681682
position: relative;
682683
background: white;
@@ -869,8 +870,8 @@ h3:first-child {
869870

870871

871872
#login-view .form-check-inline {
872-
grid-column: 2 / -1; /* Занять место со второй колонки до конца */
873-
justify-self: start; /* Прижаться к левому краю этой области */
873+
grid-column: 2 / -1;
874+
justify-self: start;
874875
margin-top: 10px;
875876
color: #6c757d;
876877
}
@@ -1020,8 +1021,8 @@ h3:first-child {
10201021
border-radius: 4px;
10211022
position: relative;
10221023
border: 1px solid var(--border-color);
1023-
cursor: grab; /* Меняем курсор на "руку" для перетаскивания */
1024-
overflow-x: hidden; /* Убираем нативный скроллбар */
1024+
cursor: grab;
1025+
overflow-x: hidden;
10251026
}
10261027
.timeline-wrapper.grabbing {
10271028
cursor: grabbing;
@@ -1046,7 +1047,7 @@ h3:first-child {
10461047
font-size: 12px;
10471048
pointer-events: none;
10481049
user-select: none;
1049-
z-index: 2; /* Поверх canvas */
1050+
z-index: 2;
10501051
}
10511052

10521053
.timeline-labels span {
@@ -1112,36 +1113,6 @@ body.can-manage-layout #view-layout-controls {
11121113
display: flex !important;
11131114
}
11141115

1115-
/* VVVVVV --- ИЗМЕНЕНИЕ: Это правило было удалено --- VVVVVV */
1116-
/*
1117-
Это правило меняло курсор на стандартный, создавая ощущение,
1118-
что перетаскивание не работает. Его удаление возвращает курсор 'grab'.
1119-
*/
1120-
/*
1121-
body.role-operator .camera-item,
1122-
body.role-operator .grid-cell.active {
1123-
cursor: default;
1124-
}
1125-
*/
1126-
/* ^^^^^^ --- КОНЕЦ ИЗМЕНЕНИЯ --- ^^^^^^ */
1127-
1128-
1129-
/* VVVVVV --- ИЗМЕНЕНИЕ: Это правило было удалено --- VVVVVV */
1130-
/*
1131-
Это правило скрывало кнопку "закрыть" и другие в ячейке.
1132-
Его удаление делает элементы управления снова видимыми для всех,
1133-
а JS-логика прав доступа будет решать, можно ли ими пользоваться.
1134-
*/
1135-
/*
1136-
body.role-operator .cell-controls .close-btn,
1137-
body.role-operator .cell-controls .stream-switch-btn,
1138-
body.role-operator .cell-controls .record-btn {
1139-
display: none !important;
1140-
}
1141-
*/
1142-
/* ^^^^^^ --- КОНЕЦ ИЗМЕНЕНИЯ --- ^^^^^^ */
1143-
1144-
11451116
#user-list button {
11461117
background: none;
11471118
border: 1px solid #ccc;
@@ -1285,10 +1256,9 @@ body.role-operator .cell-controls .record-btn {
12851256
transform: translateY(-50%);
12861257
}
12871258

1288-
/* === ИЗМЕНЕНИЕ 4: РЕШЕНИЕ ПРОБЛЕМЫ ПЕРЕКРЫТИЯ === */
12891259
.ptz-zoom-controls {
12901260
position: absolute;
1291-
bottom: 35px; /* <-- ИЗМЕНЕНО с 10px, чтобы не перекрывать статистику */
1261+
bottom: 35px;
12921262
left: 10px;
12931263
display: flex;
12941264
gap: 5px;
@@ -1329,34 +1299,28 @@ body.role-operator .cell-controls .record-btn {
13291299
background-color: var(--accent-color);
13301300
}
13311301

1332-
/* VVVVVV --- НОВЫЕ СТИЛИ ДЛЯ ПОЛЕЙ НАСТРОЕК --- VVVVVV */
1333-
1334-
/* Общий контейнер для одного поля настройки (label + input) */
13351302
.modal-body .p-setting, .modal-body .p-boolean {
13361303
display: grid;
1337-
grid-template-columns: 150px 1fr; /* Колонка для лейбла и колонка для инпута */
1304+
grid-template-columns: 150px 1fr;
13381305
gap: 15px;
13391306
align-items: center;
13401307
margin-bottom: 15px;
13411308
}
13421309

13431310
.modal-body .p-boolean {
1344-
grid-template-columns: 1fr 1fr; /* Для переключателей делаем колонки равными */
1311+
grid-template-columns: 1fr 1fr;
13451312
}
13461313

1347-
/* Стили для label */
13481314
.modal-body .form-label {
13491315
font-weight: 500;
13501316
text-align: left;
13511317
white-space: nowrap;
13521318
}
13531319

1354-
/* Общий контейнер для input/select */
13551320
.modal-body .input-group {
13561321
display: flex;
13571322
}
13581323

1359-
/* Стили для текстовых и числовых полей */
13601324
.modal-body .form-control {
13611325
width: 100%;
13621326
padding: 8px 12px;
@@ -1370,7 +1334,6 @@ body.role-operator .cell-controls .record-btn {
13701334
text-align: right;
13711335
}
13721336

1373-
/* Стили для селекторов */
13741337
.modal-body .form-select {
13751338
width: 100%;
13761339
padding: 8px 12px;
@@ -1380,7 +1343,6 @@ body.role-operator .cell-controls .record-btn {
13801343
background-color: white;
13811344
}
13821345

1383-
/* Стили для переключателей (boolean) */
13841346
.modal-body .form-switch {
13851347
display: flex;
13861348
align-items: center;
@@ -1411,7 +1373,6 @@ body.role-operator .cell-controls .record-btn {
14111373
background-repeat: no-repeat;
14121374
}
14131375

1414-
/* VVVVVV --- НОВЫЕ СТИЛИ ДЛЯ СЛАЙДЕРОВ --- VVVVVV */
14151376
.modal-body .range-slider-wrapper {
14161377
display: flex;
14171378
align-items: center;
@@ -1463,11 +1424,7 @@ body.role-operator .cell-controls .record-btn {
14631424
border-radius: 4px;
14641425
font-size: 13px;
14651426
}
1466-
/* ^^^^^^ --- КОНЕЦ НОВЫХ СТИЛЕЙ --- ^^^^^^ */
1467-
1468-
/* VVVVVV --- НОВЫЕ СТИЛИ ДЛЯ БАГРЕПОРТОВ --- VVVVVV */
14691427

1470-
/* Стили для превью скриншотов */
14711428
#screenshots-preview .screenshot-thumb {
14721429
position: relative;
14731430
width: 100px;
@@ -1507,7 +1464,6 @@ body.role-operator .cell-controls .record-btn {
15071464
opacity: 1;
15081465

15091466
}
1510-
/* --- Стили для модуля счётчика объектов --- */
15111467
.object-counter-display {
15121468
position: absolute;
15131469
top: 40px;
@@ -1520,14 +1476,12 @@ body.role-operator .cell-controls .record-btn {
15201476
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
15211477
z-index: 15;
15221478
pointer-events: none;
1523-
/* Убрали opacity и transition, чтобы счётчик был виден всегда */
1524-
15251479
}
1526-
/* --- Стили для вкладки "О программе" --- */
1480+
15271481
.about-container {
15281482
text-align: center;
15291483
padding: 20px;
1530-
color: #333; /* В модальном окне текст темный */
1484+
color: #333;
15311485
}
15321486

15331487
.about-logo {
@@ -1553,7 +1507,7 @@ body.role-operator .cell-controls .record-btn {
15531507
}
15541508

15551509
.donation-button {
1556-
background-color: #ffc107; /* Яркий, привлекающий внимание цвет */
1510+
background-color: #ffc107;
15571511
color: #212529;
15581512
border: none;
15591513
padding: 10px 20px;
@@ -1570,7 +1524,6 @@ body.role-operator .cell-controls .record-btn {
15701524
.donation-button:hover {
15711525
background-color: #ffca2c;
15721526
}
1573-
/* --- Стили для управления плеером архива --- */
15741527
.archive-controls {
15751528
display: flex;
15761529
align-items: center;
@@ -1622,13 +1575,53 @@ body.role-operator .cell-controls .record-btn {
16221575
font-size: 16px;
16231576
color: var(--text-main);
16241577
}
1625-
/* По умолчанию скрываем все "intellect" элементы */
1578+
16261579
.intellect-only {
16271580
display: none !important;
16281581
}
16291582

1630-
/* Когда у body есть класс version-intellect, показываем их */
16311583
body.version-intellect .intellect-only {
1632-
/* Используйте display, который подходит для элемента (flex, block, inline-flex и т.д.) */
16331584
display: flex !important;
16341585
}
1586+
1587+
#settings-modal.camera-mode .general-tab {
1588+
display: none;
1589+
}
1590+
1591+
#settings-modal:not(.camera-mode) .camera-web-tab {
1592+
display: none;
1593+
}
1594+
1595+
.config-buttons-container {
1596+
display: flex;
1597+
flex-direction: column;
1598+
gap: 10px;
1599+
margin-top: 15px;
1600+
padding-left: 20px;
1601+
}
1602+
1603+
.config-buttons-container button {
1604+
padding: 10px 15px;
1605+
font-size: 14px;
1606+
max-width: 300px;
1607+
text-align: center;
1608+
border: 1px solid #ccc;
1609+
border-radius: 4px;
1610+
cursor: pointer;
1611+
background-color: #f0f0f0;
1612+
}
1613+
1614+
.config-buttons-container button:hover {
1615+
background-color: #e0e0e0;
1616+
}
1617+
1618+
/* VVVVVV --- ИЗМЕНЕНИЕ: ИСПРАВЛЕНИЕ ДЛЯ ОТОБРАЖЕНИЯ ВКЛАДОК INTELLECT --- VVVVVV */
1619+
/* Это правило будет скрывать контент вкладок по умолчанию, даже если основное правило .intellect-only пытается их показать */
1620+
body.version-intellect .tab-content.intellect-only {
1621+
display: none !important;
1622+
}
1623+
/* Это правило будет принудительно показывать контент, только когда он и в версии intellect, и активен */
1624+
body.version-intellect .tab-content.intellect-only.active {
1625+
display: block !important;
1626+
}
1627+
/* ^^^^^^ --- КОНЕЦ ИЗМЕНЕНИЯ --- ^^^^^^ */

index.html

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<html>
33
<head>
44
<meta charset="UTF-8">
5-
<!-- VVVVVV --- ИЗМЕНЕНИЕ ЗДЕСЬ: ДОБАВЛЯЕМ worker-src 'self' blob:; --- VVVVVV -->
6-
<meta http-equiv="Content-Security-Policy" content="default-src 'self' video-archive:; script-src 'self' 'unsafe-eval'; worker-src 'self' blob:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws://localhost:* http://localhost:*; img-src 'self' data:; media-src 'self' blob: video-archive:;">
5+
<!-- VVVVVV --- ИЗМЕНЕНИЕ: ДОБАВЛЯЕМ http:* В connect-src И frame-src --- VVVVVV -->
6+
<meta http-equiv="Content-Security-Policy" content="default-src 'self' video-archive:; script-src 'self' 'unsafe-eval'; worker-src 'self' blob:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws://localhost:* http://localhost:* http:; img-src 'self' data:; media-src 'self' blob: video-archive:; frame-src http:;">
77
<!-- ^^^^^^ --- КОНЕЦ ИЗМЕНЕНИЯ --- ^^^^^^ -->
88
<title>DASHBOARD for OpenIPC</title>
99

@@ -64,14 +64,12 @@ <h2 data-i18n-key="app_title"></h2>
6464
<div class="sidebar">
6565
<div class="sidebar-header">
6666
<div class="header-buttons">
67-
<!-- VVVV ИЗМЕНЕНИЕ: intellect-only для кнопок управления камерами и группами VVVV -->
68-
<span class="requires-permission intellect-only" style="display: contents;">
67+
<span class="requires-permission" style="display: contents;">
6968
<button id="discover-btn" class="icon-button" data-i18n-tooltip="discover_cameras_tooltip"><i class="material-icons">travel_explore</i></button>
7069
<button id="add-group-btn" class="icon-button" data-i18n-tooltip="create_group_tooltip"><i class="material-icons">create_new_folder</i></button>
7170
<button id="add-camera-sidebar-btn" class="icon-button" data-i18n-tooltip="add_camera_tooltip"><i class="material-icons">add_circle_outline</i></button>
7271
</span>
73-
<!-- VVVV ИЗМЕНЕНИЕ: intellect-only для управления пользователями VVVV -->
74-
<button id="user-management-btn" class="icon-button admin-only intellect-only" data-i18n-tooltip="user_management_tooltip"><i class="material-icons">manage_accounts</i></button>
72+
<button id="user-management-btn" class="icon-button admin-only" data-i18n-tooltip="user_management_tooltip"><i class="material-icons">manage_accounts</i></button>
7573
<button id="general-settings-btn" class="icon-button" data-i18n-tooltip="settings_tooltip"><i class="material-icons">settings</i></button>
7674
<button id="logout-btn" class="icon-button" data-i18n-tooltip="logout_tooltip"><i class="material-icons">logout</i></button>
7775
</div>
@@ -87,15 +85,13 @@ <h3 data-i18n-key="devices"></h3>
8785
<button id="open-recordings-btn" class="icon-button admin-only" data-i18n-tooltip="open_recordings_tooltip"><i class="material-icons" style="font-size: 20px;">folder</i></button>
8886
<div class="status-info" id="status-info"></div>
8987
</div>
90-
<!-- VVVV ИЗМЕНЕНИЕ: intellect-only для управления раскладками VVVV -->
9188
<div class="toolbar-group requires-permission intellect-only" id="view-layout-controls">
9289
<button id="save-layout-btn" class="icon-button" data-i18n-tooltip="save_layout_tooltip"><i class="material-icons">save</i></button>
9390
<button id="rename-layout-btn" class="icon-button" data-i18n-tooltip="rename_layout_tooltip"><i class="material-icons">edit</i></button>
9491
<button id="delete-layout-btn" class="icon-button" data-i18n-tooltip="delete_layout_tooltip"><i class="material-icons">delete_outline</i></button>
9592
</div>
9693
<div class="toolbar-group requires-permission intellect-only" id="layout-controls"></div>
9794
<div class="toolbar-group">
98-
<!-- VVVV ИЗМЕНЕНИЕ: intellect-only для режима презентации VVVV -->
9995
<button id="presentation-mode-btn" class="icon-button requires-permission intellect-only" data-i18n-tooltip="presentation_mode_tooltip"><i class="material-icons" style="font-size: 20px;">tv</i></button>
10096
</div>
10197
</div>

0 commit comments

Comments
 (0)