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 { 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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
33
styles.css
33
styles.css
|
@ -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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue