mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 17:56:25 +00:00
95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
import attachmentManagement from './attachmentManagement'
|
|
import yaml from 'js-yaml'
|
|
import path from 'path'
|
|
|
|
const delimiterRegExp = /^\-{3}/
|
|
|
|
/**
|
|
* ```
|
|
* {
|
|
* storagePath,
|
|
* export
|
|
* }
|
|
* ```
|
|
*/
|
|
export default function formatMarkdown (props) {
|
|
return function (note, targetPath, exportTasks) {
|
|
let result = note.content
|
|
|
|
if (props.storagePath && note.key) {
|
|
const attachmentsAbsolutePaths = attachmentManagement.getAbsolutePathsOfAttachmentsInContent(result, props.storagePath)
|
|
|
|
const destinationFolder = props.export.prefixAttachmentFolder ? `${path.parse(targetPath).name} - ${attachmentManagement.DESTINATION_FOLDER}` : attachmentManagement.DESTINATION_FOLDER
|
|
|
|
attachmentsAbsolutePaths.forEach(attachment => {
|
|
exportTasks.push({
|
|
src: attachment,
|
|
dst: destinationFolder
|
|
})
|
|
})
|
|
|
|
result = attachmentManagement.replaceStorageReferences(result, note.key, destinationFolder)
|
|
}
|
|
|
|
if (props.export.metadata === 'MERGE_HEADER') {
|
|
const metadata = getFrontMatter(result)
|
|
|
|
const values = Object.assign({}, note)
|
|
delete values.content
|
|
delete values.isTrashed
|
|
|
|
for (const key in values) {
|
|
metadata[key] = values[key]
|
|
}
|
|
|
|
result = replaceFrontMatter(result, metadata)
|
|
} else if (props.export.metadata === 'MERGE_VARIABLE') {
|
|
const metadata = getFrontMatter(result)
|
|
|
|
const values = Object.assign({}, note)
|
|
delete values.content
|
|
delete values.isTrashed
|
|
|
|
if (props.export.variable) {
|
|
metadata[props.export.variable] = values
|
|
} else {
|
|
for (const key in values) {
|
|
metadata[key] = values[key]
|
|
}
|
|
}
|
|
|
|
result = replaceFrontMatter(result, metadata)
|
|
}
|
|
|
|
return result
|
|
}
|
|
}
|
|
|
|
function getFrontMatter (markdown) {
|
|
const lines = markdown.split('\n')
|
|
|
|
if (delimiterRegExp.test(lines[0])) {
|
|
let line = 0
|
|
while (++line < lines.length && delimiterRegExp.test(lines[line])) {
|
|
}
|
|
|
|
return yaml.load(lines.slice(1, line).join('\n')) || {}
|
|
} else {
|
|
return {}
|
|
}
|
|
}
|
|
|
|
function replaceFrontMatter (markdown, metadata) {
|
|
const lines = markdown.split('\n')
|
|
|
|
if (lines[0] === '---') {
|
|
let line = 0
|
|
while (++line < lines.length && lines[line] !== '---') {
|
|
}
|
|
|
|
return `---\n${yaml.dump(metadata)}---\n${lines.slice(line + 1).join('\n')}`
|
|
} else {
|
|
return `---\n${yaml.dump(metadata)}---\n\n${markdown}`
|
|
}
|
|
}
|