Improve mapping slug to filepath, to reduce error when build up graph
(WIP)
This commit is contained in:
parent
fed481d2a9
commit
99dbccef0a
@ -23,8 +23,7 @@ export const Node = {
|
|||||||
results.push(file);
|
results.push(file);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const markdownFiles = results.filter(f => f.endsWith(".md"))
|
return results.filter(f => f.endsWith(".md"))
|
||||||
return markdownFiles
|
|
||||||
},
|
},
|
||||||
readFileSync:function(fullPath){
|
readFileSync:function(fullPath){
|
||||||
return fs.readFileSync(fullPath, "utf8")
|
return fs.readFileSync(fullPath, "utf8")
|
||||||
|
@ -9,8 +9,8 @@ import frontmatter from "remark-frontmatter";
|
|||||||
import externalLinks from "remark-external-links";
|
import externalLinks from "remark-external-links";
|
||||||
import highlight from "remark-highlight.js";
|
import highlight from "remark-highlight.js";
|
||||||
import {Node} from "./node";
|
import {Node} from "./node";
|
||||||
|
import {getAllFilePaths, toSlug} from "./utils";
|
||||||
const postsDirectory = path.join(process.cwd(), 'posts')
|
path.join(process.cwd(), 'posts');
|
||||||
const isFile = fileName => {
|
const isFile = fileName => {
|
||||||
return fs.lstatSync(fileName).isFile()
|
return fs.lstatSync(fileName).isFile()
|
||||||
}
|
}
|
||||||
@ -36,7 +36,27 @@ export const Transformer = {
|
|||||||
return {}
|
return {}
|
||||||
},
|
},
|
||||||
|
|
||||||
getHtmlContent: function (content, {fileNames}) {
|
|
||||||
|
pageResolver: function (pageName) {
|
||||||
|
const allFileNames = getAllFilePaths()
|
||||||
|
const result = allFileNames.find(aFile => {
|
||||||
|
let parseFileNameFromPath = Transformer.parseFileNameFromPath(aFile);
|
||||||
|
return parseFileNameFromPath === pageName
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// permalink = permalink.replace("ç", "c").replace("ı", "i").replace("ş", "s")
|
||||||
|
// console.log(`/note/${toSlug(result)}`)
|
||||||
|
if (result === undefined || result.length === 0) {
|
||||||
|
console.log("Cannot resolve file path " + pageName)
|
||||||
|
}
|
||||||
|
return (result !== undefined && result.length > 0) ? [toSlug(result)] : ["/"]
|
||||||
|
},
|
||||||
|
hrefTemplate: function (permalink) {
|
||||||
|
permalink = Transformer.normalizeFileName(permalink)
|
||||||
|
permalink = permalink.replace("ç", "c").replace("ı", "i").replace("ş", "s")
|
||||||
|
return `/note/${permalink}`;
|
||||||
|
}, getHtmlContent: function (content) {
|
||||||
let htmlContent = []
|
let htmlContent = []
|
||||||
const sanitizedContent = Transformer.preprocessThreeDashes(content)
|
const sanitizedContent = Transformer.preprocessThreeDashes(content)
|
||||||
|
|
||||||
@ -48,12 +68,10 @@ export const Transformer = {
|
|||||||
.use(wikiLinkPlugin, {
|
.use(wikiLinkPlugin, {
|
||||||
permalinks: null,
|
permalinks: null,
|
||||||
pageResolver: function (pageName) {
|
pageResolver: function (pageName) {
|
||||||
return [Transformer.parseFileNameFromPath(pageName)]
|
return Transformer.pageResolver(pageName)
|
||||||
},
|
},
|
||||||
hrefTemplate: function (permalink) {
|
hrefTemplate: function (permalink) {
|
||||||
permalink = Transformer.normalizeFileName(permalink)
|
return Transformer.hrefTemplate(permalink);
|
||||||
permalink = permalink.replace("ç", "c").replace("ı", "i").replace("ş", "s")
|
|
||||||
return `/note/${permalink}`
|
|
||||||
},
|
},
|
||||||
|
|
||||||
aliasDivider: "|"
|
aliasDivider: "|"
|
||||||
@ -62,6 +80,9 @@ export const Transformer = {
|
|||||||
.process(sanitizedContent,
|
.process(sanitizedContent,
|
||||||
function (err, file) {
|
function (err, file) {
|
||||||
htmlContent.push(String(file).replace("\n", ""))
|
htmlContent.push(String(file).replace("\n", ""))
|
||||||
|
if (err) {
|
||||||
|
console.log("ERRROR:" + err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
htmlContent = htmlContent.join("")
|
htmlContent = htmlContent.join("")
|
||||||
@ -106,8 +127,7 @@ export const Transformer = {
|
|||||||
/* Parse file name from path then sanitize it */
|
/* Parse file name from path then sanitize it */
|
||||||
parseFileNameFromPath: function (filepath) {
|
parseFileNameFromPath: function (filepath) {
|
||||||
const parsedFileFromPath = filepath.split("/")[filepath.split("/").length - 1]
|
const parsedFileFromPath = filepath.split("/")[filepath.split("/").length - 1]
|
||||||
const parsedFileName = parsedFileFromPath.replace(".md", "")
|
return parsedFileFromPath.replace(".md", "")
|
||||||
return Transformer.normalizeFileName(parsedFileName)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Pair provided and existing Filenames*/
|
/* Pair provided and existing Filenames*/
|
||||||
@ -130,8 +150,8 @@ export const Transformer = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
getInternalLinks: function (aFilePath) {
|
getInternalLinks: function (aFilePath) {
|
||||||
const filePaths = Node.getFiles(postsDirectory);
|
// const filePaths = Node.getFiles(postsDirectory);
|
||||||
const currentFilePath = Transformer.pairCurrentFile(aFilePath, filePaths)
|
// const currentFilePath = Transformer.pairCurrentFile(aFilePath, filePaths)
|
||||||
const fileContent = Node.readFileSync(aFilePath);
|
const fileContent = Node.readFileSync(aFilePath);
|
||||||
const internalLinks = []
|
const internalLinks = []
|
||||||
const sanitizedContent = Transformer.preprocessThreeDashes(fileContent)
|
const sanitizedContent = Transformer.preprocessThreeDashes(fileContent)
|
||||||
@ -141,11 +161,13 @@ export const Transformer = {
|
|||||||
pageResolver: function (pageName) {
|
pageResolver: function (pageName) {
|
||||||
|
|
||||||
// let name = [Transformer.parseFileNameFromPath(pageName)];
|
// let name = [Transformer.parseFileNameFromPath(pageName)];
|
||||||
|
|
||||||
|
//TODO: Handle # Link
|
||||||
let slug = Transformer.parseFileNameFromPath(pageName);
|
let slug = Transformer.parseFileNameFromPath(pageName);
|
||||||
if (slug.includes('#')) {
|
if (slug.includes('#')) {
|
||||||
console.log(slug)
|
console.log(slug)
|
||||||
}
|
}
|
||||||
const canonicalSlug = slug.includes('#') ? slug.split('#')[0] : slug
|
const canonicalSlug = Transformer.pageResolver(pageName)[0]
|
||||||
|
|
||||||
const backLink = {
|
const backLink = {
|
||||||
title: canonicalSlug,
|
title: canonicalSlug,
|
||||||
@ -153,16 +175,16 @@ export const Transformer = {
|
|||||||
shortSummary: canonicalSlug
|
shortSummary: canonicalSlug
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canonicalSlug != null && internalLinks.find(aLink => aLink.slug === canonicalSlug ) == null) {
|
if (canonicalSlug != null && internalLinks.find(aLink => aLink.slug === canonicalSlug) == null) {
|
||||||
internalLinks.push(backLink);
|
internalLinks.push(backLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return [canonicalSlug]
|
return [canonicalSlug]
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
hrefTemplate: function (permalink) {
|
hrefTemplate: function (permalink) {
|
||||||
permalink = Transformer.normalizeFileName(permalink)
|
return Transformer.hrefTemplate(permalink)
|
||||||
permalink = permalink.replace("ç", "c").replace("ı", "i").replace("ş", "s")
|
|
||||||
return `/note/${permalink}`
|
|
||||||
},
|
},
|
||||||
|
|
||||||
aliasDivider: "|"
|
aliasDivider: "|"
|
||||||
|
46
lib/utils.js
46
lib/utils.js
@ -5,6 +5,10 @@ import unified from "unified";
|
|||||||
import markdown from "remark-parse";
|
import markdown from "remark-parse";
|
||||||
import {toString} from 'mdast-util-to-string'
|
import {toString} from 'mdast-util-to-string'
|
||||||
|
|
||||||
|
const dirTree = require("directory-tree");
|
||||||
|
const postsDirectory = path.join(process.cwd(), 'posts')
|
||||||
|
|
||||||
|
|
||||||
export function getContent(filename) {
|
export function getContent(filename) {
|
||||||
let {currentFilePath} = getFileNames(filename);
|
let {currentFilePath} = getFileNames(filename);
|
||||||
//console.log("currentFilePath: ", currentFilePath)
|
//console.log("currentFilePath: ", currentFilePath)
|
||||||
@ -25,11 +29,8 @@ export function getShortSummary(filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const dirTree = require("directory-tree");
|
export function getAllFilePaths() {
|
||||||
const postsDirectory = path.join(process.cwd(), 'posts')
|
return Node.getFiles(postsDirectory)
|
||||||
|
|
||||||
export function getAllFileNames() {
|
|
||||||
return Node.getFiles(postsDirectory).map(f => Transformer.parseFileNameFromPath(f))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getFileNames(filename) {
|
export function getFileNames(filename) {
|
||||||
@ -49,7 +50,7 @@ export function getFileNames(filename) {
|
|||||||
//TODO remove reference to index/sidebar md
|
//TODO remove reference to index/sidebar md
|
||||||
filePaths = filePaths.filter(f => !(f.endsWith("sidebar.md") && f.endsWith("index.md")))
|
filePaths = filePaths.filter(f => !(f.endsWith("sidebar.md") && f.endsWith("index.md")))
|
||||||
//console.log("\tDirectory is scanning to find corresponding filename")
|
//console.log("\tDirectory is scanning to find corresponding filename")
|
||||||
currentFilePath = Transformer.pairCurrentFile(filename, filePaths)
|
currentFilePath = toFilePath(filename)
|
||||||
//console.log("\tScan is finished. Founded filepath", currentFilePath, "\n")
|
//console.log("\tScan is finished. Founded filepath", currentFilePath, "\n")
|
||||||
}
|
}
|
||||||
return {fileNames, currentFilePath};
|
return {fileNames, currentFilePath};
|
||||||
@ -66,9 +67,7 @@ export function getSinglePost(filename) {
|
|||||||
|
|
||||||
const currentFileFrontMatter = Transformer.getFrontMatterData(fileContent)
|
const currentFileFrontMatter = Transformer.getFrontMatterData(fileContent)
|
||||||
|
|
||||||
const [htmlContent] = Transformer.getHtmlContent(fileContent, {
|
const [htmlContent] = Transformer.getHtmlContent(fileContent)
|
||||||
fileNames: fileNames,
|
|
||||||
})
|
|
||||||
//console.log("hrmlcontents and backlinks")
|
//console.log("hrmlcontents and backlinks")
|
||||||
return {
|
return {
|
||||||
id: filename,
|
id: filename,
|
||||||
@ -78,6 +77,29 @@ export function getSinglePost(filename) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function toFilePath(slug) {
|
||||||
|
// Construct file name from slug of /notes/abcxyz
|
||||||
|
return postsDirectory + slug
|
||||||
|
.replaceAll('__','/')
|
||||||
|
.replaceAll('--',' ')
|
||||||
|
.replaceAll('ambersand','&')
|
||||||
|
+ ".md"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function toSlug(filePath) {
|
||||||
|
// Convert File Path to unique slug
|
||||||
|
|
||||||
|
// let result = filePath.replace('/','__').replace(' ','-').replace('.md', '')
|
||||||
|
|
||||||
|
return filePath.replace(postsDirectory, '')
|
||||||
|
.replaceAll('/','__')
|
||||||
|
.replaceAll(' ','--')
|
||||||
|
.replaceAll('&','ambersand')
|
||||||
|
.replace('.md', '')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export function constructBackLinks() {
|
export function constructBackLinks() {
|
||||||
|
|
||||||
const filePaths = getContentPaths()
|
const filePaths = getContentPaths()
|
||||||
@ -85,7 +107,7 @@ export function constructBackLinks() {
|
|||||||
const nodes = []
|
const nodes = []
|
||||||
|
|
||||||
filePaths.forEach(filename => {
|
filePaths.forEach(filename => {
|
||||||
const {currentFilePath, fileNames} = getFileNames(filename)
|
const {currentFilePath} = getFileNames(filename)
|
||||||
const internalLinks = Transformer.getInternalLinks(currentFilePath)
|
const internalLinks = Transformer.getInternalLinks(currentFilePath)
|
||||||
internalLinks.forEach(aLink => {
|
internalLinks.forEach(aLink => {
|
||||||
|
|
||||||
@ -97,7 +119,7 @@ export function constructBackLinks() {
|
|||||||
}
|
}
|
||||||
edges.push(anEdge)
|
edges.push(anEdge)
|
||||||
if (nodes.findIndex(aNode => aNode.slug === aLink.slug) === -1) {
|
if (nodes.findIndex(aNode => aNode.slug === aLink.slug) === -1) {
|
||||||
aLink.shortSummary = getShortSummary(aLink.slug)
|
// aLink.shortSummary = getShortSummary(aLink.slug)
|
||||||
console.log(aLink.shortSummary)
|
console.log(aLink.shortSummary)
|
||||||
nodes.push(aLink)
|
nodes.push(aLink)
|
||||||
}
|
}
|
||||||
@ -166,7 +188,7 @@ export function getContentPaths() {
|
|||||||
//console.log("\n\nAll Posts are scanning")
|
//console.log("\n\nAll Posts are scanning")
|
||||||
// Get file names under /posts
|
// Get file names under /posts
|
||||||
const filePaths = Node.getFiles(postsDirectory).filter(f => !(f.endsWith("index") || f.endsWith("sidebar")))
|
const filePaths = Node.getFiles(postsDirectory).filter(f => !(f.endsWith("index") || f.endsWith("sidebar")))
|
||||||
return filePaths.map(f => Transformer.parseFileNameFromPath(f))
|
return filePaths.map(f => toSlug(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getDirectoryData() {
|
export function getDirectoryData() {
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
## About this site
|
|
||||||
Welcome to Obsidian's official help vault! This page contains a quick index to the things that you may be interested in.
|
|
||||||
|
|
||||||
See public hosted version: https://publish.obsidian.md/help
|
|
||||||
|
|
||||||
If you found mistakes or missing information, you can contribute to this site here: https://github.com/obsidianmd/obsidian-docs/
|
|
||||||
|
|
||||||
## Other languages
|
|
||||||
|
|
||||||
This help site is also available in other languages:
|
|
||||||
|
|
||||||
- [Italiano](https://publish.obsidian.md/help-it)
|
|
||||||
- [中文](https://publish.obsidian.md/help-zh)
|
|
||||||
- [日本語](https://publish.obsidian.md/help-ja)
|
|
||||||
- [Dansk](https://publish.obsidian.md/help-da)
|
|
||||||
- [Русский](https://publish.obsidian.md/help-ru)
|
|
||||||
- [Tiếng Việt](https://publish.obsidian.md/help-vi)
|
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
[[Credits|Our credits page]] lists all the amazing people who made Obsidian possible.
|
|
||||||
|
|
||||||
To read more about the makers, see the [about page](https://obsidian.md/about) on our official website.
|
|
||||||
|
|
||||||
## Obsidian
|
|
||||||
|
|
||||||
### About the app
|
|
||||||
|
|
||||||
- See [[Obsidian|our philosophy for the app]].
|
|
||||||
|
|
||||||
### Getting started
|
|
||||||
|
|
||||||
- Looking for some functionality? Try the [[command palette]], which contains all available actions you need to work with Obsidian. Just press `Ctrl/Cmd-P` and start typing.
|
|
||||||
- Learn our flavor of Markdown with [[Format your notes|how to format your notes]].
|
|
||||||
- Check out some tips on [[Create notes|creating new notes]].
|
|
||||||
- Check out some tips on [[Internal link|creating internal links]].
|
|
||||||
- Learn how to [[Embed files|embed other notes or attachments]].
|
|
||||||
- See the [[Use hotkeys|default keyboard shortcuts]].
|
|
||||||
|
|
||||||
### Official plugins
|
|
||||||
|
|
||||||
![[Core plugins#Current list of official plugins]]
|
|
||||||
|
|
||||||
### Advanced guides
|
|
||||||
|
|
||||||
- [[Working with tags]]
|
|
||||||
- [[Working with backlinks]]
|
|
||||||
- [[Working with multiple notes]]
|
|
||||||
- [[Pane layout]]
|
|
||||||
- [[Working with multiple vaults]]
|
|
||||||
- [[Working with multiple cursors]]
|
|
||||||
- [[Using obsidian URI]]
|
|
Loading…
Reference in New Issue
Block a user