1
Fork 0
mirror of https://github.com/glassflame/glassflame.github.io.git synced 2024-11-22 16:14:26 +00:00

Working wikilinks!

This commit is contained in:
Steffo 2023-10-29 04:20:38 +01:00
parent ce594624dc
commit 8d3343fa05
Signed by: steffo
GPG key ID: 2A24051445686895
3 changed files with 66 additions and 29 deletions

View file

@ -34,21 +34,6 @@ export class BrowseElement extends HTMLBodyElement {
return url return url
} }
urlName(name) {
if(name.startsWith(".")) {
const path = filePath(name).join("/")
return this.urlFor({path})
}
else if(!name.includes("/")) {
const path = `${fileDetails(this.parameters.path).directory}/${name}.md`
return this.urlFor({path})
}
else {
const path = filePath(name).join("/")
return this.urlFor({path})
}
}
// TODO: Add a landing page // TODO: Add a landing page
/** /**

View file

@ -1,6 +1,9 @@
import { CustomElement } from "../base.mjs"; import { CustomElement } from "../base.mjs";
import {findFirstAncestor} from "../../utils/trasversal.mjs"; import {findFirstAncestor} from "../../utils/trasversal.mjs";
import {BrowseElement} from "../browse.mjs"; import {BrowseElement} from "../browse.mjs";
import {VaultElement} from "../vault.mjs";
import {filePath} from "../../utils/file.mjs";
import {DisplayElement} from "../display.mjs";
/** /**
@ -12,17 +15,34 @@ export class WikilinkElement extends CustomElement {
} }
/** /**
* Element handling the page navigation. * Element displaying the this one.
* @type {BrowseElement} * Can be recalculated with {@link recalculateAncestors}.
* @type {DisplayElement}
*/ */
browseElement display
/** /**
* Recalculate the value of {@link browseElement} using this element's current position in the DOM. * Element representing the Obsidian Vault.
* Can be recalculated with {@link recalculateAncestors}.
* @type {VaultElement}
*/
vault
/**
* Element handling the page navigation.
* Can be recalculated with {@link recalculateAncestors}.
* @type {BrowseElement}
*/
browse
/**
* Recalculate the value of {@link browse} and {@link vault} using this element's current position in the DOM.
* @returns {void} * @returns {void}
*/ */
recalculateBrowseElement() { recalculateAncestors() {
this.browseElement = findFirstAncestor(this, BrowseElement) this.display = findFirstAncestor(this, DisplayElement)
this.vault = findFirstAncestor(this, VaultElement)
this.browse = findFirstAncestor(this, BrowseElement)
} }
/** /**
@ -69,13 +89,28 @@ export class WikilinkElement extends CustomElement {
} }
resetAnchorElementProperties() { resetAnchorElementProperties() {
this.anchorElement.href = this.browseElement.urlName(this.target) let path = null
if(this.target.startsWith(".")) {
path = filePath(this.display.path + "/" + this.target).join("/")
}
else if(this.target.includes("/")) {
path = filePath(this.target).join("/")
}
else {
if(this.vault.fileIndex !== null) {
path = this.vault.fileIndex.basenames[this.target]
}
}
if(path !== null) {
this.anchorElement.href = this.browse.urlFor({path}).toString()
}
this.anchorElement.innerText = this.text this.anchorElement.innerText = this.text
} }
onConnect() { onConnect() {
super.onConnect() super.onConnect()
this.recalculateBrowseElement() this.recalculateAncestors()
this.recalculateAnchorElement() this.recalculateAnchorElement()
this.resetAnchorElementProperties() this.resetAnchorElementProperties()
} }

View file

@ -119,7 +119,6 @@ export class VaultElement extends CustomElement {
this.vaultElement = this.instance.querySelector(this.constructor.VAULT_SELECTOR) this.vaultElement = this.instance.querySelector(this.constructor.VAULT_SELECTOR)
} }
/** /**
* The accent color of this vault. * The accent color of this vault.
* Can be set manually, or updated via {@link refetchAppearance}. * Can be set manually, or updated via {@link refetchAppearance}.
@ -145,12 +144,30 @@ export class VaultElement extends CustomElement {
} }
} }
onConnect() { /**
* Index containing information about the files available in the Vault.
* Used to resolve Wikilinks.
* @type {{basenames: {[basename: string]: string}, paths: []} | null}
*/
fileIndex
/**
* Update {@link fileIndex} by fetching the `steffo-file-index.json` file located at the root of the Vault.
* @returns {Promise<void>}
*/
async refetchSteffoFileIndex() {
const response = await this.fetchCooldown("steffo-file-index.json")
if(response.status >= 400) {
this.fileIndex = null
}
this.fileIndex = await response.json()
}
async onConnect() {
super.onConnect() super.onConnect()
this.recalculateVaultElement() this.recalculateVaultElement()
// noinspection JSIgnoredPromiseFromCall this.#fetchQueueScheduler().then()
this.#fetchQueueScheduler() await this.refetchAppearance()
// noinspection JSIgnoredPromiseFromCall await this.refetchSteffoFileIndex()
this.refetchAppearance()
} }
} }