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 { createPreviewElement } from './src/components/PreviewElement';
import { import {
getObsidianFilesByFolderName, getObsidianFilesByFolderName,
getObsidianFilesByRegExp,
getObsidianFilesWithTagName, getObsidianFilesWithTagName,
} from './src/services/obsidian.service'; } from './src/services/obsidian.service';
import { renderPreviewFiles } from './src/components/RenderPreviewFiles'; import { renderPreviewFiles } from './src/components/RenderPreviewFiles';
@ -23,7 +24,8 @@ interface BulkRenamePluginSettings {
existingSymbol: string; existingSymbol: string;
replacePattern: string; replacePattern: string;
tags: string[]; tags: string[];
viewType: 'tags' | 'folder'; userRegExp: string;
viewType: 'tags' | 'folder' | 'regexp';
} }
const DEFAULT_SETTINGS: BulkRenamePluginSettings = { const DEFAULT_SETTINGS: BulkRenamePluginSettings = {
@ -31,6 +33,7 @@ const DEFAULT_SETTINGS: BulkRenamePluginSettings = {
fileNames: [], fileNames: [],
existingSymbol: '', existingSymbol: '',
replacePattern: '', replacePattern: '',
userRegExp: '',
tags: [], tags: [],
viewType: 'folder', viewType: 'folder',
}; };
@ -38,10 +41,15 @@ const DEFAULT_SETTINGS: BulkRenamePluginSettings = {
const isViewTypeFolder = ({ settings }: BulkRenamePlugin) => { const isViewTypeFolder = ({ settings }: BulkRenamePlugin) => {
return settings.viewType === 'folder'; return settings.viewType === 'folder';
}; };
const isViewTypeTags = ({ settings }: BulkRenamePlugin) => { const isViewTypeTags = ({ settings }: BulkRenamePlugin) => {
return settings.viewType === 'tags'; return settings.viewType === 'tags';
}; };
const isViewTypeRegExp = ({ settings }: BulkRenamePlugin) => {
return settings.viewType === 'regexp';
};
class BulkRenamePlugin extends Plugin { class BulkRenamePlugin extends Plugin {
settings: BulkRenamePluginSettings; settings: BulkRenamePluginSettings;
@ -97,6 +105,7 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
this.renderTabs(); this.renderTabs();
this.renderFileLocation(); this.renderFileLocation();
this.renderTagNames(); this.renderTagNames();
this.renderRegExpInput();
this.renderReplaceSymbol(); this.renderReplaceSymbol();
this.renderFilesAndPreview(); this.renderFilesAndPreview();
this.renderRenameFiles(); this.renderRenameFiles();
@ -127,6 +136,17 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
await this.plugin.saveSettings(); await this.plugin.saveSettings();
this.display(); 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() { renderReplaceSymbol() {
const { settings } = this.plugin; const { settings } = this.plugin;
@ -296,6 +348,12 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
this.getFilesByTags(); this.getFilesByTags();
return; return;
} }
if (isViewTypeRegExp(this.plugin)) {
this.getFilesByRegExp();
return;
}
this.getFilesByFolder(); this.getFilesByFolder();
} }
@ -312,6 +370,13 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
this.plugin, this.plugin,
); );
} }
getFilesByRegExp() {
this.plugin.settings.fileNames = getObsidianFilesByRegExp(
this.app,
this.plugin,
);
}
} }
export default BulkRenamePlugin; export default BulkRenamePlugin;

View File

@ -17,6 +17,22 @@ export const getObsidianFilesByFolderName = (
return filesSortedByName; 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 = ( export const getObsidianFilesWithTagName = (
app: App, app: App,
plugin: BulkRenamePlugin, plugin: BulkRenamePlugin,

View File

@ -23,3 +23,36 @@
.bulk_preview_label { .bulk_preview_label {
margin-right: 15px; 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;
}