Skip to content

Commit e318831

Browse files
committed
rebase
Signed-off-by: Vedansh Saini <[email protected]>
2 parents b2ae50d + 2381d17 commit e318831

File tree

7 files changed

+1054
-572
lines changed

7 files changed

+1054
-572
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@
3131
"dependencies": {
3232
"@tailwindcss/cli": "^4.1.3"
3333
}
34-
}
34+
}

src/index.css

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,68 @@ body,input,div,h3,h4,p,label,hr, #scrumReport{
117117

118118
.dark-mode a {
119119
color: #00b7ff !important;
120+
}
121+
#refreshCache {
122+
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
123+
border: none;
124+
box-shadow: 0 2px 4px rgba(59, 130, 246, 0.2);
125+
transition: all 0.2s ease;
126+
}
127+
128+
#refreshCache:hover {
129+
background: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);
130+
box-shadow: 0 4px 8px rgba(59, 130, 246, 0.3);
131+
transform: translateY(-1px);
132+
}
133+
134+
#refreshCache:active {
135+
transform: translateY(0);
136+
box-shadow: 0 2px 4px rgba(59, 130, 246, 0.2);
137+
}
138+
139+
#refreshCache i {
140+
animation: spin 0s linear infinite;
141+
}
142+
143+
#refreshCache.loading i {
144+
animation: spin 1s linear infinite;
145+
}
146+
147+
@keyframes spin {
148+
from { transform: rotate(0deg); }
149+
to { transform: rotate(360deg); }
150+
}
151+
/* Disabled state styling */
152+
.disabled-content {
153+
opacity: 0.5 !important;
154+
pointer-events: none !important;
155+
user-select: none !important;
156+
}
157+
158+
.disabled-content input,
159+
.disabled-content button,
160+
.disabled-content [contenteditable] {
161+
cursor: not-allowed !important;
162+
}
163+
164+
/* Dark mode disabled state */
165+
.dark-mode .disabled-content {
166+
opacity: 0.4 !important;
167+
}
168+
.cache-info {
169+
font-size: 11px;
170+
color: #6b7280;
171+
text-align: center;
172+
margin-top: 8px;
173+
line-height: 1.3;
174+
}
175+
176+
.cache-info i {
177+
margin-right: 4px;
178+
font-size: 10px;
179+
}
180+
181+
/* Dark mode for cache info */
182+
.dark-mode .cache-info {
183+
color: #9ca3af;
120184
}

src/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,4 @@
5151
"*://*.yahoo.com/*",
5252
"https://api.github.com/*"
5353
]
54-
}
54+
}

src/popup.html

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,17 @@ <h6 class="text-base font-semibold">Scrum Report</h6>
100100
<button id="copyReport" class="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded">
101101
<i class="fa fa-copy"></i> Copy Report
102102
</button>
103-
</div>
104-
105-
103+
</div>
104+
<div class="">
105+
<button id="refreshCache" class="w-full mt-3 bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded flex items-center justify-center gap-2 transition-colors duration-200">
106+
<i class="fa fa-refresh"></i>
107+
<span>Refresh Data (bypass cache)</span>
108+
</button>
109+
<p class="cache-info">
110+
<i class="fa fa-info-circle"></i>
111+
Data is cached for 10 minutes. Use this button to fetch fresh data immediately.
112+
</p>
113+
</div>
106114
<div class="border-gray-100 border-2 bg-white rounded-3xl px-4 py-2 mx-2 my-2">
107115
<div>
108116
<h4 class="font-semibold text-xl">Note:</h4>
@@ -149,4 +157,4 @@ <h4 class="font-semibold text-xl">Note:</h4>
149157
<script src="scripts/scrumHelper.js"></script>
150158
<script src="scripts/popup.js"></script>
151159
</body>
152-
</html>
160+
</html>

src/scripts/main.js

