diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 83b17c9..e1e5bd4 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -9,5 +9,6 @@ "obsidian-mind-map", "obsidian-kanban", "homepage", - "file-tree-alternative" + "file-tree-alternative", + "favorite-note" ] \ No newline at end of file diff --git a/.obsidian/plugins/favorite-note/data.json b/.obsidian/plugins/favorite-note/data.json new file mode 100644 index 0000000..673438e --- /dev/null +++ b/.obsidian/plugins/favorite-note/data.json @@ -0,0 +1,5 @@ +{ + "icon": "star", + "filled": true, + "favorites": {} +} \ No newline at end of file diff --git a/.obsidian/plugins/favorite-note/main.js b/.obsidian/plugins/favorite-note/main.js new file mode 100644 index 0000000..586890e --- /dev/null +++ b/.obsidian/plugins/favorite-note/main.js @@ -0,0 +1,536 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => FavoritePlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian6 = require("obsidian"); + +// src/lib/utils.ts +var import_obsidian = require("obsidian"); +function createFavoriteButton(isFavorite = false, icon = "star", fillIcon = false) { + const trailingButton = document.createElement("span"); + trailingButton.classList.add("fav-btn"); + if (isFavorite) { + trailingButton.classList.add("is-favorite"); + if (fillIcon) { + trailingButton.classList.add("fav-icon-filled"); + } + } else { + trailingButton.classList.remove("is-favorite"); + trailingButton.classList.remove("fav-icon-filled"); + } + (0, import_obsidian.setIcon)(trailingButton, icon); + return trailingButton; +} + +// src/constants.ts +var DEFAULT_SETTINGS = { + icon: "star", + filled: false, + favorites: /* @__PURE__ */ new Set() +}; +var SETTINGS_ICON_BTN_ID = "fv-select-icon-btn"; + +// src/variants/BasePlugin.ts +var BasePluginContract = class { +}; +var BasePlugin = class extends BasePluginContract { + constructor(plugin, app) { + super(); + this.isEnabled = false; + this.plugin = plugin; + this.app = app; + this.init(); + } + async init() { + await this.loadSettings(); + } + async loadSettings() { + this.settings = Object.assign( + {}, + DEFAULT_SETTINGS, + await this.plugin.loadData() + ); + this.favorites = new Set(Object.values(this.settings.favorites)); + } + async saveSettings() { + await this.plugin.saveData({ + ...this.settings, + favorites: Object.assign({}, Array.from(this.favorites)) + }); + } + isFavorite(filePath) { + return this.favorites.has(filePath); + } + removeFavorite(filePath) { + this.favorites.delete(filePath); + this.saveSettings(); + } + onFileDelete(file) { + this.removeFavorite(file.path); + } + toggleFavorite(filePath) { + if (this.isFavorite(filePath)) { + this.favorites.delete(filePath); + } else { + this.favorites.add(filePath); + } + this.saveSettings(); + } +}; + +// src/variants/DesktopPlugin.ts +var import_obsidian4 = require("obsidian"); + +// src/tabs/settings-tab.ts +var import_obsidian3 = require("obsidian"); + +// src/modals/choose-icon-modal.ts +var import_obsidian2 = require("obsidian"); +var ChooseFromIconList = class extends import_obsidian2.FuzzySuggestModal { + constructor(plugin, issub = false) { + super(plugin.app); + this.plugin = plugin; + this.issub = issub; + this.setPlaceholder("Choose an icon"); + } + capitalJoin(string) { + const icon = string.split(" "); + return icon.map((icon2) => { + return icon2[0].toUpperCase() + icon2.substring(1); + }).join(" "); + } + getItems() { + return (0, import_obsidian2.getIconIds)(); + } + getItemText(item) { + return this.capitalJoin( + item.replace("feather-", "").replace("remix-", "").replace("bx-", "").replace(/([A-Z])/g, " $1").trim().replace(/-/gi, " ") + ); + } + renderSuggestion(icon, iconItem) { + const span = createSpan({ cls: "fv-icon-item" }); + iconItem.appendChild(span); + (0, import_obsidian2.setIcon)(span, icon.item); + super.renderSuggestion(icon, iconItem); + } + async onChooseItem(item) { + this.plugin.variant.settings.icon = item; + (0, import_obsidian2.setIcon)( + document.querySelector( + `#${SETTINGS_ICON_BTN_ID}` + ), + item + ); + await this.plugin.variant.saveSettings(); + this.plugin.variant.reload(); + setTimeout(() => { + dispatchEvent(new Event("print-greeting-to-console")); + }, 100); + } +}; + +// src/tabs/settings-tab.ts +var FavoritePluginSettingsTab = class extends import_obsidian3.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + new import_obsidian3.Setting(containerEl).setName("Favorite Icon").setDesc("Choose your favorite icon").addButton((el) => { + el.setIcon(this.plugin.variant.settings.icon); + el.onClick(async () => { + new ChooseFromIconList(this.plugin, false).open(); + }); + this.plugin.variant.saveSettings(); + }).controlEl.children[0].setAttr("id", SETTINGS_ICON_BTN_ID); + new import_obsidian3.Setting(containerEl).setName("Fill Icon").setDesc("If you want to fill the icon or not").addToggle((el) => { + el.setValue(this.plugin.variant.settings.filled); + el.onChange(async (value) => { + this.plugin.variant.settings.filled = value; + this.plugin.variant.saveSettings(); + this.plugin.variant.reload(); + }); + }); + const donationDiv = containerEl.createEl("div", { + cls: "donate-section" + }); + const donateText = createEl("p", { + text: "If you like this Plugin and are considering donating to support continued development, use the button below!" + }); + donationDiv.appendChild(donateText); + donationDiv.appendChild( + this.createDonateButton("https://www.buymeacoffee.com/mahmudz") + ); + } + createDonateButton(link) { + const a = createEl("a"); + a.setAttribute("href", link); + a.addClass("buymeacoffee-img"); + const img = createEl("img", { + attr: { + src: "https://img.buymeacoffee.com/button-api/?text=Buy me a coffee &emoji=&slug=mahmudz&button_colour=BD5FFF&font_colour=ffffff&font_family=Poppins&outline_colour=000000&coffee_colour=FFDD00" + } + }); + a.appendChild(img); + return a; + } +}; + +// src/variants/DesktopPlugin.ts +var DesktopPlugin = class extends BasePlugin { + getFileExplorer() { + return this.app.workspace.containerEl.find(".nav-files-container"); + } + onFolderExpand(e) { + if (this.isEnabled) { + this.addFavoriteIconToFolder(e.currentTarget); + } else { + const parentElement = e.currentTarget; + this.removeFavoriteIconFromChild(parentElement); + } + } + addFavoriteIconToItem(listItem) { + var _a; + const filePath = (_a = listItem.getAttribute("data-path")) != null ? _a : ""; + const trailingButton = createFavoriteButton( + this.isFavorite(filePath), + this.settings.icon, + this.settings.filled + ); + trailingButton.addEventListener("click", (e) => { + const favoriteButton = e.currentTarget; + if (favoriteButton) { + const titleEl = favoriteButton.parentElement; + const filePath2 = titleEl.getAttribute("data-path"); + this.toggleFavorite(filePath2); + if (this.isFavorite(filePath2)) { + favoriteButton.classList.add("is-favorite"); + if (this.settings.filled) { + trailingButton.classList.add("fav-icon-filled"); + } + } else { + favoriteButton.classList.remove("is-favorite"); + trailingButton.classList.remove("fav-icon-filled"); + } + } + }); + listItem.appendChild(trailingButton); + } + addFavoriteIconToFolder(folderEl) { + const listItems = folderEl.querySelectorAll( + ".nav-folder, .nav-file-title" + ); + listItems.forEach((listItem) => { + const isAlreadyExists = listItem.find(".fav-btn"); + if (isAlreadyExists) { + return; + } + if (listItem.classList.contains("nav-file-title")) { + listItem.addClass("fav-nav-file-title"); + this.addFavoriteIconToItem(listItem); + } else if (!listItem.classList.contains("is-collapsed")) { + setTimeout(() => { + this.addFavoriteIconToFolder(listItem); + }, 200); + } else { + listItem.addEventListener( + "click", + this.onFolderExpand.bind(this), + { once: true } + ); + } + }); + } + addFavoriteIcons() { + const parent = this.getFileExplorer(); + if (parent) { + this.addFavoriteIconToFolder(parent); + } + } + removeFavoriteIconFromChild(folderEl) { + const listItems = folderEl.querySelectorAll( + ".nav-folder, .nav-file-title" + ); + listItems.forEach((listItem) => { + if (listItem.classList.contains("nav-file-title")) { + listItem.findAll(".fav-btn").forEach((el) => el.remove()); + listItem.removeClass("fav-nav-file-title"); + } else { + this.removeFavoriteIconFromChild(listItem); + } + }); + } + removeFavoriteIcons() { + const fileExplorer = this.getFileExplorer(); + if (fileExplorer) { + this.removeFavoriteIconFromChild(fileExplorer); + } + } + reload() { + this.removeFavoriteIcons(); + this.addFavoriteIcons(); + } + onFileCreate(file) { + setTimeout(() => { + const listItem = this.app.workspace.containerEl.find( + `[data-path="${file.path}"]` + ); + listItem.classList.add("fav-nav-file-title"); + this.addFavoriteIconToItem(listItem); + }, 100); + } + async onload() { + this.isEnabled = true; + this.app.workspace.onLayoutReady(async () => { + if (import_obsidian4.Platform.isTablet || import_obsidian4.Platform.isDesktop) { + setTimeout(() => { + var _a; + this.addFavoriteIcons(); + (_a = this.getFileExplorer()) == null ? void 0 : _a.findAll(".nav-file-title").forEach((el) => { + el.classList.add("fav-nav-file-title"); + }); + }, 300); + this.app.vault.on("create", this.onFileCreate.bind(this)); + this.app.vault.on("delete", this.onFileDelete.bind(this)); + } + }); + this.plugin.addSettingTab( + new FavoritePluginSettingsTab( + this.app, + this.plugin + ) + ); + } + destroy() { + var _a; + this.isEnabled = false; + (_a = this.getFileExplorer()) == null ? void 0 : _a.findAll(".nav-file-title").forEach((el) => { + el.classList.remove("fav-nav-file-title"); + }); + this.app.vault.off("create", this.onFileCreate.bind(this)); + this.app.vault.off("delete", this.onFileDelete.bind(this)); + this.removeFavoriteIcons(); + } +}; + +// src/variants/MobilePlugin.ts +var import_obsidian5 = require("obsidian"); +var MobilePlugin = class extends BasePlugin { + constructor() { + super(...arguments); + this.onSidebarButtonClick = () => { + const explorer = this.getFileExplorer(); + if (!this.app.workspace.leftSplit.collapsed) { + setTimeout(() => { + this.addFavoriteIconToFolder(explorer); + }, 50); + } + }; + } + getFileListElements(parentEl) { + return parentEl.querySelectorAll(".nav-folder, .nav-file-title"); + } + getFileExplorer() { + var _a; + return (_a = this.app.workspace.getLeavesOfType("file-explorer").pop()) == null ? void 0 : _a.view.containerEl; + } + removeFavoriteIconFromChild(folderEl) { + const listItems = this.getFileListElements(folderEl); + listItems.forEach((listItem) => { + if (listItem.classList.contains("nav-file-title")) { + listItem.findAll(".mobile-fav-btn").forEach((el) => el.remove()); + listItem.removeClass("fav-nav-file-title"); + } else { + this.removeFavoriteIconFromChild(listItem); + } + }); + } + createFavoriteButton(isFavorite = false) { + const trailingButton = document.createElement("span"); + trailingButton.classList.add("mobile-fav-btn"); + if (isFavorite) { + trailingButton.classList.add("is-favorite"); + } else { + trailingButton.classList.remove("is-favorite"); + } + (0, import_obsidian5.setIcon)(trailingButton, this.settings.icon); + return trailingButton; + } + addFavoriteIconToItem(listItem) { + var _a; + const favButton = listItem.find(".mobile-fav-btn"); + const filePath = (_a = listItem.getAttribute("data-path")) != null ? _a : ""; + const favorite = this.isFavorite(filePath); + if (favButton) { + if (favorite) { + favButton.classList.add("is-favorite"); + } else { + favButton.classList.remove("is-favorite"); + } + return; + } + listItem.addClass("fav-nav-file-title"); + const trailingButton = this.createFavoriteButton(favorite); + listItem.appendChild(trailingButton); + } + addFavoriteIconToFolder(folderEl) { + const listItems = this.getFileListElements(folderEl); + listItems.forEach((listItem) => { + if (listItem.classList.contains("nav-file-title")) { + this.addFavoriteIconToItem(listItem); + } else { + this.addFavoriteIconToFolder(listItem); + } + }); + } + getHeaderFavoriteActionButton() { + const itemView = this.app.workspace.getActiveViewOfType(import_obsidian5.ItemView); + return itemView == null ? void 0 : itemView.containerEl.querySelector( + '.clickable-icon.view-action[aria-label="Favorite"]' + ); + } + itemViewAlreadyHasButton() { + return this.getHeaderFavoriteActionButton() != null; + } + getSidebarToggleButton() { + var _a, _b, _c; + if (import_obsidian5.Platform.isTablet) { + return (_a = this.app.workspace.containerEl) == null ? void 0 : _a.querySelector( + ".sidebar-toggle-button" + ); + } + return (_c = (_b = this.app.workspace.getActiveViewOfType(import_obsidian5.ItemView)) == null ? void 0 : _b.containerEl) == null ? void 0 : _c.querySelector( + 'button[aria-label="Expand"]' + ); + } + registerSidebarToggleEvents() { + const btn = this.getSidebarToggleButton(); + btn == null ? void 0 : btn.addEventListener("click", this.onSidebarButtonClick); + } + deregisterSidebarToggleEvents() { + const btn = this.getSidebarToggleButton(); + btn == null ? void 0 : btn.removeEventListener("click", this.onSidebarButtonClick); + } + updateHeaderButtonState() { + var _a; + const filePath = (_a = this.app.workspace.getActiveFile()) == null ? void 0 : _a.path; + const btn = this.getHeaderFavoriteActionButton(); + if (this.isFavorite(filePath)) { + btn == null ? void 0 : btn.classList.remove("mobile-header-fav-idle"); + btn == null ? void 0 : btn.classList.add("is-favorite"); + } else { + btn == null ? void 0 : btn.classList.remove("is-favorite"); + btn == null ? void 0 : btn.classList.add("mobile-header-fav-idle"); + } + } + onHeaderButtonClick() { + var _a; + const filePath = (_a = this.app.workspace.getActiveFile()) == null ? void 0 : _a.path; + if (!filePath) { + return; + } + this.toggleFavorite(filePath); + this.updateHeaderButtonState(); + } + addFavoriteButtonToHeader() { + var _a; + const filePath = (_a = this.app.workspace.getActiveFile()) == null ? void 0 : _a.path; + if (!filePath) { + return; + } + const itemView = this.app.workspace.getActiveViewOfType(import_obsidian5.ItemView); + const action = itemView == null ? void 0 : itemView.addAction( + this.settings.icon, + "Favorite", + this.onHeaderButtonClick.bind(this) + ); + action == null ? void 0 : action.classList.add( + this.isFavorite(filePath) ? "is-favorite" : "mobile-header-fav-idle" + ); + } + onload() { + this.app.workspace.on("window-open", () => { + console.log("open"); + }); + this.app.workspace.onLayoutReady(() => { + setTimeout(() => { + this.addFavoriteButtonToHeader(); + this.registerSidebarToggleEvents(); + this.onSidebarButtonClick(); + }, 100); + this.plugin.registerEvent( + this.app.workspace.on("active-leaf-change", (leaf) => { + if (!this.itemViewAlreadyHasButton()) { + this.addFavoriteButtonToHeader(); + } + this.updateHeaderButtonState(); + }) + ); + this.plugin.registerEvent( + this.app.vault.on("delete", this.onFileDelete.bind(this)) + ); + }); + } + reload() { + } + destroy() { + var _a, _b; + this.isEnabled = false; + (_a = this.getHeaderFavoriteActionButton()) == null ? void 0 : _a.remove(); + this.deregisterSidebarToggleEvents(); + (_b = this.getFileExplorer()) == null ? void 0 : _b.findAll(".nav-file-title").forEach((el) => { + el.classList.remove("fav-nav-file-title"); + el.find(".mobile-fav-btn").remove(); + }); + } +}; + +// src/main.ts +var FavoritePlugin = class extends import_obsidian6.Plugin { + constructor(app, manifest) { + super(app, manifest); + if (import_obsidian6.Platform.isDesktop) { + this.variant = new DesktopPlugin(this, this.app); + } + if (import_obsidian6.Platform.isMobile) { + this.variant = new MobilePlugin(this, this.app); + } + } + onload() { + var _a; + (_a = this.variant) == null ? void 0 : _a.onload(); + } + onunload() { + var _a; + (_a = this.variant) == null ? void 0 : _a.destroy(); + } +}; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/favorite-note/manifest.json b/.obsidian/plugins/favorite-note/manifest.json new file mode 100644 index 0000000..49f4366 --- /dev/null +++ b/.obsidian/plugins/favorite-note/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "favorite-note", + "name": "Favorite Note", + "version": "2.0.3", + "minAppVersion": "0.15.0", + "description": "Mark your note as favorite.", + "author": "mahmudz", + "authorUrl": "https://github.com/mahmudz", + "fundingUrl": "https://www.buymeacoffee.com/mahmudz", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/.obsidian/plugins/favorite-note/styles.css b/.obsidian/plugins/favorite-note/styles.css new file mode 100644 index 0000000..a13b5b8 --- /dev/null +++ b/.obsidian/plugins/favorite-note/styles.css @@ -0,0 +1,78 @@ +/* + +This CSS file will be included with your plugin, and +available in the app when your plugin is enabled. + +If your plugin does not need CSS, delete this file. + +*/ + +.fav-nav-file-title { + display: flex; + align-items: center; + justify-content: space-between; + gap: 5px; +} + +.nav-file-title-content, +.nav-folder-title-content { + flex: 1; +} + +.fav-btn { + visibility: hidden; + cursor: pointer; + display: flex; +} + + +.fav-btn:hover { + color: #9f9f9f; +} + +.fav-btn svg.svg-icon { + height: 16px; + width: 16px; +} + +.fav-icon-filled svg { + fill: var(--text-accent); +} + +.nav-file:hover .fav-btn { + visibility: visible; +} + +.mobile-header-fav-idle { + color: var(--text-faint); +} + +.mobile-fav-btn { + cursor: pointer; + display: flex; + visibility: hidden; +} + +.is-favorite { + visibility: visible; + color: var(--text-accent); +} + +.is-favorite:hover { + visibility: visible; + color: var(--text-accent-hover); +} + +.donate-section { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding-top: 40px; +} + +.fv-icon-item { + line-height: normal; + vertical-align: middle; + margin-right: 8px; +} \ No newline at end of file diff --git a/.obsidian/plugins/file-tree-alternative/data.json b/.obsidian/plugins/file-tree-alternative/data.json index f334790..4684205 100644 --- a/.obsidian/plugins/file-tree-alternative/data.json +++ b/.obsidian/plugins/file-tree-alternative/data.json @@ -2,7 +2,7 @@ "openViewOnStart": true, "ribbonIcon": true, "showRootFolder": true, - "showFilesFromSubFolders": true, + "showFilesFromSubFolders": false, "searchFunction": true, "allSearchOnlyInFocusedFolder": false, "showFilesFromSubFoldersButton": true, @@ -13,7 +13,7 @@ "folderIcon": "icomoon", "folderCount": true, "folderCountOption": "notes", - "evernoteView": "Horizontal", + "evernoteView": "Vertical", "filePreviewOnHover": false, "iconBeforeFileName": true, "sortFilesBy": "name", diff --git a/20-Area/21-Person/个人管理/物品管理/Excels/记账表2025.xlsx b/20-Area/21-Person/个人管理/物品管理/Excels/记账表2025.xlsx index b687513..c6d10ed 100755 Binary files a/20-Area/21-Person/个人管理/物品管理/Excels/记账表2025.xlsx and b/20-Area/21-Person/个人管理/物品管理/Excels/记账表2025.xlsx differ diff --git a/HOMEPAGE.md b/HOMEPAGE.md index db9308a..a0cb837 100644 --- a/HOMEPAGE.md +++ b/HOMEPAGE.md @@ -1,4 +1,4 @@ [[000整体看板]] [[3月日记]] [[看板]] -[[4月日记]] \ No newline at end of file +[[4月日记]]