Skip to content

Commit

Permalink
conditionally add status data attribute to scenes
Browse files Browse the repository at this point in the history
fixes #221

If a scene has a "status" property, the contents of that property will be stringified and set as a data-scene-status attribute on the scene in the explorer view. This allows for custom styling of scenes for specific statuses, a la

```
[data-scene-status="done"]::before {
  content: "🎉";
  padding: 0 4px 0 0;
}
```
  • Loading branch information
kevboh committed Jan 20, 2024
1 parent 7cad255 commit a75873a
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 16 deletions.
25 changes: 13 additions & 12 deletions src/model/store-vault-sync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,17 @@ type FileWithMetadata = {
metadata: CachedMetadata;
};

export function resolveIfLongformFile(
metadataCache: MetadataCache,
file: TFile
): FileWithMetadata | null {
const metadata = metadataCache.getFileCache(file);
if (metadata && metadata.frontmatter && metadata.frontmatter["longform"]) {
return { file, metadata };
}
return null;
}

/**
* Observes any file with a `longform` metadata entry and keeps its
* metadata and associated scenes (if any) updated in the `drafts`
Expand Down Expand Up @@ -54,8 +65,8 @@ export class StoreVaultSync {
const start = new Date().getTime();

const files = this.vault.getMarkdownFiles();
const resolvedFiles = await Promise.all(
files.map((f) => this.resolveIfLongformFile(f))
const resolvedFiles = files.map((f) =>
resolveIfLongformFile(this.metadataCache, f)
);
const draftFiles = resolvedFiles.filter((f) => f !== null);

Expand Down Expand Up @@ -322,16 +333,6 @@ export class StoreVaultSync {
);
}

private async resolveIfLongformFile(
file: TFile
): Promise<FileWithMetadata | null> {
const metadata = this.metadataCache.getFileCache(file);
if (metadata && metadata.frontmatter && metadata.frontmatter["longform"]) {
return { file, metadata };
}
return null;
}

// if dirty, draft is modified from reality of index file
// and should be written back to index file
private async draftFor(
Expand Down
23 changes: 20 additions & 3 deletions src/view/explorer/SceneList.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/
import type Sortable from "sortablejs";
import { getContext, onDestroy } from "svelte";
import { Keymap, Notice, Platform, type PaneType } from "obsidian";
import { Keymap, Notice, Platform, type PaneType, TFile } from "obsidian";
import { activeFile } from "../stores";
import { drafts, pluginSettings, selectedDraft } from "src/model/stores";
Expand Down Expand Up @@ -39,6 +39,7 @@
collapsible: boolean;
hidden: boolean;
numbering: number[];
status: string | undefined;
};
let items: SceneItem[];
let collapsedItems: string[] = [];
Expand Down Expand Up @@ -74,14 +75,29 @@
}
const nextScene = index < scenes.length - 1 ? scenes[index + 1] : false;
const path = makeScenePath($selectedDraft as MultipleSceneDraft, title);
// TODO: Get app by some other means?
const file = app.vault.getAbstractFileByPath(path);
let status = undefined;
if (file && file instanceof TFile) {
const metadata = app.metadataCache.getFileCache(file);
if (
metadata &&
metadata.frontmatter &&
metadata.frontmatter["status"]
) {
status = `${metadata.frontmatter["status"]}`;
}
}
const item = {
id: title,
name: title,
indent: indent,
path: makeScenePath($selectedDraft as MultipleSceneDraft, title),
indent,
path,
collapsible: nextScene && nextScene.indent > indent,
hidden,
numbering,
status,
};
itemsToReturn.push(item);
});
Expand Down Expand Up @@ -346,6 +362,7 @@
data-scene-path={item.path}
data-scene-indent={item.indent}
data-scene-name={item.name}
data-scene-status={item.status}
>
{#if item.collapsible}
<Disclosure
Expand Down
3 changes: 2 additions & 1 deletion test-longform-vault/.obsidian/appearance.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"translucency": false,
"enabledCssSnippets": [
"writing",
"test-longform-font"
"test-longform-font",
"test-status-styling"
],
"cssTheme": "",
"accentColor": ""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[data-scene-status="done"]::before {
content: "🎉";
padding: 0 4px 0 0;
}
1 change: 1 addition & 0 deletions test-longform-vault/projects 2.0/A Novel/first scene.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
test: test
status: done
---

a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a asda asdsa dasdas dsad asd asdas dasd asd asd asdas das dasd as ads ad ad asdas das das das asasd asd a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a a a a a a a a a a a a aa a a a a a a a aa a a a a a a a aa a a a a a aa a a aa a a aa a asdasd asdas dasdas dasd adasd

0 comments on commit a75873a

Please sign in to comment.