Lines changed: 59 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
var enableToggleElement = document.getElementById('enable');
2-
var githubUsernameElement = document.getElementById('githubUsername');
3-
var projectNameElement = document.getElementById('projectName');
4-
var lastWeekContributionElement = document.getElementById('lastWeekContribution');
1+
let enableToggleElement = document.getElementById('enable');
2+
let githubUsernameElement = document.getElementById('githubUsername');
3+
let projectNameElement = document.getElementById('projectName');
4+
let lastWeekContributionElement = document.getElementById('lastWeekContribution');
55
let yesterdayContributionElement = document.getElementById('yesterdayContribution');
6-
var startingDateElement = document.getElementById('startingDate');
7-
var endingDateElement = document.getElementById('endingDate');
8-
var showOpenLabelElement = document.getElementById('showOpenLabel');
9-
var userReasonElement = document.getElementById('userReason');
6+
let startingDateElement = document.getElementById('startingDate');
7+
let endingDateElement = document.getElementById('endingDate');
8+
let showOpenLabelElement = document.getElementById('showOpenLabel');
9+
let userReasonElement = document.getElementById('userReason');
10+
1011
function handleBodyOnLoad() {
1112
chrome.storage.local.get(
1213
[
@@ -70,22 +71,49 @@ function handleBodyOnLoad() {
7071
},
7172
);
7273
}
74+
75+
document.getElementById('refreshCache').addEventListener('click', async (e) => {
76+
const button = e.currentTarget;
77+
button.classList.add('loading');
78+
button.disabled = true;
79+
80+
try {
81+
const tabs = await chrome.tabs.query({active: true, currentWindow: true});
82+
await chrome.tabs.sendMessage(tabs[0].id, {
83+
action: 'forceRefresh',
84+
timestamp: Date.now()
85+
});
86+
87+
// Reload the active tab to re-inject content
88+
chrome.tabs.reload(tabs[0].id);
89+
90+
Materialize.toast({html: 'Data refreshed successfully!', classes: 'green'});
91+
} catch (err) {
92+
console.error('Refresh failed:', err);
93+
M.toast({html: 'Failed to refresh data', classes: 'red'});
94+
} finally {
95+
setTimeout(() => {
96+
button.classList.remove('loading');
97+
button.disabled = false;
98+
}, 500);
99+
}
100+
});
101+
73102
function handleEnableChange() {
74-
var value = enableToggleElement.checked;
103+
let value = enableToggleElement.checked;
75104
chrome.storage.local.set({ enableToggle: value });
76105
}
77106
function handleStartingDateChange() {
78-
var value = startingDateElement.value;
107+
let value = startingDateElement.value;
79108
chrome.storage.local.set({ startingDate: value });
80109
}
81110
function handleEndingDateChange() {
82-
var value = endingDateElement.value;
111+
let value = endingDateElement.value;
83112
chrome.storage.local.set({ endingDate: value });
84113
}
85114
function handleLastWeekContributionChange() {
86-
var value = lastWeekContributionElement.checked;
87-
var labelElement = document.querySelector("label[for='lastWeekContribution']");
88-
115+
let value = lastWeekContributionElement.checked;
116+
let labelElement = document.querySelector("label[for='lastWeekContribution']");
89117
if (value) {
90118
startingDateElement.disabled = true;
91119
endingDateElement.disabled = true;
@@ -128,12 +156,12 @@ function handleYesterdayContributionChange() {
128156
}
129157

130158
function getLastWeek() {
131-
var today = new Date();
132-
var lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1);
133-
var lastWeekMonth = lastWeek.getMonth() + 1;
134-
var lastWeekDay = lastWeek.getDate();
135-
var lastWeekYear = lastWeek.getFullYear();
136-
var lastWeekDisplayPadded =
159+
let today = new Date();
160+
let lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1);
161+
let lastWeekMonth = lastWeek.getMonth() + 1;
162+
let lastWeekDay = lastWeek.getDate();
163+
let lastWeekYear = lastWeek.getFullYear();
164+
let lastWeekDisplayPadded =
137165
('0000' + lastWeekYear.toString()).slice(-4) +
138166
'-' +
139167
('00' + lastWeekMonth.toString()).slice(-2) +
@@ -156,12 +184,12 @@ function getYesterday() {
156184
return yesterdayPadded;
157185
}
158186
function getToday() {
159-
var today = new Date();
160-
var Week = new Date(today.getFullYear(), today.getMonth(), today.getDate());
161-
var WeekMonth = Week.getMonth() + 1;
162-
var WeekDay = Week.getDate();
163-
var WeekYear = Week.getFullYear();
164-
var WeekDisplayPadded =
187+
let today = new Date();
188+
let Week = new Date(today.getFullYear(), today.getMonth(), today.getDate());
189+
let WeekMonth = Week.getMonth() + 1;
190+
let WeekDay = Week.getDate();
191+
let WeekYear = Week.getFullYear();
192+
let WeekDisplayPadded =
165193
('0000' + WeekYear.toString()).slice(-4) +
166194
'-' +
167195
('00' + WeekMonth.toString()).slice(-2) +
@@ -171,16 +199,16 @@ function getToday() {
171199
}
172200

173201
function handleGithubUsernameChange() {
174-
var value = githubUsernameElement.value;
202+
let value = githubUsernameElement.value;
175203
chrome.storage.local.set({ githubUsername: value });
176204
}
177205
function handleProjectNameChange() {
178-
var value = projectNameElement.value;
206+
let value = projectNameElement.value;
179207
chrome.storage.local.set({ projectName: value });
180208
}
181209
function handleOpenLabelChange() {
182-
var value = showOpenLabelElement.checked;
183-
var labelElement = document.querySelector("label[for='showOpenLabel']");
210+
let value = showOpenLabelElement.checked;
211+
let labelElement = document.querySelector("label[for='showOpenLabel']");
184212

185213
if (value) {
186214
labelElement.classList.add("selectedLabel");
@@ -194,7 +222,7 @@ function handleOpenLabelChange() {
194222
}
195223

196224
function handleUserReasonChange() {
197-
var value = userReasonElement.value;
225+
let value = userReasonElement.value;
198226
chrome.storage.local.set({ userReason: value });
199227
}
200228
enableToggleElement.addEventListener('change', handleEnableChange);

0 commit comments

Comments
 (0)