Skip to content

TiagoJacinto/obsidian-object-oriented-thinking

Repository files navigation

Object Oriented Thinking

Add inheritance-like behavior to notes.

Usage

1. Extend

In a note's frontmatter, add the property (default: extends) with a link to the parent note:

---
extends: [[ParentNote]]
---

2. Query

Using utility methods: getObjectFileByPath(path).isDescendantOf(parentObjectFile)

Methods

oot.getObjectFileByLink(link: [[${string}]]): TFile & {isDescendantOf: (parentFile: TFile) => boolean} | null

Examples
const taskObjectFile = oot.getObjectFileByLink("[[Task]]")

dv.table(["File"], dv.pages().where(page => {
  const pageObjectFile = oot.getObjectFileByPath(page.file.path)

  return pageObjectFile?.isDescendantOf(taskObjectFile)
}).map(p => [p.file.link]))

oot.getObjectFileByPath(path: string): TFile & {isDescendantOf: (parentFile: TFile) => boolean} | null

Examples
const currentObjectFile = oot.getObjectFileByPath(dv.current().file.path);

dv.table(
	['File'],
	dv
		.pages()
		.where((page) => {
			const pageObjectFile = oot.getObjectFileByPath(page.file.path);

			return pageObjectFile?.isDescendantOf(currentObjectFile);
		})
		.map((p) => [p.file.link]),
);

Defining your own functions

You can define your own functions like this or use javascript loader plugins like CustomJS:

const isDescendantOf = (parentObjectFile) => (page) => oot.getObjectFileByPath(page.file.path)?.isDescendantOf(parentObjectFile) ?? false

const taskObjectFile = oot.getObjectFileByLink("[[Inbox/Task|Task]]")

dv.table(["File"], dv.pages().where(isDescendantOf(taskObjectFile)).map(p => [p.file.link]))

Manually installing the plugin

  • Copy over main.js, styles.css, manifest.json to your vault VaultFolder/.obsidian/plugins/your-plugin-id/.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors