initial layout
This commit is contained in:
parent
b311df018f
commit
470dd8176d
67
main.ts
67
main.ts
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
33
styles.css
33
styles.css
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue