initial layout

This commit is contained in:
Oleh Lustenko 2022-09-16 09:28:09 +03:00
parent b311df018f
commit 470dd8176d
3 changed files with 115 additions and 1 deletions

67
main.ts
View File

@ -13,6 +13,7 @@ import { renameFilesInObsidian } from './src/services/file.service';
import { createPreviewElement } from './src/components/PreviewElement';
import {
getObsidianFilesByFolderName,
getObsidianFilesByRegExp,
getObsidianFilesWithTagName,
} from './src/services/obsidian.service';
import { renderPreviewFiles } from './src/components/RenderPreviewFiles';
@ -23,7 +24,8 @@ interface BulkRenamePluginSettings {
existingSymbol: string;
replacePattern: string;
tags: string[];
viewType: 'tags' | 'folder';
userRegExp: string;
viewType: 'tags' | 'folder' | 'regexp';
}
const DEFAULT_SETTINGS: BulkRenamePluginSettings = {
@ -31,6 +33,7 @@ const DEFAULT_SETTINGS: BulkRenamePluginSettings = {
fileNames: [],
existingSymbol: '',
replacePattern: '',
userRegExp: '',
tags: [],
viewType: 'folder',
};
@ -38,10 +41,15 @@ const DEFAULT_SETTINGS: BulkRenamePluginSettings = {
const isViewTypeFolder = ({ settings }: BulkRenamePlugin) => {
return settings.viewType === 'folder';
};
const isViewTypeTags = ({ settings }: BulkRenamePlugin) => {
return settings.viewType === 'tags';
};
const isViewTypeRegExp = ({ settings }: BulkRenamePlugin) => {
return settings.viewType === 'regexp';
};
class BulkRenamePlugin extends Plugin {
settings: BulkRenamePluginSettings;
@ -97,6 +105,7 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
this.renderTabs();
this.renderFileLocation();
this.renderTagNames();
this.renderRegExpInput();
this.renderReplaceSymbol();
this.renderFilesAndPreview();
this.renderRenameFiles();
@ -127,6 +136,17 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
await this.plugin.saveSettings();
this.display();
});
})
.addButton((button) => {
button.setButtonText('Search by RegExp');
if (isViewTypeRegExp(this.plugin)) {
button.setCta();
}
button.onClick(async () => {
this.plugin.settings.viewType = 'regexp';
await this.plugin.saveSettings();
this.display();
});
});
}
@ -185,6 +205,38 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
});
}
renderRegExpInput() {
if (!isViewTypeRegExp(this.plugin)) {
return;
}
new Setting(this.containerEl)
.setName('RegExp')
.setDesc('all files by titles will be found')
.addSearch((cb) => {
// @ts-ignore
cb.inputEl.addEventListener('keydown', (event) => {
if (event.key !== 'Enter') {
return;
}
const target = event.target as HTMLInputElement;
this.plugin.settings.userRegExp = target.value;
this.plugin.saveSettings();
});
cb.setPlaceholder('Example: #tag, #tag2')
.setValue(this.plugin.settings.userRegExp)
.onChange((newFolder) => {
this.plugin.settings.userRegExp = newFolder;
this.plugin.saveSettings();
this.getFilesByRegExp();
});
// @ts-ignore
cb.containerEl.addClass('bulk_regexp');
cb.inputEl.addClass('bulk_input');
cb.inputEl.onblur = this.reRenderPreview;
});
}
renderReplaceSymbol() {
const { settings } = this.plugin;
@ -296,6 +348,12 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
this.getFilesByTags();
return;
}
if (isViewTypeRegExp(this.plugin)) {
this.getFilesByRegExp();
return;
}
this.getFilesByFolder();
}
@ -312,6 +370,13 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
this.plugin,
);
}
getFilesByRegExp() {
this.plugin.settings.fileNames = getObsidianFilesByRegExp(
this.app,
this.plugin,
);
}
}
export default BulkRenamePlugin;

View File

@ -17,6 +17,22 @@ export const getObsidianFilesByFolderName = (
return filesSortedByName;
};
export const getObsidianFilesByRegExp = (
app: App,
plugin: BulkRenamePlugin,
) => {
const { userRegExp } = plugin.settings;
const abstractFiles = app.vault.getAllLoadedFiles();
const files = abstractFiles.filter(
(file) => file instanceof TFile && file.parent.name.includes(userRegExp),
) as TFile[];
const filesSortedByName = sortFilesByName(files);
return filesSortedByName;
};
export const getObsidianFilesWithTagName = (
app: App,
plugin: BulkRenamePlugin,

View File

@ -23,3 +23,36 @@
.bulk_preview_label {
margin-right: 15px;
}
.bulk_regexp {
width: 100%;
}
.bulk_regexp > input {
color: green;
padding: 0 28px 0 14px;
font-size: 20px;
font-weight: 700;
}
.bulk_regexp:before {
content: '/';
top: 2px;
left: -15px;
}
.bulk_regexp:after {
content: '/';
bottom: 5px;
right: -15px;
}
.bulk_regexp:before,
.bulk_regexp:after {
color: #000080;
font-size: 30px;
/*background-color: #cccccc;*/
display: block;
/*text-align: center;*/
position: absolute;
}