Skip to content

Commit f5f5293

Browse files
committed
rebase 1
Signed-off-by: Vedansh Saini <[email protected]>
1 parent a295f23 commit f5f5293

File tree

5 files changed

+503
-416
lines changed

5 files changed

+503
-416
lines changed

src/popup.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ <h3 class="text-3xl font-semibold ">Scrum Helper</h3>
2626
<img src="icons/night-mode.png" alt="Night Mode" class="w-7 h-7 mx-3 cursor-pointer">
2727
</div>
2828
<div>
29-
<p class="font-semibold">SCRUM helper prefills the Scrums in google groups, with your FOSSASIA's contributions.</p>
29+
<p class="font-semibold">Report your development progress by auto-fetching your Git activity for a selected period</p>
3030
</div>
3131

3232
<div class="center mt-2 ">

src/scripts/emailClientAdapter.js

Lines changed: 65 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,38 @@
1+
12
class EmailClientAdapter {
3+
isNewConversation() {
4+
const clientType = this.detectClient();
5+
if (!clientType) return false;
6+
const elements = this.getEditorElements();
7+
if (!elements || !elements.subject) return false;
8+
const currentSubject = elements.subject.value || '';
9+
const isReplySubject = currentSubject.startsWith('Re:') || currentSubject.startsWith('Fwd:');
10+
let isReplyContext = false;
11+
12+
switch (clientType) {
13+
case 'gmail': {
14+
const editor = document.querySelector('.Am.Al.editable.LW-avf');
15+
const isNewWindow = editor ? !!editor.closest('div[role="dialog"]') : false;
16+
isReplyContext = !isNewWindow;
17+
break;
18+
}
19+
20+
case 'outlook': {
21+
isReplyContext = !!document.querySelector('[aria-label="Reply"]');
22+
break;
23+
}
24+
25+
case 'yahoo': {
26+
const header = document.querySelector('[data-test-id="compose-header-title"]');
27+
if (header) {
28+
const title = header.innerText.trim().toLowerCase();
29+
isReplyContext = title.includes('reply') || title.includes('forward');
30+
}
31+
break;
32+
}
33+
}
34+
return !(isReplySubject || isReplyContext);
35+
}
236
constructor() {
337
this.clientConfigs = {
438
'google-groups': {
@@ -11,7 +45,7 @@ class EmailClientAdapter {
1145
subjectChange: 'input',
1246
},
1347
},
14-
gmail: {
48+
'gmail': {
1549
selectors: {
1650
body: 'div.editable.LW-avf[contenteditable="true"][role="textbox"]',
1751
subject: 'input[name="subjectbox"][tabindex="1"]',
@@ -21,21 +55,43 @@ class EmailClientAdapter {
2155
subjectChange: 'input',
2256
},
2357
},
24-
outlook: {
58+
'outlook': {
2559
selectors: {
26-
body: 'div[role="textbox"][contenteditable="true"][aria-multiline="true"][aria-label="Message body, press Alt+F10 to exit"]',
27-
subject: 'input[aria-label="Subject"][type="text"][maxlength="255"][placeholder="Add a subject"]',
60+
body: 'div[role="textbox"][contenteditable="true"][aria-multiline="true"]',
61+
subject: [
62+
'input[aria-label="Subject"][type="text"]',
63+
'input[aria-label="Add a subject"][type="text"][role="textbox"][aria-multiline="false"]',
64+
],
2865
},
2966
eventTypes: {
3067
contentChange: 'input',
3168
subjectChange: 'change',
3269
},
3370
injectMethod: 'focusAndPaste', // Custom injection method
3471
},
35-
yahoo: {
72+
'yahoo': {
3673
selectors: {
37-
body: '#editor-container [contenteditable="true"][role="textbox"]',
38-
subject: 'input[placeholder="Subject"][type="text"]',
74+
body: [
75+
// Desktop selectors
76+
'#editor-container [contenteditable="true"][role="textbox"]',
77+
'[aria-multiline="true"][aria-label="Message body"][contenteditable="true"][role="textbox"]',
78+
'[aria-label="Message body"][contenteditable="true"]',
79+
'[role="textbox"][contenteditable="true"]',
80+
'[data-test-id*="compose"][contenteditable="true"]',
81+
'.compose-editor [contenteditable="true"]',
82+
// Mobile selectors
83+
'#editor-container-mobile [contenteditable="true"][role="textbox"]',
84+
].join(', '),
85+
subject: [
86+
// Desktop selectors
87+
'#compose-subject-input, input[placeholder="Subject"][id="compose-subject-input"]',
88+
'#compose-subject-input',
89+
'input[placeholder="Subject"]',
90+
'input[aria-label*="subject" i]',
91+
'input[data-test-id*="subject" i]',
92+
// Mobile selectors
93+
'#compose-subject-input-mobile, input[placeholder="Subject"][id="compose-subject-input-mobile"]'
94+
].join(', '),
3995
},
4096
eventTypes: {
4197
contentChange: 'input',
@@ -156,4 +212,5 @@ class EmailClientAdapter {
156212
}
157213

158214
// Create global instance
159-
window.emailClientAdapter = new EmailClientAdapter();
215+
window.emailClientAdapter = new EmailClientAdapter();
216+
console.log('Email client adapter initialized');

0 commit comments

Comments
 (0)