Skip to content

Commit

Permalink
feat(folder-icon): add command and file menu option to set folder icon
Browse files Browse the repository at this point in the history
  • Loading branch information
aidenlx committed Mar 1, 2022
1 parent cebe5b5 commit 03d4ec1
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 8 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-simple-import-sort": "^7.0.0",
"fast-deep-equal": "^3.1.3",
"gray-matter": "^4.0.3",
"monkey-around": "^2.2.0",
"obsidian": "github:obsidianmd/obsidian-api",
"path-browserify": "^1.0.1",
Expand Down
8 changes: 2 additions & 6 deletions src/fe-handler/folder-mark.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import "./folder-icon.less";

import { getApi } from "@aidenlx/obsidian-icon-shortcodes";
import {
AFItem,
CachedMetadata,
Expand Down Expand Up @@ -159,12 +158,9 @@ export default class FolderMark extends FEHandler_Base {
].forEach(this.plugin.registerEvent.bind(this.plugin));
}
foldersWithIcon = new Set<string>();
private get shouldSetIcon(): boolean {
return this.plugin.settings.folderIcon && !!getApi(this.plugin);
}
private _updateIcon(path: string, revert: boolean, item: afItemMark) {
if (!this.shouldSetIcon) return;
const api = getApi(this.plugin) as NonNullable<ReturnType<typeof getApi>>;
const api = this.plugin.IconSCAPI;
if (!api) return;

let folderNotePath: string | undefined,
metadata: CachedMetadata | undefined;
Expand Down
13 changes: 11 additions & 2 deletions src/fn-main.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import "./main.less";

import { FolderNoteAPI, getApi } from "@aidenlx/folder-note-core";
import { FolderNoteAPI, getApi as getFNCApi } from "@aidenlx/folder-note-core";
import { Notice, Plugin } from "obsidian";

import { monkeyPatch } from "./fe-patch";
Expand All @@ -12,6 +12,8 @@ import {
MobileNoClickMark,
noHideNoteMark,
} from "./settings";
import registerSetFolderIconCmd from "./modules/set-folder-icon";
import { getApi as getISCApi } from "@aidenlx/obsidian-icon-shortcodes";

const foldervNotifiedKey = "foldervNotified";

Expand All @@ -20,7 +22,7 @@ export default class ALxFolderNote extends Plugin {

get CoreApi(): FolderNoteAPI {
let message;
const api = getApi(this);
const api = getFNCApi(this);
if (api) {
return api;
} else {
Expand All @@ -32,6 +34,12 @@ export default class ALxFolderNote extends Plugin {
throw new Error(message);
}
}
get IconSCAPI() {
if (this.settings.folderIcon) {
return getISCApi(this);
}
return null;
}

noticeFoldervChange() {
if (
Expand Down Expand Up @@ -88,6 +96,7 @@ export default class ALxFolderNote extends Plugin {
"Open Settings Tab of ALx Folder Note for details",
);
this.addSettingTab(tab);
registerSetFolderIconCmd(this);

this.app.workspace.onLayoutReady(this.initialize.bind(this));
this.noticeFoldervChange();
Expand Down
55 changes: 55 additions & 0 deletions src/modules/set-folder-icon.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import type { IconInfo } from "@aidenlx/obsidian-icon-shortcodes/lib/icon-packs/types";
import matter from "gray-matter";
import { MarkdownView, TFile, TFolder } from "obsidian";

import type ALxFolderNote from "../fn-main";

const registerSetFolderIconCmd = (plugin: ALxFolderNote) => {
const { workspace, vault } = plugin.app;
const setIconField = async (icon: IconInfo | null, file: TFile) =>
icon &&
vault.modify(
file,
(matter(await vault.read(file)).stringify as any)(
{ icon: icon.id },
{ flowLevel: 3, indent: 4 },
),
);
plugin.addCommand({
id: "set-folder-icon",
name: "Set Folder Icon",
checkCallback: (checking) => {
const iscAPI = plugin.IconSCAPI;
if (!iscAPI) return false;
const mdView = workspace.getActiveViewOfType(MarkdownView);
if (!mdView) return false;
const folder = plugin.CoreApi.getFolderFromNote(mdView.file);
if (!folder) return false;
if (checking) return true;
iscAPI.getIconFromUser().then((icon) => setIconField(icon, mdView.file));
},
});
plugin.registerEvent(
workspace.on("file-menu", (menu, af, src) => {
const iscAPI = plugin.IconSCAPI;
if (!iscAPI) return;
let note;
if (
(af instanceof TFolder && (note = plugin.CoreApi.getFolderNote(af))) ||
(af instanceof TFile &&
((note = af), plugin.CoreApi.getFolderFromNote(af)))
) {
const folderNote = note;
menu.addItem((item) =>
item
.setIcon("image-glyph")
.setTitle("Set Folder Icon")
.onClick(async () =>
setIconField(await iscAPI.getIconFromUser(), folderNote),
),
);
}
}),
);
};
export default registerSetFolderIconCmd;
91 changes: 91 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ __metadata:
eslint-plugin-prettier: ^4.0.0
eslint-plugin-simple-import-sort: ^7.0.0
fast-deep-equal: ^3.1.3
gray-matter: ^4.0.3
monkey-around: ^2.2.0
obsidian: "github:obsidianmd/obsidian-api"
path-browserify: ^1.0.1
Expand Down Expand Up @@ -957,6 +958,15 @@ __metadata:
languageName: node
linkType: hard

"argparse@npm:^1.0.7":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
dependencies:
sprintf-js: ~1.0.2
checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945
languageName: node
linkType: hard

"argparse@npm:^2.0.1":
version: 2.0.1
resolution: "argparse@npm:2.0.1::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fargparse%2F-%2Fargparse-2.0.1.tgz"
Expand Down Expand Up @@ -2512,6 +2522,16 @@ __metadata:
languageName: node
linkType: hard

"esprima@npm:^4.0.0":
version: 4.0.1
resolution: "esprima@npm:4.0.1"
bin:
esparse: ./bin/esparse.js
esvalidate: ./bin/esvalidate.js
checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628
languageName: node
linkType: hard

"esquery@npm:^1.4.0":
version: 1.4.0
resolution: "esquery@npm:1.4.0::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fesquery%2F-%2Fesquery-1.4.0.tgz"
Expand Down Expand Up @@ -2594,6 +2614,15 @@ __metadata:
languageName: node
linkType: hard

"extend-shallow@npm:^2.0.1":
version: 2.0.1
resolution: "extend-shallow@npm:2.0.1"
dependencies:
is-extendable: ^0.1.0
checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8
languageName: node
linkType: hard

"external-editor@npm:^3.0.3":
version: 3.1.0
resolution: "external-editor@npm:3.1.0::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fexternal-editor%2F-%2Fexternal-editor-3.1.0.tgz"
Expand Down Expand Up @@ -3115,6 +3144,18 @@ __metadata:
languageName: node
linkType: hard

"gray-matter@npm:^4.0.3":
version: 4.0.3
resolution: "gray-matter@npm:4.0.3"
dependencies:
js-yaml: ^3.13.1
kind-of: ^6.0.2
section-matter: ^1.0.0
strip-bom-string: ^1.0.0
checksum: 37717bd424344487d655392251ce8d8878a1275ee087003e61208fba3bfd59cbb73a85b2159abf742ae95e23db04964813fdc33ae18b074208428b2528205222
languageName: node
linkType: hard

"handlebars@npm:^4.7.7":
version: 4.7.7
resolution: "handlebars@npm:4.7.7::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fhandlebars%2F-%2Fhandlebars-4.7.7.tgz"
Expand Down Expand Up @@ -3511,6 +3552,13 @@ __metadata:
languageName: node
linkType: hard

"is-extendable@npm:^0.1.0":
version: 0.1.1
resolution: "is-extendable@npm:0.1.1"
checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672
languageName: node
linkType: hard

"is-extglob@npm:^2.1.1":
version: 2.1.1
resolution: "is-extglob@npm:2.1.1::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fis-extglob%2F-%2Fis-extglob-2.1.1.tgz"
Expand Down Expand Up @@ -3757,6 +3805,18 @@ __metadata:
languageName: node
linkType: hard

"js-yaml@npm:^3.13.1":
version: 3.14.1
resolution: "js-yaml@npm:3.14.1"
dependencies:
argparse: ^1.0.7
esprima: ^4.0.0
bin:
js-yaml: bin/js-yaml.js
checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c
languageName: node
linkType: hard

"js-yaml@npm:^4.1.0":
version: 4.1.0
resolution: "js-yaml@npm:4.1.0::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fjs-yaml%2F-%2Fjs-yaml-4.1.0.tgz"
Expand Down Expand Up @@ -3872,6 +3932,13 @@ __metadata:
languageName: node
linkType: hard

"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2":
version: 6.0.3
resolution: "kind-of@npm:6.0.3"
checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b
languageName: node
linkType: hard

"kind-of@npm:^6.0.3":
version: 6.0.3
resolution: "kind-of@npm:6.0.3::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fkind-of%2F-%2Fkind-of-6.0.3.tgz"
Expand Down Expand Up @@ -5284,6 +5351,16 @@ __metadata:
languageName: node
linkType: hard

"section-matter@npm:^1.0.0":
version: 1.0.0
resolution: "section-matter@npm:1.0.0"
dependencies:
extend-shallow: ^2.0.1
kind-of: ^6.0.0
checksum: 3cc4131705493b2955729b075dcf562359bba66183debb0332752dc9cad35616f6da7a23e42b6cab45cd2e4bb5cda113e9e84c8f05aee77adb6b0289a0229101
languageName: node
linkType: hard

"semver-diff@npm:^3.1.1":
version: 3.1.1
resolution: "semver-diff@npm:3.1.1::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fsemver-diff%2F-%2Fsemver-diff-3.1.1.tgz"
Expand Down Expand Up @@ -5442,6 +5519,13 @@ __metadata:
languageName: node
linkType: hard

"sprintf-js@npm:~1.0.2":
version: 1.0.3
resolution: "sprintf-js@npm:1.0.3"
checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3
languageName: node
linkType: hard

"strict-uri-encode@npm:^2.0.0":
version: 2.0.0
resolution: "strict-uri-encode@npm:2.0.0::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fstrict-uri-encode%2F-%2Fstrict-uri-encode-2.0.0.tgz"
Expand Down Expand Up @@ -5535,6 +5619,13 @@ __metadata:
languageName: node
linkType: hard

"strip-bom-string@npm:^1.0.0":
version: 1.0.0
resolution: "strip-bom-string@npm:1.0.0"
checksum: 5635a3656d8512a2c194d6c8d5dee7ef0dde6802f7be9413b91e201981ad4132506656d9cf14137f019fd50f0269390d91c7f6a2601b1bee039a4859cfce4934
languageName: node
linkType: hard

"strip-bom@npm:4.0.0":
version: 4.0.0
resolution: "strip-bom@npm:4.0.0::__archiveUrl=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-bom%2F-%2Fstrip-bom-4.0.0.tgz"
Expand Down

0 comments on commit 03d4ec1

Please sign in to comment.