Skip to content

Commit 235abe6

Browse files
committed
add manual refresh button
1 parent defbd7b commit 235abe6

1 file changed

Lines changed: 51 additions & 1 deletion

File tree

templates/main.tmpl

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
'subtitle': 'Send requests to your-host/your-path',
1414
'auto_refresh': 'Auto Refresh',
1515
'seconds': 'seconds',
16+
'refresh': 'Refresh',
1617
'captured_requests': 'Captured Requests',
1718
'no_requests': 'No requests captured yet.',
1819
'welcome_title': 'Welcome!',
@@ -32,6 +33,7 @@
3233
'subtitle': '发送请求到 your-host/your-path',
3334
'auto_refresh': '自动刷新',
3435
'seconds': '秒',
36+
'refresh': '刷新',
3537
'captured_requests': '已捕获的请求',
3638
'no_requests': '尚未捕获任何请求。',
3739
'welcome_title': '欢迎!',
@@ -102,6 +104,12 @@
102104
</div>
103105
<div class="w-1/3 flex justify-end items-center pr-4">
104106
<div class="flex items-center space-x-2">
107+
<button id="manualRefreshButton" class="hidden px-3 py-1 text-sm bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors" data-i18n-title="refresh_requests">
108+
<svg class="w-4 h-4 inline mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
109+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
110+
</svg>
111+
<span data-i18n="refresh">刷新</span>
112+
</button>
105113
<input type="checkbox" id="autoRefreshCheckbox" class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500">
106114
<label for="autoRefreshCheckbox" class="text-sm text-gray-600" data-i18n="auto_refresh">自动刷新</label>
107115
<input type="number" id="refreshIntervalInput" class="w-16 text-sm border-gray-300 rounded-md shadow-sm" min="1" value="5">
@@ -227,6 +235,7 @@
227235
// --- Auto-refresh logic ---
228236
const checkbox = document.getElementById('autoRefreshCheckbox');
229237
const intervalInput = document.getElementById('refreshIntervalInput');
238+
const manualRefreshButton = document.getElementById('manualRefreshButton');
230239
let refreshInterval;
231240

232241
function startRefresh() {
@@ -244,9 +253,17 @@
244253
refreshInterval = null;
245254
}
246255

256+
function toggleManualRefreshButton() {
257+
if (checkbox.checked) {
258+
manualRefreshButton.classList.add('hidden');
259+
} else {
260+
manualRefreshButton.classList.remove('hidden');
261+
}
262+
}
263+
247264
// Function to update only the request list via AJAX
248265
function updateRequestList() {
249-
fetch('/api/requests')
266+
return fetch('/api/requests')
250267
.then(response => response.json())
251268
.then(requests => {
252269
const requestList = document.querySelector('aside .overflow-y-auto');
@@ -314,6 +331,38 @@
314331
localStorage.setItem('autoRefreshEnabled', 'false');
315332
stopRefresh();
316333
}
334+
toggleManualRefreshButton();
335+
});
336+
337+
// Manual refresh button click handler
338+
let isRefreshing = false;
339+
const originalButtonContent = `
340+
<svg class="w-4 h-4 inline mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
341+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
342+
</svg>
343+
<span data-i18n="refresh">${translations[currentLang]['refresh']}</span>
344+
`;
345+
346+
function resetButtonState() {
347+
manualRefreshButton.innerHTML = originalButtonContent;
348+
isRefreshing = false;
349+
}
350+
351+
manualRefreshButton.addEventListener('click', () => {
352+
if (isRefreshing) return; // Prevent multiple clicks
353+
354+
isRefreshing = true;
355+
updateRequestList();
356+
357+
// Add visual feedback
358+
manualRefreshButton.innerHTML = `
359+
<svg class="w-4 h-4 inline mr-1 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24">
360+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
361+
</svg>
362+
<span data-i18n="refresh">${translations[currentLang]['refresh']}</span>
363+
`;
364+
365+
setTimeout(resetButtonState, 500);
317366
});
318367

319368
intervalInput.addEventListener('change', () => {
@@ -335,6 +384,7 @@
335384
if (isEnabled) {
336385
startRefresh();
337386
}
387+
toggleManualRefreshButton(); // Initialize manual refresh button visibility
338388

339389
// --- Collapsible sections logic ---
340390
const sections = ['headers', 'body'];

0 commit comments

Comments
 (0)