v0.6.0: Sobors.hu parser, HTTP auth, recipe validation, UI polish

- New sobors.hu parser with ingredient groups and section headers
- Incomplete recipe warnings (missing ingredients/instructions)
- Optional HTTP Basic Auth (configurable on settings page)
- Brand text: "Recept" in white, "Importáló" in blue
- Larger logo (36px), favicon using logo_notext.svg

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-24 18:07:05 +01:00
parent 76290770f4
commit a0bcb62588
7 changed files with 237 additions and 12 deletions
+26 -7
View File
@@ -561,17 +561,29 @@ async function scrapeRecipe() {
showSingleButtons();
document.getElementById('previewCard').classList.add('visible');
const warnings = [];
const statusParts = [];
// Completeness warnings (missing ingredients/instructions)
if (data.warnings && data.warnings.length > 0) {
statusParts.push('<span class="text-warning">&#9888; ' + data.warnings.map(escHtml).join(' | ') + '</span>');
}
// Duplicate warnings
const dupWarnings = [];
if (data.duplicate) {
warnings.push('Mealie: <a href="' + escHtml(data.duplicate.url) + '" target="_blank" style="color:var(--accent)">'
dupWarnings.push('Mealie: <a href="' + escHtml(data.duplicate.url) + '" target="_blank" style="color:var(--accent)">'
+ escHtml(data.duplicate.name) + '</a>');
}
if (data.tandoor_duplicate) {
warnings.push('Tandoor: <a href="' + escHtml(data.tandoor_duplicate.url) + '" target="_blank" style="color:var(--accent)">'
dupWarnings.push('Tandoor: <a href="' + escHtml(data.tandoor_duplicate.url) + '" target="_blank" style="color:var(--accent)">'
+ escHtml(data.tandoor_duplicate.name) + '</a>');
}
if (warnings.length > 0) {
status.innerHTML = '<span class="text-warning">&#9888; Ez a recept már létezik: ' + warnings.join(' | ') + '</span>';
if (dupWarnings.length > 0) {
statusParts.push('<span class="text-warning">&#9888; Ez a recept már létezik: ' + dupWarnings.join(' | ') + '</span>');
}
if (statusParts.length > 0) {
status.innerHTML = statusParts.join('<br>');
} else {
status.innerHTML = '<span class="text-success">&#10003; Beolvasva</span>';
}
@@ -1143,8 +1155,12 @@ async function scrapeForBulk(idx) {
document.getElementById('previewCard').classList.add('visible');
document.getElementById('previewCard').scrollIntoView({ behavior: 'smooth' });
// Show duplicate warning in bulk status
// Show warnings in bulk status
const bulkStatus = document.getElementById('bulkSendStatus');
const bulkStatusParts = [];
if (data.warnings && data.warnings.length > 0) {
bulkStatusParts.push('&#9888; ' + data.warnings.map(escHtml).join(' | '));
}
const dupWarnings = [];
if (data.duplicate && (bulkState.target === 'mealie' || bulkState.target === 'both')) {
dupWarnings.push('Mealie: ' + escHtml(data.duplicate.name));
@@ -1153,7 +1169,10 @@ async function scrapeForBulk(idx) {
dupWarnings.push('Tandoor: ' + escHtml(data.tandoor_duplicate.name));
}
if (dupWarnings.length > 0) {
bulkStatus.innerHTML = '<span class="text-warning" style="font-size:0.85rem">&#9888; Duplikátum: ' + dupWarnings.join(' | ') + '</span>';
bulkStatusParts.push('&#9888; Duplikátum: ' + dupWarnings.join(' | '));
}
if (bulkStatusParts.length > 0) {
bulkStatus.innerHTML = '<span class="text-warning" style="font-size:0.85rem">' + bulkStatusParts.join('<br>') + '</span>';
} else {
bulkStatus.innerHTML = '';
}