From 891f39e5b14877796b04e86c2535a5705ce29eb1 Mon Sep 17 00:00:00 2001 From: olcxja Date: Sun, 2 Aug 2026 22:21:04 +0200 Subject: [PATCH] add group context menu --- android/app/src/main/assets/public/main.js | 108 +++++++++++++++++- android/app/src/main/assets/public/screens.js | 11 ++ webroot/main.js | 108 +++++++++++++++++- webroot/screens.js | 11 ++ 4 files changed, 236 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/assets/public/main.js b/android/app/src/main/assets/public/main.js index a2ab99e2..f46e7fe1 100644 --- a/android/app/src/main/assets/public/main.js +++ b/android/app/src/main/assets/public/main.js @@ -1554,6 +1554,9 @@ async function switchDetailsContent(title, content, showBack = false, backAction let pinCallBtns = showBack ? `${callBtnHtml}` : `${pinBtnHtml}${callBtnHtml}`; + if (window.currentRoomType === 'groups' && !showBack) { + pinCallBtns = `${groupMenuBtnHtml}${pinCallBtns}`; + } let backBtn = showBack ? `` : ""; roomsTopBarTransition.innerHTML = `${backBtn}${processBlah(title)}
${pinCallBtns}`; @@ -2542,7 +2545,7 @@ async function renderGroups(res) { let pfp = await getGroupAvatarUrl(groupId, groupName); html += ` - + + + `; + + popupInner.innerHTML = html; + + let blahTags = popupInner.getElementsByTagName("blah"); + for (let i = 0; i < blahTags.length; i++) { + blahTags[i].innerHTML = processBlah(blahTags[i].innerHTML); + } + + popupContainer.style.display = "flex"; + popupContainer.offsetHeight; // trigger reflow + popupContainer.classList.add("show"); + isProfileOpen = true; +} + +async function confirmLeaveGroup(groupId) { + closeProfile(); + showAction("action.leaving.group", "leavegroup"); + try { + let payload = JSON.stringify({ string1: groupId }); + let res = await fetchEncrypted("group/leave", payload); + if (res === "success") { + if (currentDmId === groupId) { + gotoHome(); + } + refreshGroups(0, false); + } else if (res.startsWith("error:")) { + showBlahNotification(res); + } + } catch (e) { + console.error(e); + showBlahNotification("error:something.wrong"); + } + clearAction("leavegroup"); +} diff --git a/android/app/src/main/assets/public/screens.js b/android/app/src/main/assets/public/screens.js index ead665d2..8f1f7e04 100644 --- a/android/app/src/main/assets/public/screens.js +++ b/android/app/src/main/assets/public/screens.js @@ -250,6 +250,16 @@ var addSpaceMenu = ` ${ICONS.createSpace()} title.create.space ` +var groupContextMenu = ` + + +`; var messageContextMenu = ` `; var pinBtnHtml = ``; var callBtnHtml = ``; +var groupMenuBtnHtml = ``; var settingsBar = ` + `; + + popupInner.innerHTML = html; + + let blahTags = popupInner.getElementsByTagName("blah"); + for (let i = 0; i < blahTags.length; i++) { + blahTags[i].innerHTML = processBlah(blahTags[i].innerHTML); + } + + popupContainer.style.display = "flex"; + popupContainer.offsetHeight; // trigger reflow + popupContainer.classList.add("show"); + isProfileOpen = true; +} + +async function confirmLeaveGroup(groupId) { + closeProfile(); + showAction("action.leaving.group", "leavegroup"); + try { + let payload = JSON.stringify({ string1: groupId }); + let res = await fetchEncrypted("group/leave", payload); + if (res === "success") { + if (currentDmId === groupId) { + gotoHome(); + } + refreshGroups(0, false); + } else if (res.startsWith("error:")) { + showBlahNotification(res); + } + } catch (e) { + console.error(e); + showBlahNotification("error:something.wrong"); + } + clearAction("leavegroup"); +} diff --git a/webroot/screens.js b/webroot/screens.js index ead665d2..8f1f7e04 100644 --- a/webroot/screens.js +++ b/webroot/screens.js @@ -250,6 +250,16 @@ var addSpaceMenu = ` ${ICONS.createSpace()} title.create.space ` +var groupContextMenu = ` + + +`; var messageContextMenu = ` `; var pinBtnHtml = ``; var callBtnHtml = ``; +var groupMenuBtnHtml = ``; var settingsBar = `