From da783c43ba684f00b1733d86015b928c158f4b6d Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Tue, 28 Jan 2025 04:23:23 -0500 Subject: [PATCH 01/13] fix for names with quotes or apostrophes --- assets/js/MinterBoard.js | 10 +++++++++- assets/js/QortalApi.js | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/assets/js/MinterBoard.js b/assets/js/MinterBoard.js index 5e635d5..5bf3e58 100644 --- a/assets/js/MinterBoard.js +++ b/assets/js/MinterBoard.js @@ -1394,10 +1394,18 @@ const handleInviteMinter = async (minterName) => { } } +function escapeForHtmlAttribute(str) { + return str + .replace(/'/g, ''') + .replace(/"/g, '"'); +} + const createInviteButtonHtml = (creator, cardIdentifier) => { + // Safely escape special chars so they won't break the HTML attribute + const safeCreator = escapeForHtmlAttribute(creator); return `
- + diff --git a/assets/js/AdminBoard.js b/assets/js/AdminBoard.js index 5ab755b..4e2b13c 100644 --- a/assets/js/AdminBoard.js +++ b/assets/js/AdminBoard.js @@ -1258,6 +1258,51 @@ const getNewestAdminCommentTimestamp = async (cardIdentifier) => { } } +// ADDED: A simple function to effectively 'delete' an Admin Board card +// by publishing an empty card with the same identifier and prefix +const deleteAdminCard = async (cardIdentifier) => { + try { + const confirmed = confirm("Are you sure you want to delete this card? This action cannot be undone.") + if (!confirmed) return + + // A minimal blank object + const blankData = { + header: "", + content: "", + links: [], + creator: userState.accountName, + timestamp: Date.now(), + poll: "" // or null. This ensures it won't appear as a valid poll card + } + + let base64Data = await objectToBase64(blankData) + if (!base64Data) { + base64Data = btoa(JSON.stringify(blankData)) + } + + const verifiedAdminPublicKeys = await fetchAdminGroupsMembersPublicKeys() + + await qortalRequest({ + action: "PUBLISH_QDN_RESOURCE", + name: userState.accountName, + service: "MAIL_PRIVATE", + identifier: cardIdentifier, + data64: base64Data, + encrypt: true, + publicKeys: verifiedAdminPublicKeys + }) + + alert("Your card has been effectively deleted.") + + // Now reload the existing Admin Board cards so the UI no longer shows the old card + await fetchAllEncryptedCards(true) + + } catch (error) { + console.error("Error deleting Admin card:", error) + alert("Failed to delete the card. Check console for details.") + } +} + // Create the overall Minter Card HTML ----------------------------------------------- const createEncryptedCardHTML = async (cardData, pollResults, cardIdentifier, commentCount) => { const { minterName, header, content, links, creator, timestamp, poll, topicMode } = cardData @@ -1410,6 +1455,16 @@ const createEncryptedCardHTML = async (cardData, pollResults, cardIdentifier, co
+ ${creator === userState.accountName ? ` +
+ +
+ ` : ''} + ${creator === userState.accountName ? ` +
+ +
+ ` : ''} @@ -61,7 +65,7 @@ - Q-Mintership v1.04b
+ @@ -572,12 +576,12 @@
-

Q-Mintership (v1.04b)

+

- +
@@ -590,6 +594,12 @@
+ -- 2.43.0 From 746e94a8f5fc449df03656ec37f621edc995c60e Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Tue, 28 Jan 2025 04:48:44 -0500 Subject: [PATCH 08/13] add count of minter admins & signatures needed to ARA board --- assets/js/ARBoard.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/assets/js/ARBoard.js b/assets/js/ARBoard.js index 45f536a..e9c90b0 100644 --- a/assets/js/ARBoard.js +++ b/assets/js/ARBoard.js @@ -28,7 +28,6 @@ const loadAddRemoveAdminPage = async () => {

-

Existing Minter Admins

@@ -231,6 +230,9 @@ const displayExistingMinterAdmins = async () => { // 1) Fetch addresses const admins = await fetchMinterGroupAdmins() minterAdminAddresses = admins.map(m => m.member) + // Compute total admin count and signatures needed (40%, rounded up) + const totalAdmins = admins.length; + const signaturesNeeded = Math.ceil(totalAdmins * 0.40); let rowsHtml = ""; for (const adminAddr of admins) { if (adminAddr.member === nullAddress) { @@ -290,7 +292,11 @@ const displayExistingMinterAdmins = async () => { ` - adminListContainer.innerHTML = tableHtml + adminListContainer.innerHTML = ` +

Existing Minter Admins: ${totalAdmins}

+

Signatures for Group Approval (40%): ${signaturesNeeded}

+ ${tableHtml} + `; } catch (err) { console.error("Error fetching minter admins:", err) adminListContainer.innerHTML = -- 2.43.0 From 136a6458c8c9e6df2573d25c0462f13d23587c16 Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Tue, 28 Jan 2025 04:50:54 -0500 Subject: [PATCH 09/13] add button to show/hide minter admin list in ARA board --- assets/js/ARBoard.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/assets/js/ARBoard.js b/assets/js/ARBoard.js index e9c90b0..09fdc98 100644 --- a/assets/js/ARBoard.js +++ b/assets/js/ARBoard.js @@ -147,6 +147,19 @@ const toggleProposeButton = () => { proposeButton.style.display === 'flex' ? 'none' : 'flex' } +const toggleAdminTable = () => { + const tableContainer = document.getElementById("adminTableContainer") + const toggleBtn = document.getElementById("toggleAdminTableButton") + + if (tableContainer.style.display === "none") { + tableContainer.style.display = "block" + toggleBtn.textContent = "Hide Minter Admins" + } else { + tableContainer.style.display = "none" + toggleBtn.textContent = "Show Minter Admins" + } +} + const fetchAllARTxData = async () => { const addAdmTx = "ADD_GROUP_ADMIN" const remAdmTx = "REMOVE_GROUP_ADMIN" @@ -279,6 +292,22 @@ const displayExistingMinterAdmins = async () => { } // 3) Build the table const tableHtml = ` +
+ +
+