App quality: offline badge, per-note history, keyboard study mode, notes import
- Study cards say whether the Bible text works offline, with a button to save the missing book (notes are always kept on the device). - Each note keeps its last 12 versions with Restore (History under each note). - Keyboard-only study: 1/2/3 write in Observe/Interpret/Apply, C/W/X/P switch resource tabs, V compares, Esc leaves a note box; listed under "?". - Export > Import notes: bring Word/Markdown/text notes into the matching chunks without overwriting anything; can mark them as not your own. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
648c3206df
commit
67645cf1df
14 files changed
+421
-7
No files matched your search
@@ -0,0 +1,21 @@
|
||||
// On a study card: whether its Bible text works without a connection, and a button to fix that.
|
||||
import { DownloadProgress } from './OfflineSave.jsx';
|
||||
import { offlineStatus } from '../utils/offline.js';
|
||||
|
||||
export default function OfflineBadge({ project, offline }) {
|
||||
if (!project) return null;
|
||||
const status = offlineStatus(project, offline.saved);
|
||||
const label = 'mt-1 text-xs';
|
||||
if (offline.job) return <div className="mt-2"><DownloadProgress job={offline.job} onCancel={offline.cancel} /></div>;
|
||||
if (status.state === 'ready') return <p className={`${label} text-[var(--r-accent)]`} title="Your notes and the Bible text for this study open without a connection">✓ Works offline</p>;
|
||||
if (status.state === 'licensed') {
|
||||
return <p className={`${label} text-[var(--r-sub)]`} title={`The ${status.translation} licence doesn’t allow saving its text for offline use`}>Notes work offline; {status.translation} text needs a connection</p>;
|
||||
}
|
||||
const next = status.missing[0];
|
||||
return (
|
||||
<p className={`${label} flex flex-wrap items-center gap-x-2 text-[var(--r-sub)]`}>
|
||||
<span>Needs a connection for {status.missing.map((b) => b.name).join(', ')}</span>
|
||||
<button type="button" onClick={() => offline.saveBook(status.translation, next.abbrev, next.name)} className="text-[var(--r-accent)] hover:underline">Save {next.name} for offline</button>
|
||||
</p>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user