lägg till dexie och förbered för att ladda in data

This commit is contained in:
botvid johansson 2025-02-05 16:48:42 +01:00
parent 2ae2227a4d
commit 7b6e7c484e
9 changed files with 10257 additions and 8 deletions

7
package-lock.json generated
View File

@ -14,6 +14,7 @@
"@oslojs/crypto": "^1.0.1",
"@oslojs/encoding": "^1.1.0",
"@tauri-apps/api": "^2.2.0",
"dexie": "^4.0.11",
"drizzle-orm": "^0.38.4"
},
"devDependencies": {
@ -4285,6 +4286,12 @@
"integrity": "sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg==",
"license": "MIT"
},
"node_modules/dexie": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/dexie/-/dexie-4.0.11.tgz",
"integrity": "sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==",
"license": "Apache-2.0"
},
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",

View File

@ -54,6 +54,7 @@
"@oslojs/crypto": "^1.0.1",
"@oslojs/encoding": "^1.1.0",
"@tauri-apps/api": "^2.2.0",
"dexie": "^4.0.11",
"drizzle-orm": "^0.38.4"
}
}

53
src/db/main.ts Normal file
View File

@ -0,0 +1,53 @@
import Dexie, { type Table } from "dexie";
export interface SyncInfo {
key: string;
last_sync: Date;
}
export interface List {
id?: number;
name: string;
type: boolean;
updated: Date;
}
export interface Shortform {
id?: number;
listid: number;
shortform: string;
phrase: string;
used: Date;
uses: number;
remind: number, // negative if disabled
updated: Date;
}
export class SkrivertDB extends Dexie {
syncInfo!: Table<SyncInfo>;
shortforms!: Table<Shortform>;
lists!: Table<List>;
constructor() {
super("skrivertdb");
this.version(1).stores({
syncInfo: "key, last_sync",
shortforms: "++id, listid, shortform, phrase, last_use, uses, remind, updated",
lists: "++id, name, type, updated",
});
this.on("ready", async (db) => {
console.log("Do ready stuff...") // Check if we have any local data
const localListsCount = await db.table("lists").count();
const lastSync = await db.table("syncInfo").get("lastFullSync");
const lastSyncTime = lastSync?.lastSync || 0;
if (localListsCount === 0) {
// No local data - perform full download
console.log('No local data found. Prompt user to import data or use standard list...');
}
})
}
}
export const db = new SkrivertDB();

10092
src/db/shortforms.se.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,16 @@
export const insertText = (textarea, text) => {
export const insertText = (textarea: HTMLTextAreaElement, text: string) => {
const start = textarea.selectionStart;
const end = textarea.selectionStart + text.length;
textarea.setRangeText(text, start, end, "end");
};
export const insertExpandedPhrase = (textarea, expander, len, text) => {
export const insertExpandedPhrase = (textarea: HTMLTextAreaElement, expander: string, len: number, text: string) => {
const start = textarea.selectionStart - len;
const end = textarea.selectionStart;
textarea.setRangeText(text.concat(expander), start, end, "end");
};
const findIndexOfCurrentWord = (textarea) => {
const findIndexOfCurrentWord = (textarea: HTMLTextAreaElement) => {
const currentValue = textarea.value;
const cursorPos = textarea.selectionStart;
@ -25,7 +25,7 @@ const findIndexOfCurrentWord = (textarea) => {
return startIndex;
};
export const getCurrentWord = (textarea) => {
export const getCurrentWord = (textarea: HTMLTextAreaElement) => {
const currentValue = textarea.value;
const cursorPos = textarea.selectionStart;
const startIndex = findIndexOfCurrentWord(textarea);

11
src/modules/index.d.ts vendored Normal file
View File

@ -0,0 +1,11 @@
type KeyType = {
keyCode: number;
shiftKey?: boolean;
ctrlKey?: boolean;
};
export type ExpanderType = {
key: KeyType;
symbol: string;
fullstop: boolean;
};

74
src/modules/keyboard.ts Normal file
View File

@ -0,0 +1,74 @@
import type { ExpanderType } from "./index.d.ts";
export const defaultExpanders: Map<string, ExpanderType> = new Map();
defaultExpanders.set(" ", {
key: { keyCode: 190, shiftKey: false },
symbol: " ",
fullstop: false,
});
defaultExpanders.set(".", {
key: { keyCode: 190, shiftKey: false },
symbol: ".",
fullstop: true,
});
defaultExpanders.set("!", {
key: { keyCode: 49, shiftKey: true },
symbol: "!",
fullstop: true,
});
defaultExpanders.set("?", {
key: { keyCode: 187, shiftKey: true },
symbol: "?",
fullstop: true,
});
defaultExpanders.set("+", {
key: { keyCode: 187, shiftKey: false },
symbol: "+",
fullstop: false,
});
defaultExpanders.set(",", {
key: { keyCode: 188, shiftKey: false },
symbol: ",",
fullstop: false,
});
defaultExpanders.set("(", {
key: { keyCode: 56, shiftKey: true },
symbol: "(",
fullstop: false,
});
defaultExpanders.set(")", {
key: { keyCode: 57, shiftKey: true },
symbol: ")",
fullstop: false,
});
defaultExpanders.set('"', {
key: { keyCode: 50, shiftKey: true },
symbol: '"',
fullstop: false,
});
defaultExpanders.set("'", {
key: { keyCode: 191, shiftKey: false },
symbol: "'",
fullstop: false,
});
defaultExpanders.set("-", {
key: { keyCode: 189, shiftKey: false },
symbol: "-",
fullstop: false,
});
defaultExpanders.set(":", {
key: { keyCode: 190, shiftKey: true },
symbol: ":",
fullstop: false,
});
defaultExpanders.set(",", {
key: { keyCode: 188, shiftKey: false },
symbol: ",",
fullstop: false,
});
defaultExpanders.set(";", {
key: { keyCode: 188, shiftKey: true },
symbol: ":",
fullstop: false,
});

View File

@ -1,7 +1,18 @@
<script lang="ts">
import Textarea from './textarea.svelte';
import { db, type Shortform } from '../db/main';
let cache: Array<Shortform>;
db.shortforms
.toArray()
.then((shortforms) => {
cache = shortforms;
})
.catch((err) => {
console.error(err);
});
</script>
<div class="h-full w-full" role="application">
<Textarea />
<Textarea active-shortforms={cache} />
</div>

View File

@ -9,12 +9,12 @@
currentWord: ''
};
let textarea;
let textarea: HTMLTextAreaElement;
let text = '';
onMount(() => {
if (browser) {
let t = document.getElementById('doc');
let t = document.getElementById('doc') as HTMLTextAreaElement;
if (t != null) {
textarea = t;
setTimeout(() => {
@ -32,7 +32,7 @@
}
}
};
const input = (e) => {
const input = (e: InputEvent) => {
if (e.inputType == 'insertText') {
const key = e.data || '';
if (e.data == null) return;