mirror of
https://github.com/antokeinanen/obsidian-advanced-merger.git
synced 2026-07-22 07:40:24 +00:00
feat: add setting to include or exclude filenames form the merged document
This commit is contained in:
parent
18613da93e
commit
a7ab037ef5
8 changed files with 83 additions and 2538 deletions
|
|
@ -2,6 +2,12 @@
|
|||
|
||||
### Additions and Changes
|
||||
|
||||
- Added a setting to include or exclude filenames form the merged document
|
||||
|
||||
## obsidian-advanced-merger 1.6.0
|
||||
|
||||
### Additions and Changes
|
||||
|
||||
- Added functionality to automatically delete YAML properties
|
||||
|
||||
## obsidian-advanced-merger 1.5.0
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "advanced-merger",
|
||||
"name": "Advanced Merger",
|
||||
"version": "1.6.0",
|
||||
"version": "1.7.0",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Merge a folder of notes for easier export.",
|
||||
"author": "Anto Keinänen",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "advanced-merger",
|
||||
"name": "Advanced Merger",
|
||||
"version": "1.6.0",
|
||||
"version": "1.7.0",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Merge a folder of notes for easier export.",
|
||||
"author": "Anto Keinänen",
|
||||
|
|
|
|||
2507
package-lock.json
generated
2507
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "obsidian-advanced-merger",
|
||||
"version": "1.6.0",
|
||||
"version": "1.7.0",
|
||||
"author": {
|
||||
"name": "Anto Keinänen",
|
||||
"url": "https://github.com/antoKeinanen/"
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
"builtin-modules": "3.3.0",
|
||||
"esbuild": "0.17.3",
|
||||
"husky": "^8.0.0",
|
||||
"obsidian": "latest",
|
||||
"obsidian": "^1.8.7",
|
||||
"prettier": "^3.0.3",
|
||||
"pretty-quick": "^3.1.3",
|
||||
"tslib": "2.4.0",
|
||||
|
|
@ -41,5 +41,6 @@
|
|||
"build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
|
||||
"version": "node version-bump.mjs && git add manifest.json versions.json",
|
||||
"prepare": "husky install"
|
||||
}
|
||||
},
|
||||
"packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977"
|
||||
}
|
||||
|
|
|
|||
79
src/main.ts
79
src/main.ts
|
|
@ -110,10 +110,10 @@ export default class AdvancedMerge extends Plugin {
|
|||
}
|
||||
|
||||
/**
|
||||
* Merges input notes to single output file.
|
||||
* @param {Vault} vault - Current vault.
|
||||
* @param {Array<TAbstractFile>} entries - Files and folders, to be included.
|
||||
* @param {string} outputFileName - Output file name.
|
||||
* Merges input notes to a single output file.
|
||||
* @param vault - Current vault.
|
||||
* @param entries - Files and folders to be included.
|
||||
* @param outputFileName - Output file name.
|
||||
*/
|
||||
private async mergeNotes(
|
||||
vault: Vault,
|
||||
|
|
@ -123,41 +123,50 @@ export default class AdvancedMerge extends Plugin {
|
|||
const outputFile = await vault.create(outputFileName, "");
|
||||
|
||||
for (let index = 0; index < entries.length; index++) {
|
||||
const folderOrFile: TAbstractFile = entries[index];
|
||||
const sectionLevel = (folderOrFile.path.match(/\//g) || []).length;
|
||||
const entry = entries[index];
|
||||
const sectionLevel = (entry.path.match(/\//g) || []).length;
|
||||
const isLastEntry = index === entries.length - 1;
|
||||
let sectionContents = index === 0 ? "" : NEW_LINE_CHAR;
|
||||
|
||||
let sectionContents = `${index === 0 ? "" : NEW_LINE_CHAR}`;
|
||||
const lastEntry = index === entries.length - 1;
|
||||
if (entry instanceof TFile) {
|
||||
const fileContent = await vault.cachedRead(entry);
|
||||
const fileSectionName = entry.name.replace(/\.md$/, "");
|
||||
|
||||
if (this.settings.includeFilenames) {
|
||||
sectionContents += `${SECTION_CHAR.repeat(sectionLevel)} ${fileSectionName}`;
|
||||
sectionContents += DOUBLE_NEW_LINE_CHAR;
|
||||
}
|
||||
|
||||
sectionContents += fileContent;
|
||||
|
||||
if (!isLastEntry) {
|
||||
sectionContents += DOUBLE_NEW_LINE_CHAR;
|
||||
}
|
||||
|
||||
if (folderOrFile instanceof TFile) {
|
||||
sectionContents += await vault.cachedRead(folderOrFile);
|
||||
const fileSectionName = folderOrFile.name.replace(/\.md$/, "");
|
||||
// For the first file in a row, we shouldnt add new line
|
||||
sectionContents = `${SECTION_CHAR.repeat(
|
||||
sectionLevel,
|
||||
)} ${fileSectionName}${DOUBLE_NEW_LINE_CHAR}${sectionContents}${
|
||||
lastEntry ? "" : DOUBLE_NEW_LINE_CHAR
|
||||
}`;
|
||||
console.info(
|
||||
`Adding file "${folderOrFile.name}" as section "${fileSectionName}" into file "${outputFileName}"..`,
|
||||
`Adding file "${entry.name}" as section "${fileSectionName}" into file "${outputFileName}"..`,
|
||||
);
|
||||
} else if (folderOrFile instanceof TFolder) {
|
||||
sectionContents += `${SECTION_CHAR.repeat(sectionLevel)} ${
|
||||
folderOrFile.name
|
||||
}${DOUBLE_NEW_LINE_CHAR}`;
|
||||
} else if (entry instanceof TFolder) {
|
||||
if (this.settings.includeFilenames) {
|
||||
sectionContents += SECTION_CHAR.repeat(sectionLevel);
|
||||
sectionContents += entry.name;
|
||||
}
|
||||
|
||||
sectionContents += DOUBLE_NEW_LINE_CHAR;
|
||||
|
||||
console.info(
|
||||
`Adding folder "${folderOrFile.name}" as section "${sectionContents}" into file "${outputFileName}"..`,
|
||||
`Adding folder "${entry.name}" as section "${entry.name}" into file "${outputFileName}"..`,
|
||||
);
|
||||
}
|
||||
|
||||
if (this.settings.removeYamlProperties) {
|
||||
sectionContents = sectionContents.replace(
|
||||
/---\n(\w*:\s.*\n)*---/,
|
||||
/^---\n[\s\S]*?\n---\n?/m,
|
||||
"",
|
||||
);
|
||||
}
|
||||
|
||||
vault.append(outputFile, sectionContents);
|
||||
await vault.append(outputFile, sectionContents);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -309,6 +318,26 @@ class AdvancedMergeSettingTab extends PluginSettingTab {
|
|||
}),
|
||||
);
|
||||
|
||||
// Add "remove yaml properties" toggle in settings
|
||||
new Setting(containerEl)
|
||||
.setName(this.plugin.translation.get().SettingIncludeFilenames)
|
||||
.setDesc(
|
||||
this.plugin.translation.get()
|
||||
.SettingIncludeFilenamesDescription,
|
||||
)
|
||||
.addToggle((toggle) =>
|
||||
toggle
|
||||
.setValue(this.plugin.settings.includeFilenames)
|
||||
.onChange(async (value) => {
|
||||
this.plugin.settings.includeFilenames = value;
|
||||
this.plugin.settings.includeFilenames =
|
||||
value === false
|
||||
? value
|
||||
: this.plugin.settings.includeFilenames;
|
||||
await this.plugin.saveSettings();
|
||||
}),
|
||||
);
|
||||
|
||||
this.showIncludeFolderAsSectionSetting(containerEl);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ export interface AdvancedMergePluginSettings {
|
|||
includeNestedFolders: boolean;
|
||||
includeFoldersAsSections: boolean;
|
||||
removeYamlProperties: boolean;
|
||||
includeFilenames: boolean;
|
||||
}
|
||||
|
||||
export const DEFAULT_SETTINGS: AdvancedMergePluginSettings = {
|
||||
|
|
@ -14,4 +15,5 @@ export const DEFAULT_SETTINGS: AdvancedMergePluginSettings = {
|
|||
includeNestedFolders: false,
|
||||
includeFoldersAsSections: false,
|
||||
removeYamlProperties: false,
|
||||
includeFilenames: true,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ export interface Translation {
|
|||
SettingIncludeFoldersAsSectionsDescription: string;
|
||||
SettingRemoveYamlProperties: string;
|
||||
SettingRemoveYamlPropertiesDescription: string;
|
||||
SettingIncludeFilenames: string;
|
||||
SettingIncludeFilenamesDescription: string;
|
||||
Yes: string;
|
||||
No: string;
|
||||
}
|
||||
|
|
@ -43,6 +45,8 @@ export const TRANSLATIONS: Record<string, Translation> = {
|
|||
SettingRemoveYamlProperties: "YAML-Eigenschaften entfernen",
|
||||
SettingRemoveYamlPropertiesDescription:
|
||||
"Entfernt YAML-Eigenschaften vom Anfang der Datei während des Zusammenführens. WARNUNG: Dies könnte unbeabsichtigt nicht-YAML-Teile entfernen.",
|
||||
SettingIncludeFilenames: "Dateinamen einbeziehen",
|
||||
SettingIncludeFilenamesDescription: "Wenn aktiviert, werden die Dateinamen in die Ausgabedatei aufgenommen.",
|
||||
},
|
||||
en: {
|
||||
MergeFolder: "Merge folder",
|
||||
|
|
@ -66,6 +70,8 @@ export const TRANSLATIONS: Record<string, Translation> = {
|
|||
SettingRemoveYamlProperties: "Remove YAML properties",
|
||||
SettingRemoveYamlPropertiesDescription:
|
||||
"Removes YAML properties from the top of the file during the merge. WARNING: This might unintentionally remove non yaml parts.",
|
||||
SettingIncludeFilenames: "Include filenames",
|
||||
SettingIncludeFilenamesDescription: "If enabled, filenames will be included in the output file.",
|
||||
},
|
||||
fi: {
|
||||
MergeFolder: "Yhdistä kansio",
|
||||
|
|
@ -89,6 +95,8 @@ export const TRANSLATIONS: Record<string, Translation> = {
|
|||
SettingRemoveYamlProperties: "Poista YAML-osio",
|
||||
SettingRemoveYamlPropertiesDescription:
|
||||
"Poistaa YAML-osio tiedoston yläosasta yhdistämisen aikana. VAROITUS: Tämä voi vahingossa poistaa ei-YAML-osia.",
|
||||
SettingIncludeFilenames: "Sisällytä tiedostonimet",
|
||||
SettingIncludeFilenamesDescription: "Jos käytössä, tiedostonimet sisällytetään tulostiedostoon.",
|
||||
},
|
||||
fr: {
|
||||
MergeFolder: "Fusionner le dossier",
|
||||
|
|
@ -113,6 +121,8 @@ export const TRANSLATIONS: Record<string, Translation> = {
|
|||
SettingRemoveYamlProperties: "Supprimer les propriétés YAML",
|
||||
SettingRemoveYamlPropertiesDescription:
|
||||
"Supprime les propriétés YAML du haut du fichier lors de la fusion. ATTENTION : Cela pourrait supprimer accidentellement des parties non YAML.",
|
||||
SettingIncludeFilenames: "Inclure les noms de fichiers",
|
||||
SettingIncludeFilenamesDescription: "Si activé, les noms de fichiers seront inclus dans le fichier de sortie.",
|
||||
},
|
||||
ru: {
|
||||
MergeFolder: "Объединить папку",
|
||||
|
|
@ -136,6 +146,8 @@ export const TRANSLATIONS: Record<string, Translation> = {
|
|||
SettingRemoveYamlProperties: "Удалить свойства YAML",
|
||||
SettingRemoveYamlPropertiesDescription:
|
||||
"Удаляет свойства YAML из верхней части файла во время объединения. ВНИМАНИЕ: Это может случайно удалить не-YAML части.",
|
||||
SettingIncludeFilenames: "Включать имена файлов",
|
||||
SettingIncludeFilenamesDescription: "Если включено, имена файлов будут включены в выходной файл.",
|
||||
},
|
||||
ua: {
|
||||
MergeFolder: "Об'єднати папку",
|
||||
|
|
@ -159,6 +171,8 @@ export const TRANSLATIONS: Record<string, Translation> = {
|
|||
SettingRemoveYamlProperties: "Видалити властивості YAML",
|
||||
SettingRemoveYamlPropertiesDescription:
|
||||
"Видаляє властивості YAML із верхньої частини файлу під час об'єднання. УВАГА: Це може випадково видалити не-YAML частини.",
|
||||
SettingIncludeFilenames: "Включити імена файлів",
|
||||
SettingIncludeFilenamesDescription: "Якщо ввімкнено, імена файлів будуть включені у вихідний файл.",
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -170,7 +184,7 @@ export class AdvancedMergeTranslation {
|
|||
* @constructor
|
||||
*/
|
||||
constructor() {
|
||||
this.language = !Object.keys(TRANSLATIONS).contains(navigator.language)
|
||||
this.language = !Object.keys(TRANSLATIONS).includes(navigator.language)
|
||||
? DEFAULT_LANGUAGE
|
||||
: navigator.language;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue