SHA256
Уточнён термин close friend и улучшен UX связей
Что сделано:\n- В UI возвращён термин «Близкий друг» без пометки про «друга».\n- На графе связей добавлено меню узла с двумя действиями: «Показать информацию» и «Показать связи» (перенос узла в центр).\n- В модалке добавления связи реализован автопоиск логинов: Enter или пауза 2 секунды, до 5 подсказок, выбор кликом.\n- Добавлены стили для меню узла и списка подсказок.\n- В коде добавлены явные пояснения и alias-константы close friend (без изменения кодов 10/11 и логики):\n CONNECTION_CLOSE_FRIEND / CONNECTION_UNCLOSE_FRIEND.\n- Обработчики чтения/записи связей переключены на alias close friend для лучшей читаемости.
This commit is contained in:
@@ -366,7 +366,7 @@ export function render({ navigate }) {
|
||||
const legend = document.createElement('div');
|
||||
legend.className = 'network-legend';
|
||||
legend.innerHTML = `
|
||||
<span><i class="legend-line friend"></i> Друзья</span>
|
||||
<span><i class="legend-line friend"></i> Близкие друзья</span>
|
||||
<span><i class="legend-line relative"></i> Родственники</span>
|
||||
<span><i class="legend-arrow"></i> Односторонняя связь</span>
|
||||
`;
|
||||
@@ -386,7 +386,12 @@ export function render({ navigate }) {
|
||||
closeNodeMenu();
|
||||
const menu = document.createElement('div');
|
||||
menu.className = 'node-menu card';
|
||||
menu.innerHTML = '<button class="ghost-btn" type="button">Показать информацию о пользователе</button>';
|
||||
menu.innerHTML = `
|
||||
<div class="node-menu-actions">
|
||||
<button class="ghost-btn" type="button" data-menu-action="show-info">Показать информацию</button>
|
||||
<button class="ghost-btn" type="button" data-menu-action="show-graph">Показать связи</button>
|
||||
</div>
|
||||
`;
|
||||
|
||||
const rect = node.getBoundingClientRect();
|
||||
const boardRect = board.getBoundingClientRect();
|
||||
@@ -396,11 +401,16 @@ export function render({ navigate }) {
|
||||
menu.style.left = `${Math.max(8, Math.min(x - 120, boardRect.width - 248))}px`;
|
||||
menu.style.top = `${Math.max(8, Math.min(y, boardRect.height - 58))}px`;
|
||||
|
||||
const btn = menu.querySelector('button');
|
||||
btn?.addEventListener('click', () => {
|
||||
const infoBtn = menu.querySelector('[data-menu-action="show-info"]');
|
||||
const graphBtn = menu.querySelector('[data-menu-action="show-graph"]');
|
||||
infoBtn?.addEventListener('click', () => {
|
||||
navigate(`user-profile-view/${encodeURIComponent(login)}/network-view`);
|
||||
closeNodeMenu();
|
||||
});
|
||||
graphBtn?.addEventListener('click', async () => {
|
||||
closeNodeMenu();
|
||||
await load(login);
|
||||
});
|
||||
|
||||
board.append(menu);
|
||||
activeMenu = menu;
|
||||
@@ -485,7 +495,7 @@ export function render({ navigate }) {
|
||||
redrawEdges = () => renderEdges(svg, board, nodeElements, layout.edges);
|
||||
requestAnimationFrame(() => redrawEdges());
|
||||
|
||||
note.textContent = 'Тап: информация о пользователе. Долгое нажатие: сделать узел центром. Линия = взаимно, стрелка = в одну сторону.';
|
||||
note.textContent = 'Тап по узлу: меню «Показать информацию» или «Показать связи». Долгое нажатие: сделать узел центром.';
|
||||
} catch (error) {
|
||||
if (requestId !== loadSeq) return;
|
||||
note.textContent = `Ошибка загрузки связей: ${error?.message || 'unknown'}`;
|
||||
|
||||
Reference in New Issue
Block a user