From 9356684a78cddd106d82296a50a637406908cffd Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sat, 12 Sep 2026 15:37:48 -0700 Subject: A reply can carry a picture, and the WebView build has a name you can say. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reply box gets the same paperclip the post composer has: one uploader now, handing the URL to whichever draft asked for it, and the reply's own imeta tag describing what it carries. And the UnifiedPush build is graphene.apk — what people will actually call it, and short enough to read down a phone line. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_019mrt228Upn9nNCwGixzSLx --- tools/post-actions-test.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'tools') diff --git a/tools/post-actions-test.js b/tools/post-actions-test.js index e6d6c9f..8cc525c 100644 --- a/tools/post-actions-test.js +++ b/tools/post-actions-test.js @@ -81,6 +81,26 @@ try { const draft = await page.evaluate(() => (document.querySelector('.chat-page textarea') || {}).value || ''); check('quoting opens the composer with the reference in it', /nostr:nevent1/.test(draft), draft.slice(0, 40) || 'empty'); + // A reply can carry a picture, the same as a post can. + await page.evaluate(() => { const b = [...document.querySelectorAll('.note-act')].find((x) => x.getAttribute('aria-label') === 'Reply'); if (b) b.click(); }); + await sleep(2500); + const reply = await page.evaluate(() => { + const box = document.querySelector('.thread-reply-input'); + if (!box) return { box: false }; + const row = box.parentElement; + return { + box: true, + attach: !!row.querySelector('.attach-btn'), + file: !!row.querySelector('#reply-file'), + accepts: (row.querySelector('#reply-file') || {}).accept, + }; + }); + check('the reply box has the same paperclip', reply.box && reply.attach && reply.file, JSON.stringify(reply)); + check('...taking pictures and video', /image/.test(reply.accepts || '') && /video/.test(reply.accepts || ''), reply.accepts || 'none'); + // back out of the thread the reply check opened + await page.evaluate(() => { const b = [...document.querySelectorAll('button')].find((x) => x.textContent.trim() === 'Back' || x.textContent.trim() === '← Back'); if (b) b.click(); }); + await sleep(1500); + // the ellipsis sheet, and muting from it await page.evaluate(() => { const b = [...document.querySelectorAll('.btn-sm')].find((x) => x.textContent.trim() === '⋯'); if (b) b.click(); }); await sleep(600); -- cgit v1.2.3