mirror of
https://github.com/sassanix/Warracker.git
synced 2026-05-25 03:58:49 -05:00
96f2859975
* **Fixed:** * Global view on Index page now correctly shows warranties from all users, including archived ones. * Added `GET /api/warranties/global/archived` and unified global queries with correlated subqueries to avoid missing or collapsed rows. * Updated frontend logic to merge archived warranties from the new endpoint when Global scope and Status = “All.” * Bumped `script.js` and service worker cache to ensure clients receive updated logic. * Updated files: `backend/warranties_routes.py`, `frontend/script.js`, `frontend/sw.js`, `frontend/index.html`, `frontend/status.html`. * **Added:** * Introduced **Model Number** field to warranties. * Backend: Added `model_number` column, integrated into GET/POST/PUT routes. * Frontend: Added Model Number input in New/Edit modals and display on warranty cards. * Updated files: `backend/migrations/047_add_model_number_to_warranties.sql`, `backend/warranties_routes.py`, `frontend/index.html`, `frontend/status.html`, `frontend/script.js`, `locales/en/translation.json`. * **Enhanced:** * Improved **Add Warranty modal** tab alignment for responsive layouts (≤740px). * Adjusted tab label size and spacing to prevent wrapping while keeping icons and labels visible. * Ensured consistent five-step progress indicator across all breakpoints. * Updated file: `frontend/style.css`.
82 lines
3.4 KiB
JavaScript
82 lines
3.4 KiB
JavaScript
// Version checker for Warracker
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const currentVersion = '0.10.1.15'; // Current version of the application
|
|
const updateStatus = document.getElementById('updateStatus');
|
|
const updateLink = document.getElementById('updateLink');
|
|
const versionDisplay = document.getElementById('versionDisplay');
|
|
|
|
// Function to compare versions
|
|
function compareVersions(v1, v2) {
|
|
const v1Parts = v1.split('.').map(Number);
|
|
const v2Parts = v2.split('.').map(Number);
|
|
|
|
for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) {
|
|
const v1Part = v1Parts[i] || 0;
|
|
const v2Part = v2Parts[i] || 0;
|
|
|
|
if (v1Part > v2Part) return 1;
|
|
if (v1Part < v2Part) return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// Function to check for updates
|
|
async function checkForUpdates() {
|
|
try {
|
|
const response = await fetch('https://api.github.com/repos/sassanix/Warracker/releases/latest');
|
|
if (!response.ok) throw new Error('Failed to fetch release information');
|
|
|
|
const data = await response.json();
|
|
const latestVersion = data.tag_name.replace('v', ''); // Remove 'v' prefix if present
|
|
|
|
const comparison = compareVersions(latestVersion, currentVersion);
|
|
|
|
if (comparison > 0) {
|
|
// New version available
|
|
if (window.i18next && window.i18next.t) {
|
|
updateStatus.textContent = window.i18next.t('about.new_version_available', { version: data.tag_name });
|
|
} else {
|
|
updateStatus.textContent = `New version ${data.tag_name} available!`;
|
|
}
|
|
updateStatus.style.color = 'var(--success-color)';
|
|
updateLink.href = data.html_url;
|
|
updateLink.style.display = 'inline-block';
|
|
} else {
|
|
// Up to date
|
|
if (window.i18next && window.i18next.t) {
|
|
updateStatus.textContent = window.i18next.t('about.latest_version');
|
|
} else {
|
|
updateStatus.textContent = 'You are using the latest version';
|
|
}
|
|
updateStatus.style.color = 'var(--success-color)';
|
|
}
|
|
} catch (error) {
|
|
console.error('Error checking for updates:', error);
|
|
if (window.i18next && window.i18next.t) {
|
|
updateStatus.textContent = window.i18next.t('about.update_check_failed');
|
|
} else {
|
|
updateStatus.textContent = 'Failed to check for updates';
|
|
}
|
|
updateStatus.style.color = 'var(--error-color)';
|
|
}
|
|
}
|
|
|
|
// Update version display if element exists
|
|
if (versionDisplay) {
|
|
// Wait for i18next to be ready
|
|
const updateVersionDisplay = () => {
|
|
if (window.i18next && window.i18next.t) {
|
|
versionDisplay.textContent = window.i18next.t('about.version') + ' v' + currentVersion;
|
|
} else {
|
|
versionDisplay.textContent = 'Version v' + currentVersion;
|
|
}
|
|
};
|
|
|
|
// Try immediately and also after a delay for i18next
|
|
updateVersionDisplay();
|
|
setTimeout(updateVersionDisplay, 500);
|
|
}
|
|
|
|
// Check for updates when the page loads
|
|
checkForUpdates();
|
|
});
|