From 203c067d8d8570727af4b09d698b39e98376a944 Mon Sep 17 00:00:00 2001
From: Lost Paul <70213368+LostPaul@users.noreply.github.com>
Date: Wed, 28 Jun 2023 23:01:13 +0200
Subject: [PATCH] Folder overview list
---
package-lock.json | 423 ++++++++++-----------
src/commands.ts | 7 +-
src/events/handleClick.ts | 2 +-
src/events/handleRename.ts | 2 +-
src/folderOverview.ts | 142 ++++---
src/functions/ListComponent.ts | 77 ++++
src/{ => functions}/folderNoteFunctions.ts | 12 +-
src/globals.d.ts | 17 +-
src/main.ts | 22 +-
src/modals/confirmCreation.ts | 2 +-
src/modals/deleteConfirmation.ts | 2 +-
src/modals/existingNote.ts | 2 +-
src/modals/folderOverview.ts | 171 +++++++++
src/settings.ts | 12 +-
styles.css | 17 +-
15 files changed, 607 insertions(+), 303 deletions(-)
create mode 100644 src/functions/ListComponent.ts
rename src/{ => functions}/folderNoteFunctions.ts (95%)
create mode 100644 src/modals/folderOverview.ts
diff --git a/package-lock.json b/package-lock.json
index 65452c5..fe61971 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,8 @@
"version": "1.0.1",
"license": "GPL-3.0-or-later",
"dependencies": {
- "@popperjs/core": "^2.11.6"
+ "@popperjs/core": "^2.11.6",
+ "front-matter-plugin-api-provider": "^0.1.3-alpha"
},
"devDependencies": {
"@types/node": "^16.11.6",
@@ -23,17 +24,15 @@
}
},
"node_modules/@codemirror/state": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.0.tgz",
- "integrity": "sha512-69QXtcrsc3RYtOtd+GsvczJ319udtBf1PTrr2KbLWM/e2CXUPnh0Nz9AUo8WfhSQ7GeL8dPVNUmhQVgpmuaNGA==",
- "dev": true,
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz",
+ "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==",
"peer": true
},
"node_modules/@codemirror/view": {
- "version": "6.9.2",
- "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.9.2.tgz",
- "integrity": "sha512-ci0r/v6aKOSlzOs7/STMTYP3jX/+YMq2dAfAJcLIB6uom4ThtrUlzeuS7GTRGNqJJ+qAJR1vGWfXgu4CO/0myQ==",
- "dev": true,
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.14.0.tgz",
+ "integrity": "sha512-I263FPs4In42MNmrdwN2DfmYPFMVMXgT7o/mxdGp4jv5LPs8i0FOxzmxF5yeeQdYSTztb2ZhmPIu0ahveInVTg==",
"peer": true,
"dependencies": {
"@codemirror/state": "^6.1.4",
@@ -42,9 +41,9 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz",
- "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
"dev": true,
"peer": true,
"dependencies": {
@@ -58,9 +57,9 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
- "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
+ "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
"dev": true,
"peer": true,
"engines": {
@@ -68,15 +67,15 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
- "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
+ "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
"dev": true,
"peer": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.5.0",
+ "espree": "^9.5.2",
"globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -92,9 +91,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
- "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+ "version": "8.43.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz",
+ "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==",
"dev": true,
"peer": true,
"engines": {
@@ -102,9 +101,9 @@
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.8",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
- "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+ "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
"dev": true,
"peer": true,
"dependencies": {
@@ -173,9 +172,9 @@
}
},
"node_modules/@popperjs/core": {
- "version": "2.11.6",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
- "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==",
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
@@ -185,34 +184,31 @@
"version": "0.0.108",
"resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz",
"integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==",
- "dev": true,
"dependencies": {
"@types/tern": "*"
}
},
"node_modules/@types/estree": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
- "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
- "dev": true
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA=="
},
"node_modules/@types/json-schema": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
- "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
"dev": true
},
"node_modules/@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
+ "version": "16.18.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.37.tgz",
+ "integrity": "sha512-ql+4dw4PlPFBP495k8JzUX/oMNRI2Ei4PrMHgj8oT4VhGlYUzF4EYr0qk2fW+XBVGIrq8Zzk13m4cvyXZuv4pA==",
"dev": true
},
"node_modules/@types/tern": {
"version": "0.23.4",
"resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz",
"integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==",
- "dev": true,
"dependencies": {
"@types/estree": "*"
}
@@ -402,9 +398,9 @@
}
},
"node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
+ "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==",
"dev": true,
"peer": true,
"bin": {
@@ -1012,17 +1008,17 @@
}
},
"node_modules/eslint": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
- "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+ "version": "8.43.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz",
+ "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==",
"dev": true,
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.1",
- "@eslint/js": "8.36.0",
- "@humanwhocodes/config-array": "^0.11.8",
+ "@eslint/eslintrc": "^2.0.3",
+ "@eslint/js": "8.43.0",
+ "@humanwhocodes/config-array": "^0.11.10",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
@@ -1031,9 +1027,9 @@
"debug": "^4.3.2",
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.5.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.5.2",
"esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -1041,13 +1037,12 @@
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
+ "graphemer": "^1.4.0",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
@@ -1110,18 +1105,21 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/eslint-scope": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
"dev": true,
"peer": true,
"dependencies": {
@@ -1130,6 +1128,9 @@
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/estraverse": {
@@ -1142,29 +1143,16 @@
"node": ">=4.0"
}
},
- "node_modules/eslint/node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/espree": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
- "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
+ "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
"dev": true,
"peer": true,
"dependencies": {
"acorn": "^8.8.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1259,6 +1247,18 @@
"node": ">=8.6.0"
}
},
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -1345,6 +1345,14 @@
"dev": true,
"peer": true
},
+ "node_modules/front-matter-plugin-api-provider": {
+ "version": "0.1.3-alpha",
+ "resolved": "https://registry.npmjs.org/front-matter-plugin-api-provider/-/front-matter-plugin-api-provider-0.1.3-alpha.tgz",
+ "integrity": "sha512-N7pd25mNfDWCFqV4fqy3vaGK8+oUQEH84Yq7VWbX8zj1YQSLMjZDGw6rWaB3HZe29q+RKfkm3tTIka8GHmqJ4A==",
+ "dependencies": {
+ "obsidian": "^1.2.8"
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -1380,15 +1388,16 @@
}
},
"node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
+ "peer": true,
"dependencies": {
- "is-glob": "^4.0.1"
+ "is-glob": "^4.0.3"
},
"engines": {
- "node": ">= 6"
+ "node": ">=10.13.0"
}
},
"node_modules/globals": {
@@ -1427,10 +1436,10 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/grapheme-splitter": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
- "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true,
"peer": true
},
@@ -1545,17 +1554,6 @@
"dev": true,
"peer": true
},
- "node_modules/js-sdsl": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
- "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/js-sdsl"
- }
- },
"node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -1671,7 +1669,6 @@
"version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
- "dev": true,
"engines": {
"node": "*"
}
@@ -1690,10 +1687,9 @@
"peer": true
},
"node_modules/obsidian": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.1.1.tgz",
- "integrity": "sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==",
- "dev": true,
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.2.8.tgz",
+ "integrity": "sha512-HrC+feA8o0tXspj4lEAqxb1btwLwHD2oHXSwbbN+CdRHURqbCkuIDLld+nkuyJ1w1c9uvVDRVk8BoeOnWheOrQ==",
"dependencies": {
"@types/codemirror": "0.0.108",
"moment": "2.29.4"
@@ -1939,9 +1935,9 @@
}
},
"node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
+ "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -2012,10 +2008,9 @@
}
},
"node_modules/style-mod": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz",
- "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==",
- "dev": true,
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz",
+ "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==",
"peer": true
},
"node_modules/supports-color": {
@@ -2127,10 +2122,9 @@
}
},
"node_modules/w3c-keyname": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
- "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==",
- "dev": true,
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
"peer": true
},
"node_modules/which": {
@@ -2188,17 +2182,15 @@
},
"dependencies": {
"@codemirror/state": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.0.tgz",
- "integrity": "sha512-69QXtcrsc3RYtOtd+GsvczJ319udtBf1PTrr2KbLWM/e2CXUPnh0Nz9AUo8WfhSQ7GeL8dPVNUmhQVgpmuaNGA==",
- "dev": true,
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz",
+ "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==",
"peer": true
},
"@codemirror/view": {
- "version": "6.9.2",
- "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.9.2.tgz",
- "integrity": "sha512-ci0r/v6aKOSlzOs7/STMTYP3jX/+YMq2dAfAJcLIB6uom4ThtrUlzeuS7GTRGNqJJ+qAJR1vGWfXgu4CO/0myQ==",
- "dev": true,
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.14.0.tgz",
+ "integrity": "sha512-I263FPs4In42MNmrdwN2DfmYPFMVMXgT7o/mxdGp4jv5LPs8i0FOxzmxF5yeeQdYSTztb2ZhmPIu0ahveInVTg==",
"peer": true,
"requires": {
"@codemirror/state": "^6.1.4",
@@ -2207,9 +2199,9 @@
}
},
"@eslint-community/eslint-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz",
- "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
"dev": true,
"peer": true,
"requires": {
@@ -2217,22 +2209,22 @@
}
},
"@eslint-community/regexpp": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
- "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
+ "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
"dev": true,
"peer": true
},
"@eslint/eslintrc": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
- "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
+ "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
"dev": true,
"peer": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.5.0",
+ "espree": "^9.5.2",
"globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -2242,16 +2234,16 @@
}
},
"@eslint/js": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
- "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+ "version": "8.43.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz",
+ "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==",
"dev": true,
"peer": true
},
"@humanwhocodes/config-array": {
- "version": "0.11.8",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
- "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+ "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
"dev": true,
"peer": true,
"requires": {
@@ -2301,42 +2293,39 @@
}
},
"@popperjs/core": {
- "version": "2.11.6",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
- "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw=="
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="
},
"@types/codemirror": {
"version": "0.0.108",
"resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz",
"integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==",
- "dev": true,
"requires": {
"@types/tern": "*"
}
},
"@types/estree": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
- "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
- "dev": true
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA=="
},
"@types/json-schema": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
- "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
"dev": true
},
"@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
+ "version": "16.18.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.37.tgz",
+ "integrity": "sha512-ql+4dw4PlPFBP495k8JzUX/oMNRI2Ei4PrMHgj8oT4VhGlYUzF4EYr0qk2fW+XBVGIrq8Zzk13m4cvyXZuv4pA==",
"dev": true
},
"@types/tern": {
"version": "0.23.4",
"resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz",
"integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==",
- "dev": true,
"requires": {
"@types/estree": "*"
}
@@ -2437,9 +2426,9 @@
}
},
"acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
+ "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==",
"dev": true,
"peer": true
},
@@ -2792,17 +2781,17 @@
"peer": true
},
"eslint": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
- "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+ "version": "8.43.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz",
+ "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==",
"dev": true,
"peer": true,
"requires": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.1",
- "@eslint/js": "8.36.0",
- "@humanwhocodes/config-array": "^0.11.8",
+ "@eslint/eslintrc": "^2.0.3",
+ "@eslint/js": "8.43.0",
+ "@humanwhocodes/config-array": "^0.11.10",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
@@ -2811,9 +2800,9 @@
"debug": "^4.3.2",
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.5.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.5.2",
"esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -2821,13 +2810,12 @@
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
+ "graphemer": "^1.4.0",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
@@ -2841,9 +2829,9 @@
},
"dependencies": {
"eslint-scope": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
"dev": true,
"peer": true,
"requires": {
@@ -2857,16 +2845,6 @@
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"peer": true
- },
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "peer": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
}
}
},
@@ -2898,21 +2876,21 @@
}
},
"eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
"dev": true
},
"espree": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
- "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
+ "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
"dev": true,
"peer": true,
"requires": {
"acorn": "^8.8.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.1"
}
},
"esquery": {
@@ -2982,6 +2960,17 @@
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
}
},
"fast-json-stable-stringify": {
@@ -3055,6 +3044,14 @@
"dev": true,
"peer": true
},
+ "front-matter-plugin-api-provider": {
+ "version": "0.1.3-alpha",
+ "resolved": "https://registry.npmjs.org/front-matter-plugin-api-provider/-/front-matter-plugin-api-provider-0.1.3-alpha.tgz",
+ "integrity": "sha512-N7pd25mNfDWCFqV4fqy3vaGK8+oUQEH84Yq7VWbX8zj1YQSLMjZDGw6rWaB3HZe29q+RKfkm3tTIka8GHmqJ4A==",
+ "requires": {
+ "obsidian": "^1.2.8"
+ }
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -3084,12 +3081,13 @@
}
},
"glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
+ "peer": true,
"requires": {
- "is-glob": "^4.0.1"
+ "is-glob": "^4.0.3"
}
},
"globals": {
@@ -3116,10 +3114,10 @@
"slash": "^3.0.0"
}
},
- "grapheme-splitter": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
- "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true,
"peer": true
},
@@ -3207,13 +3205,6 @@
"dev": true,
"peer": true
},
- "js-sdsl": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
- "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
- "dev": true,
- "peer": true
- },
"js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -3304,8 +3295,7 @@
"moment": {
"version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
- "dev": true
+ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
},
"ms": {
"version": "2.1.2",
@@ -3321,10 +3311,9 @@
"peer": true
},
"obsidian": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.1.1.tgz",
- "integrity": "sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==",
- "dev": true,
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.2.8.tgz",
+ "integrity": "sha512-HrC+feA8o0tXspj4lEAqxb1btwLwHD2oHXSwbbN+CdRHURqbCkuIDLld+nkuyJ1w1c9uvVDRVk8BoeOnWheOrQ==",
"requires": {
"@types/codemirror": "0.0.108",
"moment": "2.29.4"
@@ -3477,9 +3466,9 @@
}
},
"semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
+ "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -3526,10 +3515,9 @@
"peer": true
},
"style-mod": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz",
- "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==",
- "dev": true,
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz",
+ "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==",
"peer": true
},
"supports-color": {
@@ -3615,10 +3603,9 @@
}
},
"w3c-keyname": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
- "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==",
- "dev": true,
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
"peer": true
},
"which": {
diff --git a/src/commands.ts b/src/commands.ts
index c912294..c7fd834 100644
--- a/src/commands.ts
+++ b/src/commands.ts
@@ -1,6 +1,6 @@
import { App, TFolder, Menu, TAbstractFile, Notice, TFile, Editor, MarkdownView } from 'obsidian';
import FolderNotesPlugin from './main';
-import { getFolderNote, createFolderNote, deleteFolderNote, turnIntoFolderNote, openFolderNote } from './folderNoteFunctions';
+import { getFolderNote, createFolderNote, deleteFolderNote, turnIntoFolderNote, openFolderNote } from './functions/folderNoteFunctions';
import { ExcludedFolder } from './excludedFolder';
export class Commands {
plugin: FolderNotesPlugin;
@@ -65,14 +65,15 @@ export class Commands {
this.plugin.registerEvent(this.app.workspace.on('file-menu', (menu: Menu, file: TAbstractFile) => {
if (file instanceof TFile) {
const folder = file.parent;
+ if (folder === null) return;
const folderNote = getFolderNote(this.plugin, folder.path);
if (folderNote?.path === file.path) { return; }
menu.addItem((item) => {
item.setTitle('Create folder note')
.setIcon('edit')
.onClick(async () => {
- let newPath = file.parent.path + '/' + file.basename;
- if (file.parent.path === '' || file.parent.path === '/') {
+ let newPath = file.parent?.path + '/' + file.basename;
+ if (!(file.parent instanceof TFolder) || file.parent.path === '' || file.parent.path === '/') {
newPath = file.basename;
}
if (this.plugin.app.vault.getAbstractFileByPath(newPath)) {
diff --git a/src/events/handleClick.ts b/src/events/handleClick.ts
index 6f47539..31b640e 100644
--- a/src/events/handleClick.ts
+++ b/src/events/handleClick.ts
@@ -1,6 +1,6 @@
import { Keymap } from 'obsidian';
import FolderNotesPlugin from 'src/main';
-import { openFolderNote, createFolderNote, getFolderNote } from 'src/folderNoteFunctions';
+import { openFolderNote, createFolderNote, getFolderNote } from 'src/functions/folderNoteFunctions';
import { getExcludedFolder } from 'src/excludedFolder';
export async function handleViewHeaderClick(event: MouseEvent, plugin: FolderNotesPlugin) {
if (!(event.target instanceof HTMLElement)) return;
diff --git a/src/events/handleRename.ts b/src/events/handleRename.ts
index ab4769c..f613c53 100644
--- a/src/events/handleRename.ts
+++ b/src/events/handleRename.ts
@@ -1,6 +1,6 @@
import { TFile, TFolder, TAbstractFile, Notice } from 'obsidian';
import FolderNotesPlugin from 'src/main';
-import { extractFolderName, getFolderNote } from '../folderNoteFunctions';
+import { extractFolderName, getFolderNote } from '../functions/folderNoteFunctions';
import { getExcludedFolder } from '../excludedFolder';
export function handleFolderRename(file: TFolder, oldPath: string, plugin: FolderNotesPlugin) {
const fileName = plugin.settings.folderNoteName.replace('{{folder_name}}', file.name);
diff --git a/src/folderOverview.ts b/src/folderOverview.ts
index 6d1d78b..fa5a8c3 100644
--- a/src/folderOverview.ts
+++ b/src/folderOverview.ts
@@ -1,6 +1,16 @@
import { MarkdownPostProcessorContext, parseYaml, TAbstractFile, TFolder, TFile } from 'obsidian';
-import { getFolderNote } from './folderNoteFunctions';
+import { getFolderNote } from './functions/folderNoteFunctions';
import FolderNotesPlugin from './main';
+export type yamlSettings = {
+ title?: string;
+ disableTitle?: boolean;
+ depth?: number;
+ type?: 'folder' | 'markdown' | 'canvas';
+ includeTypes?: string[];
+ style?: 'list' | 'grid';
+ disableCanvasTag?: boolean;
+};
+
export function createCanvasOverview() {
// console.log('test');
}
@@ -9,9 +19,20 @@ export function createOverview(plugin: FolderNotesPlugin, source: string, el: HT
// parse source to yaml
const yaml = parseYaml(source);
const depth = yaml?.depth || 1;
- const title = yaml?.title || 'Overview';
- const type: 'folder' | 'markdown' | 'canvas' = yaml?.type.trim() || 'markdown';
- const style: 'list' | 'grid' = yaml?.style || 'grid';
+ const title = yaml?.title || plugin.settings.defaultOverview.title || 'Folder overview';
+ const disableTitle = yaml?.disableTitle || plugin.settings.defaultOverview.disableTitle || false;
+ let includeTypes: string[] = yaml?.includeTypes || plugin.settings.defaultOverview.includeTypes || ['folder', 'markdown'];
+ includeTypes = includeTypes.map((type) => type.toLowerCase());
+ const style: 'list' | 'grid' = yaml?.style || 'list';
+ const disableCanvasTag = yaml?.disableCanvasTag || plugin.settings.defaultOverview.disableCanvasTag || false;
+
+ const root = el.createEl('div', { cls: 'folder-overview' });
+ const titleEl = root.createEl('h1', { cls: 'folder-overview-title' });
+ const ul = root.createEl('ul', { cls: 'folder-overview-list' });
+ if (!disableTitle) {
+ titleEl.innerText = title;
+ }
+ if (includeTypes.length === 0) { return; }
let files: TAbstractFile[] = [];
const sourceFile = plugin.app.vault.getAbstractFileByPath(ctx.sourcePath);
if (!sourceFile) return;
@@ -25,13 +46,6 @@ export function createOverview(plugin: FolderNotesPlugin, source: string, el: HT
}
files = sourceFolder.children;
- if (type === 'folder') {
- files = files.filter((file) => file instanceof TFolder);
- } else if (type === 'canvas') {
- files = files.filter((file) => file instanceof TFolder || file.name.endsWith('.canvas'));
- } else if (type === 'markdown') {
- files = files.filter((file) => file instanceof TFolder || file.name.endsWith('.md'));
- }
files = files.filter((file) => {
const folderPath = plugin.getFolderPathFromString(file.path);
@@ -41,13 +55,11 @@ export function createOverview(plugin: FolderNotesPlugin, source: string, el: HT
return true;
}
});
+ if (!includeTypes.includes('folder')) {
+ files = getAllFiles(files, sourceFolderPath, depth);
+ }
files = sortFiles(files);
-
- const root = el.createEl('div', { cls: 'folder-overview' });
- const titleEl = root.createEl('h1', { cls: 'folder-overview-title' });
- const ul = root.createEl('ul', { cls: 'folder-overview-list' });
- titleEl.innerText = title;
if (style === 'grid') {
const grid = root.createEl('div', { cls: 'folder-overview-grid' });
files.forEach((file) => {
@@ -61,23 +73,10 @@ export function createOverview(plugin: FolderNotesPlugin, source: string, el: HT
const pathBlacklist: string[] = [];
files.forEach((file) => {
if (file instanceof TFolder) {
- const folderItem = ul.createEl('li', { cls: 'folder-overview-list folder-list' });
- const folderNote = getFolderNote(plugin, file.path);
- if (folderNote instanceof TFile) {
- const folderNoteLink = folderItem.createEl('a', { cls: 'folder-overview-list-item folder-name-item internal-link', href: folderNote.path });
- folderNoteLink.innerText = file.name;
- pathBlacklist.push(folderNote.path);
- } else {
- const folderName = folderItem.createEl('span', { cls: 'folder-overview-list-item folder-name-item' });
- folderName.innerText = file.name;
- }
- goThroughFolders(plugin, folderItem, file, depth, sourceFolderPath, ctx, yaml, pathBlacklist);
+ const folderItem = addFolderList(plugin, ul, pathBlacklist, file);
+ goThroughFolders(plugin, folderItem, file, depth, sourceFolderPath, ctx, yaml, pathBlacklist, includeTypes, disableCanvasTag);
} else if (file instanceof TFile) {
- if (type === 'canvas' && !file.name.endsWith('.canvas')) return;
- if (pathBlacklist.includes(file.path)) return;
- const listItem = root.createEl('li', { cls: 'folder-overview-list' });
- const link = listItem.createEl('a', { cls: 'internal-link', href: file.path });
- link.innerText = file.name.replace('.md', '').replace('.canvas', '');
+ addFileList(plugin, ul, pathBlacklist, file, includeTypes, disableCanvasTag);
}
});
} else if (style === 'explorer') {
@@ -93,11 +92,13 @@ export function createOverview(plugin: FolderNotesPlugin, source: string, el: HT
root.appendChild(folderElement);
*/
}
- removeEmptyFolders(ul);
+ if (includeTypes.length > 1) {
+ removeEmptyFolders(ul);
+ }
}
-function goThroughFolders(plugin: FolderNotesPlugin, list: HTMLLIElement, folder: TFolder,
- depth: number, sourceFolderPath: string, ctx: MarkdownPostProcessorContext, yaml: any = {}, pathBlacklist: string[]) {
+function goThroughFolders(plugin: FolderNotesPlugin, list: HTMLLIElement | HTMLUListElement, folder: TFolder,
+ depth: number, sourceFolderPath: string, ctx: MarkdownPostProcessorContext, yaml: yamlSettings, pathBlacklist: string[], includeTypes: string[], disableCanvasTag: boolean) {
let files = folder.children.filter((file) => {
const folderPath = plugin.getFolderPathFromString(file.path);
if (!folderPath.startsWith(sourceFolderPath)) { return false; }
@@ -105,36 +106,14 @@ function goThroughFolders(plugin: FolderNotesPlugin, list: HTMLLIElement, folder
return true;
}
});
-
- const type: 'folder' | 'markdown' | 'canvas' = yaml?.type || 'markdown';
- if (type === 'folder') {
- files = files.filter((file) => file instanceof TFolder);
- } else if (type === 'canvas') {
- files = files.filter((file) => file instanceof TFolder || file.name.endsWith('.canvas'));
- } else if (type === 'markdown') {
- files = files.filter((file) => file instanceof TFolder || file.name.endsWith('.md'));
- }
files = sortFiles(files);
const ul = list.createEl('ul', { cls: 'folder-overview-list' });
files.forEach((file) => {
if (file instanceof TFolder) {
- const folderItem = ul.createEl('li', { cls: 'folder-overview-list folder-list' });
- const folderNote = getFolderNote(plugin, file.path);
- if (folderNote instanceof TFile) {
- const folderNoteLink = folderItem.createEl('a', { cls: 'folder-overview-list-item folder-name-item internal-link', href: folderNote.path });
- folderNoteLink.innerText = file.name;
- pathBlacklist.push(folderNote.path);
- } else {
- const folderName = folderItem.createEl('span', { cls: 'folder-overview-list-item folder-name-item' });
- folderName.innerText = file.name;
- }
- goThroughFolders(plugin, folderItem, file, depth, sourceFolderPath, ctx, yaml, pathBlacklist);
+ const folderItem = addFolderList(plugin, ul, pathBlacklist, file);
+ goThroughFolders(plugin, folderItem, file, depth, sourceFolderPath, ctx, yaml, pathBlacklist, includeTypes, disableCanvasTag);
} else if (file instanceof TFile) {
- if (type === 'canvas' && !file.name.endsWith('.canvas')) return;
- if (pathBlacklist.includes(file.path)) return;
- const listItem = ul.createEl('li', { cls: 'folder-overview-list' });
- const link = listItem.createEl('a', { cls: 'internal-link', href: file.path });
- link.innerText = file.name.replace('.md', '').replace('.canvas', '');
+ addFileList(plugin, ul, pathBlacklist, file, includeTypes, disableCanvasTag);
}
});
}
@@ -174,3 +153,46 @@ function removeEmptyFolders(ul: HTMLUListElement | HTMLLIElement) {
el.remove();
});
}
+
+function addFolderList(plugin: FolderNotesPlugin, list: HTMLUListElement | HTMLLIElement, pathBlacklist: string[], folder: TFolder) {
+ const folderItem = list.createEl('li', { cls: 'folder-overview-list folder-list' });
+ const folderNote = getFolderNote(plugin, folder.path);
+ if (folderNote instanceof TFile) {
+ const folderNoteLink = folderItem.createEl('a', { cls: 'folder-overview-list-item folder-name-item internal-link', href: folderNote.path });
+ folderNoteLink.innerText = folder.name;
+ pathBlacklist.push(folderNote.path);
+ } else {
+ const folderName = folderItem.createEl('span', { cls: 'folder-overview-list-item folder-name-item' });
+ folderName.innerText = folder.name;
+ }
+ return folderItem;
+}
+
+function addFileList(plugin: FolderNotesPlugin, list: HTMLUListElement | HTMLLIElement, pathBlacklist: string[], file: TFile, includeTypes: string[], disableCanvasTag: boolean) {
+ if (includeTypes.length > 0) {
+ if (file.extension === 'md' && !includeTypes.includes('markdown')) return;
+ if (file.extension === 'canvas' && !includeTypes.includes('canvas')) return;
+ }
+ if (pathBlacklist.includes(file.path)) return;
+ const listItem = list.createEl('li', { cls: 'folder-overview-list file-link' });
+ const nameItem = listItem.createEl('div', { cls: 'folder-overview-list-item' });
+ const link = nameItem.createEl('a', { cls: 'internal-link', href: file.path });
+ link.innerText = file.name.replace('.md', '').replace('.canvas', '');
+ if (file.extension === 'canvas' && !disableCanvasTag) {
+ nameItem.createDiv({ cls: 'nav-file-tag' }).innerText = 'canvas';
+ }
+}
+
+function getAllFiles(files: TAbstractFile[], sourceFolderPath: string, depth: number) {
+ const allFiles: TAbstractFile[] = [];
+ files.forEach((file) => {
+ if (file instanceof TFolder) {
+ if ((file.path.split('/').length - sourceFolderPath.split('/').length) - 1 < depth -1) {
+ allFiles.push(...getAllFiles(file.children, sourceFolderPath, depth));
+ }
+ } else {
+ allFiles.push(file);
+ }
+ });
+ return allFiles;
+}
diff --git a/src/functions/ListComponent.ts b/src/functions/ListComponent.ts
new file mode 100644
index 0000000..07799a0
--- /dev/null
+++ b/src/functions/ListComponent.ts
@@ -0,0 +1,77 @@
+import { Setting } from 'obsidian';
+import { FolderOverviewSettings } from '../modals/folderOverview';
+export default class ListComponent {
+ containerEl: HTMLElement;
+ controlEl: HTMLElement;
+ emptyStateEl: HTMLElement;
+ listEl: HTMLElement;
+ values: string[];
+ modal: FolderOverviewSettings;
+ constructor(containerEl: HTMLElement) {
+ this.containerEl = containerEl;
+ this.controlEl = containerEl.querySelector('.setting-item-control') || containerEl;
+ this.listEl = this.controlEl.createDiv('setting-command-hotkeys');
+ }
+ addModal(modal: FolderOverviewSettings) {
+ this.modal = modal;
+ this.values = modal.yaml.includeTypes || [];
+ return this;
+ }
+ setValues(values: string[]) {
+ this.listEl.empty();
+ this.values = values;
+ this.modal.yaml.includeTypes = values;
+ if (values.length !== 0) {
+ values.forEach((value) => {
+ this.addElement(value);
+ });
+ }
+ this.modal.updateYaml();
+ return this;
+ }
+ addElement(value: string) {
+ this.listEl.createSpan('setting-hotkey', (span) => {
+ span.innerText = value;
+ const removeSpan = span.createEl('span', { cls: 'ofn-list-item-remove setting-hotkey-icon' });
+ // add svg icon
+ const svg = '';
+ const svgElement = removeSpan.createEl('span', { cls: 'ofn-list-item-remove-icon' });
+ svgElement.innerHTML = svg;
+ removeSpan.onClickEvent((e) => {
+ this.removeValue(value);
+ span.remove();
+ });
+ });
+ }
+ async addValue(value: string) {
+ this.values.push(value);
+ this.addElement(value);
+ this.modal.yaml.includeTypes = this.values;
+ return this;
+ }
+ addResetButton() {
+ const resetButton = this.controlEl.createEl('span', { cls: 'clickable-icon setting-restore-hotkey-button' });
+ const svg = '';
+ resetButton.innerHTML = svg;
+ resetButton.onClickEvent((e) => {
+ this.modal.plugin.loadSettings();
+ this.setValues(this.modal.plugin.settings.defaultOverview.includeTypes || []);
+ this.modal.display();
+ });
+ return this;
+ }
+ removeValue(value: string) {
+ this.values = this.values.filter((v) => v !== value);
+ this.setValues(this.values);
+ this.modal.display();
+ }
+}
+
+function createList(this: Setting, cb: (list: ListComponent) => ListComponent) {
+ const list = new ListComponent(this.settingEl);
+ cb(list);
+ return list;
+}
+
+// ListComponent.prototype.setValues = setValues;
+(Setting as any).prototype.createList = createList;
diff --git a/src/folderNoteFunctions.ts b/src/functions/folderNoteFunctions.ts
similarity index 95%
rename from src/folderNoteFunctions.ts
rename to src/functions/folderNoteFunctions.ts
index e3d7579..c270da3 100644
--- a/src/folderNoteFunctions.ts
+++ b/src/functions/folderNoteFunctions.ts
@@ -1,10 +1,10 @@
-import FolderNotesPlugin from './main';
-import FolderNameModal from './modals/folderName';
-import ExistingFolderNoteModal from './modals/existingNote';
-import { applyTemplate } from './template';
+import FolderNotesPlugin from '../main';
+import FolderNameModal from '../modals/folderName';
+import ExistingFolderNoteModal from '../modals/existingNote';
+import { applyTemplate } from '../template';
import { TFolder, TFile, TAbstractFile, Keymap } from 'obsidian';
-import DeleteConfirmationModal from './modals/deleteConfirmation';
-import { addExcludedFolder, deleteExcludedFolder, getExcludedFolder, ExcludedFolder, updateExcludedFolder } from './excludedFolder';
+import DeleteConfirmationModal from '../modals/deleteConfirmation';
+import { addExcludedFolder, deleteExcludedFolder, getExcludedFolder, ExcludedFolder, updateExcludedFolder } from '../excludedFolder';
export async function createFolderNote(plugin: FolderNotesPlugin, folderPath: string, openFile: boolean, useModal?: boolean, existingNote?: TFile) {
const leaf = plugin.app.workspace.getLeaf(false);
diff --git a/src/globals.d.ts b/src/globals.d.ts
index 3b90d46..762ff2a 100644
--- a/src/globals.d.ts
+++ b/src/globals.d.ts
@@ -15,11 +15,22 @@ declare module 'obsidian' {
interface Vault {
getConfig: (config: string) => unknown;
}
+ interface Setting {
+ createList: (list: ListComponent | ((list: ListComponent) => void)) => ListComponent;
+ }
+
+ class ListComponent {
+ containerEl: HTMLElement;
+ emptyStateEl: HTMLElement;
+ listEl: HTMLElement;
+ values: string[];
+ constructor(containerEl: HTMLElement);
+ }
}
interface FileExplorerWorkspaceLeaf extends WorkspaceLeaf {
- containerEl: HTMLElement;
- view: FileExplorerView;
+ containerEl: HTMLElement;
+ view: FileExplorerView;
}
interface FileExplorerViewFileItem extends TAbstractFile {
@@ -28,5 +39,5 @@ interface FileExplorerViewFileItem extends TAbstractFile {
}
interface FileExplorerView extends View {
- fileItems: { [path: string]: FileExplorerViewFileItem };
+ fileItems: { [path: string]: FileExplorerViewFileItem };
}
diff --git a/src/main.ts b/src/main.ts
index f475994..a778ed2 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,13 +1,15 @@
-import { Plugin, TFile, TFolder, TAbstractFile, MarkdownPostProcessorContext } from 'obsidian';
+import { Plugin, TFile, TFolder, TAbstractFile, MarkdownPostProcessorContext, parseYaml } from 'obsidian';
import { DEFAULT_SETTINGS, FolderNotesSettings, SettingsTab } from './settings';
import { Commands } from './commands';
import { FileExplorerWorkspaceLeaf } from './globals';
import { handleViewHeaderClick, handleFolderClick } from './events/handleClick';
import { handleFileRename, handleFolderRename } from './events/handleRename';
-import { createFolderNote, extractFolderName, getFolderNote, getFolder } from './folderNoteFunctions';
+import { createFolderNote, extractFolderName, getFolderNote, getFolder } from './functions/folderNoteFunctions';
import { getExcludedFolder } from './excludedFolder';
// import { FrontMatterTitlePluginHandler } from './events/frontMatterTitle';
import { createOverview as createFolderOverview } from './folderOverview';
+import { FolderOverviewSettings } from './modals/folderOverview';
+import './functions/ListComponent';
export default class FolderNotesPlugin extends Plugin {
observer: MutationObserver;
settings: FolderNotesSettings;
@@ -143,8 +145,22 @@ export default class FolderNotesPlugin extends Plugin {
if (!this.settings.syncDelete) { return; }
this.app.vault.delete(folderNote);
}));
-
this.registerMarkdownCodeBlockProcessor('folder-overview', (source: string, el: HTMLElement, ctx: MarkdownPostProcessorContext) => {
+ const observer = new MutationObserver(() => {
+ const editButton = el.parentElement?.childNodes.item(1);
+ if (editButton) {
+ editButton.addEventListener('click', (e) => {
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ e.stopPropagation();
+ new FolderOverviewSettings(this.app, this, parseYaml(source), ctx, el).open();
+ }, { capture: true });
+ }
+ });
+ observer.observe(el, {
+ childList: true,
+ subtree: true,
+ });
createFolderOverview(this, source, el, ctx);
});
if (this.app.workspace.layoutReady) {
diff --git a/src/modals/confirmCreation.ts b/src/modals/confirmCreation.ts
index 08ae1b6..5180abc 100644
--- a/src/modals/confirmCreation.ts
+++ b/src/modals/confirmCreation.ts
@@ -1,6 +1,6 @@
import { App, Modal, Setting, TFolder } from 'obsidian';
import FolderNotesPlugin from '../main';
-import { createFolderNote } from 'src/folderNoteFunctions';
+import { createFolderNote } from 'src/functions/folderNoteFunctions';
export default class ConfirmationModal extends Modal {
plugin: FolderNotesPlugin;
app: App;
diff --git a/src/modals/deleteConfirmation.ts b/src/modals/deleteConfirmation.ts
index c76feed..18b427c 100644
--- a/src/modals/deleteConfirmation.ts
+++ b/src/modals/deleteConfirmation.ts
@@ -1,6 +1,6 @@
import { App, Modal, Setting, TFile, Platform } from 'obsidian';
import FolderNotesPlugin from '../main';
-import { getFolder } from 'src/folderNoteFunctions';
+import { getFolder } from 'src/functions/folderNoteFunctions';
export default class DeleteConfirmationModal extends Modal {
plugin: FolderNotesPlugin;
app: App;
diff --git a/src/modals/existingNote.ts b/src/modals/existingNote.ts
index a572c9b..0babd5e 100644
--- a/src/modals/existingNote.ts
+++ b/src/modals/existingNote.ts
@@ -1,6 +1,6 @@
import { App, Modal, Setting, TFile, Platform, TFolder, TAbstractFile } from 'obsidian';
import FolderNotesPlugin from '../main';
-import { turnIntoFolderNote } from 'src/folderNoteFunctions';
+import { turnIntoFolderNote } from 'src/functions/folderNoteFunctions';
export default class ExistingFolderNoteModal extends Modal {
plugin: FolderNotesPlugin;
app: App;
diff --git a/src/modals/folderOverview.ts b/src/modals/folderOverview.ts
new file mode 100644
index 0000000..a7e50af
--- /dev/null
+++ b/src/modals/folderOverview.ts
@@ -0,0 +1,171 @@
+import { App, Modal, Setting, MarkdownPostProcessorContext, stringifyYaml, TFile } from 'obsidian';
+import { yamlSettings } from 'src/folderOverview';
+import FolderNotesPlugin from '../main';
+import ListComponent from 'src/functions/ListComponent';
+export class FolderOverviewSettings extends Modal {
+ plugin: FolderNotesPlugin;
+ app: App;
+ yaml: yamlSettings;
+ ctx: MarkdownPostProcessorContext;
+ el: HTMLElement;
+ constructor(app: App, plugin: FolderNotesPlugin, yaml: yamlSettings, ctx: MarkdownPostProcessorContext, el: HTMLElement) {
+ super(app);
+ this.plugin = plugin;
+ this.app = app;
+ this.yaml = yaml;
+ this.ctx = ctx;
+ this.el = el;
+ }
+ onOpen() {
+ this.display();
+ }
+ display() {
+ const { contentEl } = this;
+ contentEl.empty();
+ // close when user presses enter
+ contentEl.addEventListener('keydown', (e) => {
+ if (e.key === 'Enter') {
+ this.close();
+ }
+ });
+ contentEl.createEl('h2', { text: 'Folder overview settings' });
+ new Setting(contentEl)
+ .setName('Disable the title')
+ .setDesc('Choose if the title should be shown')
+ .addToggle((toggle) =>
+ toggle
+ .setValue(this.yaml.disableTitle || false)
+ .onChange(async (value) => {
+ this.yaml.disableTitle = value;
+ this.display();
+ await this.updateYaml();
+ })
+ );
+ if (!this.yaml.disableTitle) {
+ new Setting(contentEl)
+ .setName('Title')
+ .setDesc('Choose the title of the folder overview')
+ .addText((text) =>
+ text
+ .setValue(this.yaml?.title || 'Folder overview')
+ .onChange(async (value) => {
+ this.yaml.title = value;
+ await this.updateYaml();
+ })
+ );
+ }
+ const setting = new Setting(contentEl);
+ setting.setName('Include types');
+ const list = setting.createList((list: ListComponent) =>
+ list
+ .addModal(this)
+ .setValues(this.yaml?.includeTypes || this.plugin.settings.defaultOverview.includeTypes || [])
+ .addResetButton()
+ );
+ if ((this.yaml?.includeTypes?.length || 0) < 3) {
+ setting.addDropdown((dropdown) => {
+ if (!this.yaml.includeTypes) this.yaml.includeTypes = this.plugin.settings.defaultOverview.includeTypes || [];
+ this.yaml.includeTypes = this.yaml.includeTypes.map((type: string) => type.toLowerCase());
+ if (!this.yaml.includeTypes.includes('markdown')) {
+ dropdown.addOption('Markdown', 'Markdown');
+ }
+ if (!this.yaml.includeTypes.includes('folder')) {
+ dropdown.addOption('Folder', 'Folder');
+ }
+ if (!this.yaml.includeTypes.includes('canvas')) {
+ dropdown.addOption('Canvas', 'Canvas');
+ }
+ dropdown.addOption('+', '+');
+ dropdown.setValue('+');
+ dropdown.onChange(async (value) => {
+ // @ts-ignore
+ await list.addValue(value.toLowerCase());
+ await this.updateYaml();
+ this.display();
+ });
+ });
+ }
+ if (this.yaml.includeTypes?.includes('canvas')) {
+ new Setting(contentEl)
+ .setName('Disable canvas tag')
+ .setDesc('Choose if the canvas tag should be shown')
+ .addToggle((toggle) => {
+ toggle
+ .setValue(this.yaml.disableCanvasTag || this.plugin.settings.defaultOverview.disableCanvasTag || false)
+ .onChange(async (value) => {
+ this.yaml.disableCanvasTag = value;
+ await this.updateYaml();
+ });
+ });
+ }
+
+ new Setting(contentEl)
+ .setName('File depth')
+ .setDesc('File & folder = +1 depth')
+ .addSlider((slider) =>
+ slider
+ .setValue(this.yaml?.depth || 1)
+ .setLimits(1, 10, 1)
+ .onChange(async (value) => {
+ this.yaml.depth = value;
+ await this.updateYaml();
+ })
+ );
+
+ new Setting(contentEl)
+ .setName('Overview style')
+ .setDesc('Choose the style of the overview (grid style soon)')
+ .addDropdown((dropdown) =>
+ dropdown
+ .addOption('list', 'List')
+ .addOption('grid', 'Grid')
+ .setValue(this.yaml?.style || 'list')
+ .onChange(async (value: 'list') => {
+ this.yaml.style = value;
+ await this.updateYaml();
+ })
+ );
+
+
+ }
+ onClose() {
+ const { contentEl } = this;
+ contentEl.empty();
+ }
+ async updateYaml() {
+ const file = this.plugin.app.vault.getAbstractFileByPath(this.ctx.sourcePath);
+ if (!(file instanceof TFile)) return;
+ let stringYaml = stringifyYaml(this.yaml);
+ await this.plugin.app.vault.process(file, (text) => {
+ const info = this.ctx.getSectionInfo(this.el);
+ // check if stringYaml ends with a newline
+ if (stringYaml[stringYaml.length - 1] !== '\n') {
+ stringYaml += '\n';
+ }
+ if (info) {
+ const { lineStart } = info;
+ const lineEnd = this.getCodeBlockEndLine(text, lineStart);
+ if (lineEnd === -1 || !lineEnd) return text;
+ const lineLength = lineEnd - lineStart;
+ const lines = text.split('\n');
+ lines.splice(lineStart, lineLength + 1, `\`\`\`folder-overview\n${stringYaml}\`\`\``);
+ return lines.join('\n');
+ }
+ return `\`\`\`folder-overview\n${stringYaml}\`\`\``;
+ });
+ }
+ getCodeBlockEndLine(text: string, startLine: number, count = 1) {
+ let line = startLine + 1;
+ const lines = text.split('\n');
+ while (line < lines.length) {
+ if (count > 20) { return -1; }
+ if (lines[line].startsWith('```')) {
+ return line;
+ }
+ line++;
+ count++;
+ }
+ return line;
+ }
+}
+
diff --git a/src/settings.ts b/src/settings.ts
index af1d774..4164d04 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -1,9 +1,10 @@
import { App, Notice, Platform, PluginSettingTab, Setting, TFile, TFolder } from 'obsidian';
import FolderNotesPlugin from './main';
import { TemplateSuggest } from './suggesters/templateSuggester';
-import { extractFolderName, getFolderNote } from './folderNoteFunctions';
+import { extractFolderName, getFolderNote } from './functions/folderNoteFunctions';
import { addExcludeFolderListItem, ExcludedFolder, addExcludedFolder, ExcludePattern, addExcludePatternListItem } from './excludedFolder';
// import ConfirmationModal from "./modals/confirmCreation";
+import { yamlSettings } from './folderOverview';
export interface FolderNotesSettings {
syncFolderName: boolean;
ctrlKey: boolean;
@@ -26,6 +27,7 @@ export interface FolderNotesSettings {
disableFolderHighlighting: boolean;
storageLocation: 'insideFolder' | 'parentFolder' | 'vaultFolder';
syncDelete: boolean;
+ defaultOverview: yamlSettings;
}
export const DEFAULT_SETTINGS: FolderNotesSettings = {
@@ -50,6 +52,14 @@ export const DEFAULT_SETTINGS: FolderNotesSettings = {
storageLocation: 'insideFolder',
syncDelete: false,
showRenameConfirmation: true,
+ defaultOverview: {
+ title: 'Folder overview',
+ disableTitle: false,
+ depth: 3,
+ includeTypes: ['folder', 'markdown'],
+ style: 'list',
+ disableCanvasTag: false,
+ },
};
export class SettingsTab extends PluginSettingTab {
plugin: FolderNotesPlugin;
diff --git a/styles.css b/styles.css
index be3a885..6e2ef56 100644
--- a/styles.css
+++ b/styles.css
@@ -40,6 +40,10 @@
display: none;
}
+.hide-folder .folder-name {
+ display: none;
+}
+
.nav-folder-collapse-indicator:hover {
cursor: pointer;
}
@@ -106,12 +110,17 @@
}
.folder-overview-list {
- margin-top : 0;
- margin-bottom: 0;
- padding-bottom: 1.200;
- padding-top: 1.200;
+ margin-top : 0 !important;
+ margin-bottom: 0 !important;
+ padding-bottom: 1.200 !important;
+ padding-top: 1.200 !important;
}
+.folder-overview-list-item {
+ display: flex;
+}
+
+
.folder-overview-list::marker {
color: var(--text-faint);
}