From 9c704c4ffeb29b9bccbf484e8b9b0b3b1be6d399 Mon Sep 17 00:00:00 2001 From: martgil Date: Fri, 17 Jan 2025 15:26:47 +0800 Subject: [PATCH 1/4] Fixes issue #5900 --- .../webmail/gmail/gmail-element-replacer.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts b/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts index f2775edc7f4..407e3336061 100644 --- a/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts +++ b/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts @@ -291,10 +291,12 @@ export class GmailElementReplacer extends WebmailElementReplacer { }; private replaceActionsMenu = () => { - if ($('.action_menu_message_button').length <= 0) { - this.addMenuButton('reply', '#r'); - this.addMenuButton('forward', '#r3'); - } + $(this.sel.msgActionsBtn).on('click', () => { + if ($('.action_menu_message_button').length <= 0) { + this.addMenuButton('reply', '#r'); + this.addMenuButton('forward', '#r3'); + } + }); }; private replaceConvoBtns = (force = false) => { From dabe148015abcc8c5309ffee92fc1b8235c8621f Mon Sep 17 00:00:00 2001 From: martgil Date: Thu, 23 Jan 2025 13:56:05 +0800 Subject: [PATCH 2/4] fix --- .../webmail/gmail/gmail-element-replacer.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts b/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts index 407e3336061..da86c52337a 100644 --- a/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts +++ b/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts @@ -291,10 +291,14 @@ export class GmailElementReplacer extends WebmailElementReplacer { }; private replaceActionsMenu = () => { - $(this.sel.msgActionsBtn).on('click', () => { - if ($('.action_menu_message_button').length <= 0) { - this.addMenuButton('reply', '#r'); - this.addMenuButton('forward', '#r3'); + $(document).on('click', 'div.aHU.hx', event => { + const $clickedElement = $(event.currentTarget); + const $actionsBtn = $clickedElement.find(this.sel.msgActionsBtn); + if ($actionsBtn.length > 0) { + if ($('.action_menu_message_button').length <= 0) { + this.addMenuButton('reply', '#r'); + this.addMenuButton('forward', '#r3'); + } } }); }; From 47cfec63506adb4345af480285523c2f2d006373 Mon Sep 17 00:00:00 2001 From: martgil Date: Thu, 23 Jan 2025 14:10:00 +0800 Subject: [PATCH 3/4] wip: cleanup --- .../webmail/gmail/gmail-element-replacer.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts b/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts index da86c52337a..1db66141287 100644 --- a/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts +++ b/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts @@ -292,13 +292,10 @@ export class GmailElementReplacer extends WebmailElementReplacer { private replaceActionsMenu = () => { $(document).on('click', 'div.aHU.hx', event => { - const $clickedElement = $(event.currentTarget); - const $actionsBtn = $clickedElement.find(this.sel.msgActionsBtn); - if ($actionsBtn.length > 0) { - if ($('.action_menu_message_button').length <= 0) { - this.addMenuButton('reply', '#r'); - this.addMenuButton('forward', '#r3'); - } + const $actionsBtn = $(event.currentTarget).find(this.sel.msgActionsBtn); + if ($actionsBtn.length && !$('.action_menu_message_button').length) { + this.addMenuButton('reply', '#r'); + this.addMenuButton('forward', '#r3'); } }); }; From b01712483bfb26ec59676ce7c03d020836bf7891 Mon Sep 17 00:00:00 2001 From: martgil Date: Thu, 23 Jan 2025 19:33:41 +0800 Subject: [PATCH 4/4] pr reviews: better way to add context menu items in Gmail --- .../generic/webmail-element-replacer.ts | 1 + .../webmail/gmail/gmail-element-replacer.ts | 21 +++++++++---------- .../webmail/gmail/gmail-webmail-startup.ts | 1 + .../thunderbird-element-replacer.ts | 1 + 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/extension/js/content_scripts/webmail/generic/webmail-element-replacer.ts b/extension/js/content_scripts/webmail/generic/webmail-element-replacer.ts index db51b273ac9..044e101f120 100644 --- a/extension/js/content_scripts/webmail/generic/webmail-element-replacer.ts +++ b/extension/js/content_scripts/webmail/generic/webmail-element-replacer.ts @@ -14,6 +14,7 @@ export abstract class WebmailElementReplacer { public abstract reinsertReplyBox: (replyMsgId: string) => void; public abstract scrollToReplyBox: (replyMsgId: string) => void; public abstract scrollToCursorInReplyBox: (replyMsgId: string, cursorOffsetTop: number) => void; + public abstract addSecureActionsToMessageMenu: () => void; public runIntervalFunctionsPeriodically = () => { const intervalFunctions = this.getIntervalFunctions(); diff --git a/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts b/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts index 1db66141287..56add5bfd16 100644 --- a/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts +++ b/extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts @@ -147,11 +147,20 @@ export class GmailElementReplacer extends WebmailElementReplacer { } }; + public addSecureActionsToMessageMenu = () => { + $(document).on('click', 'div.aHU.hx', event => { + const $actionsBtn = $(event.currentTarget).find(this.sel.msgActionsBtn); + if ($actionsBtn.length && !$('.action_menu_message_button').length) { + this.addMenuButton('reply', '#r'); + this.addMenuButton('forward', '#r3'); + } + }); + }; + private everything = () => { this.replaceArmoredBlocks().catch(Catch.reportErr); this.replaceAttachments().catch(Catch.reportErr); this.replaceComposeDraftLinks(); - this.replaceActionsMenu(); this.replaceConvoBtns(); this.replaceStandardReplyBox().catch(Catch.reportErr); this.evaluateStandardComposeRecipients().catch(Catch.reportErr); @@ -290,16 +299,6 @@ export class GmailElementReplacer extends WebmailElementReplacer { ); }; - private replaceActionsMenu = () => { - $(document).on('click', 'div.aHU.hx', event => { - const $actionsBtn = $(event.currentTarget).find(this.sel.msgActionsBtn); - if ($actionsBtn.length && !$('.action_menu_message_button').length) { - this.addMenuButton('reply', '#r'); - this.addMenuButton('forward', '#r3'); - } - }); - }; - private replaceConvoBtns = (force = false) => { const convoUpperIconsContainer = $('div.hj:visible'); const convoUpperIcons = $('span.pYTkkf-JX-ank-Rtc0Jf'); diff --git a/extension/js/content_scripts/webmail/gmail/gmail-webmail-startup.ts b/extension/js/content_scripts/webmail/gmail/gmail-webmail-startup.ts index 583af380062..a6992cba791 100644 --- a/extension/js/content_scripts/webmail/gmail/gmail-webmail-startup.ts +++ b/extension/js/content_scripts/webmail/gmail/gmail-webmail-startup.ts @@ -45,6 +45,7 @@ export class GmailWebmailStartup { const messageRenderer = await MessageRenderer.newInstance(acctEmail, new Gmail(acctEmail), relayManager, factory); this.replacer = new GmailElementReplacer(factory, clientConfiguration, acctEmail, messageRenderer, injector, notifications, relayManager); await notifications.showInitial(acctEmail); + this.replacer.addSecureActionsToMessageMenu(); this.replacer.runIntervalFunctionsPeriodically(); }; diff --git a/extension/js/content_scripts/webmail/thunderbird/thunderbird-element-replacer.ts b/extension/js/content_scripts/webmail/thunderbird/thunderbird-element-replacer.ts index 039f78d5c62..ca24d40322d 100644 --- a/extension/js/content_scripts/webmail/thunderbird/thunderbird-element-replacer.ts +++ b/extension/js/content_scripts/webmail/thunderbird/thunderbird-element-replacer.ts @@ -19,6 +19,7 @@ export class ThunderbirdElementReplacer extends WebmailElementReplacer { public reinsertReplyBox: (replyMsgId: string) => void; public scrollToReplyBox: (replyMsgId: string) => void; public scrollToCursorInReplyBox: (replyMsgId: string, cursorOffsetTop: number) => void; + public addSecureActionsToMessageMenu: () => void; private emailBodyFromThunderbirdMail: string; public getIntervalFunctions = (): IntervalFunction[] => {