fix: save and restore last used Bible version across sessions

This commit is contained in:
catarrh committed 2026-08-04 04:23:10 +03:00
1 parent 73fac73248
commit cb63254b2f
3 files changed
+6 -21

No files matched your search

+2 -1
View File
@@ -248,7 +248,8 @@ export class App {
const biblePassage = bp[3] || ''; const biblePassage = bp[3] || '';
let bibleVersion: string; let bibleVersion: string;
if (!versionSpec) { if (!versionSpec) {
bibleVersion = this.resolveBibleVersion(this.settings.defaultBibleVersion, lang); const lastVersion = localStorage.getItem('ponomar-last-bible-version');
bibleVersion = lastVersion || this.resolveBibleVersion(this.settings.defaultBibleVersion, lang);
} else if (versionSpec.includes('~')) { } else if (versionSpec.includes('~')) {
// Format: lang~short e.g. "en~kjv" → "en/bible/kjv" // Format: lang~short e.g. "en~kjv" → "en/bible/kjv"
const [vl, vs] = versionSpec.split('~'); const [vl, vs] = versionSpec.split('~');
+1
View File
@@ -298,5 +298,6 @@ export class BibleView {
} }
saveBibleState(this.currentVersion, this.currentBook, this.currentPassage); saveBibleState(this.currentVersion, this.currentBook, this.currentPassage);
localStorage.setItem('ponomar-last-bible-version', this.currentVersion);
} }
} }
+3 -20
View File
@@ -58,12 +58,6 @@ function defaultBibleForLanguage(lang: string): string {
return map[lang] || 'kjv'; return map[lang] || 'kjv';
} }
const LANG_LABELS: Record<string, string> = {
en: 'English', ru: 'Русский', cu: 'Церковнославянский',
el: 'Ἑλληνικά', fr: 'Français', la: 'Latina',
zh: '中文', ar: 'العربية',
};
function versionPriority(lang: string, userLang: string): number { function versionPriority(lang: string, userLang: string): number {
if (lang === userLang) return 0; if (lang === userLang) return 0;
if ((userLang === 'ru' || userLang === 'cu') && (lang === 'ru' || lang === 'cu')) return 1; if ((userLang === 'ru' || userLang === 'cu') && (lang === 'ru' || lang === 'cu')) return 1;
@@ -339,26 +333,15 @@ export class SettingsView {
return pa - pb || a.name.localeCompare(b.name); return pa - pb || a.name.localeCompare(b.name);
}); });
// Group by language // Build options in priority order
const groups: Record<string, any[]> = {};
for (const v of versions) {
if (!groups[v.language]) groups[v.language] = [];
groups[v.language].push(v);
}
// Build optgroups in priority order
const orderedLangs = [...new Set(versions.map((v: any) => v.language))] as string[];
const select = document.getElementById('default-bible') as HTMLSelectElement; const select = document.getElementById('default-bible') as HTMLSelectElement;
if (select) { if (select) {
select.innerHTML = orderedLangs.map((lang: string) => { select.innerHTML = versions.map((v: any) => {
const items = groups[lang];
return `<optgroup label="${LANG_LABELS[lang] || lang}">${items.map((v: any) => {
const shortId = v.id.split('/').pop(); const shortId = v.id.split('/').pop();
const size = OfflineManager.getBibleSize(v.id); const size = OfflineManager.getBibleSize(v.id);
const comment = size ? ` (${size})` : ''; const comment = size ? ` (${size})` : '';
return `<option value="${shortId}" ${this.settings.defaultBibleVersion === shortId ? 'selected' : ''}>${v.name}${comment}</option>`; return `<option value="${shortId}" ${this.settings.defaultBibleVersion === shortId ? 'selected' : ''}>${v.name}${comment}</option>`;
}).join('')}</optgroup>`; }).join('');
}).join('');
} }
} catch {} } catch {}
})(); })();