Skip to content

Commit cc8b782

Browse files
committed
add base ui for secure forward
1 parent 95fd66b commit cc8b782

File tree

4 files changed

+33
-13
lines changed

4 files changed

+33
-13
lines changed

extension/css/webmail.css

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,18 +202,19 @@ body.cryptup_gmail .inserted div.reply_message_button {
202202
}
203203
}
204204

205-
body.cryptup_gmail div.menu_reply_message_button {
205+
body.cryptup_gmail div.action_menu_message_button {
206206
display: flex;
207-
cursor: pointer;
208207
align-items: center;
208+
text-transform: capitalize;
209+
cursor: pointer;
209210
padding: 4px;
210211
}
211212

212-
body.cryptup_gmail div.menu_reply_message_button:hover {
213+
body.cryptup_gmail div.action_menu_message_button:hover {
213214
background-color: #eee; /* mimic Gmail hover. uses exact color pallete from Gmail */
214215
}
215216

216-
body.cryptup_gmail div.menu_reply_message_button > img {
217+
body.cryptup_gmail div.action_menu_message_button > img {
217218
height: 22px;
218219
width: 20px;
219220
padding: 0 12px;
Lines changed: 9 additions & 0 deletions
Loading

extension/js/common/xss-safe-factory.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,10 +261,15 @@ export class XssSafeFactory {
261261
}
262262
};
263263

264-
public btnSecureReply = (placement: 'menu' | 'toolbar' = 'toolbar') => {
265-
const msgBtnClassName = placement === 'toolbar' ? 'reply_message_button' : 'menu_reply_message_button';
266-
return `<div class="${this.destroyableCls} ${msgBtnClassName}" data-test="secure-reply-button" role="button" tabindex="0" data-tooltip="Secure Reply" aria-label="Secure Reply">
267-
<img title="Secure Reply" src="${this.srcImg('svgs/reply-icon.svg')}" />${placement === 'menu' ? '<span>Secure Reply</span>' : ''}
264+
public btnSecureReply = () => {
265+
return `<div class="${this.destroyableCls} reply_message_button" data-test="secure-reply-button" role="button" tabindex="0" data-tooltip="Secure Reply" aria-label="Secure Reply">
266+
<img title="Secure Reply" src="${this.srcImg('svgs/reply-icon.svg')}" />
267+
</div>`;
268+
};
269+
270+
public actionsMenuBtn = (action: 'reply' | 'forward') => {
271+
return `<div class="action_${action}_message_button action_menu_message_button" role="button" tabindex="0" aria-label="Secure Reply">
272+
<img src="${this.srcImg(`svgs/${action}-icon.svg`)}" /><span>secure ${action}</span>
268273
</div>`;
269274
};
270275

extension/js/content_scripts/webmail/gmail/gmail-element-replacer.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -280,13 +280,18 @@ export class GmailElementReplacer extends WebmailElementReplacer {
280280
};
281281

282282
private replaceActionsMenu = () => {
283-
const gmailReplyMenuBtn = $(this.sel.msgActionsMenu);
284-
if ($('.menu_reply_message_button').length <= 0) {
285-
const menuSecureReplyBtn = $(this.factory.btnSecureReply('menu')).prependTo(gmailReplyMenuBtn); // xss-safe-factory
283+
const gmailActionsMenuContainer = $(this.sel.msgActionsMenu);
284+
if ($('.action_menu_message_button').length <= 0) {
285+
const menuSecureReplyBtn = $(this.factory.actionsMenuBtn('reply')).insertAfter($(gmailActionsMenuContainer).find('#r')); // xss-safe-factory
286+
const menuSecureForwardBtn = $(this.factory.actionsMenuBtn('forward')).insertAfter($(gmailActionsMenuContainer).find('#r3')); // xss-safe-factory
286287
menuSecureReplyBtn.on(
287288
'click',
288289
Ui.event.handle((el, ev: JQuery.Event) => this.actionActivateSecureReplyHandler(el, ev))
289290
);
291+
menuSecureForwardBtn.on(
292+
'click',
293+
Ui.event.handle((el, ev: JQuery.Event) => this.actionActivateSecureReplyHandler(el, ev))
294+
);
290295
}
291296
};
292297

@@ -307,7 +312,7 @@ export class GmailElementReplacer extends WebmailElementReplacer {
307312
for (const elem of convoReplyBtnsArr) {
308313
$(elem).addClass('inserted');
309314
const gmailReplyBtn = $(elem).find('.aaq.L3');
310-
const secureReplyBtn = $(this.factory.btnSecureReply('toolbar')).insertAfter(gmailReplyBtn); // xss-safe-factory
315+
const secureReplyBtn = $(this.factory.btnSecureReply()).insertAfter(gmailReplyBtn); // xss-safe-factory
311316
secureReplyBtn.addClass(gmailReplyBtn.attr('class') || '');
312317
secureReplyBtn.off();
313318
secureReplyBtn.on(
@@ -360,7 +365,7 @@ export class GmailElementReplacer extends WebmailElementReplacer {
360365

361366
private actionActivateSecureReplyHandler = async (btn: HTMLElement, event: JQuery.Event) => {
362367
event.stopImmediatePropagation();
363-
const secureReplyInvokedFromMenu = btn.className.includes('menu_reply_message_button');
368+
const secureReplyInvokedFromMenu = btn.className.includes('action_reply_message_button');
364369
if ($('#switch_to_encrypted_reply').length) {
365370
$('#switch_to_encrypted_reply').trigger('click');
366371
return;

0 commit comments

Comments
 (0)