generated from tpl/obsidian-sample-plugin
			Fix file links
This commit is contained in:
		
							parent
							
								
									cba99adc2a
								
							
						
					
					
						commit
						212d3acce3
					
				| 
						 | 
					@ -6,17 +6,15 @@
 | 
				
			||||||
	import { createReadingLog } from "@ui/stores/reading-log.svelte";
 | 
						import { createReadingLog } from "@ui/stores/reading-log.svelte";
 | 
				
			||||||
	import { ALL_TIME } from "@ui/stores/date-filter.svelte";
 | 
						import { ALL_TIME } from "@ui/stores/date-filter.svelte";
 | 
				
			||||||
	import { onDestroy } from "svelte";
 | 
						import { onDestroy } from "svelte";
 | 
				
			||||||
	import { getLinkpath } from "obsidian";
 | 
						import OpenFileLink from "@ui/components/OpenFileLink.svelte";
 | 
				
			||||||
 | 
						import { setAppContext } from "@ui/stores/app";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	interface Props {
 | 
						interface Props {
 | 
				
			||||||
		plugin: BookTrackerPlugin;
 | 
							plugin: BookTrackerPlugin;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const { plugin }: Props = $props();
 | 
						const { plugin }: Props = $props();
 | 
				
			||||||
 | 
						setAppContext(plugin.app);
 | 
				
			||||||
	function bookUri(book: string) {
 | 
					 | 
				
			||||||
		return getLinkpath(book + ".md");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const store = createReadingLog(plugin.readingLog);
 | 
						const store = createReadingLog(plugin.readingLog);
 | 
				
			||||||
	onDestroy(() => store.destroy());
 | 
						onDestroy(() => store.destroy());
 | 
				
			||||||
| 
						 | 
					@ -95,9 +93,11 @@
 | 
				
			||||||
			{#each store.entries as entry}
 | 
								{#each store.entries as entry}
 | 
				
			||||||
				<tr>
 | 
									<tr>
 | 
				
			||||||
					<td class="date">{entry.createdAt.format("YYYY-MM-DD")}</td>
 | 
										<td class="date">{entry.createdAt.format("YYYY-MM-DD")}</td>
 | 
				
			||||||
					<td class="book"
 | 
										<td class="book">
 | 
				
			||||||
						><a href={bookUri(entry.book)}>{entry.book}</a></td
 | 
											<OpenFileLink file={entry.book + ".md"}>
 | 
				
			||||||
					>
 | 
												{entry.book}
 | 
				
			||||||
 | 
											</OpenFileLink>
 | 
				
			||||||
 | 
										</td>
 | 
				
			||||||
					<td class="pages-read">{entry.pagesRead}</td>
 | 
										<td class="pages-read">{entry.pagesRead}</td>
 | 
				
			||||||
					<td class="percent-complete">
 | 
										<td class="percent-complete">
 | 
				
			||||||
						{Math.round(
 | 
											{Math.round(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@
 | 
				
			||||||
		createReadingLog,
 | 
							createReadingLog,
 | 
				
			||||||
		setReadingLogContext,
 | 
							setReadingLogContext,
 | 
				
			||||||
	} from "@ui/stores/reading-log.svelte";
 | 
						} from "@ui/stores/reading-log.svelte";
 | 
				
			||||||
 | 
						import { setAppContext } from "@ui/stores/app";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	interface Props {
 | 
						interface Props {
 | 
				
			||||||
		plugin: BookTrackerPlugin;
 | 
							plugin: BookTrackerPlugin;
 | 
				
			||||||
| 
						 | 
					@ -34,6 +35,7 @@
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const { plugin, source }: Props = $props();
 | 
						const { plugin, source }: Props = $props();
 | 
				
			||||||
 | 
						setAppContext(plugin.app);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const settingsStore = createSettings(plugin);
 | 
						const settingsStore = createSettings(plugin);
 | 
				
			||||||
	setSettingsContext(settingsStore);
 | 
						setSettingsContext(settingsStore);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,10 +16,7 @@
 | 
				
			||||||
	import BookshelfView from "@ui/components/BookshelfView.svelte";
 | 
						import BookshelfView from "@ui/components/BookshelfView.svelte";
 | 
				
			||||||
	import TableView from "@ui/components/TableView.svelte";
 | 
						import TableView from "@ui/components/TableView.svelte";
 | 
				
			||||||
	import DetailsView from "@ui/components/DetailsView.svelte";
 | 
						import DetailsView from "@ui/components/DetailsView.svelte";
 | 
				
			||||||
	import {
 | 
						import { setAppContext } from "@ui/stores/app";
 | 
				
			||||||
		createReadingLog,
 | 
					 | 
				
			||||||
		setReadingLogContext,
 | 
					 | 
				
			||||||
	} from "@ui/stores/reading-log.svelte";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	interface Props {
 | 
						interface Props {
 | 
				
			||||||
		plugin: BookTrackerPlugin;
 | 
							plugin: BookTrackerPlugin;
 | 
				
			||||||
| 
						 | 
					@ -27,6 +24,7 @@
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const { plugin, source }: Props = $props();
 | 
						const { plugin, source }: Props = $props();
 | 
				
			||||||
 | 
						setAppContext(plugin.app);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const settings = ShelfSettingsSchema.parse(parseYaml(source));
 | 
						const settings = ShelfSettingsSchema.parse(parseYaml(source));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@
 | 
				
			||||||
	import type { ShelfSettings } from "@ui/code-blocks/ShelfCodeBlock";
 | 
						import type { ShelfSettings } from "@ui/code-blocks/ShelfCodeBlock";
 | 
				
			||||||
	import { Dot, Flame, Star, StarHalf } from "lucide-svelte";
 | 
						import { Dot, Flame, Star, StarHalf } from "lucide-svelte";
 | 
				
			||||||
	import RatingInput from "./RatingInput.svelte";
 | 
						import RatingInput from "./RatingInput.svelte";
 | 
				
			||||||
 | 
						import OpenFileLink from "./OpenFileLink.svelte";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	interface Props {
 | 
						interface Props {
 | 
				
			||||||
		plugin: BookTrackerPlugin;
 | 
							plugin: BookTrackerPlugin;
 | 
				
			||||||
| 
						 | 
					@ -53,11 +54,11 @@
 | 
				
			||||||
				alt={title}
 | 
									alt={title}
 | 
				
			||||||
			/>
 | 
								/>
 | 
				
			||||||
			<div class="book-info">
 | 
								<div class="book-info">
 | 
				
			||||||
				<a href={getLinkpath(book.file.path)}>
 | 
									<OpenFileLink file={book.file}>
 | 
				
			||||||
					<h2 class="book-title">
 | 
										<h2 class="book-title">
 | 
				
			||||||
						{title}
 | 
											{title}
 | 
				
			||||||
					</h2>
 | 
										</h2>
 | 
				
			||||||
				</a>
 | 
									</OpenFileLink>
 | 
				
			||||||
				{#if subtitle}
 | 
									{#if subtitle}
 | 
				
			||||||
					<p class="subtitle">{subtitle}</p>
 | 
										<p class="subtitle">{subtitle}</p>
 | 
				
			||||||
				{/if}
 | 
									{/if}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					<script lang="ts">
 | 
				
			||||||
 | 
						import { getLinkpath, TFile } from "obsidian";
 | 
				
			||||||
 | 
						import type { Snippet } from "svelte";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						interface Props {
 | 
				
			||||||
 | 
							children?: Snippet;
 | 
				
			||||||
 | 
							file: TFile | string;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						let { children, file }: Props = $props();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function makeUri(path: string) {
 | 
				
			||||||
 | 
							return `obsidian://open?file=${encodeURIComponent(path)}`;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const href = $derived(
 | 
				
			||||||
 | 
							makeUri(file instanceof TFile ? file.path : getLinkpath(file)),
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<a {href}>
 | 
				
			||||||
 | 
						{@render children?.()}
 | 
				
			||||||
 | 
					</a>
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
	import { getLinkpath } from "obsidian";
 | 
						import { getLinkpath } from "obsidian";
 | 
				
			||||||
	import Rating from "@ui/components/Rating.svelte";
 | 
						import Rating from "@ui/components/Rating.svelte";
 | 
				
			||||||
	import type { ShelfSettings } from "@ui/code-blocks/ShelfCodeBlock";
 | 
						import type { ShelfSettings } from "@ui/code-blocks/ShelfCodeBlock";
 | 
				
			||||||
 | 
						import OpenFileLink from "./OpenFileLink.svelte";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	interface Props {
 | 
						interface Props {
 | 
				
			||||||
		plugin: BookTrackerPlugin;
 | 
							plugin: BookTrackerPlugin;
 | 
				
			||||||
| 
						 | 
					@ -70,9 +71,9 @@
 | 
				
			||||||
					/>
 | 
										/>
 | 
				
			||||||
				</td>
 | 
									</td>
 | 
				
			||||||
				<td>
 | 
									<td>
 | 
				
			||||||
					<a href={getLinkpath(book.file.path)}>
 | 
										<OpenFileLink file={book.file}>
 | 
				
			||||||
						{title}
 | 
											{title}
 | 
				
			||||||
					</a>
 | 
										</OpenFileLink>
 | 
				
			||||||
				</td>
 | 
									</td>
 | 
				
			||||||
				<td>
 | 
									<td>
 | 
				
			||||||
					{authors.join(", ")}
 | 
										{authors.join(", ")}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					import type { App } from "obsidian";
 | 
				
			||||||
 | 
					import { getContext, setContext } from "svelte";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const APP_KEY = Symbol("app");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function setAppContext(app: App) {
 | 
				
			||||||
 | 
						setContext(APP_KEY, app);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function getAppContext(): App {
 | 
				
			||||||
 | 
						return getContext(APP_KEY);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue