Initial import

This commit is contained in:
Julio Ruiz 2025-06-07 09:44:58 -05:00
commit 3b7a9de464
4751 changed files with 863128 additions and 0 deletions

1
.obsidian/app.json vendored Normal file
View File

@ -0,0 +1 @@
{}

4
.obsidian/appearance.json vendored Normal file
View File

@ -0,0 +1,4 @@
{
"theme": "moonstone",
"cssTheme": "Simple"
}

3
.obsidian/backlink.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"backlinkInDocument": true
}

23
.obsidian/community-plugins.json vendored Normal file
View File

@ -0,0 +1,23 @@
[
"dataview",
"obsidian-front-matter-title-plugin",
"obsidian-meta-bind-plugin",
"metadata-menu",
"frontmatter-links",
"searchpp",
"remotely-save",
"obsidian-pandoc",
"omnisearch",
"obsidian-local-rest-api",
"lemons-search",
"obsidian-git",
"file-tree-alternative",
"file-explorer-note-count",
"obsidian-dictionary-plugin",
"colored-tags",
"obsidian-bible-reference",
"word-frequency",
"better-search-views",
"editing-toolbar",
"anysocket-sync"
]

31
.obsidian/core-plugins.json vendored Normal file
View File

@ -0,0 +1,31 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"properties": true,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": true,
"editor-status": true,
"bookmarks": true,
"markdown-importer": true,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": true,
"file-recovery": true,
"publish": false,
"sync": true,
"webviewer": false
}

22
.obsidian/graph.json vendored Normal file
View File

@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": true,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.2588386562181638,
"close": false
}

View File

@ -0,0 +1,11 @@
{
"host": "192.168.10.69",
"port": "3010",
"password": "Devgcc2020*",
"syncEnabled": true,
"delayedSync": 3,
"autoSync": true,
"notifications": 1,
"deviceName": "WhiteMana",
"debug": false
}

5695
.obsidian/plugins/anysocket-sync/main.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
{
"id": "anysocket-sync",
"name": "AnySocket Sync",
"version": "1.3.3",
"minAppVersion": "0.15.0",
"description": "Self-Hosted synchronization for you Vault using AnySocket",
"author": "Andrei Vaduva",
"authorUrl": "https://github.com/lynxaegon",
"isDesktopOnly": false
}

View File

@ -0,0 +1,93 @@
.anysocket-ribbon-icon.offline {
color: red;
}
.anysocket-files-history .item-path {
font-size: var(--font-ui-medium);
}
.anysocket-files-history .item-metadata {
font-size: var(--font-ui-smaller);
padding: var(--size-4-1) var(--size-4-2) 0;
}
.anysocket-version-history {
padding: 0;
width: var(--modal-width);
height: var(--modal-height);
max-width: var(--modal-max-width);
max-height: var(--modal-max-height);
overflow: hidden;
display: flex;
flex-direction: column;
}
.anysocket-version-history .modal-content {
display: flex;
}
.anysocket-version-history .modal-content .history-list {
padding: var(--size-4-2) var(--size-4-2) 0;
display: flex;
flex-direction: column;
flex-basis: 250px;
flex-shrink: 0;
border-inline-end: 1px solid var(--background-modifier-border);
background-color: var(--background-secondary);
}
.anysocket-version-history .modal-content .version-timestamp {
padding: var(--size-4-2) var(--size-2-2) var(--size-4-2) var(--size-4-4);
margin-bottom: var(--size-2-1);
border-radius: var(--radius-s);
font-size: var(--font-ui-medium);
line-height: var(--line-height-tight);
color: var(--nav-item-color);
font-variant: tabular-nums;
}
.anysocket-version-history .modal-content .version-timestamp:hover {
background-color: var(--nav-item-background-active);
color: var(--nav-item-color-active);
}
.anysocket-version-history .modal-content .version-timestamp.active {
background-color: var(--nav-item-background-active);
color: var(--nav-item-color-active);
}
.anysocket-version-history .modal-content .version-container {
background-color: var(--background-primary);
padding: 0;
height: auto;
display: flex;
flex-direction: column;
width: "100%";
flex: 1 1 auto;
}
.anysocket-version-history .modal-content .version-content {
display: flex;
flex-direction: column;
flex-grow: 1;
overflow: hidden;
padding: 0;
}
.anysocket-version-history .modal-content .version-titlebar {
display: flex;
align-items: center;
padding: var(--size-4-2) var(--size-4-4);
border-bottom: 1px solid var(--background-modifier-border);
}
.anysocket-version-history .modal-content .version-filename {
font-size: var(--font-ui-medium);
font-weight: var(--file-header-font-weight);
flex-grow: 1;
}
.anysocket-version-history .modal-content .version-actions {
display: flex;
align-items: center;
gap: var(--size-4-1);
padding-inline-end: var(--size-4-8);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
{
"id": "better-search-views",
"name": "Better Search Views",
"version": "0.3.0",
"minAppVersion": "0.16.0",
"description": "Outliner-like breadcrumb trees for search, backlinks and embedded queries ",
"author": "ivan-lednev",
"authorUrl": "https://github.com/ivan-lednev",
"fundingUrl": "https://www.buymeacoffee.com/machineelf",
"isDesktopOnly": false
}

View File

@ -0,0 +1,190 @@
/* TODO: blockquotes need a better fix */
.better-search-views-file-match.markdown-rendered > *,
.better-search-views-file-match.markdown-rendered > blockquote > * {
margin-block-start: 0;
margin-block-end: 0;
white-space: normal;
}
.better-search-views-file-match.markdown-rendered ul > li,
.better-search-views-file-match.markdown-rendered ol > li {
margin-inline-start: calc(var(--list-indent) * 0.8);
}
.better-search-views-file-match > blockquote {
margin-inline-start: 0;
margin-inline-end: 0;
}
.better-search-views-file-match ul {
position: relative;
padding-inline-start: 0;
}
.better-search-views-file-match a {
cursor: default;
text-decoration: none;
}
/* Copied from Obsidian */
.better-search-views-file-match li > ul::before {
content: "\200B";
position: absolute;
top: 0;
bottom: 0;
left: -1em;
display: block;
border-right: var(--indentation-guide-width) solid
var(--indentation-guide-color);
}
.better-search-views-breadcrumbs {
display: flex;
align-items: center;
border-bottom: 1px solid var(--background-modifier-border);
}
.better-search-views-tree-item-children {
margin-left: 10px;
padding-left: 10px;
border-left: var(--nav-indentation-guide-width) solid
var(--indentation-guide-color);
}
.better-search-views-tree-item-children:hover {
border-left-color: var(--indentation-guide-color-active);
}
.better-search-views-breadcrumb-container {
display: flex;
gap: 0.5em;
align-items: flex-start;
}
.better-search-views-tree .tree-item-inner {
display: flex;
flex-direction: column;
flex-grow: 1;
gap: 2px;
padding-top: 4px;
padding-bottom: 4px;
border-radius: var(--radius-s);
}
.better-search-views-titles-container .tree-item-inner:not(:hover) {
color: var(--text-muted);
}
.search-result-file-matches:has(.better-search-views-tree) {
overflow: hidden;
font-size: var(--font-ui-smaller);
line-height: var(--line-height-tight);
color: var(--text-muted);
background-color: revert;
border-radius: var(--radius-s);
}
.search-result-file-matches:has(.better-search-views-tree),
.better-search-views-tree .search-result-file-matches {
margin: var(--size-4-1) 0 var(--size-4-1);
}
.better-search-views-tree .search-result-file-matches {
margin-left: 21px;
}
.tree-item.search-result
> .search-result-file-matches:has(.better-search-views-tree) {
/* This fixes box shadow in child match boxes */
padding-right: 1px;
box-shadow: none;
}
.search-result-file-matches:has(.better-search-views-tree)
.better-search-views-file-match:not(:hover) {
background-color: var(--search-result-background);
box-shadow: 0 0 0 1px var(--background-modifier-border);
}
.better-search-views-icon {
width: var(--icon-xs);
height: var(--icon-xs);
color: var(--text-faint);
}
.better-search-views-tree blockquote {
padding-left: 10px;
border-left: var(--blockquote-border-thickness) solid
var(--blockquote-border-color);
}
.better-search-views-tree .tree-item-inner:hover {
background-color: var(--nav-item-background-hover);
}
.better-search-views-tree .search-result-file-title {
padding-right: 0;
/* TODO: this is still hardcoded */
padding-left: calc(20px + var(--nav-indentation-guide-width));
}
body:not(.is-grabbing)
.better-search-views-tree
.tree-item-self.search-result-file-title:hover {
background-color: unset;
}
.better-search-views-tree .better-search-views-breadcrumb-container {
flex-grow: 1;
padding-right: 2px;
padding-left: 2px;
}
.better-search-views-tree
.better-search-views-breadcrumb-container:not(:last-child) {
padding-bottom: 2px;
border-bottom: var(--nav-indentation-guide-width) solid
var(--nav-indentation-guide-color);
}
.better-search-views-breadcrumb-token {
color: var(--text-faint);
display: flex;
align-items: center;
height: calc(1em * var(--line-height-tight));
}
.better-search-views-tree .collapse-icon {
display: flex;
align-items: center;
align-self: flex-start;
padding-top: 4px;
padding-bottom: 2px;
border-radius: var(--radius-s);
}
.better-search-views-titles-container {
display: flex;
flex-direction: column;
flex-grow: 1;
}
.markdown-source-view.mod-cm6
.better-search-views-tree
.task-list-item-checkbox {
margin-inline-start: calc(var(--checkbox-size) * -1.5);
}
.better-search-views-is-hidden {
display: none;
}

35882
.obsidian/plugins/breadcrumbs/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "breadcrumbs",
"name": "Breadcrumbs",
"version": "3.6.11",
"minAppVersion": "0.15.2",
"description": "Visualise & navigate your vault's structure",
"author": "SkepticMystic",
"authorUrl": "https://github.com/SkepticMystic/breadcrumbs",
"isDesktopOnly": false
}

113
.obsidian/plugins/breadcrumbs/styles.css vendored Normal file
View File

@ -0,0 +1,113 @@
.BC-trail {
border: 1px solid var(--background-modifier-border);
border-radius: 5px;
padding: 5px;
margin-bottom: 5px !important;
}
/* completely hides the trail when "no path found message" is left empty and no path is found */
.BC-trail:empty {
display: none;
}
.BC-matrix-square li {
text-align: left;
}
/* ensure empty headers not leaving an element */
.BC-Matrix .BC-Matrix-square .BC-Matrix-header:empty {
display: none;
}
.internal-link.BC-Link {
color: var(--text-accent);
}
.internal-link.BC-Link:hover {
color: var(--text-accent-hover, var(--text-accent));
}
.vis-view-options > * {
padding: 5px;
}
/* Source: https://svelte.dev/repl/3153faf7584d40bd8ddebecf39f24ac1?version=3.41.0 */
[data-tooltip] {
position: relative;
/* z-index: 2; */
/* display: block; */
}
[data-tooltip]:before,
[data-tooltip]:after {
visibility: hidden;
opacity: 0;
pointer-events: none;
transition: 0.2s ease-out;
transform: translate(-50%, 5px);
}
[data-tooltip]:before {
position: absolute;
top: 80%;
/* bottom: 100%; */
left: 50%;
margin-bottom: 5px;
padding: 7px;
width: fit-content;
height: fit-content;
min-width: 200px;
min-height: 200px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
background-color: var(--background-primary);
color: var(--text-normal);
content: attr(data-tooltip);
text-align: center;
font-size: var(--font-medium);
line-height: 1.2;
transition: 0.2s ease-out;
white-space: pre-line;
z-index: 100;
}
/* [data-tooltip]:after {
position: absolute;
top: 80%;
left: 50%;
width: 0;
border-top: 5px solid #000;
border-top: 5px solid hsla(0, 0%, 20%, 0.9);
border-right: 5px solid transparent;
border-left: 5px solid transparent;
background-color: red;
content: " ";
font-size: 0;
line-height: 0;
} */
[data-tooltip]:hover:before,
[data-tooltip]:hover:after {
visibility: visible;
opacity: 1;
transform: translate(-50%, 0);
}
[data-tooltip="false"]:hover:before,
[data-tooltip="false"]:hover:after {
visibility: hidden;
opacity: 0;
}
.thread-dir-templates .setting-item-control {
display: flex;
flex-direction: column;
}
.juggl-hide {
display: none;
}
[data-type="BC-matrix"] div.view-content {
overflow: hidden !important;
}

View File

@ -0,0 +1,16 @@
{
"palette": {
"seed": 0,
"selected": "adaptive-soft",
"custom": "e12729-f37324-f8cc1b-72b043-007f4e"
},
"mixColors": true,
"transition": true,
"accessibility": {
"highTextContrast": false
},
"knownTags": {
"0070c0": 1
},
"_version": 3
}

3776
.obsidian/plugins/colored-tags/main.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
{
"id": "colored-tags",
"name": "Colored Tags",
"version": "5.0.1",
"minAppVersion": "0.15.0",
"description": "Colorizes tags in different colors. Colors of nested tags are mixed with the root tag to improve readability. Text color contrast is automatically matched to comply with AA level of WCAG 2.1.",
"author": "Pavel Frankov",
"authorUrl": "https://github.com/pfrankov",
"isDesktopOnly": false
}

27
.obsidian/plugins/dataview/data.json vendored Normal file
View File

@ -0,0 +1,27 @@
{
"renderNullAs": "\\-",
"taskCompletionTracking": false,
"taskCompletionUseEmojiShorthand": false,
"taskCompletionText": "completion",
"taskCompletionDateFormat": "yyyy-MM-dd",
"recursiveSubTaskCompletion": false,
"warnOnEmptyResult": true,
"refreshEnabled": true,
"refreshInterval": 2500,
"defaultDateFormat": "MMMM dd, yyyy",
"defaultDateTimeFormat": "h:mm a - MMMM dd, yyyy",
"maxRecursiveRenderDepth": 4,
"tableIdColumnName": "File",
"tableGroupColumnName": "Group",
"showResultCount": true,
"allowHtml": true,
"inlineQueryPrefix": "=",
"inlineJsQueryPrefix": "$=",
"inlineQueriesInCodeblocks": true,
"enableInlineDataview": true,
"enableDataviewJs": true,
"enableInlineDataviewJs": true,
"prettyRenderInlineFields": true,
"prettyRenderInlineFieldsInLivePreview": true,
"dataviewJsKeyword": "dataviewjs"
}

20876
.obsidian/plugins/dataview/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.68",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",
"authorUrl": "https://github.com/blacksmithgu",
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
"isDesktopOnly": false
}

141
.obsidian/plugins/dataview/styles.css vendored Normal file
View File

@ -0,0 +1,141 @@
.block-language-dataview {
overflow-y: auto;
}
/*****************/
/** Table Views **/
/*****************/
/* List View Default Styling; rendered internally as a table. */
.table-view-table {
width: 100%;
}
.table-view-table > thead > tr, .table-view-table > tbody > tr {
margin-top: 1em;
margin-bottom: 1em;
text-align: left;
}
.table-view-table > tbody > tr:hover {
background-color: var(--table-row-background-hover);
}
.table-view-table > thead > tr > th {
font-weight: 700;
font-size: larger;
border-top: none;
border-left: none;
border-right: none;
border-bottom: solid;
max-width: 100%;
}
.table-view-table > tbody > tr > td {
text-align: left;
border: none;
font-weight: 400;
max-width: 100%;
}
.table-view-table ul, .table-view-table ol {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Rendered value styling for any view. */
.dataview-result-list-root-ul {
padding: 0em !important;
margin: 0em !important;
}
.dataview-result-list-ul {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Generic grouping styling. */
.dataview.result-group {
padding-left: 8px;
}
/*******************/
/** Inline Fields **/
/*******************/
.dataview.inline-field-key {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-primary-alt);
color: var(--nav-item-color-selected);
}
.dataview.inline-field-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--nav-item-color-selected);
}
.dataview.inline-field-standalone-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--nav-item-color-selected);
}
/***************/
/** Task View **/
/***************/
.dataview.task-list-item, .dataview.task-list-basic-item {
margin-top: 3px;
margin-bottom: 3px;
transition: 0.4s;
}
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
background-color: var(--text-selection);
box-shadow: -40px 0 0 var(--text-selection);
cursor: pointer;
}
/*****************/
/** Error Views **/
/*****************/
div.dataview-error-box {
width: 100%;
min-height: 150px;
display: flex;
align-items: center;
justify-content: center;
border: 4px dashed var(--background-secondary);
}
.dataview-error-message {
color: var(--text-muted);
text-align: center;
}
/*************************/
/** Additional Metadata **/
/*************************/
.dataview.small-text {
font-size: smaller;
color: var(--text-muted);
margin-left: 3px;
}
.dataview.small-text::before {
content: "(";
}
.dataview.small-text::after {
content: ")";
}

View File

@ -0,0 +1,328 @@
{
"lastVersion": "3.1.16",
"aestheticStyle": "default",
"positionStyle": "top",
"menuCommands": [
{
"id": "editing-toolbar:editor-undo",
"name": "Undo editor",
"icon": "undo-glyph"
},
{
"id": "editing-toolbar:editor-redo",
"name": "Redo editor",
"icon": "redo-glyph"
},
{
"id": "editing-toolbar:toggle-format-brush",
"name": "Format Brush",
"icon": "paintbrush"
},
{
"id": "editing-toolbar:format-eraser",
"name": "Clear text formatting",
"icon": "eraser"
},
{
"id": "editing-toolbar:header2-text",
"name": "Header 2",
"icon": "header-2"
},
{
"id": "editing-toolbar:header3-text",
"name": "Header 3",
"icon": "header-3"
},
{
"id": "SubmenuCommands-header",
"name": "submenu",
"icon": "header-n",
"SubmenuCommands": [
{
"id": "editing-toolbar:header1-text",
"name": "Header 1",
"icon": "header-1"
},
{
"id": "editing-toolbar:header4-text",
"name": "Header 4",
"icon": "header-4"
},
{
"id": "editing-toolbar:header5-text",
"name": "Header 5",
"icon": "header-5"
},
{
"id": "editing-toolbar:header6-text",
"name": "Header 6",
"icon": "header-6"
}
]
},
{
"id": "editing-toolbar:toggle-bold",
"name": "Bold",
"icon": "bold-glyph"
},
{
"id": "editing-toolbar:toggle-italics",
"name": "Italics",
"icon": "italic-glyph"
},
{
"id": "editing-toolbar:toggle-strikethrough",
"name": "Strikethrough",
"icon": "strikethrough-glyph"
},
{
"id": "editing-toolbar:underline",
"name": "Underline",
"icon": "underline-glyph"
},
{
"id": "editing-toolbar:toggle-highlight",
"name": "==Highlight==",
"icon": "highlight-glyph"
},
{
"id": "SubmenuCommands-lucdf3en5",
"name": "submenu",
"icon": "edit",
"SubmenuCommands": [
{
"id": "editing-toolbar:editor-copy",
"name": "Copy",
"icon": "lucide-copy"
},
{
"id": "editing-toolbar:editor-cut",
"name": "Cut",
"icon": "lucide-scissors"
},
{
"id": "editing-toolbar:editor-paste",
"name": "Paste",
"icon": "lucide-clipboard-type"
},
{
"id": "editing-toolbar:editor:swap-line-down",
"name": "Swap line down",
"icon": "lucide-corner-right-down"
},
{
"id": "editing-toolbar:editor:swap-line-up",
"name": "Swap line up",
"icon": "lucide-corner-right-up"
}
]
},
{
"id": "editing-toolbar:editor:attach-file",
"name": "Attach file",
"icon": "lucide-paperclip"
},
{
"id": "editing-toolbar:editor:insert-table",
"name": "Insert Table",
"icon": "lucide-table"
},
{
"id": "editing-toolbar:editor:cycle-list-checklist",
"name": "Cycle list checklist",
"icon": "check-circle"
},
{
"id": "SubmenuCommands-luc8efull",
"name": "submenu",
"icon": "message-square",
"SubmenuCommands": [
{
"id": "editing-toolbar:editor:toggle-blockquote",
"name": "Blockquote",
"icon": "lucide-text-quote"
},
{
"id": "editing-toolbar:insert-callout",
"name": "Insert Callout ",
"icon": "lucide-quote"
}
]
},
{
"id": "SubmenuCommands-mdcmder",
"name": "submenu",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M464 608 l0 -568 q0 -3 -2.5 -5.5 q-2.5 -2.5 -5.5 -2.5 l-80 0 q-3 0 -5.5 2.5 q-2.5 2.5 -2.5 5.5 l0 568 l-232 0 q-3 0 -5.5 2.5 q-2.5 2.5 -2.5 5.5 l0 80 q0 3 2.5 5.5 q2.5 2.5 5.5 2.5 l560 0 q3 0 5.5 -2.5 q2.5 -2.5 2.5 -5.5 l0 -80 q0 -3 -2.5 -5.5 q-2.5 -2.5 -5.5 -2.5 l-232 0 ZM864 696 q17 0 28.5 11.5 q11.5 11.5 11.5 28.5 q0 17 -11.5 28.5 q-11.5 11.5 -28.5 11.5 q-17 0 -28.5 -11.5 q-11.5 -11.5 -11.5 -28.5 q0 -17 11.5 -28.5 q11.5 -11.5 28.5 -11.5 ZM864 640 q-40 0 -68 28 q-28 28 -28 68 q0 40 28 68 q28 28 68 28 q40 0 68 -28 q28 -28 28 -68 q0 -40 -28 -68 q-28 -28 -68 -28 ZM576 322 l0 -63 q0 -3 2 -5 l89 -70 l-89 -70 q-2 -2 -2 -5 l0 -63 q0 -4 3.5 -5.5 q3.5 -1.5 6.5 0.5 l170 133 q4 3 4.5 8.5 q0.5 5.5 -2.5 9.5 l-2 2 l-170 133 q-3 2 -6.5 0.5 q-3.5 -1.5 -3.5 -5.5 ZM256 322 l0 -63 q0 -3 -2 -5 l-89 -70 l89 -70 q2 -2 2 -5 l0 -63 q0 -4 -3.5 -5.5 q-3.5 -1.5 -6.5 0.5 l-170 133 q-4 3 -4.5 8.5 q-0.5 5.5 2.5 9.5 l2 2 l170 133 q3 2 6.5 0.5 q3.5 -1.5 3.5 -5.5 Z\"></path></g></svg>",
"SubmenuCommands": [
{
"id": "editing-toolbar:superscript",
"name": "Superscript",
"icon": "superscript-glyph"
},
{
"id": "editing-toolbar:subscript",
"name": "Subscript",
"icon": "subscript-glyph"
},
{
"id": "editing-toolbar:editor:toggle-code",
"name": "Inline code",
"icon": "code-glyph"
},
{
"id": "editing-toolbar:codeblock",
"name": "Code block",
"icon": "codeblock-glyph"
},
{
"id": "editing-toolbar:editor:insert-wikilink",
"name": "Insert wikilink [[]]",
"icon": "<svg width=\"15\" height=\"15\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M306 134 l91 0 q1 0 1 -8 l0 -80 q0 -8 -1 -8 l-91 0 q-1 0 -1 7 q0 -8 -5 -8 l-45 0 q-5 0 -5 8 l0 784 q0 8 5 8 l45 0 q5 0 5 -8 q0 8 1 8 l91 0 q1 0 1 -8 l0 -80 q0 -8 -1 -8 l-91 0 q-1 0 -1 8 l0 -623 q0 8 1 8 ZM139 134 l91 0 q1 0 1 -8 l0 -80 q0 -8 -1 -8 l-91 0 q-1 0 -1 7 q0 -8 -5 -8 l-45 0 q-5 0 -5 8 l0 784 q0 8 5 8 l45 0 q5 0 5 -8 q0 8 1 8 l91 0 q1 0 1 -8 l0 -80 q0 -8 -1 -8 l-91 0 q-1 0 -1 8 l0 -623 q0 8 1 8 ZM711 134 q1 0 1 -8 l0 623 q0 -8 -1 -8 l-91 0 q-1 0 -1 8 l0 80 q0 8 1 8 l91 0 q1 0 1 -8 q0 8 4 8 l46 0 q4 0 4 -8 l0 -784 q0 -8 -4 -8 l-46 0 q-4 0 -4 8 q0 -7 -1 -7 l-91 0 q-1 0 -1 8 l0 80 q0 8 1 8 l91 0 ZM878 134 q1 0 1 -8 l0 623 q0 -8 -1 -8 l-91 0 q-1 0 -1 8 l0 80 q0 8 1 8 l91 0 q1 0 1 -8 q0 8 5 8 l45 0 q4 0 4 -8 l0 -784 q0 -8 -4 -8 l-45 0 q-5 0 -5 8 q0 -7 -1 -7 l-91 0 q-1 0 -1 8 l0 80 q0 8 1 8 l91 0 Z\"></path></g></svg>"
},
{
"id": "editing-toolbar:editor:insert-embed",
"name": "Insert embed ![[]]",
"icon": "note-glyph"
},
{
"id": "editing-toolbar:insert-link",
"name": "Insert link []()",
"icon": "link-glyph"
},
{
"id": "editing-toolbar:hrline",
"name": "Horizontal divider",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M912 424 l0 -80 q0 -3 -2.5 -5.5 q-2.5 -2.5 -5.5 -2.5 l-784 0 q-3 0 -5.5 2.5 q-2.5 2.5 -2.5 5.5 l0 80 q0 3 2.5 5.5 q2.5 2.5 5.5 2.5 l784 0 q3 0 5.5 -2.5 q2.5 -2.5 2.5 -5.5 Z\"></path></g></svg>"
},
{
"id": "editing-toolbar:toggle-inline-math",
"name": "Inline math",
"icon": "lucide-sigma"
},
{
"id": "editing-toolbar:editor:insert-mathblock",
"name": "MathBlock",
"icon": "lucide-sigma-square"
}
]
},
{
"id": "SubmenuCommands-list",
"name": "submenu-list",
"icon": "bullet-list-glyph",
"SubmenuCommands": [
{
"id": "editing-toolbar:editor:toggle-checklist-status",
"name": "Checklist",
"icon": "checkbox-glyph"
},
{
"id": "editing-toolbar:renumber-ordered-list",
"name": "Renumber ordered list",
"icon": "list-restart"
},
{
"id": "editing-toolbar:toggle-numbered-list",
"name": "Numbered list",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M860 424 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-457 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l457 0 ZM860 756 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-457 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l457 0 ZM860 92 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-457 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l457 0 ZM264 136 l-3 -3 l-51 -57 l56 0 q14 0 24.5 -10 q10.5 -10 11.5 -25 l0 -1 q0 -15 -10.5 -25.5 q-10.5 -10.5 -24.5 -10.5 l-137 0 q-15 0 -25 10 q-10 10 -11 24.5 q-1 14.5 9 25.5 l63 70 l49 54 q7 7 7 16.5 q0 9.5 -7.5 16.5 q-7.5 7 -18.5 7 q-11 0 -18.5 -6.5 q-7.5 -6.5 -8.5 -16.5 l0 0 q0 -15 -10.5 -25.5 q-10.5 -10.5 -25.5 -10.5 q-15 0 -25.5 10.5 q-10.5 10.5 -10.5 25.5 q0 26 13.5 47.5 q13.5 21.5 36 34.5 q22.5 13 49 13 q26.5 0 49.5 -13 q23 -13 36 -34.5 q13 -21.5 13 -47.5 q0 -20 -7.5 -37.5 q-7.5 -17.5 -21.5 -30.5 l-1 -1 ZM173 794 q11 11 25 10.5 q14 -0.5 24.5 -10.5 q10.5 -10 10.5 -25 l0 -293 q0 -15 -10 -25.5 q-10 -10.5 -25 -10.5 q-15 0 -25.5 10 q-10.5 10 -11.5 25 l0 211 q-10 -8 -23.5 -7 q-13.5 1 -22.5 11 l-1 0 q-10 11 -9.5 25.5 q0.5 14.5 10.5 24.5 l58 54 Z\"></path></g></svg>"
},
{
"id": "editing-toolbar:toggle-bullet-list",
"name": "Bullet list",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M860 424 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-477 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l477 0 ZM860 756 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-477 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l477 0 ZM860 92 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-477 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l477 0 ZM176 716 l0 0 ZM112 716 q0 -27 18.5 -45.5 q18.5 -18.5 45.5 -18.5 q27 0 45.5 18.5 q18.5 18.5 18.5 45.5 q0 27 -18.5 45.5 q-18.5 18.5 -45.5 18.5 q-27 0 -45.5 -18.5 q-18.5 -18.5 -18.5 -45.5 ZM176 384 l0 0 ZM112 384 q0 -27 18.5 -45.5 q18.5 -18.5 45.5 -18.5 q27 0 45.5 18.5 q18.5 18.5 18.5 45.5 q0 27 -18.5 45.5 q-18.5 18.5 -45.5 18.5 q-27 0 -45.5 -18.5 q-18.5 -18.5 -18.5 -45.5 ZM176 52 l0 0 ZM112 52 q0 -27 18.5 -45.5 q18.5 -18.5 45.5 -18.5 q27 0 45.5 18.5 q18.5 18.5 18.5 45.5 q0 27 -18.5 45.5 q-18.5 18.5 -45.5 18.5 q-27 0 -45.5 -18.5 q-18.5 -18.5 -18.5 -45.5 Z\"></path></g></svg>"
},
{
"id": "editing-toolbar:undent-list",
"name": "Unindent-list",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M872 302 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-429 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l429 0 ZM872 542 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-429 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l429 0 ZM872 784 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 ZM872 62 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 ZM244 534 l-123 -122 q-8 -7 -8 -18 q0 -11 8 -18 l123 -122 q8 -7 19 -7 q11 0 18.5 7.5 q7.5 7.5 7.5 18.5 l0 242 q0 11 -7.5 18.5 q-7.5 7.5 -18.5 7.5 q-11 0 -19 -7 Z\"></path></g></svg>"
},
{
"id": "editing-toolbar:indent-list",
"name": "Indent list",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M872 302 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-429 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l429 0 ZM872 542 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-429 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l429 0 ZM872 784 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 ZM872 62 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 ZM158 534 l124 -122 q7 -7 7 -18 q0 -11 -7 -18 l-124 -122 q-7 -7 -18 -7 q-11 0 -19 7.5 q-8 7.5 -8 18.5 l0 242 q0 11 8 18.5 q8 7.5 19 7.5 q11 0 18 -7 Z\"></path></g></svg>"
}
]
},
{
"id": "SubmenuCommands-aligin",
"name": "submenu-aligin",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M724 304 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-421 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l421 0 ZM872 540 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 ZM724 776 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-421 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l421 0 ZM872 68 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 Z\"></path></g></svg>",
"SubmenuCommands": [
{
"id": "editing-toolbar:justify",
"name": "<p aligin=\"justify\"></p>",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M112 736 l0 0 ZM120 736 l784 0 q8 0 8 -8 l0 -80 q0 -8 -8 -8 l-784 0 q-8 0 -8 8 l0 80 q0 8 8 8 ZM112 331 l0 0 ZM120 331 l784 0 q8 0 8 -8 l0 -80 q0 -8 -8 -8 l-784 0 q-8 0 -8 8 l0 80 q0 8 8 8 ZM112 128 l0 0 ZM120 128 l784 0 q8 0 8 -8 l0 -80 q0 -8 -8 -8 l-784 0 q-8 0 -8 8 l0 80 q0 8 8 8 ZM112 533 l0 0 ZM120 533 l784 0 q8 0 8 -8 l0 -80 q0 -8 -8 -8 l-784 0 q-8 0 -8 8 l0 80 q0 8 8 8 Z\"></path></g></svg>"
},
{
"id": "editing-toolbar:left",
"name": "<p aligin=\"left\"></p>",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M572 304 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-421 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l421 0 ZM872 540 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 ZM572 776 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-421 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l421 0 ZM872 68 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 Z\"></path></g></svg>"
},
{
"id": "editing-toolbar:center",
"name": "<center>",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M724 304 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-421 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l421 0 ZM872 540 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 ZM724 776 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-421 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l421 0 ZM872 68 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 Z\"></path></g></svg>"
},
{
"id": "editing-toolbar:right",
"name": "<p aligin=\"right\"></p>",
"icon": "<svg width=\"18\" height=\"18\" focusable=\"false\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\"><g transform=\"scale(1, -1) translate(0, -896) scale(0.9, 0.9) \"><path class=\"path\" d=\"M872 304 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-421 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l421 0 ZM872 540 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 ZM872 776 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-421 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l421 0 ZM872 68 q17 0 28.5 -11.5 q11.5 -11.5 11.5 -28 q0 -16.5 -11.5 -28.5 q-11.5 -12 -27.5 -12 l-721 0 q-17 0 -28.5 11.5 q-11.5 11.5 -11.5 28 q0 16.5 11.5 28.5 q11.5 12 27.5 12 l721 0 Z\"></path></g></svg>"
}
]
},
{
"id": "editing-toolbar:change-font-color",
"name": "Change font color[html]",
"icon": "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" focusable=\"false\" fill=\"currentColor\"><g fill-rule=\"evenodd\"><path id=\"change-font-color-icon\" d=\"M3 18h18v3H3z\" style=\"fill:#2DC26B\"></path><path d=\"M8.7 16h-.8a.5.5 0 01-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 01-.5.6h-.8a.5.5 0 01-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4zm2.6-7.6l-.6 2a.5.5 0 00.5.6h1.6a.5.5 0 00.5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4z\"></path></g></svg>"
},
{
"id": "editing-toolbar:change-background-color",
"name": "Change Backgroundcolor[html]",
"icon": "<svg width=\"18\" height=\"24\" viewBox=\"0 0 256 256\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g stroke=\"none\" stroke-width=\"1\" fill=\"currentColor\" fill-rule=\"evenodd\"><g ><g fill=\"currentColor\"><g transform=\"translate(119.502295, 137.878331) rotate(-135.000000) translate(-119.502295, -137.878331) translate(48.002295, 31.757731)\" ><path d=\"M100.946943,60.8084699 L43.7469427,60.8084699 C37.2852111,60.8084699 32.0469427,66.0467383 32.0469427,72.5084699 L32.0469427,118.70847 C32.0469427,125.170201 37.2852111,130.40847 43.7469427,130.40847 L100.946943,130.40847 C107.408674,130.40847 112.646943,125.170201 112.646943,118.70847 L112.646943,72.5084699 C112.646943,66.0467383 107.408674,60.8084699 100.946943,60.8084699 Z M93.646,79.808 L93.646,111.408 L51.046,111.408 L51.046,79.808 L93.646,79.808 Z\" fill-rule=\"nonzero\"></path><path d=\"M87.9366521,16.90916 L87.9194966,68.2000001 C87.9183543,69.4147389 86.9334998,70.399264 85.7187607,70.4 L56.9423078,70.4 C55.7272813,70.4 54.7423078,69.4150264 54.7423078,68.2 L54.7423078,39.4621057 C54.7423078,37.2523513 55.5736632,35.1234748 57.0711706,33.4985176 L76.4832996,12.4342613 C78.9534987,9.75382857 83.1289108,9.5834005 85.8093436,12.0535996 C87.1658473,13.303709 87.9372691,15.0644715 87.9366521,16.90916 Z\" fill-rule=\"evenodd\"></path><path d=\"M131.3,111.241199 L11.7,111.241199 C5.23826843,111.241199 0,116.479467 0,122.941199 L0,200.541199 C0,207.002931 5.23826843,212.241199 11.7,212.241199 L131.3,212.241199 C137.761732,212.241199 143,207.002931 143,200.541199 L143,122.941199 C143,116.479467 137.761732,111.241199 131.3,111.241199 Z M124,130.241 L124,193.241 L19,193.241 L19,130.241 L124,130.241 Z\" fill-rule=\"nonzero\"></path></g></g><path d=\"M51,218 L205,218 C211.075132,218 216,222.924868 216,229 C216,235.075132 211.075132,240 205,240 L51,240 C44.9248678,240 40,235.075132 40,229 C40,222.924868 44.9248678,218 51,218 Z\" id=\"change-background-color-icon\" style=\"fill:#FA541C\"></path></g></g></svg>"
},
{
"id": "editing-toolbar:fullscreen-focus",
"name": "Fullscreen focus mode",
"icon": "fullscreen"
},
{
"id": "editing-toolbar:workplace-fullscreen-focus",
"name": "Workplace-Fullscreen ",
"icon": "exit-fullscreen"
}
],
"followingCommands": [],
"topCommands": [],
"fixedCommands": [],
"mobileCommands": [],
"enableMultipleConfig": false,
"appendMethod": "workspace",
"shouldShowMenuOnSelect": false,
"cMenuVisibility": true,
"cMenuBottomValue": 4.25,
"cMenuNumRows": 12,
"cMenuWidth": 610,
"cMenuFontColor": "#c6d9f0",
"cMenuBackgroundColor": "#d3f8b6",
"autohide": false,
"Iscentered": false,
"custom_bg1": "#FFB78B8C",
"custom_bg2": "#CDF4698C",
"custom_bg3": "#A0CCF68C",
"custom_bg4": "#F0A7D88C",
"custom_bg5": "#ADEFEF8C",
"custom_fc1": "#D83931",
"custom_fc2": "#DE7802",
"custom_fc3": "#245BDB",
"custom_fc4": "#6425D0",
"custom_fc5": "#646A73",
"isLoadOnMobile": false,
"horizontalPosition": 0,
"verticalPosition": 0,
"formatBrushes": {},
"customCommands": [],
"viewTypeSettings": {},
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
"toolbarIconColor": "var(--text-normal)",
"toolbarIconSize": 18
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "editing-toolbar",
"name": "Editing Toolbar",
"version": "3.1.16",
"minAppVersion": "0.14.0",
"description": "The Obsidian Editing Toolbar is modified from cmenu, which provides more powerful customization settings and has many built-in editing commands to be a MS Word-like toolbar editing experience.",
"author": "Cuman",
"authorUrl": "https://github.com/cumany/obsidian-editing-toolbar",
"isDesktopOnly": false
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
{
"showAllNumbers": true,
"filterList": [
"md"
],
"blacklist": false,
"addRootFolder": false
}

View File

@ -0,0 +1,970 @@
'use strict';
var obsidian = require('obsidian');
/******************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
var e = new Error(message);
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};
// 'path' module extracted from Node.js v8.11.1 (only the posix part)
function assertPath(path) {
if (typeof path !== 'string') {
throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));
}
}
// Resolves . and .. elements in a path with directory names
function normalizeStringPosix(path, allowAboveRoot) {
var res = '';
var lastSegmentLength = 0;
var lastSlash = -1;
var dots = 0;
var code;
for (var i = 0; i <= path.length; ++i) {
if (i < path.length)
code = path.charCodeAt(i);
else if (code === 47 /*/*/)
break;
else
code = 47 /*/*/;
if (code === 47 /*/*/) {
if (lastSlash === i - 1 || dots === 1) ; else if (lastSlash !== i - 1 && dots === 2) {
if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {
if (res.length > 2) {
var lastSlashIndex = res.lastIndexOf('/');
if (lastSlashIndex !== res.length - 1) {
if (lastSlashIndex === -1) {
res = '';
lastSegmentLength = 0;
} else {
res = res.slice(0, lastSlashIndex);
lastSegmentLength = res.length - 1 - res.lastIndexOf('/');
}
lastSlash = i;
dots = 0;
continue;
}
} else if (res.length === 2 || res.length === 1) {
res = '';
lastSegmentLength = 0;
lastSlash = i;
dots = 0;
continue;
}
}
if (allowAboveRoot) {
if (res.length > 0)
res += '/..';
else
res = '..';
lastSegmentLength = 2;
}
} else {
if (res.length > 0)
res += '/' + path.slice(lastSlash + 1, i);
else
res = path.slice(lastSlash + 1, i);
lastSegmentLength = i - lastSlash - 1;
}
lastSlash = i;
dots = 0;
} else if (code === 46 /*.*/ && dots !== -1) {
++dots;
} else {
dots = -1;
}
}
return res;
}
function _format(sep, pathObject) {
var dir = pathObject.dir || pathObject.root;
var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');
if (!dir) {
return base;
}
if (dir === pathObject.root) {
return dir + base;
}
return dir + sep + base;
}
var posix = {
// path.resolve([from ...], to)
resolve: function resolve() {
var resolvedPath = '';
var resolvedAbsolute = false;
var cwd;
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
var path;
if (i >= 0)
path = arguments[i];
else {
if (cwd === undefined)
cwd = process.cwd();
path = cwd;
}
assertPath(path);
// Skip empty entries
if (path.length === 0) {
continue;
}
resolvedPath = path + '/' + resolvedPath;
resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;
}
// At this point the path should be resolved to a full absolute path, but
// handle relative paths to be safe (might happen when process.cwd() fails)
// Normalize the path
resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);
if (resolvedAbsolute) {
if (resolvedPath.length > 0)
return '/' + resolvedPath;
else
return '/';
} else if (resolvedPath.length > 0) {
return resolvedPath;
} else {
return '.';
}
},
normalize: function normalize(path) {
assertPath(path);
if (path.length === 0) return '.';
var isAbsolute = path.charCodeAt(0) === 47 /*/*/;
var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;
// Normalize the path
path = normalizeStringPosix(path, !isAbsolute);
if (path.length === 0 && !isAbsolute) path = '.';
if (path.length > 0 && trailingSeparator) path += '/';
if (isAbsolute) return '/' + path;
return path;
},
isAbsolute: function isAbsolute(path) {
assertPath(path);
return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;
},
join: function join() {
if (arguments.length === 0)
return '.';
var joined;
for (var i = 0; i < arguments.length; ++i) {
var arg = arguments[i];
assertPath(arg);
if (arg.length > 0) {
if (joined === undefined)
joined = arg;
else
joined += '/' + arg;
}
}
if (joined === undefined)
return '.';
return posix.normalize(joined);
},
relative: function relative(from, to) {
assertPath(from);
assertPath(to);
if (from === to) return '';
from = posix.resolve(from);
to = posix.resolve(to);
if (from === to) return '';
// Trim any leading backslashes
var fromStart = 1;
for (; fromStart < from.length; ++fromStart) {
if (from.charCodeAt(fromStart) !== 47 /*/*/)
break;
}
var fromEnd = from.length;
var fromLen = fromEnd - fromStart;
// Trim any leading backslashes
var toStart = 1;
for (; toStart < to.length; ++toStart) {
if (to.charCodeAt(toStart) !== 47 /*/*/)
break;
}
var toEnd = to.length;
var toLen = toEnd - toStart;
// Compare paths to find the longest common path from root
var length = fromLen < toLen ? fromLen : toLen;
var lastCommonSep = -1;
var i = 0;
for (; i <= length; ++i) {
if (i === length) {
if (toLen > length) {
if (to.charCodeAt(toStart + i) === 47 /*/*/) {
// We get here if `from` is the exact base path for `to`.
// For example: from='/foo/bar'; to='/foo/bar/baz'
return to.slice(toStart + i + 1);
} else if (i === 0) {
// We get here if `from` is the root
// For example: from='/'; to='/foo'
return to.slice(toStart + i);
}
} else if (fromLen > length) {
if (from.charCodeAt(fromStart + i) === 47 /*/*/) {
// We get here if `to` is the exact base path for `from`.
// For example: from='/foo/bar/baz'; to='/foo/bar'
lastCommonSep = i;
} else if (i === 0) {
// We get here if `to` is the root.
// For example: from='/foo'; to='/'
lastCommonSep = 0;
}
}
break;
}
var fromCode = from.charCodeAt(fromStart + i);
var toCode = to.charCodeAt(toStart + i);
if (fromCode !== toCode)
break;
else if (fromCode === 47 /*/*/)
lastCommonSep = i;
}
var out = '';
// Generate the relative path based on the path difference between `to`
// and `from`
for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {
if (out.length === 0)
out += '..';
else
out += '/..';
}
}
// Lastly, append the rest of the destination (`to`) path that comes after
// the common path parts
if (out.length > 0)
return out + to.slice(toStart + lastCommonSep);
else {
toStart += lastCommonSep;
if (to.charCodeAt(toStart) === 47 /*/*/)
++toStart;
return to.slice(toStart);
}
},
_makeLong: function _makeLong(path) {
return path;
},
dirname: function dirname(path) {
assertPath(path);
if (path.length === 0) return '.';
var code = path.charCodeAt(0);
var hasRoot = code === 47 /*/*/;
var end = -1;
var matchedSlash = true;
for (var i = path.length - 1; i >= 1; --i) {
code = path.charCodeAt(i);
if (code === 47 /*/*/) {
if (!matchedSlash) {
end = i;
break;
}
} else {
// We saw the first non-path separator
matchedSlash = false;
}
}
if (end === -1) return hasRoot ? '/' : '.';
if (hasRoot && end === 1) return '//';
return path.slice(0, end);
},
basename: function basename(path, ext) {
if (ext !== undefined && typeof ext !== 'string') throw new TypeError('"ext" argument must be a string');
assertPath(path);
var start = 0;
var end = -1;
var matchedSlash = true;
var i;
if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {
if (ext.length === path.length && ext === path) return '';
var extIdx = ext.length - 1;
var firstNonSlashEnd = -1;
for (i = path.length - 1; i >= 0; --i) {
var code = path.charCodeAt(i);
if (code === 47 /*/*/) {
// If we reached a path separator that was not part of a set of path
// separators at the end of the string, stop now
if (!matchedSlash) {
start = i + 1;
break;
}
} else {
if (firstNonSlashEnd === -1) {
// We saw the first non-path separator, remember this index in case
// we need it if the extension ends up not matching
matchedSlash = false;
firstNonSlashEnd = i + 1;
}
if (extIdx >= 0) {
// Try to match the explicit extension
if (code === ext.charCodeAt(extIdx)) {
if (--extIdx === -1) {
// We matched the extension, so mark this as the end of our path
// component
end = i;
}
} else {
// Extension does not match, so our result is the entire path
// component
extIdx = -1;
end = firstNonSlashEnd;
}
}
}
}
if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;
return path.slice(start, end);
} else {
for (i = path.length - 1; i >= 0; --i) {
if (path.charCodeAt(i) === 47 /*/*/) {
// If we reached a path separator that was not part of a set of path
// separators at the end of the string, stop now
if (!matchedSlash) {
start = i + 1;
break;
}
} else if (end === -1) {
// We saw the first non-path separator, mark this as the end of our
// path component
matchedSlash = false;
end = i + 1;
}
}
if (end === -1) return '';
return path.slice(start, end);
}
},
extname: function extname(path) {
assertPath(path);
var startDot = -1;
var startPart = 0;
var end = -1;
var matchedSlash = true;
// Track the state of characters (if any) we see before our first dot and
// after any path separator we find
var preDotState = 0;
for (var i = path.length - 1; i >= 0; --i) {
var code = path.charCodeAt(i);
if (code === 47 /*/*/) {
// If we reached a path separator that was not part of a set of path
// separators at the end of the string, stop now
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
// We saw the first non-path separator, mark this as the end of our
// extension
matchedSlash = false;
end = i + 1;
}
if (code === 46 /*.*/) {
// If this is our first dot, mark it as the start of our extension
if (startDot === -1)
startDot = i;
else if (preDotState !== 1)
preDotState = 1;
} else if (startDot !== -1) {
// We saw a non-dot and non-path separator before our dot, so we should
// have a good chance at having a non-empty extension
preDotState = -1;
}
}
if (startDot === -1 || end === -1 ||
// We saw a non-dot character immediately before the dot
preDotState === 0 ||
// The (right-most) trimmed path component is exactly '..'
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
return '';
}
return path.slice(startDot, end);
},
format: function format(pathObject) {
if (pathObject === null || typeof pathObject !== 'object') {
throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject);
}
return _format('/', pathObject);
},
parse: function parse(path) {
assertPath(path);
var ret = { root: '', dir: '', base: '', ext: '', name: '' };
if (path.length === 0) return ret;
var code = path.charCodeAt(0);
var isAbsolute = code === 47 /*/*/;
var start;
if (isAbsolute) {
ret.root = '/';
start = 1;
} else {
start = 0;
}
var startDot = -1;
var startPart = 0;
var end = -1;
var matchedSlash = true;
var i = path.length - 1;
// Track the state of characters (if any) we see before our first dot and
// after any path separator we find
var preDotState = 0;
// Get non-dir info
for (; i >= start; --i) {
code = path.charCodeAt(i);
if (code === 47 /*/*/) {
// If we reached a path separator that was not part of a set of path
// separators at the end of the string, stop now
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
// We saw the first non-path separator, mark this as the end of our
// extension
matchedSlash = false;
end = i + 1;
}
if (code === 46 /*.*/) {
// If this is our first dot, mark it as the start of our extension
if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;
} else if (startDot !== -1) {
// We saw a non-dot and non-path separator before our dot, so we should
// have a good chance at having a non-empty extension
preDotState = -1;
}
}
if (startDot === -1 || end === -1 ||
// We saw a non-dot character immediately before the dot
preDotState === 0 ||
// The (right-most) trimmed path component is exactly '..'
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
if (end !== -1) {
if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);
}
} else {
if (startPart === 0 && isAbsolute) {
ret.name = path.slice(1, startDot);
ret.base = path.slice(1, end);
} else {
ret.name = path.slice(startPart, startDot);
ret.base = path.slice(startPart, end);
}
ret.ext = path.slice(startDot, end);
}
if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';
return ret;
},
sep: '/',
delimiter: ':',
win32: null,
posix: null
};
posix.posix = posix;
var pathBrowserify = posix;
const withSubfolderClass = 'oz-with-subfolder';
const showAllNumbersClass = 'oz-show-all-num';
const isFolder = (item) => item.file instanceof obsidian.TFolder;
const iterateItems = (items, callback) => {
for (const key in items) {
if (!Object.prototype.hasOwnProperty.call(items, key))
continue;
callback(items[key]);
}
};
const getParentPath = (src) => {
if (src === '/')
return null;
const path = pathBrowserify.dirname(src);
if (path === '.')
return '/';
else
return path;
};
const equals = (arr1, arr2) => {
// if the other array is a falsy value, return
if (!Array.isArray(arr1) || !Array.isArray(arr2))
return false;
// compare lengths - can save a lot of time
if (arr1.length != arr2.length)
return false;
return arr1.every((v, i) => v === arr2[i]);
};
const isParent = (parent, child) => {
if (child === parent)
return false;
if (parent === '/')
parent = '';
if (child === '/')
child = '';
const parentTokens = parent.split('/').filter((i) => i.length);
return parentTokens.every((t, i) => child.split('/')[i] === t);
};
// Helper to play with the File Explorer (if exists)
const doWithFileExplorer = (plugin, callback) => {
let leaves;
let count = 0;
const tryGetView = () => {
leaves = plugin.app.workspace.getLeavesOfType('file-explorer');
if (leaves.length === 0) {
if (count++ > 5)
console.error('failed to get file-explorer');
else {
console.log('file-explorer not found, retrying...');
setTimeout(tryGetView, 500);
}
}
else {
if (leaves.length > 1)
console.warn('more then one file-explorer');
callback(leaves[0].view);
}
};
tryGetView();
};
function around(obj, factories) {
const removers = Object.keys(factories).map(key => around1(obj, key, factories[key]));
return removers.length === 1 ? removers[0] : function () { removers.forEach(r => r()); };
}
function around1(obj, method, createWrapper) {
const original = obj[method], hadOwn = obj.hasOwnProperty(method);
let current = createWrapper(original);
// Let our wrapper inherit static props from the wrapping method,
// and the wrapping method, props from the original method
if (original)
Object.setPrototypeOf(current, original);
Object.setPrototypeOf(wrapper, current);
obj[method] = wrapper;
// Return a callback to allow safe removal
return remove;
function wrapper(...args) {
// If we have been deactivated and are no longer wrapped, remove ourselves
if (current === original && obj[method] === wrapper)
remove();
return current.apply(this, args);
}
function remove() {
// If no other patches, just do a direct removal
if (obj[method] === wrapper) {
if (hadOwn)
obj[method] = original;
else
delete obj[method];
}
if (current === original)
return;
// Else pass future calls through, and remove wrapper from the prototype chain
current = original;
Object.setPrototypeOf(wrapper, original || Function);
}
}
const countFolderChildren = (folder, filter) => {
let count = 0;
for (const af of folder.children) {
if (filter(af))
count++;
if (af instanceof obsidian.TFolder)
count += countFolderChildren(af, filter);
}
return count;
};
/** filter out all path that is the parent of existing path */
const filterParent = (pathList) => {
const list = Array.from(pathList);
list.sort();
for (let i = 0; i < list.length; i++) {
if (i < list.length - 1 && (list[i] === list[i + 1] || isParent(list[i], list[i + 1]))) {
list.shift();
i--;
}
}
return new Set(list);
};
/** get all parents and add to set if not exist */
const getAllParents = (path, set) => {
let parent = getParentPath(path);
while (parent && !set.has(parent)) {
set.add(parent);
parent = getParentPath(parent);
}
};
/**
* Update folder count of target's parent
*/
const updateCount = (targetList, plugin) => {
const set = filterParent(targetList);
for (const path of targetList) {
getAllParents(path, set);
}
// set count of path
const { fileExplorer, fileFilter } = plugin;
if (!fileExplorer) {
console.error('fileExplorer missing');
return;
}
for (const path of set) {
// check if path available
if (!fileExplorer.fileItems[path])
continue;
setCount(fileExplorer.fileItems[path], fileFilter);
}
// Update root separately
if (plugin.rootFolderEl && plugin.settings.addRootFolder) {
setupRootCount(plugin);
}
// empty waitingList
targetList.length = 0;
};
const setupRootCount = (plugin) => {
if (plugin.rootFolderEl) {
let rootFolderElChildren = plugin.rootFolderEl.children;
if (rootFolderElChildren && rootFolderElChildren.length > 0) {
let totalCount = countFolderChildren(plugin.app.vault.getAbstractFileByPath('/'), plugin.fileFilter);
rootFolderElChildren[0].setAttr('data-count', totalCount.toString());
}
}
};
const setupCount = (plugin, revert = false) => {
if (!plugin.fileExplorer)
throw new Error('fileExplorer not found');
// For each setup, first setup the root folder
plugin.setupRootFolder();
setupRootCount(plugin);
// Iterate other items and include new counts
iterateItems(plugin.fileExplorer.fileItems, (item) => {
if (!isFolder(item))
return;
if (revert)
removeCount(item);
else
setCount(item, plugin.fileFilter);
});
};
const setCount = (item, filter) => {
// if (item.file.isRoot()) return;
const count = countFolderChildren(item.file, filter);
item.selfEl.dataset['count'] = count.toString();
item.selfEl.toggleClass(withSubfolderClass, Array.isArray(item.file.children) && item.file.children.some((af) => af instanceof obsidian.TFolder));
};
const removeCount = (item) => {
if (item.selfEl.dataset['count'])
delete item.selfEl.dataset['count'];
item.selfEl.removeClass(withSubfolderClass);
};
class VaultHandler {
get app() {
return this.plugin.app;
}
get vault() {
return this.plugin.app.vault;
}
constructor(plugin) {
this.waitingList = [];
this.update = obsidian.debounce(() => updateCount(this.waitingList, this.plugin), 500, true);
this.handler = (...args) => {
var _a;
for (const arg of args) {
const path = arg instanceof obsidian.TAbstractFile ? arg.path : arg;
this.waitingList.push((_a = getParentPath(path)) !== null && _a !== void 0 ? _a : '/');
}
this.update();
};
this.registerVaultEvent = () => {
this.plugin.registerEvent(this.vault.on('create', this.handler));
this.plugin.registerEvent(this.vault.on('rename', this.handler));
this.plugin.registerEvent(this.vault.on('delete', this.handler));
};
this.plugin = plugin;
}
}
const DEFAULT_SETTINGS = {
showAllNumbers: false,
filterList: ['md'],
blacklist: false,
addRootFolder: false,
};
class FENoteCountSettingTab extends obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
get showOnlyNoteValue() {
const { settings } = this.plugin;
return settings.blacklist === DEFAULT_SETTINGS.blacklist && equals(settings.filterList, DEFAULT_SETTINGS.filterList);
}
set showOnlyNoteValue(value) {
const { blacklist, filterList } = DEFAULT_SETTINGS;
this.plugin.settings.blacklist = blacklist;
if (value) {
// do deep copy
this.plugin.settings.filterList = Array.from(filterList);
}
else {
this.plugin.settings.filterList.length = 0;
}
}
display() {
let { containerEl } = this;
containerEl.empty();
containerEl.createEl('h2', {
text: 'File Explorer Note Count Settings',
});
new obsidian.Setting(containerEl)
.setName('Show All Numbers')
.setDesc('Turn on this option if you want to see the number of notes even after you expand the collapsed folders')
.addToggle((toggle) => toggle.setValue(this.plugin.settings.showAllNumbers).onChange((value) => {
document.body.toggleClass('oz-show-all-num', value);
this.plugin.settings.showAllNumbers = value;
this.plugin.saveSettings();
}));
new obsidian.Setting(containerEl)
.setName('Add Root Folder')
.setDesc('By default, there is no root folder provided by Obsidian. It is moved to drop-down menu to switch between vaults. ' +
'Enable this option if you want to see root folder and its count in the file explorer')
.addToggle((toggle) => toggle.setValue(this.plugin.settings.addRootFolder).onChange((value) => {
this.plugin.settings.addRootFolder = value;
this.plugin.saveSettings();
this.plugin.reloadCount();
}));
this.filterOpt();
}
filterOpt() {
new obsidian.Setting(this.containerEl)
.setName('Show Only Markdown Notes')
.setDesc('Turn off this option to choose file that should be counted')
.addToggle((toggle) => toggle.setValue(this.showOnlyNoteValue).onChange((value) => {
this.showOnlyNoteValue = value;
this.plugin.reloadCount();
this.plugin.saveSettings();
this.display();
}));
if (!this.showOnlyNoteValue) {
new obsidian.Setting(this.containerEl)
.setName('Filter List')
.setDesc(createFragment((descEl) => {
descEl.appendText('Extension list to include/exclude file during counting');
descEl.appendChild(document.createElement('br'));
descEl.appendText('Separated by comma');
}))
.addTextArea((text) => {
const onChange = (value) => __awaiter(this, void 0, void 0, function* () {
const list = value.split(',').map((v) => v.trim());
this.plugin.settings.filterList = list;
this.plugin.reloadCount();
yield this.plugin.saveSettings();
});
text.setPlaceholder('Leave it empty to count all types of files');
text.setValue(this.plugin.settings.filterList.join(', ')).onChange(obsidian.debounce(onChange, 500, true));
text.inputEl.rows = 2;
text.inputEl.cols = 25;
});
new obsidian.Setting(this.containerEl)
.setName('Enable Blacklist')
.setDesc('Turn on this option to use Filter List to exclude files')
.addToggle((toggle) => toggle.setValue(this.plugin.settings.blacklist).onChange((value) => {
this.plugin.settings.blacklist = value;
this.plugin.reloadCount();
this.plugin.saveSettings();
}));
}
}
}
class FileExplorerNoteCount extends obsidian.Plugin {
constructor() {
super(...arguments);
this.settings = DEFAULT_SETTINGS;
this.vaultHandler = new VaultHandler(this);
this.rootFolderEl = null;
this.explorerNavHeaderSelector = '.workspace-leaf-content[data-type="file-explorer"] .nav-header';
this.rootFolderClassName = 'oz-explorer-root-folder';
this.initialize = (revert = false) => {
let plugin = this;
// First Check if the root folder exists
let explorerHeaderEl = document.querySelector(`${this.explorerNavHeaderSelector} .${this.rootFolderClassName}`);
if (explorerHeaderEl)
this.rootFolderEl = explorerHeaderEl;
const getViewHandler = (revert) => (view) => {
this.fileExplorer = view;
setupCount(this, revert);
this.setupRootFolder(revert);
if (!revert) {
this.registerEvent(this.app.workspace.on('css-change', this.setupRootFolder));
this.vaultHandler.registerVaultEvent();
if (this.settings.showAllNumbers)
document.body.addClass('oz-show-all-num');
}
else {
for (const el of document.getElementsByClassName(withSubfolderClass)) {
el.removeClass(withSubfolderClass);
}
document.body.removeClass(showAllNumbersClass);
}
if (!revert) {
// when file explorer is closed (workspace changed)
// try to update fehanlder with new file explorer instance
this.register(around(view, {
onClose: (next) => function () {
setTimeout(() => doWithFileExplorer(plugin, getViewHandler(false)), 1e3);
return next.apply(this);
},
}));
}
};
doWithFileExplorer(plugin, getViewHandler(revert));
};
this.setupRootFolder = (revert = false) => {
var _a, _b, _c;
if (!this.fileExplorer) {
console.error('file-explorer not found');
return;
}
if (this.rootFolderEl && !this.settings.addRootFolder) {
this.rootFolderEl.remove();
this.rootFolderEl = null;
}
// Check if root is provided by Obsidian (it shouldn't be in the new releases)
const root = (_c = (_b = (_a = this.fileExplorer) === null || _a === void 0 ? void 0 : _a.fileItems) === null || _b === void 0 ? void 0 : _b['/']) !== null && _c !== void 0 ? _c : null;
if (!root) {
// Get the Nav Header
let explorerHeaderEl = document.querySelector(this.explorerNavHeaderSelector);
if (!explorerHeaderEl)
return;
if (!this.rootFolderEl && this.settings.addRootFolder) {
this.rootFolderEl = explorerHeaderEl.createEl('div', {
cls: ['tree-item', 'nav-folder', this.rootFolderClassName],
});
this.rootFolderEl.innerHTML = `
<div class="oz-explorer-root-nav-folder-title" data-path="/">
<div class="tree-item-inner nav-folder-title-content">${this.app.vault.getName()}</div>
</div>
`;
}
}
};
}
onload() {
return __awaiter(this, void 0, void 0, function* () {
console.log('loading FileExplorerNoteCount');
this.addSettingTab(new FENoteCountSettingTab(this.app, this));
yield this.loadSettings();
this.app.workspace.onLayoutReady(this.initialize);
});
}
onunload() {
console.log('unloading FileExplorerNoteCount');
this.initialize(true);
}
loadSettings() {
return __awaiter(this, void 0, void 0, function* () {
this.settings = Object.assign(Object.assign({}, this.settings), (yield this.loadData()));
});
}
saveSettings() {
return __awaiter(this, void 0, void 0, function* () {
yield this.saveData(this.settings);
});
}
reloadCount() {
setupCount(this);
}
get fileFilter() {
let list = this.settings.filterList;
return (af) => {
if (af instanceof obsidian.TFile) {
const { extension: target } = af;
// if list is empty, filter nothing
if (list.length === 0)
return true;
else if (this.settings.blacklist)
return !list.includes(target);
else
return list.includes(target);
}
else
return false;
};
}
}
module.exports = FileExplorerNoteCount;
/* nosourcemap */

View File

@ -0,0 +1,10 @@
{
"id": "file-explorer-note-count",
"name": "File Explorer Note Count",
"version": "1.2.3",
"minAppVersion": "1.2.0",
"description": "The plugin helps you to see the number of notes under each folder within the file explorer.",
"author": "Ozan Tellioglu",
"authorUrl": "https://www.ozan.pl",
"isDesktopOnly": false
}

View File

@ -0,0 +1,34 @@
.nav-folder-title[data-count]::after {
content: attr(data-count);
display: inline-block;
position: relative;
font-size: calc(100% * 0.8);
margin-right: 4px;
/* border-radius: 3px; */
padding: 2px 0;
/* background-color: var(--background-secondary-alt); */
transition: opacity 100ms ease-in-out;
}
.oz-explorer-root-nav-folder-title {
display: flex;
}
.oz-explorer-root-nav-folder-title[data-count]::after {
content: attr(data-count);
margin-right: 4px;
font-size: calc(100% * 0.8);
display: inline-block;
}
body:not(.oz-show-all-num) .nav-folder:not(.is-collapsed) > .nav-folder-title.oz-with-subfolder[data-count]:not([data-path='/'])::after {
opacity: 0;
}
.nav-folder-title-content {
flex-grow: 1;
}
.oz-explorer-root-folder {
margin-top: 15px;
}

View File

@ -0,0 +1,29 @@
{
"openViewOnStart": true,
"ribbonIcon": true,
"showRootFolder": true,
"showFilesFromSubFolders": true,
"searchFunction": true,
"allSearchOnlyInFocusedFolder": false,
"showFilesFromSubFoldersButton": true,
"revealActiveFileButton": false,
"excludedExtensions": "",
"hideAttachments": false,
"attachmentsFolderName": "attachments",
"folderIcon": "default",
"folderCount": true,
"folderCountOption": "notes",
"evernoteView": "Vertical",
"filePreviewOnHover": false,
"iconBeforeFileName": true,
"sortFilesBy": "name",
"sortReverse": false,
"sortFoldersBy": "name",
"fixedHeaderInFileList": true,
"createdYaml": false,
"fileNameIsHeader": false,
"folderNote": false,
"deleteFileOption": "trash",
"showFileNameAsFullPath": false,
"bookmarksEvents": false
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "file-tree-alternative",
"name": "File Tree Alternative",
"version": "2.6.0",
"minAppVersion": "0.15.0",
"description": "This plugin allows you to have an alternative file tree view.",
"author": "Ozan Tellioglu",
"authorUrl": "https://www.ozan.pl",
"fundingUrl": "https://ko-fi.com/ozante",
"isDesktopOnly": false
}

View File

@ -0,0 +1,535 @@
/* @settings
name: File Tree Alternative Plugin
id: file-tree-alternative-plugin
settings:
# Folder Pane Styles
-
id: oz-fta-folder-pane-heading
title: Folder Pane Styles
description: Style settings dedicated for only folder pane
type: heading
level: 1
collapsed: true
-
id: oz-fta-folder-font-size
title: Folder Pane | Folder Name Font Size
description: Set folder pane font size in px
type: variable-number
default: 14
format: px
-
id: oz-fta-folder-icon-color
title: Folder Pane | Collapse/Expand Icon Color
description: Set the color of folder icons
type: variable-color
format: hex
default: '#2d8ff7'
-
id: oz-fta-folder-indendation-guide-color
title: Folder Pane | Indendation Guide Color
description: Set the color of indendation guide lines
type: variable-color
format: hex
default: '#ededeb'
-
id: oz-fta-folder-pane-file-name-color
title: Folder Pane | Folder Name Color
description: Set the color of names
type: variable-color
format: hex
default: '#'
# File Pane Styles
-
id: oz-fta-file-pane-heading
title: File Pane Styles
description: Style settings dedicated for only file pane
type: heading
level: 1
collapsed: true
-
id: oz-fta-file-font-size
title: File Pane | File Name Font Size
description: Set file pane font size in px
type: variable-number
default: 13
format: px
-
id: oz-fta-file-pane-file-name-color
title: File Pane | File Name Color
description: Set the color of names
type: variable-color
format: hex
default: '#'
-
id: oz-fta-file-pane-foldername-color
title: File Pane | Header Folder Name Color
description: Set the color of folder name in the file pane
type: variable-color
format: hex
default: '#'
# All Panes Styles
-
id: oz-fta-all-panes-heading
title: All Panes
description: Common style settings for both folder and file panes
type: heading
level: 1
collapsed: true
-
id: oz-fta-header-background-color
title: All Panes | Header Background Color
description: Set the background color of headers in both file and folder panes
type: variable-color
format: hex
default: '#'
-
id: oz-fta-header-icon-colors
title: All Panes | Header Action Icons Color
description: Set the color of icons in file and folder panes
type: variable-color
format: hex
alt-format:
-
id: oz-fta-header-icon-colors-accent-rgb
format: rgb
default: '#'
-
id: oz-fta-all-panes-active-text-color
title: All Panes | Active File/Folder Name Color
description: Set the color of active file and folder name
type: variable-color
format: hex
default: '#'
-
id: oz-fta-file-pane-active-file-background-color
title: File Pane | Active File Background Color
description: Set the color of active file background color
type: variable-color
format: hex
default: '#'
*/
.theme-light,
.theme-dark {
--oz-fta-folder-font-size: 13px;
--oz-fta-file-font-size: 12px;
--oz-fta-folder-icon-color: var(--interactive-accent);
--oz-fta-folder-indendation-guide-color: var(--text-muted);
--oz-fta-header-background-color: var(--background-secondary-alt);
--oz-fta-header-icon-colors: var(--text-muted);
--oz-fta-file-pane-foldername-color: var(--text-normal);
--oz-fta-folder-pane-file-name-color: var(--text-normal);
--oz-fta-header-icon-colors-accent-rgb: var(--interactive-accent-hover);
--oz-fta-all-panes-active-text-color: var(--text-normal);
--oz-fta-file-pane-active-file-background-color: var(--background-secondary-alt);
--oz-fta-file-pane-file-name-color: var(--text-muted);
}
.oz-file-tree-header {
color: var(--oz-fta-file-pane-foldername-color);
background: var(--oz-fta-header-background-color);
margin-top: 3px;
font-size: 15px;
font-weight: bold;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
align-items: center;
width: fit-content;
min-width: -webkit-fill-available;
min-width: fill-available;
height: fit-content;
padding: 5px 0px 5px;
border-radius: 8px;
}
.oz-nav-action-button {
color: var(--oz-fta-header-icon-colors);
display: inline-block;
padding: 0px 0px 0px 2px;
margin-left: 5px;
opacity: 0.5;
border-radius: 8px;
opacity: 1;
}
.oz-nav-action-button:hover {
opacity: 0.6;
}
.oz-nav-action-button svg {
vertical-align: middle !important;
}
.oz-input-container {
margin-bottom: 3px !important;
margin-top: 3px !important;
height: 30px;
}
.oz-input-container input {
width: 100%;
}
.oz-nav-buttons-right-block {
text-align: right;
display: flex;
width: fit-content;
height: min-content;
}
.oz-nav-file-title {
color: var(--oz-fta-file-pane-file-name-color);
font-size: var(--oz-fta-file-font-size);
width: calc(100% - 30px);
display: flex;
white-space: nowrap;
min-width: 100%;
cursor: pointer;
line-height: 19px;
border-radius: 3px;
padding: 1px 2px 0px 2px;
min-width: 100%;
border: 1px solid transparent;
}
.oz-nav-file-title .oz-nav-file-title-content {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
display: inline-block;
}
.oz-nav-file {
border-bottom: 1px solid var(--divider-color);
}
div.oz-nav-file.is-active,
div.oz-nav-file.is-active div.oz-nav-file-title,
div.oz-nav-file.is-active div.oz-nav-file-title-content {
background-color: var(--oz-fta-file-pane-active-file-background-color);
color: var(--oz-fta-all-panes-active-text-color);
font-weight: bold;
}
.is-folder-active {
color: var(--oz-fta-all-panes-active-text-color) !important;
font-weight: bold;
}
.oz-nav-file-tag {
/* @Consider */
color: var(--text-muted);
background-color: var(--background-secondary-alt);
border-radius: 3px;
font-size: 9px;
font-weight: 600;
letter-spacing: 0.05em;
margin: 0px 2px 0px 4px;
text-transform: uppercase;
align-self: center;
padding: 0px 4px 0px 4px;
vertical-align: middle !important;
line-height: 13px;
}
div.workspace-leaf-content[data-type='file-tree-view'] > div.view-content {
padding: 10px 5px 5px 5px;
}
.oz-flex-container {
display: flex;
flex-direction: row;
justify-content: space-between;
height: min-content;
padding: 2px 2px 2px 2px;
}
.oz-folders-action-items {
text-align: center;
padding: 3px 2px 0px 2px;
}
.oz-folders-action-items,
.oz-flex-container {
background: var(--oz-fta-header-background-color);
border: 1px solid var(--oz-fta-header-background-color);
margin-bottom: 3px;
border-radius: 8px;
stroke-width: 2px;
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
}
.oz-explorer-container {
padding-left: 3px !important;
padding-right: 3px !important;
}
.oz-file-tree-files {
padding-top: 3px !important;
}
.drag-entered,
.oz-folder-element:hover,
.oz-nav-file:hover {
background-color: var(--background-secondary-alt);
color: var(--text-normal);
}
.oz-nav-file {
margin-left: 3px;
padding-right: 3px;
}
.oz-folder-contents {
will-change: transform, opacity, height;
margin-left: 6;
padding-left: 14px;
border-left: 2px solid var(--oz-fta-folder-indendation-guide-color);
margin-left: 5px !important;
}
.oz-folder-toggle {
width: 1em;
height: 1em;
margin-right: 10px;
cursor: pointer;
vertical-align: middle;
}
.treeview {
position: relative;
padding: 0px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
vertical-align: middle;
}
.oz-folder-type {
text-transform: uppercase;
font-family: monospace;
font-size: 0.6em;
vertical-align: middle;
display: inline-block;
}
.oz-folder-name {
color: var(--oz-fta-folder-pane-file-name-color);
font-size: var(--oz-fta-folder-font-size);
vertical-align: middle;
display: inline-block;
}
div.oz-folder-name.is-root-folder {
font-size: calc(var(--oz-fta-folder-font-size) + 2px);
}
.oz-icon-div {
display: inline-block;
}
.oz-folder-line {
display: flex;
flex-flow: row;
white-space: nowrap;
min-width: 100%;
}
.oz-folder-block {
display: flex;
flex-grow: 1;
padding-top: 2px;
}
.oz-folder-count {
margin-left: auto;
height: 1.4em;
display: flex;
justify-content: center;
}
.oz-folder-element {
line-height: 1.4em;
padding: 0px 0px 0px 0px;
}
.oz-folders-tree-wrapper {
overflow: hidden;
overflow-y: auto;
padding-bottom: 5px;
padding-left: 8px;
height: 100%;
}
.oz-input-container > input {
padding-left: 8px;
padding-right: 4px;
}
.file-tree-container {
display: flex;
flex-direction: column;
height: 100%;
max-height: 100%;
}
.file-tree-plugin-view {
height: 100%;
}
.oz-folder-pane {
display: block;
width: 100%;
overflow-y: auto;
height: 50%;
resize: vertical;
}
.oz-file-list-pane {
display: block;
width: 100%;
overflow-y: auto;
flex: 1;
}
.oz-coffee-div {
text-align: center;
margin-top: 10px;
}
#file-tree-divider {
height: 3.8px;
opacity: 0.3;
cursor: row-resize;
margin-bottom: 5px;
border-bottom: 3px solid var(--text-muted);
}
div#file-tree-divider.active-divider {
background-color: var(--interactive-accent);
border-bottom: 0.5px solid var(--interactive-accent);
}
#file-tree-divider:hover {
background-color: var(--text-muted);
}
.file-tree-container-horizontal {
display: flex;
flex-direction: row;
height: 100%;
max-width: 100%;
}
.oz-folder-pane-horizontal {
display: block;
width: 50%;
overflow-y: auto;
height: 100%;
resize: horizontal;
}
.oz-file-list-pane-horizontal {
display: block;
height: 100%;
overflow-y: auto;
flex: 1;
}
#file-tree-divider-horizontal {
margin-left: 5px;
width: 3.8px;
opacity: 0.3;
cursor: col-resize;
margin-right: 3px;
border-right: 3px solid var(--text-muted);
}
div#file-tree-divider-horizontal.active-divider {
background-color: var(--interactive-accent);
border-bottom: 0.5px solid var(--interactive-accent);
}
#file-tree-divider-horizontal:hover {
background-color: var(--text-muted);
}
.file-tree-header-fixed {
position: sticky;
top: 0;
padding-left: 4px;
padding-right: 4px;
z-index: 100;
}
.file-tree-files-fixed {
display: flex;
flex-direction: column;
}
.file-tree-files-fixed-with-search {
display: flex;
flex-direction: column;
}
svg.oz-folder-toggle path {
fill: var(--oz-fta-folder-icon-color) !important;
}
/* Solution for React-Icon Center Issue */
.oz-folder-name svg {
vertical-align: middle !important;
}
.oz-nav-file-icon {
line-height: 1;
display: inline-block;
font-weight: normal;
font-style: normal;
font-variant: normal;
margin-right: 2px;
padding-bottom: 2.5px;
vertical-align: middle;
}
/* Mobile Adjustments */
.is-mobile .oz-nav-file-title {
line-height: 21px;
}
.is-mobile .oz-flex-container {
height: 31px;
}
.is-mobile .oz-folder-name.is-root-folder {
font-size: calc(var(--oz-fta-folder-font-size) + 2.5px);
}
.is-mobile .oz-folder-name {
font-size: var(--oz-fta-folder-font-size);
}
.is-mobile div.oz-nav-file-title .nav-file-title-content {
font-size: calc(var(--oz-fta-file-font-size) + 3px);
}
.is-mobile .oz-input-container > input {
height: 33px;
}
.is-mobile .oz-nav-action-button svg {
transform: scale(1.2);
}

View File

@ -0,0 +1,5 @@
{
"hideQuotes": false,
"addToGraph": true,
"updateLinks": false
}

View File

@ -0,0 +1,447 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// node_modules/valid-url/index.js
var require_valid_url = __commonJS({
"node_modules/valid-url/index.js"(exports, module2) {
(function(module3) {
"use strict";
module3.exports.is_uri = is_iri;
module3.exports.is_http_uri = is_http_iri;
module3.exports.is_https_uri = is_https_iri;
module3.exports.is_web_uri = is_web_iri;
module3.exports.isUri = is_iri;
module3.exports.isHttpUri = is_http_iri;
module3.exports.isHttpsUri = is_https_iri;
module3.exports.isWebUri = is_web_iri;
var splitUri = function(uri) {
var splitted = uri.match(/(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/);
return splitted;
};
function is_iri(value) {
if (!value) {
return;
}
if (/[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i.test(value))
return;
if (/%[^0-9a-f]/i.test(value))
return;
if (/%[0-9a-f](:?[^0-9a-f]|$)/i.test(value))
return;
var splitted = [];
var scheme = "";
var authority = "";
var path = "";
var query = "";
var fragment = "";
var out = "";
splitted = splitUri(value);
scheme = splitted[1];
authority = splitted[2];
path = splitted[3];
query = splitted[4];
fragment = splitted[5];
if (!(scheme && scheme.length && path.length >= 0))
return;
if (authority && authority.length) {
if (!(path.length === 0 || /^\//.test(path)))
return;
} else {
if (/^\/\//.test(path))
return;
}
if (!/^[a-z][a-z0-9\+\-\.]*$/.test(scheme.toLowerCase()))
return;
out += scheme + ":";
if (authority && authority.length) {
out += "//" + authority;
}
out += path;
if (query && query.length) {
out += "?" + query;
}
if (fragment && fragment.length) {
out += "#" + fragment;
}
return out;
}
function is_http_iri(value, allowHttps) {
if (!is_iri(value)) {
return;
}
var splitted = [];
var scheme = "";
var authority = "";
var path = "";
var port = "";
var query = "";
var fragment = "";
var out = "";
splitted = splitUri(value);
scheme = splitted[1];
authority = splitted[2];
path = splitted[3];
query = splitted[4];
fragment = splitted[5];
if (!scheme)
return;
if (allowHttps) {
if (scheme.toLowerCase() != "https")
return;
} else {
if (scheme.toLowerCase() != "http")
return;
}
if (!authority) {
return;
}
if (/:(\d+)$/.test(authority)) {
port = authority.match(/:(\d+)$/)[0];
authority = authority.replace(/:\d+$/, "");
}
out += scheme + ":";
out += "//" + authority;
if (port) {
out += port;
}
out += path;
if (query && query.length) {
out += "?" + query;
}
if (fragment && fragment.length) {
out += "#" + fragment;
}
return out;
}
function is_https_iri(value) {
return is_http_iri(value, true);
}
function is_web_iri(value) {
return is_http_iri(value) || is_https_iri(value);
}
})(module2);
}
});
// src/main.ts
var main_exports = {};
__export(main_exports, {
default: () => FrontmatterLinksPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian5 = require("obsidian");
// src/editor_plugin.ts
var import_language = require("@codemirror/language");
var import_state = require("@codemirror/state");
var import_view2 = require("@codemirror/view");
// src/link_widget.ts
var import_view = require("@codemirror/view");
var import_obsidian = require("obsidian");
var import_valid_url = __toESM(require_valid_url());
var FrontmatterLinkWidget = class extends import_view.WidgetType {
constructor(linkSlice) {
super();
this.linkSlice = linkSlice;
}
toDOM(view) {
const aElement = document.createElement("a");
aElement.href = this.linkSlice.href;
aElement.innerText = this.linkSlice.alias || this.linkSlice.href;
if ((0, import_valid_url.isUri)(this.linkSlice.href)) {
aElement.addClass(this.linkSlice.markdownLink ? "external-link" : "cm-url");
} else {
aElement.addClass("internal-link");
if (!(app.metadataCache.getFirstLinkpathDest(this.linkSlice.href, "") instanceof import_obsidian.TFile) && !this.linkSlice.markdownLink) {
aElement.addClass("is-unresolved");
}
}
return aElement;
}
};
// src/editor_plugin.ts
var import_valid_url2 = __toESM(require_valid_url());
var import_obsidian2 = require("obsidian");
var FrontmatterLinksEditorPlugin = class {
constructor(view) {
this.linkSlices = new Array();
this.linkSlices = new Array();
this.decorations = this.buildDecorations(view);
}
update(update) {
if (update.docChanged || update.viewportChanged || update.selectionSet) {
this.decorations = this.buildDecorations(update.view);
}
}
destroy() {
}
buildDecorations(view) {
const builder = new import_state.RangeSetBuilder();
this.linkSlices = new Array();
this.findLinks(view, this.linkSlices);
this.processLinks(view, builder);
return builder.finish();
}
findLinks(view, linkSlices) {
const settings = app.plugins.plugins["frontmatter-links"].settings;
let externalLinkFrom;
let externalLinkTo;
for (let { from, to } of view.visibleRanges) {
(0, import_language.syntaxTree)(view.state).iterate({
from,
to,
enter(node) {
if (externalLinkFrom === null) {
if (node.name === "hmd-frontmatter") {
externalLinkFrom = node.from;
externalLinkTo = node.to;
}
} else {
if (node.name === "atom_hmd-frontmatter" || node.name === "def_hmd-frontmatter") {
let text = view.state.sliceDoc(externalLinkFrom, externalLinkTo);
if ((0, import_valid_url2.isUri)(text)) {
linkSlices.push({
originalText: text,
href: text,
from: externalLinkFrom,
to: externalLinkTo
});
}
externalLinkFrom = null;
} else {
externalLinkTo = node.to;
}
}
if (node.name === "hmd-frontmatter_string") {
const text = view.state.sliceDoc(node.from + 1, node.to - 1);
let match;
let href;
let alias;
let markdownLink;
if (match = text.match(/\[\[(.+)\|(.+)\]\]/m)) {
href = match[1];
alias = match[2];
} else if (match = text.match(/\[\[(.+)\]\]/m)) {
href = match[1];
} else if (match = text.match(/\[(.+)\]\((.+)\)/m)) {
href = match[2];
alias = match[1];
markdownLink = true;
} else if ((0, import_valid_url2.isUri)(text)) {
href = text;
}
if (href) {
linkSlices.push({
originalText: text,
href,
alias,
from: node.from + (settings.hideQuotes ? 0 : 1),
to: node.to - (settings.hideQuotes ? 0 : 1),
markdownLink
});
}
}
}
});
}
}
processLinks(view, builder) {
for (let linkSlice of this.linkSlices) {
const cursorHead = view.state.selection.main.head;
if (linkSlice.from - 1 <= cursorHead && cursorHead <= linkSlice.to + 1) {
this.styleLink(view, builder, linkSlice);
} else {
builder.add(linkSlice.from, linkSlice.to, import_view2.Decoration.replace({ widget: new FrontmatterLinkWidget(linkSlice) }));
}
}
}
styleLink(view, builder, linkSlice) {
const settings = app.plugins.plugins["frontmatter-links"].settings;
const unresolved = !(app.metadataCache.getFirstLinkpathDest(linkSlice.href, "") instanceof import_obsidian2.TFile);
const text = view.state.sliceDoc(linkSlice.from, linkSlice.to);
let match;
if (match = text.match(/\[\[(.+)\|(.+)\]\]/m)) {
builder.add(linkSlice.from + (settings.hideQuotes ? 1 : 0), linkSlice.from + 2 + (settings.hideQuotes ? 1 : 0), import_view2.Decoration.mark({ class: "cm-formatting-link cm-formatting-link-start" }));
builder.add(linkSlice.from + text.indexOf(match[1]), linkSlice.from + text.indexOf(match[1]) + match[1].length, import_view2.Decoration.mark({ class: "cm-link" + (unresolved ? " is-unresolved" : "") }));
builder.add(linkSlice.from + text.indexOf(match[1]) + match[1].length, linkSlice.from + text.indexOf(match[1]) + match[1].length + 1, import_view2.Decoration.mark({ class: "cm-hmd-internal-link" }));
builder.add(linkSlice.from + text.indexOf(match[2]), linkSlice.from + text.indexOf(match[2]) + match[2].length, import_view2.Decoration.mark({ class: "cm-link" + (unresolved ? " is-unresolved" : "") }));
builder.add(linkSlice.to - 2 - (settings.hideQuotes ? 1 : 0), linkSlice.to - (settings.hideQuotes ? 1 : 0), import_view2.Decoration.mark({ class: "cm-formatting-link cm-formatting-link-end" }));
} else if (match = text.match(/\[\[(.+)\]\]/m)) {
builder.add(linkSlice.from + (settings.hideQuotes ? 1 : 0), linkSlice.from + 2 + (settings.hideQuotes ? 1 : 0), import_view2.Decoration.mark({ class: "cm-formatting-link cm-formatting-link-start" }));
builder.add(linkSlice.from + text.indexOf(match[1]), linkSlice.from + text.indexOf(match[1]) + match[1].length, import_view2.Decoration.mark({ class: "cm-link" + (unresolved ? " is-unresolved" : "") }));
builder.add(linkSlice.to - 2 - (settings.hideQuotes ? 1 : 0), linkSlice.to - (settings.hideQuotes ? 1 : 0), import_view2.Decoration.mark({ class: "cm-formatting-link cm-formatting-link-end" }));
} else if (match = text.match(/\[(.+)\](\(.+\))/m)) {
builder.add(linkSlice.from + (settings.hideQuotes ? 1 : 0), linkSlice.from + 1 + (settings.hideQuotes ? 1 : 0), import_view2.Decoration.mark({ class: "cm-formatting-link cm-formatting-link-start" }));
builder.add(linkSlice.from + text.indexOf(match[1]), linkSlice.from + text.indexOf(match[1]) + match[1].length, import_view2.Decoration.mark({ class: "cm-link" }));
builder.add(linkSlice.from + text.indexOf("]"), linkSlice.from + text.indexOf("]") + 1, import_view2.Decoration.mark({ class: "cm-formatting-link cm-formatting-link-end" }));
builder.add(linkSlice.from + text.indexOf(match[2]), linkSlice.from + text.indexOf(match[2]) + match[2].length, import_view2.Decoration.mark({ class: (0, import_valid_url2.isUri)(linkSlice.href) ? "external-link" : "cm-url" }));
} else if (match = text.match(/\"(.+)\"/m)) {
builder.add(linkSlice.from + text.indexOf(match[1]), linkSlice.from + text.indexOf(match[1]) + match[1].length, import_view2.Decoration.mark({ class: "cm-url" }));
} else if ((0, import_valid_url2.isUri)(text)) {
builder.add(linkSlice.from, linkSlice.to, import_view2.Decoration.mark({ class: "cm-url" }));
}
}
};
var FRONTMATTER_LINKS_EDITOR_PLUGIN = import_view2.ViewPlugin.fromClass(FrontmatterLinksEditorPlugin, {
decorations: (value) => value.decorations
});
// src/metadata_cache.ts
var import_obsidian3 = require("obsidian");
var import_valid_url3 = __toESM(require_valid_url());
function onMetadataCacheResolve(file) {
const cache = app.metadataCache.getFileCache(file);
if (!cache) {
return;
}
const frontmatter = cache.frontmatter;
if (!frontmatter) {
return;
}
addFrontmatterLinksToCache(file, frontmatter);
}
function addFrontmatterLinksToCache(file, frontmatter) {
if (!frontmatter) {
return;
}
for (let key of Object.keys(frontmatter)) {
const value = frontmatter[key];
if (typeof value === "string") {
const match = value.match(/\[\[(.+)\|.+\]\]/m) || value.match(/\[\[(.+)\]\]/m) || value.match(/\[.+\]\((.+)\)/m);
if (!match) {
continue;
}
let href = match[1];
if ((0, import_valid_url3.isUri)(href)) {
continue;
}
let f = app.metadataCache.getFirstLinkpathDest(href, "");
let links;
if (f instanceof import_obsidian3.TFile) {
href = f.path;
links = app.metadataCache.resolvedLinks;
} else {
links = app.metadataCache.unresolvedLinks;
}
if (links[file.path][href]) {
links[file.path][href] += 1;
} else {
links[file.path][href] = 1;
}
} else if (typeof value === "object") {
addFrontmatterLinksToCache(file, value);
}
}
}
// src/settings.ts
var import_obsidian4 = require("obsidian");
var DEFAULT_SETTINGS = {
hideQuotes: false,
addToGraph: true,
updateLinks: true
};
var FrontmatterLinksSettingTab = class extends import_obsidian4.PluginSettingTab {
constructor(app2, plugin) {
super(app2, plugin);
this.plugin = plugin;
}
display() {
new import_obsidian4.Setting(this.containerEl).setName("Hide quotation marks").setDesc("Don't render quotation marks surrounding frontmatter links.").addToggle((component) => {
component.setValue(this.plugin.settings.hideQuotes);
component.onChange((value) => {
this.plugin.settings.hideQuotes = value;
this.plugin.saveSettings();
});
});
new import_obsidian4.Setting(this.containerEl).setName("Add to graph").setDesc("Add frontmatter link connections to the graph view.").addToggle((component) => {
component.setValue(this.plugin.settings.addToGraph);
component.onChange((value) => {
app.metadataCache.initialize();
this.plugin.settings.addToGraph = value;
this.plugin.saveSettings();
});
});
new import_obsidian4.Setting(this.containerEl).setName("Automatically update internal frontmatter links").setDesc("Turn on to update frontmatter links when a note is renamed.<br>'Automatically update internal links' in 'Files & Links' must also be enabled.").setDesc(createFragment((el) => {
el.appendText("Turn on to update frontmatter links when a note is renamed.");
el.createEl("br");
el.createEl("div", {
cls: "mod-warning",
text: "Disabled because it was causing issues. Will fix next week after finals. Sorry."
});
})).addToggle((component) => {
component.setValue(this.plugin.settings.updateLinks);
component.onChange((value) => {
this.plugin.settings.updateLinks = value;
this.plugin.saveSettings();
});
}).setDisabled(true);
}
hide() {
this.containerEl.empty();
}
};
// src/main.ts
var FrontmatterLinksPlugin = class extends import_obsidian5.Plugin {
async onload() {
await this.loadSettings();
this.addSettingTab(new FrontmatterLinksSettingTab(this.app, this));
this.registerEditorExtension(FRONTMATTER_LINKS_EDITOR_PLUGIN);
if (this.settings.addToGraph) {
app.metadataCache.initialize();
}
const plugin = this;
this.registerEvent(app.metadataCache.on("resolve", (file) => {
if (!plugin.settings.addToGraph) {
return;
}
onMetadataCacheResolve(file);
}));
this.registerEvent(app.vault.on("rename", (file, oldPath) => {
if (plugin.settings.updateLinks && app.vault.getConfig("alwaysUpdateLinks")) {
}
}));
}
onunload() {
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
this.settings.updateLinks = false;
this.saveSettings();
}
async saveSettings() {
this.saveData(this.settings);
}
};
/* nosourcemap */

View File

@ -0,0 +1,10 @@
{
"id": "frontmatter-links",
"name": "Frontmatter Links",
"version": "1.2.7",
"minAppVersion": "1.0.0",
"description": "Renders links in a note's frontmatter as links.",
"author": "Dion Tryban (Trikzon)",
"authorUrl": "https://github.com/Trikzon",
"isDesktopOnly": false
}

66
.obsidian/plugins/lemons-search/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "lemons-search",
"name": "Lemons Search",
"version": "0.3.0",
"minAppVersion": "1.6.0",
"description": "A blazingly fast fuzzy finder with file preview.",
"author": "Moritz Jung",
"authorUrl": "https://www.moritzjung.dev",
"fundingUrl": "https://github.com/sponsors/mProjectsCode",
"isDesktopOnly": true
}

View File

@ -0,0 +1,88 @@
.lemons-search {
/* marker class */
}
.lemons-search--modal {
min-width: 80%;
height: 80%;
padding: revert;
}
.lemons-search--modal .modal-content {
display: flex;
overflow-y: hidden;
}
.lemons-search--modal .modal-header {
margin: revert;
}
.lemons-search--preview-search {
flex: 1;
display: flex;
flex-direction: row;
gap: var(--size-4-3);
overflow-y: hidden;
}
.lemons-search--preview-search .lemons-search--search {
flex: 1;
display: flex;
flex-direction: column;
}
.lemons-search--preview-search .lemons-search--search input {
width: 100%;
}
.lemons-search--preview-search .lemons-search--preview {
flex: 2;
text-wrap: wrap;
overflow-y: auto;
}
.lemons-search--preview-search .lemons-search--preview > * {
padding: var(--size-4-3);
}
.lemons-search--preview-search .lemons-search--preview .preview-empty {
color: var(--text-faint);
}
.lemons-search--preview-search .lemons-search--preview .preview-img img {
max-width: 100%;
}
.lemons-search .modal-content .prompt-results {
padding: 0;
overflow-y: auto;
}
.lemons-search .suggestion-sub-text {
color: var(--text-faint);
}
.lemons-search .suggestion-item.is-selected .suggestion-sub-text {
color: var(--text-muted);
}
.lemons-search .lemons-search--suggestion-group-header {
padding: var(--size-2-3);
}
.lemons-search .lemons-search--suggestion-empty {
padding: var(--size-2-3) var(--size-4-3);
color: var(--text-faint);
}
.lemons-search .suggestion-item {
white-space: initial;
}
/* .lemons-search-modal .modal-content .prompt-results .suggestion-title {
color: var(--text-muted);
& .suggestion-highlight {
color: var(--text-normal);
}
} */

46904
.obsidian/plugins/link-tree/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "link-tree",
"name": "Link Tree",
"version": "1.0.0",
"minAppVersion": "0.15.0",
"description": "View file links and backlinks as a recursively expandable, filterable list with editable text, combining the structure of outliners like Dynalist & WorkFlowy with the flexibility of Obsidian.",
"author": "Joshua Reinier",
"authorUrl": "https://joshuareinier.com",
"fundingUrl": "https://joshuareinier.com",
"isDesktopOnly": false
}

790
.obsidian/plugins/link-tree/styles.css vendored Normal file
View File

@ -0,0 +1,790 @@
/* src/plugins/obsidian-link-tree/src/styles.css */
*,
::before,
::after {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
.fixed {
position: fixed;
}
.\!absolute {
position: absolute !important;
}
.absolute {
position: absolute;
}
.relative {
position: relative;
}
.sticky {
position: sticky;
}
.left-0 {
left: 0px;
}
.left-1\/2 {
left: 50%;
}
.top-0 {
top: 0px;
}
.top-1\/2 {
top: 50%;
}
.top-4 {
top: 1rem;
}
.z-10 {
z-index: 10;
}
.z-30 {
z-index: 30;
}
.z-40 {
z-index: 40;
}
.\!mx-0 {
margin-left: 0px !important;
margin-right: 0px !important;
}
.mx-1 {
margin-left: 0.25rem;
margin-right: 0.25rem;
}
.my-0 {
margin-top: 0px;
margin-bottom: 0px;
}
.my-1 {
margin-top: 0.25rem;
margin-bottom: 0.25rem;
}
.my-2 {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
.my-4 {
margin-top: 1rem;
margin-bottom: 1rem;
}
.-mt-1 {
margin-top: -0.25rem;
}
.ml-1 {
margin-left: 0.25rem;
}
.ml-2 {
margin-left: 0.5rem;
}
.mr-1 {
margin-right: 0.25rem;
}
.mr-2 {
margin-right: 0.5rem;
}
.mt-1 {
margin-top: 0.25rem;
}
.mt-2 {
margin-top: 0.5rem;
}
.block {
display: block;
}
.inline {
display: inline;
}
.flex {
display: flex;
}
.grid {
display: grid;
}
.hidden {
display: none;
}
.aspect-square {
aspect-ratio: 1 / 1;
}
.\!h-fit {
height: -moz-fit-content !important;
height: fit-content !important;
}
.h-0 {
height: 0px;
}
.h-0\.5 {
height: 0.125rem;
}
.h-1 {
height: 0.25rem;
}
.h-1\.5 {
height: 0.375rem;
}
.h-12 {
height: 3rem;
}
.h-2 {
height: 0.5rem;
}
.h-3 {
height: 0.75rem;
}
.h-4 {
height: 1rem;
}
.h-6 {
height: 1.5rem;
}
.h-\[16px\] {
height: 16px;
}
.h-\[28px\] {
height: 28px;
}
.h-\[75vh\] {
height: 75vh;
}
.h-full {
height: 100%;
}
.h-line {
height: calc(var(--line-height-normal) * 1em);
}
.max-h-\[50\%\] {
max-height: 50%;
}
.max-h-\[calc\(28px\*2\+2px\)\] {
max-height: calc(28px * 2 + 2px);
}
.min-h-\[12px\] {
min-height: 12px;
}
.min-h-\[4px\] {
min-height: 4px;
}
.min-h-line {
min-height: var(--font-text-size);
}
.\!w-8 {
width: 2rem !important;
}
.\!w-full {
width: 100% !important;
}
.w-1 {
width: 0.25rem;
}
.w-1\.5 {
width: 0.375rem;
}
.w-16 {
width: 4rem;
}
.w-2 {
width: 0.5rem;
}
.w-3 {
width: 0.75rem;
}
.w-4 {
width: 1rem;
}
.w-6 {
width: 1.5rem;
}
.w-7 {
width: 1.75rem;
}
.w-8 {
width: 2rem;
}
.w-\[4em\] {
width: 4em;
}
.w-fit {
width: -moz-fit-content;
width: fit-content;
}
.w-full {
width: 100%;
}
.min-w-\[24px\] {
min-width: 24px;
}
.max-w-\[75\%\] {
max-width: 75%;
}
.flex-none {
flex: none;
}
.grow {
flex-grow: 1;
}
.-translate-x-1\/2 {
--tw-translate-x: -50%;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.-translate-y-1\/2 {
--tw-translate-y: -50%;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.cursor-grab {
cursor: grab;
}
.cursor-ns-resize {
cursor: ns-resize;
}
.cursor-pointer {
cursor: pointer;
}
.select-none {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.snap-x {
scroll-snap-type: x var(--tw-scroll-snap-strictness);
}
.snap-y {
scroll-snap-type: y var(--tw-scroll-snap-strictness);
}
.snap-mandatory {
--tw-scroll-snap-strictness: mandatory ;
}
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.flex-col {
flex-direction: column;
}
.flex-wrap {
flex-wrap: wrap;
}
.items-center {
align-items: center;
}
.justify-end {
justify-content: flex-end;
}
.justify-center {
justify-content: center;
}
.justify-around {
justify-content: space-around;
}
.space-x-1 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(0.25rem * var(--tw-space-x-reverse));
margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-x-4 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(1rem * var(--tw-space-x-reverse));
margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-y-2 > :not([hidden]) ~ :not([hidden]) {
--tw-space-y-reverse: 0;
margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
}
.overflow-hidden {
overflow: hidden;
}
.\!overflow-x-auto {
overflow-x: auto !important;
}
.overflow-x-auto {
overflow-x: auto;
}
.overflow-y-auto {
overflow-y: auto;
}
.overflow-x-hidden {
overflow-x: hidden;
}
.overflow-y-clip {
overflow-y: clip;
}
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.whitespace-nowrap {
white-space: nowrap;
}
.break-words {
overflow-wrap: break-word;
}
.rounded {
border-radius: 0.25rem;
}
.rounded-checkbox {
border-radius: var(--checkbox-radius);
}
.rounded-full {
border-radius: 9999px;
}
.rounded-icon {
border-radius: var(--clickable-icon-radius);
}
.rounded-lg {
border-radius: 0.5rem;
}
.border {
border-width: 1px;
}
.border-t {
border-top-width: 1px;
}
.border-solid {
border-style: solid;
}
.\!border-none {
border-style: none !important;
}
.border-none {
border-style: none;
}
.border-faint {
border-color: var(--text-faint);
}
.border-muted {
border-color: var(--text-muted);
}
.\!bg-accent {
background-color: var(--text-accent) !important;
}
.\!bg-selection {
background-color: var(--text-selection) !important;
}
.bg-faint {
background-color: var(--text-faint);
}
.bg-gray-500\/5 {
background-color: rgb(107 114 128 / 0.05);
}
.bg-muted {
background-color: var(--text-muted);
}
.bg-primary {
background-color: var(--background-primary);
}
.bg-primary-alt {
background-color: var(--background-primary-alt);
}
.bg-red-500\/20 {
background-color: rgb(239 68 68 / 0.2);
}
.bg-red-800\/50 {
background-color: rgb(153 27 27 / 0.5);
}
.bg-secondary-alt {
background-color: var(--background-secondary-alt);
}
.bg-selection {
background-color: var(--text-selection);
}
.bg-transparent {
background-color: transparent;
}
.p-0 {
padding: 0px;
}
.p-0\.5 {
padding: 0.125rem;
}
.p-1 {
padding: 0.25rem;
}
.p-4 {
padding: 1rem;
}
.px-1 {
padding-left: 0.25rem;
padding-right: 0.25rem;
}
.px-4 {
padding-left: 1rem;
padding-right: 1rem;
}
.py-0 {
padding-top: 0px;
padding-bottom: 0px;
}
.py-0\.5 {
padding-top: 0.125rem;
padding-bottom: 0.125rem;
}
.py-1 {
padding-top: 0.25rem;
padding-bottom: 0.25rem;
}
.py-2 {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
.pb-0 {
padding-bottom: 0px;
}
.pb-0\.5 {
padding-bottom: 0.125rem;
}
.pb-1 {
padding-bottom: 0.25rem;
}
.pb-2 {
padding-bottom: 0.5rem;
}
.pb-4 {
padding-bottom: 1rem;
}
.pl-1 {
padding-left: 0.25rem;
}
.pl-2 {
padding-left: 0.5rem;
}
.pl-6 {
padding-left: 1.5rem;
}
.pl-7 {
padding-left: 1.75rem;
}
.pr-2 {
padding-right: 0.5rem;
}
.pt-4 {
padding-top: 1rem;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
.font-menu {
font-family: var(--font-interface);
}
.font-sans {
font-family: var(--font-text);
}
.font-serif {
font-family: var(--font-text);
}
.\!text-xs {
font-size: 0.75rem !important;
line-height: 1rem !important;
}
.text-base {
font-size: var(--font-text-size);
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-sm {
font-size: 0.875rem;
line-height: 1.25rem;
}
.text-xs {
font-size: 0.75rem;
line-height: 1rem;
}
.font-bold {
font-weight: 700;
}
.leading-line {
line-height: var(--line-height-normal);
}
.text-accent {
color: var(--text-accent);
}
.text-faint {
color: var(--text-faint);
}
.text-muted {
color: var(--text-muted);
}
.text-normal {
color: var(--text-normal);
}
.line-through {
text-decoration-line: line-through;
}
.opacity-0 {
opacity: 0;
}
.opacity-40 {
opacity: 0.4;
}
.opacity-50 {
opacity: 0.5;
}
.opacity-75 {
opacity: 0.75;
}
.\!shadow-none {
--tw-shadow: 0 0 #0000 !important;
--tw-shadow-colored: 0 0 #0000 !important;
box-shadow:
var(--tw-ring-offset-shadow, 0 0 #0000),
var(--tw-ring-shadow, 0 0 #0000),
var(--tw-shadow) !important;
}
.shadow-none {
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
box-shadow:
var(--tw-ring-offset-shadow, 0 0 #0000),
var(--tw-ring-shadow, 0 0 #0000),
var(--tw-shadow);
}
.invert {
--tw-invert: invert(100%);
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.filter {
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.backdrop-blur {
--tw-backdrop-blur: blur(8px);
-webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.transition {
transition-property:
color,
background-color,
border-color,
text-decoration-color,
fill,
stroke,
opacity,
box-shadow,
transform,
filter,
-webkit-backdrop-filter;
transition-property:
color,
background-color,
border-color,
text-decoration-color,
fill,
stroke,
opacity,
box-shadow,
transform,
filter,
backdrop-filter;
transition-property:
color,
background-color,
border-color,
text-decoration-color,
fill,
stroke,
opacity,
box-shadow,
transform,
filter,
backdrop-filter,
-webkit-backdrop-filter;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.transition-colors {
transition-property:
color,
background-color,
border-color,
text-decoration-color,
fill,
stroke;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.transition-opacity {
transition-property: opacity;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.duration-1000 {
transition-duration: 1000ms;
}
.duration-300 {
transition-duration: 300ms;
}
.ease-in-out {
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
.ease-linear {
transition-timing-function: linear;
}
.hover\:border-b:hover {
border-bottom-width: 1px;
}
.hover\:border-normal:hover {
border-color: var(--text-normal);
}
.hover\:underline:hover {
text-decoration-line: underline;
}
.active\:\!w-full:active {
width: 100% !important;
}
.group:hover .group-hover\:opacity-100 {
opacity: 1;
}
.child\:relative > * {
position: relative;
}
.child\:h-full > * {
height: 100%;
}
.child\:w-1\/2 > * {
width: 50%;
}
.child\:w-1\/3 > * {
width: 33.333333%;
}
.child\:w-1\/4 > * {
width: 25%;
}
.child\:w-\[calc\(100\%\/7\)\] > * {
width: calc(100% / 7);
}
.child\:w-full > * {
width: 100%;
}
.child\:flex-none > * {
flex: none;
}
.child\:snap-start > * {
scroll-snap-align: start;
}
.child\:truncate > * {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.child\:p-2 > * {
padding: 0.5rem;
}
.child\:px-1 > * {
padding-left: 0.25rem;
padding-right: 0.25rem;
}
.child\:pb-0 > * {
padding-bottom: 0px;
}
@media (hover: hover) {
.mouse\:hover\:border:hover {
border-width: 1px;
}
.mouse\:hover\:border-solid:hover {
border-style: solid;
}
}

View File

@ -0,0 +1,74 @@
{
"presetFields": [
{
"type": "Select",
"tagName": "select",
"icon": "right-triangle",
"tooltip": "Accepts a single value from a list",
"colorClass": "select",
"options": {
"sourceType": "ValuesListNotePath",
"valuesList": {
"1": "AR",
"2": "BO",
"3": "BR",
"4": "CL"
},
"valuesListNotePath": "countries.md"
},
"name": "country",
"id": "hzsqnO",
"path": ""
},
{
"type": "Multi",
"tagName": "multi",
"icon": "bullet-list",
"tooltip": "Accepts multiple values from a list",
"colorClass": "multi",
"options": {
"sourceType": "ValuesList",
"valuesList": {
"1": "video",
"2": "audio",
"3": "booklet",
"4": "simple"
}
},
"name": "translations",
"id": "kVzZVa",
"path": ""
}
],
"fileClassQueries": [],
"displayFieldsInContextMenu": true,
"globallyIgnoredFields": [],
"classFilesPath": null,
"isAutosuggestEnabled": true,
"fileClassAlias": "fileClass",
"settingsVersion": "5.8",
"firstDayOfWeek": 1,
"enableLinks": true,
"enableTabHeader": true,
"enableEditor": true,
"enableBacklinks": true,
"enableStarred": true,
"enableFileExplorer": true,
"enableSearch": true,
"enableProperties": true,
"tableViewMaxRecords": 20,
"frontmatterListDisplay": "asArray",
"fileClassExcludedFolders": [],
"showIndexingStatusInStatusBar": true,
"fileIndexingExcludedFolders": [],
"fileIndexingExcludedExtensions": [
".excalidraw.md"
],
"fileIndexingExcludedRegex": [],
"frontmatterOnly": false,
"showFileClassSelectInModal": true,
"chooseFileClassAtFileCreation": false,
"autoInsertFieldsAtFileClassInsertion": false,
"fileClassIcon": "package",
"isAutoCalculationEnabled": true
}

25859
.obsidian/plugins/metadata-menu/main.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
{
"id": "metadata-menu",
"name": "Metadata Menu",
"version": "0.8.9",
"minAppVersion": "1.4.16",
"description": "For data quality enthusiasts (and dataview users): manage the metadata of your notes.",
"author": "mdelobelle",
"authorUrl": "https://github.com/mdelobelle",
"isDesktopOnly": false,
"fundingUrl": "https://github.com/sponsors/mdelobelle/",
"helpUrl": "https://mdelobelle.github.io/metadatamenu/"
}

2093
.obsidian/plugins/metadata-menu/styles.css vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
{
"bibleVersion": "rv1960",
"defaultBibleVersion": "rv1960",
"referenceLinkPosition": "Header",
"verseFormatting": "Single Line",
"verseNumberFormatting": "1. ",
"collapsibleVerses": false,
"enableHyperlinking": true,
"showVerseTranslation": true,
"bookTagging": false,
"chapterTagging": false,
"enableBibleVerseLookupRibbon": false,
"optOutToEvents": false,
"bookBacklinking": "None",
"chapterBacklinking": "None",
"bibleVersionStatusIndicator": "Short",
"displayBibleIconPrefixAtHeader": true,
"internalLinkingFormat": "None",
"enableInternalLinking": "None",
"versionCodeBLB": ""
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,13 @@
{
"id": "obsidian-bible-reference",
"name": "Bible Reference",
"version": "25.05.13",
"minAppVersion": "0.12.0",
"description": "Taking Bible Study note in Obsidian.md application easily. Automatically suggesting Bible Verses as references. ",
"author": "tim-hub",
"authorUrl": "https://github.com/tim-hub",
"isDesktopOnly": false,
"fundingUrl": {
"GitHub Sponsor": "https://github.com/sponsors/tim-hub"
}
}

View File

@ -0,0 +1,18 @@
.callout[data-callout='bible'] {
/*--callout-color: 0, 0, 0;*/
/*fa-book-bible"*/
/* <!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --> */
--callout-icon: "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'><path d='M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM144 144c0-8.875 7.125-15.1 16-15.1L208 128V80c0-8.875 7.125-15.1 16-15.1l32 .0009c8.875 0 16 7.12 16 15.1V128L320 128c8.875 0 16 7.121 16 15.1v32c0 8.875-7.125 16-16 16L272 192v112c0 8.875-7.125 16-16 16l-32-.0002c-8.875 0-16-7.127-16-16V192L160 192c-8.875 0-16-7.127-16-16V144zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448z'/></svg>";
}
.obr-loading-container {
padding: 1em;
}
.sponsor-button {
margin-right: 2em;
}
.logo {
height: 16px;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-core-search-assistant-plugin",
"name": "Core Search Assistant",
"version": "0.9.4",
"minAppVersion": "1.2.7",
"description": "Enhance built-in search: keyboard interface, card preview, bigger preview",
"author": "qawatake",
"authorUrl": "https://github.com/qawatake/obsidian-core-search-assistant-plugin",
"isDesktopOnly": true
}

View File

@ -0,0 +1,60 @@
/* search result item */
.core-search-assistant_search-result-items-focus .tree-item-self {
background-color: var(--background-secondary-alt);
color: var(--text-normal);
}
.core-search-assistant_search-result-items-focus .tree-item-flair {
background-color: var(--interactive-accent);
color: var(--text-on-accent);
}
/* outline on search mode */
body {
--search-mode-outline: var(--interactive-accent);
}
/* option modal */
.core-search-assistant_option-modal div.modal {
background-color: var(--background-primary);
}
.core-search-assistant_option-modal kbd.suggestion-hotkey {
float: right;
margin-left: 0;
margin-right: 10px;
padding: 0 10px;
font-size: 12px;
border-radius: 4px;
background-color: var(--background-secondary);
}
.core-search-assistant_option-modal span.suggestion-icon {
float: left;
margin-left: 0;
padding: 0 10px;
height: 1.5em;
display: flex;
align-items: center;
}
.core-search-assistant_option-modal div.suggestion-item {
position: relative;
padding-left: 10px;
cursor: default;
white-space: pre-wrap;
}
.core-search-assistant_option-modal div.suggestion-item.is-selected {
background-color: var(--background-secondary);
}
/*
text color
*/
span {
--highlight-search-match: var(--text-normal);
}
/*
background color
*/
span {
--highlight-search-match-bg: var(--text-highlight-bg);
--focus-search-match-bg: #ff9633;
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,74 @@
{
"getLangFromFile": true,
"defaultLanguage": "en_US",
"normalLang": "en_US",
"shouldShowSynonymPopover": true,
"shouldShowCustomContextMenu": false,
"apiSettings": {
"en_US": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": "Free Dictionary API"
},
"hi": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": null
},
"es": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": "Altervista"
},
"fr": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": "Altervista"
},
"ja": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": null
},
"ru": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": null
},
"en_GB": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": null
},
"de": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": "Open Thesaurus"
},
"it": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": "Altervista"
},
"ko": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": null
},
"pt_BR": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": null
},
"ar": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": null
},
"tr": {
"definitionApiName": "Free Dictionary API",
"synonymApiName": null
},
"cn": {
"definitionApiName": "Offline Dictionary",
"synonymApiName": null
}
},
"partOfSpeechApiName": "Systran API",
"advancedSynonymAnalysis": false,
"useCaching": false,
"folder": "",
"capitalizedFileName": true,
"prefix": "",
"suffix": " ({{lang}})",
"template": "---\n# {{notice}}\naliases: [\"{{word}}\"]\n---\n\n# {{word}}\n\n## {{pronunciationHeader}}\n\n{{phoneticList}}\n\n## {{meaningHeader}}\n\n{{meanings}}\n\n## {{originHeader}}\n\n{{origin}}\n",
"languageSpecificSubFolders": false
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-dictionary-plugin",
"name": "Dictionary",
"version": "2.22.0",
"minAppVersion": "0.12.11",
"description": "This is a simple dictionary for the Obsidian Note-Taking Tool.",
"author": "phibr0",
"authorUrl": "https://github.com/phibr0",
"isDesktopOnly": false
}

View File

@ -0,0 +1,36 @@
.setting-item.extra > .setting-item-info {
opacity: 0.65;
}
a[href="https://ko-fi.com/phibr0"] > img
{
height: 3em;
}
a[href="https://ko-fi.com/phibr0"]
{
transform: translate(0, 5%);
}
.dictionaryprefixsuffix .setting-item-control input {
margin-left: 0.5rem;
}
.dictionarytextarea .setting-item-control textarea {
height: 15em;
width: 100%;
resize: vertical;
}
.dictionarycenter {
text-align: center;
}
.dictionarybuttons {
display: flex;
place-content: center;
}
.dictionary-view-content {
overflow-y: hidden !important;
}

View File

@ -0,0 +1,126 @@
{
"version": "3.13.1",
"templates": {
"common": {
"main": "title",
"fallback": "fallback_title"
}
},
"rules": {
"paths": {
"mode": "black",
"values": []
},
"delimiter": {
"enabled": false,
"value": ""
}
},
"debug": false,
"boot": {
"delay": 1000,
"background": true
},
"features": {
"alias": {
"enabled": false,
"strategy": "ensure",
"validator": "fr",
"templates": {
"main": "",
"fallback": ""
}
},
"explorer": {
"enabled": false,
"sort": true,
"templates": {
"main": "{{date}}-{{activity}} {{title}}",
"fallback": ""
}
},
"tab": {
"enabled": true,
"templates": {
"main": "{{date}}-{{activity}} {{title}}",
"fallback": ""
}
},
"header": {
"enabled": true,
"templates": {
"main": "{{date}}-{{activity}} {{title}}",
"fallback": ""
}
},
"graph": {
"enabled": false,
"templates": {
"main": "",
"fallback": ""
}
},
"bookmarks": {
"enabled": false,
"templates": {
"main": "",
"fallback": ""
}
},
"search": {
"enabled": false,
"templates": {
"main": "",
"fallback": ""
}
},
"suggest": {
"enabled": false,
"templates": {
"main": "",
"fallback": ""
}
},
"inlineTitle": {
"enabled": true,
"templates": {
"main": "title",
"fallback": ""
}
},
"canvas": {
"enabled": false,
"templates": {
"main": "",
"fallback": ""
}
},
"backlink": {
"enabled": false,
"templates": {
"main": "",
"fallback": ""
}
},
"windowFrame": {
"enabled": false,
"templates": {
"main": "",
"fallback": ""
}
},
"noteLink": {
"enabled": false,
"strategy": "onlyEmpty",
"approval": true,
"templates": {
"main": "",
"fallback": ""
}
}
},
"processor": {
"args": [],
"type": null
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "obsidian-front-matter-title-plugin",
"name": "Front Matter Title",
"version": "3.13.1",
"minAppVersion": "1.7.4",
"description": "Lets you define a title in frontmatter to be displayed as the filename for explorer, graph, search and etc.",
"author": "Snezhig",
"authorUrl": "https://github.com/snezhig",
"isDesktopOnly": false,
"fundingUrl": "https://www.buymeacoffee.com/snezhig"
}

View File

@ -0,0 +1,60 @@
{
"commitMessage": "vault backup: {{date}}",
"autoCommitMessage": "vault backup: {{date}}",
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
"autoSaveInterval": 0,
"autoPushInterval": 0,
"autoPullInterval": 0,
"autoPullOnBoot": false,
"disablePush": false,
"pullBeforePush": true,
"disablePopups": false,
"showErrorNotices": true,
"disablePopupsForNoChanges": false,
"listChangedFilesInMessageBody": false,
"showStatusBar": true,
"updateSubmodules": false,
"syncMethod": "merge",
"customMessageOnAutoBackup": false,
"autoBackupAfterFileChange": false,
"treeStructure": false,
"refreshSourceControl": true,
"basePath": "",
"differentIntervalCommitAndPush": false,
"changedFilesInStatusBar": true,
"showedMobileNotice": true,
"refreshSourceControlTimer": 7000,
"showBranchStatusBar": true,
"setLastSaveToLastCommit": false,
"submoduleRecurseCheckout": false,
"gitDir": "",
"showFileMenu": true,
"authorInHistoryView": "full",
"dateInHistoryView": true,
"diffStyle": "split",
"lineAuthor": {
"show": false,
"followMovement": "inactive",
"authorDisplay": "initials",
"showCommitHash": false,
"dateTimeFormatOptions": "date",
"dateTimeFormatCustomString": "YYYY-MM-DD HH:mm",
"dateTimeTimezone": "viewer-local",
"coloringMaxAge": "1y",
"colorNew": {
"r": 255,
"g": 150,
"b": 150
},
"colorOld": {
"r": 120,
"g": 160,
"b": 255
},
"textColorCss": "var(--text-muted)",
"ignoreWhitespace": false,
"gutterSpacingFallbackLength": 5,
"lastShownAuthorDisplay": "initials",
"lastShownDateTimeFormatOptions": "date"
}
}

418
.obsidian/plugins/obsidian-git/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"author": "Vinzent",
"authorUrl": "https://github.com/Vinzent03",
"id": "obsidian-git",
"name": "Git",
"description": "Integrate Git version control with automatic backup and other advanced features.",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent",
"version": "2.33.0"
}

View File

@ -0,0 +1,23 @@
#!/bin/sh
PROMPT="$1"
TEMP_FILE="$OBSIDIAN_GIT_CREDENTIALS_INPUT"
cleanup() {
rm -f "$TEMP_FILE" "$TEMP_FILE.response"
}
trap cleanup EXIT
echo "$PROMPT" > "$TEMP_FILE"
while [ ! -e "$TEMP_FILE.response" ]; do
if [ ! -e "$TEMP_FILE" ]; then
echo "Trigger file got removed: Abort" >&2
exit 1
fi
sleep 0.1
done
RESPONSE=$(cat "$TEMP_FILE.response")
echo "$RESPONSE"

View File

@ -0,0 +1,605 @@
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.workspace-leaf-content[data-type="git-view"] .button-border {
border: 2px solid var(--interactive-accent);
border-radius: var(--radius-s);
}
.workspace-leaf-content[data-type="git-view"] .view-content {
padding: 0;
}
.workspace-leaf-content[data-type="git-history-view"] .view-content {
padding: 0;
}
.loading > svg {
animation: 2s linear infinite loading;
transform-origin: 50% 50%;
display: inline-block;
}
.obsidian-git-center {
margin: auto;
text-align: center;
width: 50%;
}
.obsidian-git-textarea {
display: block;
margin-left: auto;
margin-right: auto;
}
.obsidian-git-disabled {
opacity: 0.5;
}
.obsidian-git-center-button {
display: block;
margin: 20px auto;
}
.tooltip.mod-left {
overflow-wrap: break-word;
}
.tooltip.mod-right {
overflow-wrap: break-word;
}
.git-tools {
display: flex;
margin-left: auto;
}
.git-tools .type {
padding-left: var(--size-2-1);
display: flex;
align-items: center;
justify-content: center;
width: 11px;
}
.git-tools .type[data-type="M"] {
color: orange;
}
.git-tools .type[data-type="D"] {
color: red;
}
.git-tools .buttons {
display: flex;
}
.git-tools .buttons > * {
padding: 0 0;
height: auto;
}
.is-active .git-tools .buttons > * {
color: var(--nav-item-color-active);
}
.git-author {
color: var(--text-accent);
}
.git-date {
color: var(--text-accent);
}
.git-ref {
color: var(--text-accent);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-d-none {
display: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper {
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header {
background-color: var(--background-primary);
border-bottom: 1px solid var(--interactive-accent);
font-family: var(--font-monospace);
height: 35px;
padding: 5px 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header,
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
font-size: 14px;
margin-left: auto;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added {
border: 1px solid #b4e2b4;
border-radius: 5px 0 0 5px;
color: #399839;
padding: 2px;
text-align: right;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted {
border: 1px solid #e9aeae;
border-radius: 0 5px 5px 0;
color: #c33;
margin-left: 1px;
padding: 2px;
text-align: left;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 15px;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper {
border: 1px solid var(--background-modifier-border);
border-radius: 3px;
margin-bottom: 1em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse {
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid var(--background-modifier-border);
border-radius: 3px;
cursor: pointer;
display: none;
font-size: 12px;
justify-content: flex-end;
padding: 4px 8px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected {
background-color: #c8e1ff;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input {
margin: 0 4px 0 0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table {
border-collapse: collapse;
font-family: Menlo, Consolas, monospace;
font-size: 13px;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff {
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff {
overflow-y: hidden;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff {
display: inline-block;
margin-bottom: -8px;
margin-right: -4px;
overflow-x: scroll;
overflow-y: hidden;
width: 50%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line {
padding: 0 8em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
padding: 0 4.5em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn {
word-wrap: normal;
background: none;
display: inline-block;
padding: 0;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
vertical-align: middle;
white-space: pre;
width: 100%;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.theme-light
.workspace-leaf-content[data-type="diff-view"]
.d2h-code-side-line
del {
background-color: #ffb6ba;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.theme-dark
.workspace-leaf-content[data-type="diff-view"]
.d2h-code-side-line
del {
background-color: #8d232881;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
border-radius: 0.2em;
display: inline-block;
margin-top: -1px;
text-decoration: none;
vertical-align: middle;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.theme-light
.workspace-leaf-content[data-type="diff-view"]
.d2h-code-side-line
ins {
background-color: #97f295;
text-align: left;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.theme-dark
.workspace-leaf-content[data-type="diff-view"]
.d2h-code-side-line
ins {
background-color: #1d921996;
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix {
word-wrap: normal;
background: none;
display: inline;
padding: 0;
white-space: pre;
}
.workspace-leaf-content[data-type="diff-view"] .line-num1 {
float: left;
}
.workspace-leaf-content[data-type="diff-view"] .line-num1,
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
padding: 0 0.5em;
text-overflow: ellipsis;
width: 3.5em;
}
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
float: right;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-muted);
cursor: pointer;
display: inline-block;
position: absolute;
text-align: right;
width: 7.5em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after {
content: "\200b";
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-muted);
cursor: pointer;
display: inline-block;
overflow: hidden;
padding: 0 0.5em;
position: absolute;
text-align: right;
text-overflow: ellipsis;
width: 4em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr {
position: relative;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after {
content: "\200b";
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder,
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
direction: rtl;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del {
background-color: #fee8e9;
border-color: #e9aeae;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
background-color: #dfd;
border-color: #b4e2b4;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del {
background-color: #521b1d83;
border-color: #691d1d73;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
background-color: rgba(30, 71, 30, 0.5);
border-color: #13501381;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-info {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
color: var(--text-normal);
}
.theme-light
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-diff
.d2h-del.d2h-change {
background-color: #fdf2d0;
}
.theme-dark
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-diff
.d2h-del.d2h-change {
background-color: #55492480;
}
.theme-light
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-diff
.d2h-ins.d2h-change {
background-color: #ded;
}
.theme-dark
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-diff
.d2h-ins.d2h-change {
background-color: rgba(37, 78, 37, 0.418);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper {
margin-bottom: 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a {
color: #3572b0;
text-decoration: none;
}
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-list-wrapper
a:visited {
color: #3572b0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header {
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title {
font-weight: 700;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list {
display: block;
list-style: none;
margin: 0;
padding: 0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li {
border-bottom: 1px solid var(--background-modifier-border);
margin: 0;
padding: 5px 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li:last-child {
border-bottom: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch {
cursor: pointer;
display: none;
font-size: 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-icon {
fill: currentColor;
margin-right: 10px;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted {
color: #c33;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-added {
color: #399839;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-changed {
color: #d0b44c;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-moved {
color: #3572b0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-tag {
background-color: var(--background-primary);
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 10px;
margin-left: 5px;
padding: 0 2px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag {
border: 2px solid #c33;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag {
border: 1px solid #399839;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag {
border: 1px solid #d0b44c;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag {
border: 1px solid #3572b0;
}
/* ====================== Line Authoring Information ====================== */
.cm-gutterElement.obs-git-blame-gutter {
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
border-width: 0px 2px 0.2px 2px;
border-style: solid;
border-color: var(--background-secondary);
background-color: var(--background-secondary);
}
.cm-gutterElement.obs-git-blame-gutter > div,
.line-author-settings-preview {
/* delegate text color to settings */
color: var(--obs-git-gutter-text);
font-family: monospace;
height: 100%; /* ensure, that age-based background color occupies entire parent */
text-align: right;
padding: 0px 6px 0px 6px;
white-space: pre; /* Keep spaces and do not collapse them. */
}
@media (max-width: 800px) {
/* hide git blame gutter not to superpose text */
.cm-gutterElement.obs-git-blame-gutter {
display: none;
}
}
.git-unified-diff-view,
.git-split-diff-view .cm-deletedLine .cm-changedText {
background-color: #ee443330;
}
.git-unified-diff-view,
.git-split-diff-view .cm-insertedLine .cm-changedText {
background-color: #22bb2230;
}
/* Limits the scrollbar to the view body */
.git-view {
display: flex;
flex-direction: column;
position: relative;
height: 100%;
}
.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after {
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>');
}
.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after {
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>');
}
/* Override styling of Codemirror merge view "collapsed lines" indicator */
.git-split-diff-view .ͼ2 .cm-collapsedLines {
background: var(--interactive-normal);
border-radius: var(--radius-m);
color: var(--text-accent);
font-size: var(--font-small);
padding: var(--size-4-1) var(--size-4-1);
}
.git-split-diff-view .ͼ2 .cm-collapsedLines:hover {
background: var(--interactive-hover);
color: var(--text-accent-hover);
}

View File

@ -0,0 +1,11 @@
{
"port": 27124,
"insecurePort": 27123,
"enableInsecureServer": false,
"apiKey": "7e92868686d7ef29e94a5919b2254d2df6aa68ad778c6eaa705a62c2519d5cfc",
"crypto": {
"cert": "-----BEGIN CERTIFICATE-----\r\nMIIDRTCCAi2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDExdPYnNp\r\nZGlhbiBMb2NhbCBSRVNUIEFQSTAeFw0yNTA2MDcwNDE2NTVaFw0yNjA2MDcwNDE2\r\nNTVaMCIxIDAeBgNVBAMTF09ic2lkaWFuIExvY2FsIFJFU1QgQVBJMIIBIjANBgkq\r\nhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuFCtYX1cYgrZT1xA3hXXvQsaow/pGykd\r\nMrKbSXD5Zw0LTY5d2FEzuB5Tf2gru7pgIFYX8RiLOw4qJQW84CgSLokbRqY57vUs\r\nH7cI0bNHpNTHXWWpsk9UJvfkJqUEHBZlxDmcJbiDVmrEnQLkFJM2vFnk4okDhd9b\r\nWkBPivlp1cZVo091mISG1veKPbajfNHxQjonZx3o3jtjdEf7Xa7YxVRWu9vipQif\r\nMEV/fISp0AzVOxqaOWR7bhFiwGoLOzt5J4/seul3PrfHESo4GEHLweWFWc+jDobI\r\nu3SZAikXILSpe/JmH84bgKc2ffKDqO//u3bBcZtCtQIeuZ43NiXw3QIDAQABo4GF\r\nMIGCMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgLEMDsGA1UdJQQ0MDIG\r\nCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD\r\nCDARBglghkgBhvhCAQEEBAMCAPcwDwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0B\r\nAQsFAAOCAQEAQr8oX7csKX8+9twJ6gA5L12UJ/2E26hZSRfuS6cEPgth1oHsRFrC\r\nFAaLN37L6HZ7Qs7sBuDKyivf+jJpH2Ooo+p3QPXq0SHsSGWascEerkegye+XknoP\r\npSV6whz2wQHmv2v+3Qutn870YbZV964OA/y4WFp/+Ajt6I1DZKcOJOu0XN+Rz8zE\r\nrGFIlr5sbzrNXt+7XO8LkWcA0lurNX+rE64r57cyThLBkcKC2Dvwc9fWYmhaBVf/\r\nGXcU/1l5icjYEbOudeigqQIoX16X1BBXD8YB1eckylY3DJ+e2CcH+jbnT6sZy4Fw\r\no9fl+ASd4yveF1Ju9FBvh2ReO4SJ1vGiVg==\r\n-----END CERTIFICATE-----\r\n",
"privateKey": "-----BEGIN RSA PRIVATE KEY-----\r\nMIIEowIBAAKCAQEAuFCtYX1cYgrZT1xA3hXXvQsaow/pGykdMrKbSXD5Zw0LTY5d\r\n2FEzuB5Tf2gru7pgIFYX8RiLOw4qJQW84CgSLokbRqY57vUsH7cI0bNHpNTHXWWp\r\nsk9UJvfkJqUEHBZlxDmcJbiDVmrEnQLkFJM2vFnk4okDhd9bWkBPivlp1cZVo091\r\nmISG1veKPbajfNHxQjonZx3o3jtjdEf7Xa7YxVRWu9vipQifMEV/fISp0AzVOxqa\r\nOWR7bhFiwGoLOzt5J4/seul3PrfHESo4GEHLweWFWc+jDobIu3SZAikXILSpe/Jm\r\nH84bgKc2ffKDqO//u3bBcZtCtQIeuZ43NiXw3QIDAQABAoIBAD0TlvCoTvW6LJqs\r\nsl4llNDzHgeM3Sz/6coD/4tNoYexfd5cX+Kvvdi0S+z7Qwq5TuNIRDTDclfGcNbF\r\n2PnarXO4QU6fBLGXkuCLkaOTqhkH3WyopJwOx48GNBdONVdtYJmukXy6cOMxDCgP\r\nbi8XPVsa2srqpj01b5svlmwyDA0nU05XMRDSg6x7YGq7TL314azEr9YkhQnGFujW\r\npRtynJ7sjCuo62pHo7rg1FUoCg+bebUm+C6BljF/qUkqhSQIp2WueKvSGgNRv68l\r\nd81LGYdYkiKW5AOC0BgylkPaOZcBS5p1D14KEqAJaDRI7V0hhzqPnF09z7qFow40\r\nWRJA7S0CgYEA/T4/xTPkdOkMlBu2B6HS4Zx8aN+N/EYYTL06pTdRq1oUcPiuyljW\r\ntWgH2xol1zqjL5cD06jdagyr5yI0gGpEfVqPhOCOfzocuMaB57mFZDNnvt7q7pCR\r\nYp9gZTOnr3ciFQd2hdaUQr0an6eMIPQoP40jaA01GGGTimhIBDXB548CgYEAulJW\r\nCPfKp3vYQU26N5JmApEepXJZ9OO7ZLeTdgYFYSx5/NdDCBAufpyDM1xvyHA3GKwz\r\n8m8TdGkSdmjk8a8Bh13jsl7sRQkrorcwE7M1vZGCA2kLyXVI39UbbEcdUdEHQxvj\r\npeAVZvYSeXcmvw18eubeXa9MR3xI6/ObBq7vitMCgYA/VELUSP7XsbQAkdF6pSA8\r\nZUrDWyyBqvHGtweka2oUBMnZ2oazeXXwFZzpUOenpDVM4GIHm1ILhDG08lvYxTpt\r\ncqkzXIimDl1CY/n2ffF6tlQ6ajqsACErXZnYlQtZGNzAD4a3P4sCCZJP3LFxSD2M\r\nbvosuijN+RDRavSfgOYFxwKBgQCtUsyP+Ro+5RkN3qV87qYQezj8BT0jbvmyvobh\r\ngsZcWAh+qSzFAnCN/UCbdcDSv3ixbffA7Y02fEvddMSNAxSz/SZElsLJkbdS3YBO\r\nwyYZ25MLYxvA42bQOakR97GRm5Za2kXR13txVTVoYuvbTEtg9QUkN18JHNelDu9G\r\nr1NMWwKBgH0h15j2sPX50RkGeE67F/67YIfvsjeuhXXKlE0ijq23K6N2Wt4qxhaC\r\nUT8a06ObV1q/2sVo6h9GnBWEFUhjc7L/D3CfeWP7gV27Ryg/XXKuVbsv0i34vkjB\r\ntPKng1bdmT1XiMbRNRuqOSchsgJJaWokrZH7f62mjYN87slIzzuD\r\n-----END RSA PRIVATE KEY-----\r\n",
"publicKey": "-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuFCtYX1cYgrZT1xA3hXX\r\nvQsaow/pGykdMrKbSXD5Zw0LTY5d2FEzuB5Tf2gru7pgIFYX8RiLOw4qJQW84CgS\r\nLokbRqY57vUsH7cI0bNHpNTHXWWpsk9UJvfkJqUEHBZlxDmcJbiDVmrEnQLkFJM2\r\nvFnk4okDhd9bWkBPivlp1cZVo091mISG1veKPbajfNHxQjonZx3o3jtjdEf7Xa7Y\r\nxVRWu9vipQifMEV/fISp0AzVOxqaOWR7bhFiwGoLOzt5J4/seul3PrfHESo4GEHL\r\nweWFWc+jDobIu3SZAikXILSpe/JmH84bgKc2ffKDqO//u3bBcZtCtQIeuZ43NiXw\r\n3QIDAQAB\r\n-----END PUBLIC KEY-----\r\n"
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-local-rest-api",
"name": "Local REST API",
"version": "3.2.0",
"minAppVersion": "0.12.0",
"description": "Get, change or otherwise interact with your notes in Obsidian via a REST API.",
"author": "Adam Coddington",
"authorUrl": "https://coddingtonbear.net/",
"isDesktopOnly": true
}

View File

@ -0,0 +1,47 @@
/* Sets all the text color to red! */
div.obsidian-local-rest-api-settings div.api-key-display {
margin-bottom: 20px;
}
div.obsidian-local-rest-api-settings div.api-key-display pre {
font-size: 0.8em;
padding: 10px 20px;
background-color: var(--background-modifier-cover);
font-family: monospace;
user-select: all;
}
div.obsidian-local-rest-api-settings div.setting-item-control {
min-width: 50%;
}
div.obsidian-local-rest-api-settings textarea {
width: 100%;
}
div.obsidian-local-rest-api-settings div.certificate-expired {
padding: 10px 20px;
border: 2px solid #ff0000;
}
div.obsidian-local-rest-api-settings div.certificate-expiring-soon {
padding: 10px 20px;
border: 2px solid #ffff00;
}
div.obsidian-local-rest-api-settings div.certificate-regeneration-recommended {
padding: 10px 20px;
border: 2px solid #ffff00;
}
div.obsidian-local-rest-api-settings table.api-urls tr {
width: 100%;
}
div.obsidian-local-rest-api-settings table.api-urls th, div.obsidian-local-rest-api-settings table.api-urls td {
padding: 5px 25px;
}
div.obsidian-local-rest-api-settings table.api-urls tr.disabled td.name, div.obsidian-local-rest-api-settings table.api-urls tr.disabled td.url {
text-decoration: line-through;
}

View File

@ -0,0 +1,20 @@
{
"devMode": false,
"ignoreCodeBlockRestrictions": false,
"preferredDateFormat": "YYYY-MM-DD",
"firstWeekday": {
"index": 1,
"name": "Monday",
"shortName": "Mo"
},
"syncInterval": 200,
"enableJs": false,
"viewFieldDisplayNullAsEmpty": true,
"enableSyntaxHighlighting": true,
"enableEditorRightClickMenu": true,
"inputFieldTemplates": [],
"buttonTemplates": [],
"excludedFolders": [
"templates"
]
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,12 @@
{
"id": "obsidian-meta-bind-plugin",
"name": "Meta Bind",
"version": "1.4.2",
"minAppVersion": "1.4.0",
"description": "Make your notes interactive with inline input fields, metadata displays, and buttons.",
"author": "Moritz Jung",
"authorUrl": "https://www.moritzjung.dev/",
"fundingUrl": "https://github.com/sponsors/mProjectsCode",
"helpUrl": "https://www.moritzjung.dev/obsidian-meta-bind-plugin-docs/",
"isDesktopOnly": false
}

View File

@ -0,0 +1,940 @@
body {
--mb-border-width: var(--border-width);
--mb-border-radius: var(--input-radius);
--mb-slider-spacing: 5px;
--mb-select-element-border-width: 5px;
--mb-date-input-year-input-width: 80px;
--mb-background-modifier-active: hsla(var(--interactive-accent-hsl), 0.15);
--mb-background-modifier-active-hover: hsla(var(--interactive-accent-hsl), 0.3);
--mb-input-type-select-text: var(--text-muted);
--mb-input-type-select-text-hover: var(--text-normal);
--mb-input-type-select-text-active: var(--text-normal);
--mb-input-type-select-text-active-hover: var(--text-normal);
}
/* Input Wrappers */
.mb-input {
background-color: transparent !important;
border: none !important;
}
.mb-input-wrapper {
display: inline;
white-space: normal;
}
.mb-input-inline {
display: inline !important;
}
.mb-input-block {
display: block !important;
}
/* View Wrappers */
/* For higher specificity */
:is(code, span).mb-view:has(> div.mb-view-wrapper) {
background-color: transparent;
border: none;
color: inherit;
font-size: inherit;
font-family: inherit;
padding: 0;
margin: 0;
}
div.mb-view-wrapper.mb-view-markdown > p {
margin: 0;
display: inline-block;
}
div.mb-view-wrapper {
display: inline;
}
.mb-button {
background-color: transparent !important;
border: none !important;
font-family: var(--font-text);
color: var(--text-normal);
}
.mb-button-inline {
display: inline !important;
}
.mb-button-block {
display: block !important;
}
.mb-button-group.mb-button-group {
background-color: transparent !important;
border: none !important;
padding-inline: 0;
& > .mb-button {
&:first-child:not(:last-child) {
& > .mb-button-inner {
border-radius: var(--mb-border-radius) 0 0 var(--mb-border-radius);
}
}
&:last-child:not(:first-child) {
& > .mb-button-inner {
border-radius: 0 var(--mb-border-radius) var(--mb-border-radius) 0;
}
}
&:last-child:first-child {
& > .mb-button-inner {
border-radius: var(--mb-border-radius);
}
}
& > .mb-button-inner {
border-radius: 0;
}
}
}
.mb-button-inner {
vertical-align: bottom;
/* Add a gap between text and icons. */
gap: var(--size-4-1);
background-size: cover;
background-position: center center;
&.mod-plain {
background: none;
box-shadow: none;
border: none;
color: var(--text-muted);
}
&.mod-plain:hover {
color: var(--text-normal);
}
&.disabled {
opacity: 0.6;
}
}
/* Toggle Input */
.mb-input-wrapper .checkbox-container {
vertical-align: text-bottom;
}
/* Slider Input */
.mb-input-wrapper:has(> .mb-slider-input) {
display: inline-flex;
}
.mb-slider-input {
align-self: center;
margin-left: var(--mb-slider-spacing) !important;
margin-right: var(--mb-slider-spacing) !important;
}
.mb-slider-input-label {
color: var(--text-muted);
font-size: var(--font-ui-small);
}
/* Text Input */
.mb-content-limit-indicator {
color: var(--text-muted);
font-size: var(--font-ui-small);
}
.mb-content-limit-indicator-overflow {
color: var(--color-red);
}
/* Select Input */
.mb-select-input-element {
cursor: pointer;
display: flex;
gap: var(--size-4-2);
align-items: center;
padding: var(--size-4-1) var(--size-4-2);
margin: var(--size-4-1) 0;
border-radius: var(--mb-border-radius);
white-space: pre-wrap;
font-size: 16px;
min-width: 200px;
color: var(--mb-input-type-select-text);
&.is-selected {
color: var(--mb-input-type-select-text-active);
background: var(--mb-background-modifier-active);
&:hover {
color: var(--mb-input-type-select-text-active-hover);
background: var(--mb-background-modifier-active-hover);
}
}
&:hover {
color: var(--mb-input-type-select-text-hover);
background: var(--background-modifier-hover);
}
&:not(.mb-mod-multi) > input[type='checkbox'] {
border-radius: 50%;
}
& > input[type='checkbox'] {
margin: 0;
}
}
/* List Input */
.mb-list-input {
display: flex;
gap: var(--size-4-2);
}
.mb-list-input > input {
flex-grow: 1;
}
.mb-list-input > textarea {
flex-grow: 1;
resize: vertical;
}
.mb-list-empty {
color: var(--text-faint);
}
.mb-list-items {
margin-bottom: var(--size-4-4);
display: flex;
flex-direction: column;
gap: var(--size-4-1);
}
.mb-list-item {
display: flex;
padding: var(--size-4-1) var(--size-4-2);
border-radius: var(--mb-border-radius);
user-select: text;
& > span {
flex-grow: 1;
}
&:hover {
background: var(--background-modifier-hover);
}
}
/* Inline List */
.mb-inline-list {
display: inline;
font-size: 0;
& > .mb-inline-list-item {
border: var(--mb-border-width) solid var(--background-modifier-border);
border-radius: var(--mb-border-radius);
display: inline-flex;
align-items: center;
gap: var(--size-4-2);
padding-inline: var(--size-4-2);
padding-block: var(--size-4-1);
font-size: var(--font-ui-small);
vertical-align: bottom;
user-select: text;
&:not(:last-child) {
margin-right: var(--size-4-2);
}
&:hover {
border-color: var(--background-modifier-border-hover);
background-color: var(--background-modifier-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
}
& > .mb-inline-list-add {
border: var(--mb-border-width) solid var(--background-modifier-border);
border-radius: var(--mb-border-radius);
display: inline-flex;
align-items: center;
padding-inline: var(--size-4-2);
padding-block: var(--size-4-1);
font-size: var(--font-ui-small);
&:hover {
border-color: var(--background-modifier-border-hover);
background-color: var(--background-modifier-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
&:focus,
&:focus-visible {
box-shadow: 0 0 0 2px var(--background-modifier-border-focus);
color: var(--text-normal);
}
}
}
/* Suggester Input */
.mb-suggest-input {
background: var(--background-modifier-form-field);
border-radius: var(--mb-border-radius);
border: var(--mb-border-width) solid var(--background-modifier-border);
padding: var(--size-4-1) var(--size-4-2);
position: relative;
color: var(--text-normal);
display: inline-flex;
align-items: center;
gap: var(--size-4-1);
user-select: text;
&:hover {
border-color: var(--background-modifier-border-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
}
.mb-suggest-input > button {
padding: 0;
height: 20px;
}
.mb-suggest-text {
display: inline-block;
}
/* Progress Bar Input */
.mb-progress-bar-input {
height: var(--input-height);
width: 100%;
border-radius: var(--mb-border-radius);
border: var(--mb-border-width) solid var(--background-modifier-border);
position: relative;
cursor: col-resize;
}
.mb-progress-bar-input:focus-visible {
box-shadow: 0 0 0 3px var(--background-modifier-border-focus);
}
.mb-progress-bar-progress {
height: 100%;
background: var(--color-accent);
border-radius: var(--mb-border-radius);
}
.mb-progress-bar-value {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.mb-progress-bar-label-left {
position: absolute;
top: 50%;
transform: translate(0, -50%);
left: var(--size-4-2);
}
.mb-progress-bar-label-right {
position: absolute;
top: 50%;
transform: translate(0, -50%);
right: var(--size-4-2);
}
/* Text Area Input */
.mb-input-textarea {
width: 100%;
height: 100px;
resize: vertical;
}
/* editor */
.mb-editor-input {
background: var(--background-secondary);
width: 100%;
height: 500px;
padding: 0;
position: relative;
margin-left: 0;
overflow: scroll;
}
.mb-editor-input > textarea {
background: var(--background-secondary);
border: none;
padding: var(--size-4-4) var(--size-4-8);
margin: 0;
position: absolute;
inset: 0;
resize: none;
border-radius: 0;
}
.mb-editor-input > div {
padding: var(--size-4-4) var(--size-4-8);
position: absolute;
inset: 0;
}
/* Card */
.mb-card {
padding: var(--size-4-2);
margin: var(--size-4-2) 0;
border-radius: var(--mb-border-radius);
border: var(--mb-border-width) solid var(--background-modifier-border);
display: flex;
flex-direction: column;
width: 100%;
gap: var(--size-4-2);
}
[class*='block-language-'] > .mb-card {
display: flex;
}
.mb-card > :first-child {
margin-top: 0;
}
.mb-card > :last-child {
margin-bottom: 0;
}
.mb-card > code {
display: block;
}
.mb-card > pre {
margin: 0;
}
.mb-card > h3 {
margin-top: 0;
}
.mb-card.mb-card-full-width {
width: 100%;
}
/* Image */
.mb-image-modal-header {
margin-bottom: var(--size-4-4);
}
.mb-image-card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr));
gap: var(--size-4-4);
}
.mb-image-card {
position: relative;
}
.mb-image-suggester-modal {
width: 80%;
}
.mb-image-card-image {
width: 100%;
height: fit-content;
max-height: 500px;
object-fit: contain;
}
.mb-image-card-text {
display: block;
margin: var(--size-4-2);
margin-bottom: var(--size-4-4);
}
.mb-image-card-footer {
display: flex;
align-items: center;
& > span {
padding-left: var(--size-4-2);
font-size: var(--font-ui-small);
color: var(--text-muted);
min-width: 0;
text-overflow-ellipsis: true;
flex: 1;
}
}
.mb-image-card-button {
position: absolute;
opacity: 0;
top: var(--size-4-2);
right: var(--size-4-2);
transition: opacity 0.2s ease-in-out;
}
.mb-image-card:hover .mb-image-card-button {
opacity: 1;
}
.mb-image-suggest-input {
background: var(--background-secondary);
border-radius: var(--mb-border-radius);
border: var(--mb-border-width) solid var(--background-modifier-border);
padding: var(--size-4-2);
width: 100%;
}
.mb-image-empty {
display: flex;
flex-direction: column;
align-items: center;
}
/* Time Input */
.mb-input-type-time {
input[type='time'] {
-webkit-app-region: no-drag;
background: var(--background-modifier-form-field);
border: var(--input-border-width) solid var(--background-modifier-border);
color: var(--text-normal);
font-family: inherit;
padding: var(--size-4-1) var(--size-4-2);
font-size: var(--font-ui-small);
border-radius: var(--input-radius);
outline: none;
&:hover {
border-color: var(--background-modifier-border-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
&:focus,
&:focus-visible {
box-shadow: 0 0 0 2px var(--background-modifier-border-focus);
}
}
}
/* Date Picker Input */
.mb-date-picker-input {
background: var(--background-modifier-form-field);
border: var(--mb-border-width) solid var(--background-modifier-border);
color: var(--text-normal);
font-family: inherit;
padding: var(--size-4-1) var(--size-4-2);
font-size: var(--font-ui-small);
border-radius: var(--input-radius);
outline: none;
position: relative;
display: inline-flex;
align-items: center;
gap: 5px;
&:hover {
border-color: var(--background-modifier-border-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
&:focus,
&:focus-visible {
box-shadow: 0 0 0 2px var(--background-modifier-border-focus);
}
& > .mb-date-picker-text {
display: inline-block;
}
}
.mb-date-picker {
display: block;
padding: var(--size-4-4);
}
.mb-date-picker-header {
display: flex;
gap: var(--size-4-2);
align-items: center;
justify-content: space-around;
}
.mb-date-picker-header-text {
flex: 1;
text-align: center;
display: flex;
gap: var(--size-4-2);
align-items: center;
justify-content: center;
width: min-content;
}
.mb-date-picker-header-text-year {
width: 60px;
padding: var(--size-4-2);
}
.mb-date-picker-header-text-month {
height: min-content;
}
.mb-date-picker-month-switch-button {
margin: 0;
}
.mb-date-picker-util-button {
margin: 0;
}
.mb-date-picker-footer {
display: flex;
gap: var(--size-4-2);
align-items: center;
justify-content: center;
}
.mb-calendar {
margin-top: 10px;
}
.mb-calendar-header {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
gap: var(--size-4-1);
background: var(--background-secondary);
border-radius: var(--mb-border-radius);
margin-bottom: var(--size-4-1);
}
.mb-calendar-content {
display: grid;
flex-wrap: wrap;
grid-template-columns: repeat(7, 1fr);
gap: var(--size-4-1);
}
.mb-calendar-cell {
min-width: 40px;
padding: var(--size-4-2);
display: flex;
justify-content: center;
align-items: center;
border-radius: var(--mb-border-radius);
}
.mb-calendar-content-cell {
cursor: pointer;
}
.mb-calendar-cell-text {
margin: auto;
text-align: center;
}
.mb-calendar-cell.mb-calendar-selected {
background: var(--interactive-accent);
color: var(--text-on-accent);
}
.mb-calendar-cell.mb-calendar-highlight:hover {
background: var(--interactive-hover);
}
.mb-calendar-cell.mb-calendar-selected.mb-calendar-highlight:hover {
background: var(--interactive-accent-hover);
}
/* Embed */
.mb-embed > .mb-embed-message {
display: block;
width: 100%;
text-align: center;
color: var(--text-muted);
font-size: var(--font-smaller);
}
/* Error */
.mb-error {
color: var(--text-error) !important;
font-weight: bold;
font-family: var(--font-monospace);
}
code.mb-error {
color: var(--text-error) !important;
}
.mb-warning {
color: var(--text-warning) !important;
font-weight: bold;
font-family: var(--font-monospace);
}
code.mb-warning {
color: var(--text-warning) !important;
}
/* Code */
.mb-code {
color: var(--text-normal);
font-family: var(--font-monospace);
}
/* Error Collection */
.mb-error-collection-card {
padding: var(--size-4-2);
margin: var(--size-4-2) 0;
border-radius: var(--mb-border-radius);
border: var(--mb-border-width) solid var(--background-modifier-border);
color: var(--text-normal);
font-family: var(--font-default);
}
.mb-error-collection {
display: inline-block;
position: relative;
cursor: pointer;
margin-inline: var(--size-4-2);
}
.publish-renderer .mb-error-collection {
margin-inline: 0;
}
.mb-error-collection > svg {
width: var(--font-text-size);
height: var(--font-text-size);
vertical-align: text-bottom;
}
.mb-error-collection > svg.lucide-alert-circle {
color: var(--text-error);
}
.mb-error-collection > svg.lucide-alert-triangle {
color: var(--text-warning);
}
.mb-error-collection > svg.lucide-info {
color: var(--text-normal);
}
.mb-pre {
overflow-x: scroll;
}
.mb-pre > code {
white-space: pre;
}
.mb-error-collection-modal {
width: 80%;
}
.mb-error-text {
color: var(--text-error) !important;
}
.mb-warning-text {
color: var(--text-warning) !important;
}
/* --- Misc --- */
.mb-whitespace-pre {
white-space: pre;
}
.mb-excluded-folders-table-input-cell {
width: 100%;
}
.mb-excluded-folders-table-input-cell > input {
width: 100%;
}
.mb-textarea {
width: 100%;
height: 100px;
resize: vertical;
}
.mb-icon-wrapper {
display: block;
position: relative;
width: 18px;
height: 18px;
}
.mb-icon-wrapper.mb-icon-wrapper-inline {
display: inline-block;
}
.mb-icon-wrapper > svg {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.mb-faq-view {
max-width: var(--file-line-width);
margin-left: auto;
margin-right: auto;
}
a.mb-no-link {
color: var(--code-normal);
text-decoration: none;
}
table.mb-html-table {
}
td.mb-html-table-button-cell {
--table-column-min-width: 10px;
}
th.mb-html-table-button-cell {
--table-column-min-width: 10px;
}
.mb-table-wrapper {
overflow-x: auto;
}
.mb-flex-row {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
gap: var(--size-4-2);
}
.mb-flex-row.mb-flex-row-stretch > :first-child {
flex: 1;
}
.mb-flex-row-reverse {
display: flex;
flex-direction: row-reverse;
justify-content: space-between;
align-items: center;
gap: var(--size-4-2);
}
.mb-flex-row-reverse.mb-flex-row-stretch > :last-child {
flex: 1;
}
.mb-full-width-text-input {
width: 100%;
}
.mb-full-width-text-input > input {
width: 100%;
}
.mb-full-width-text-input > textarea {
width: 100%;
height: 200px;
resize: vertical;
}
div.setting-item.mb-vertical {
flex-direction: column;
align-items: flex-start;
gap: var(--size-4-1);
}
div.setting-item > div.setting-item-control.mb-vertical-control {
flex-direction: column;
align-items: flex-start;
gap: var(--size-4-1);
width: 100%;
}
.mb-search-modal-element-description {
color: var(--text-faint);
}
/* --- HIGHLIGHTING CLASSES --- */
.mb-highlight-test {
color: #00bfbc;
}
.mb-highlight-ident,
.cm-mb-highlight-ident {
color: var(--code-normal);
}
.mb-highlight-control,
.cm-mb-highlight-control {
color: var(--code-keyword);
}
.mb-highlight-string,
.cm-mb-highlight-string {
color: var(--code-string);
}
.mb-highlight-keyword,
.cm-mb-highlight-keyword {
color: var(--code-property);
}
.mb-highlight-error,
.cm-mb-highlight-error {
color: var(--text-error);
}
/* --- UTIL CLASSES --- */
.meta-bind-full-width > * {
width: 100%;
}
.meta-bind-high > * {
height: 200px;
}
.meta-bind-small-width > * {
width: 80px;
}
/* --- PUBLISH STUFF --- */
.published-container {
.mb-input-type-toggle > div {
display: inline-block;
vertical-align: sub;
}
}

10221
.obsidian/plugins/obsidian-pandoc/main.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-pandoc",
"name": "Pandoc Plugin",
"version": "0.4.1",
"minAppVersion": "0.12.5",
"description": "This is a Pandoc export plugin for Obsidian. It provides commands to export to formats like DOCX, ePub and PDF.",
"author": "Oliver Balfour",
"authorUrl": "https://github.com/OliverBalfour/obsidian-pandoc",
"isDesktopOnly": true
}

View File

@ -0,0 +1,4 @@
.pandoc-plugin-error {
color: red;
}

42
.obsidian/plugins/omnisearch/data.json vendored Normal file
View File

@ -0,0 +1,42 @@
{
"useCache": true,
"hideExcluded": false,
"recencyBoost": "0",
"downrankedFoldersFilters": [],
"ignoreDiacritics": true,
"ignoreArabicDiacritics": false,
"indexedFileTypes": [],
"displayTitle": "",
"PDFIndexing": false,
"officeIndexing": false,
"imagesIndexing": false,
"aiImageIndexing": false,
"unsupportedFilesIndexing": "default",
"splitCamelCase": false,
"openInNewPane": false,
"vimLikeNavigationShortcut": false,
"ribbonIcon": true,
"showExcerpt": true,
"maxEmbeds": 5,
"renderLineReturnInExcerpts": true,
"showCreateButton": false,
"highlight": true,
"showPreviousQueryResults": true,
"simpleSearch": false,
"tokenizeUrls": false,
"fuzziness": "1",
"weightBasename": 10,
"weightDirectory": 7,
"weightH1": 6,
"weightH2": 5,
"weightH3": 4,
"weightUnmarkedTags": 2,
"weightCustomProperties": [],
"httpApiEnabled": false,
"httpApiPort": "51361",
"httpApiNotice": true,
"welcomeMessage": "1.21.0",
"verboseLogging": false,
"DANGER_httpHost": null,
"DANGER_forceSaveCache": false
}

170
.obsidian/plugins/omnisearch/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,14 @@
{
"id": "omnisearch",
"name": "Omnisearch",
"version": "1.27.1",
"minAppVersion": "1.7.2",
"description": "A search engine that just works",
"author": "Simon Cambier",
"authorUrl": "https://github.com/scambier/obsidian-omnisearch",
"fundingUrl": {
"Github": "https://github.com/sponsors/scambier",
"Ko-fi": "https://ko-fi.com/scambier"
},
"isDesktopOnly": false
}

135
.obsidian/plugins/omnisearch/styles.css vendored Normal file
View File

@ -0,0 +1,135 @@
.omnisearch-modal {
}
.omnisearch-result {
white-space: normal;
display: flex;
flex-direction: row;
/* justify-content: space-between; */
flex-wrap: nowrap;
}
.omnisearch-result__title-container {
display: flex;
align-items: center;
justify-content: space-between;
column-gap: 5px;
flex-wrap: wrap;
}
.omnisearch-result__title {
white-space: pre-wrap;
align-items: center;
display: flex;
gap: 5px;
}
.omnisearch-result__title > span {
}
.omnisearch-result__folder-path {
font-size: 0.75rem;
align-items: center;
display: flex;
gap: 5px;
color: var(--text-muted);
}
.omnisearch-result__extension {
font-size: 0.7rem;
color: var(--text-muted);
}
.omnisearch-result__counter {
font-size: 0.7rem;
color: var(--text-muted);
}
.omnisearch-result__body {
white-space: normal;
font-size: small;
word-wrap: normal;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
color: var(--text-muted);
margin-inline-start: 0.5em;
}
.omnisearch-result__embed {
margin-left: 1em;
}
.omnisearch-result__image-container {
flex-basis: 20%;
text-align: end;
}
.omnisearch-highlight {
}
.omnisearch-default-highlight {
text-decoration: underline;
text-decoration-color: var(--text-highlight-bg);
text-decoration-thickness: 3px;
text-underline-offset: -1px;
text-decoration-skip-ink: none;
}
.omnisearch-input-container {
display: flex;
align-items: center;
flex-direction: row;
gap: 5px;
}
.omnisearch-result__icon {
display: inline-block;
vertical-align: middle;
width: 16px;
height: 16px;
margin-right: 4px;
}
.omnisearch-result__icon svg {
width: 100%;
height: 100%;
}
.omnisearch-result__icon--emoji {
font-size: 16px;
vertical-align: middle;
margin-right: 4px;
}
@media only screen and (max-width: 600px) {
.omnisearch-input-container {
flex-direction: column;
}
.omnisearch-input-container__buttons {
display: flex;
flex-direction: row;
width: 100%;
padding: 0 1em 0 1em;
gap: 1em;
}
.omnisearch-input-container__buttons > button {
flex-grow: 1;
}
}
@media only screen and (min-width: 600px) {
.omnisearch-input-container__buttons {
margin-inline-end: 1em;
}
}
.omnisearch-input-field {
position: relative;
flex-grow: 1;
}

View File

@ -0,0 +1 @@
data.json

235
.obsidian/plugins/remotely-save/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "remotely-save",
"name": "Remotely Save",
"version": "0.5.25",
"minAppVersion": "0.13.21",
"description": "Yet another unofficial plugin allowing users to synchronize notes between local device and the cloud service.",
"author": "fyears",
"authorUrl": "https://github.com/fyears",
"isDesktopOnly": false,
"fundingUrl": "https://remotelysave.com"
}

View File

@ -0,0 +1,244 @@
/* set the styles */
.password-second-confirm {
font-weight: bold;
}
.password-disclaimer {
font-weight: bold;
}
.encryptionmethod-second-confirm {
font-weight: bold;
}
.settings-auth-related {
border-top: 1px solid var(--background-modifier-border);
padding-top: 18px;
}
.settings-percentage-custom-hide {
display: none;
}
.settings-encryption-method-hide {
display: none;
}
.s3-disclaimer {
font-weight: bold;
}
.s3-hide {
display: none;
}
.dropbox-disclaimer {
font-weight: bold;
}
.dropbox-hide {
display: none;
}
.dropbox-auth-button-hide {
display: none;
}
.dropbox-revoke-auth-button-hide {
display: none;
}
.onedrive-disclaimer {
font-weight: bold;
}
.onedrive-hide {
display: none;
}
.onedrive-auth-button-hide {
display: none;
}
.onedrive-revoke-auth-button-hide {
display: none;
}
.onedrivefull-allow-to-use-hide {
display: none;
}
.onedrivefull-disclaimer {
font-weight: bold;
}
.onedrivefull-hide {
display: none;
}
.onedrivefull-auth-button-hide {
display: none;
}
.onedrivefull-revoke-auth-button-hide {
display: none;
}
.webdav-disclaimer {
font-weight: bold;
}
.webdav-hide {
display: none;
}
.webdav-customheaders-textarea {
font-family: monospace;
}
.webdis-disclaimer {
font-weight: bold;
}
.webdis-hide {
display: none;
}
.googledrive-disclaimer {
font-weight: bold;
}
.googledrive-hide {
display: none;
}
.googledrive-allow-to-use-hide {
display: none;
}
.googledrive-auth-button-hide {
display: none;
}
.googledrive-revoke-auth-button-hide {
display: none;
}
.box-disclaimer {
font-weight: bold;
}
.box-hide {
display: none;
}
.box-allow-to-use-hide {
display: none;
}
.box-auth-button-hide {
display: none;
}
.box-revoke-auth-button-hide {
display: none;
}
.pcloud-disclaimer {
font-weight: bold;
}
.pcloud-hide {
display: none;
}
.pcloud-allow-to-use-hide {
display: none;
}
.pcloud-auth-button-hide {
display: none;
}
.pcloud-revoke-auth-button-hide {
display: none;
}
.yandexdisk-disclaimer {
font-weight: bold;
}
.yandexdisk-hide {
display: none;
}
.yandexdisk-allow-to-use-hide {
display: none;
}
.yandexdisk-auth-button-hide {
display: none;
}
.yandexdisk-revoke-auth-button-hide {
display: none;
}
.koofr-disclaimer {
font-weight: bold;
}
.koofr-hide {
display: none;
}
.koofr-allow-to-use-hide {
display: none;
}
.koofr-auth-button-hide {
display: none;
}
.koofr-revoke-auth-button-hide {
display: none;
}
.azureblobstorage-disclaimer {
font-weight: bold;
}
.azureblobstorage-hide {
display: none;
}
.azureblobstorage-allow-to-use-hide {
display: none;
}
.qrcode-img {
width: 350px;
height: 350px;
}
.ignorepaths-textarea {
font-family: monospace;
}
.onlyallowpaths-textarea {
font-family: monospace;
}
.logtohttpserver-warning {
color: red;
font-weight: bolder;
}
.setting-need-wrapping .setting-item-control {
/* flex-wrap: wrap; */
display: grid;
}
.pro-disclaimer {
font-weight: bold;
}
.pro-hide {
display: none;
}
.pro-auth-button-hide {
display: none;
}
.pro-revoke-auth-button-hide {
display: none;
}

290
.obsidian/plugins/searchpp/main.js vendored Normal file
View File

@ -0,0 +1,290 @@
'use strict';
var obsidian = require('obsidian');
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
var C__Users_HAOUARI_Desktop_Notes_NotesTest__obsidian_plugins_obsidianTextExtract_node_modules_removeMarkdown = function(md, options) {
options = options || {};
options.listUnicodeChar = options.hasOwnProperty('listUnicodeChar') ? options.listUnicodeChar : false;
options.stripListLeaders = options.hasOwnProperty('stripListLeaders') ? options.stripListLeaders : true;
options.gfm = options.hasOwnProperty('gfm') ? options.gfm : true;
options.useImgAltText = options.hasOwnProperty('useImgAltText') ? options.useImgAltText : true;
var output = md || '';
// Remove horizontal rules (stripListHeaders conflict with this rule, which is why it has been moved to the top)
output = output.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*$/gm, '');
try {
if (options.stripListLeaders) {
if (options.listUnicodeChar)
output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, options.listUnicodeChar + ' $1');
else
output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, '$1');
}
if (options.gfm) {
output = output
// Header
.replace(/\n={2,}/g, '\n')
// Fenced codeblocks
.replace(/~{3}.*\n/g, '')
// Strikethrough
.replace(/~~/g, '')
// Fenced codeblocks
.replace(/`{3}.*\n/g, '');
}
output = output
// Remove HTML tags
.replace(/<[^>]*>/g, '')
// Remove setext-style headers
.replace(/^[=\-]{2,}\s*$/g, '')
// Remove footnotes?
.replace(/\[\^.+?\](\: .*?$)?/g, '')
.replace(/\s{0,2}\[.*?\]: .*?$/g, '')
// Remove images
.replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, options.useImgAltText ? '$1' : '')
// Remove inline links
.replace(/\[(.*?)\][\[\(].*?[\]\)]/g, '$1')
// Remove blockquotes
.replace(/^\s{0,3}>\s?/g, '')
// Remove reference-style links?
.replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, '')
// Remove atx-style headers
.replace(/^(\n)?\s{0,}#{1,6}\s+| {0,}(\n)?\s{0,}#{0,} {0,}(\n)?\s{0,}$/gm, '$1$2$3')
// Remove emphasis (repeat the line to remove double emphasis)
.replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, '$2')
.replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, '$2')
// Remove code blocks
.replace(/(`{3,})(.*?)\1/gm, '$2')
// Remove inline code
.replace(/`(.+?)`/g, '$1')
// Replace two or more newlines with exactly two? Not entirely sure this belongs here...
.replace(/\n{2,}/g, '\n\n');
} catch(e) {
console.error(e);
return md;
}
return output;
};
function inlineLog(str) {
console.log(str);
return str;
}
var SearchPP = /** @class */ (function (_super) {
__extends(SearchPP, _super);
function SearchPP() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.delay = 2000;
_this.textExtraction = "Activated";
_this.defaultSize = 30;
return _this;
}
SearchPP.prototype.onload = function () {
var _this = this;
this.addSettingTab(new SettingTab(this.app, this));
console.log('Loading insert search results plugin');
var config = [
{
id: 'editor:insertSearchResultsFormated',
name: 'Insert search results Formated',
formatTitle: function (ele) { return "# " + ele.file.name + " (" + ele.result.content.length + ")" + "\n" + "[[" + ele.file.name + "]]" + "\n"; },
formatResults: function (str, start, end) { return "## ..." + C__Users_HAOUARI_Desktop_Notes_NotesTest__obsidian_plugins_obsidianTextExtract_node_modules_removeMarkdown(str.substring(start, end).replace("\n", " ")) + "...\n"; },
formatContent: function (str, start, end) { return C__Users_HAOUARI_Desktop_Notes_NotesTest__obsidian_plugins_obsidianTextExtract_node_modules_removeMarkdown(str.substring(start, end).replace("\n", " ")); },
postResults: function () { _this.app.commands.commands["editor:fold-all"].checkCallback(); }
},
{
id: 'editor:insertSearchResultsNotFormated',
name: 'Insert search results not formated',
formatTitle: function (ele) { return ele.file.name + " (" + ele.result.content.length + ")" + "\n" + "[[" + ele.file.name + "]]" + "\n"; },
formatResults: function (str, start, end) { return C__Users_HAOUARI_Desktop_Notes_NotesTest__obsidian_plugins_obsidianTextExtract_node_modules_removeMarkdown(str.substring(start, end).replace("\n", " ")) + "...\n"; },
formatContent: function (str, start, end) { return C__Users_HAOUARI_Desktop_Notes_NotesTest__obsidian_plugins_obsidianTextExtract_node_modules_removeMarkdown(str.substring(start, end).replace("\n", " ")); },
postResults: function () { }
},
{
id: 'editor:insertSearchResultContent',
name: 'Insert search results content',
formatTitle: function (ele) { return ""; },
formatResults: function (str, start, end) { return ""; },
formatContent: function (str, start, end) { return C__Users_HAOUARI_Desktop_Notes_NotesTest__obsidian_plugins_obsidianTextExtract_node_modules_removeMarkdown(str.substring(start, end).replace("\n", " ")); },
postResults: function () { }
}
];
var reformatLinks = function (links, config, size) {
var currentView = _this.app.workspace.activeLeaf.view;
var query = _this.app.workspace.getLeavesOfType('search')[0].view.searchQuery.query.replace(/^"(.*)"$/, '$1');
links.sort(function (a, b) { return b.result.content.length - a.result.content.length; });
return links.filter(function (ele) { return ele.file.name !== currentView.file.name; }).map(function (ele) {
var titleSize = 20;
var extractedText = "";
if (_this.textExtraction == "Activated") {
extractedText = config.formatTitle(ele);
var minIndex_1 = 9999999;
var maxIndex_1 = 0;
ele.result.content.forEach(function (position) {
var minTitle = Math.max(position[0] - titleSize, 0);
var maxTitle = Math.min(position[1] + titleSize, ele.content.length - 1);
var min = Math.max(position[0] - size, 0);
var max = Math.min(position[1] + size, ele.content.length - 1);
// console.log({min,max,minIndex,maxIndex})
if (!((min >= minIndex_1 && min <= maxIndex_1) || (max >= minIndex_1 && max <= maxIndex_1))) {
minIndex_1 = Math.min(minIndex_1, position[0]);
maxIndex_1 = Math.max(maxIndex_1, position[1]);
extractedText += config.formatResults(ele.content, minTitle, maxTitle);
//console.log(ele.content.substring(min,max));
extractedText += config.formatContent(ele.content, min, max);
}
});
}
return extractedText;
}).join('\n');
};
function getLastLineNum(doc, line) {
if (line === void 0) { line = 0; }
var lineNum = line === 0
? doc.getCursor().line
: line;
if (doc.lineCount() === lineNum) {
return doc.getCursor().line + 1;
}
return doc.getLine(lineNum) === '---'
? lineNum
: getLastLineNum(doc, lineNum + 1);
}
var initExpander = function (config) {
// Search files
var cmDoc = null;
// @ts-ignore
var globalSearchFn = _this.app.internalPlugins.getPluginById('global-search').instance.openGlobalSearch.bind(_this);
var search = function (query) { return globalSearchFn(inlineLog(query)); };
var getFoundFilenames = function (config, callback, size) {
var searchLeaf = _this.app.workspace.getLeavesOfType('search')[0];
console.log("searchLeaf", searchLeaf);
searchLeaf.open(searchLeaf.view)
.then(function (view) { return setTimeout(function () {
// Using undocumented feature
// @ts-ignore
var result = reformatLinks(view.dom.resultDoms, config, size);
callback(result);
config.postResults();
}, _this.delay); });
};
var currentView = _this.app.workspace.activeLeaf.view;
if (currentView instanceof obsidian.MarkdownView) {
cmDoc = currentView.sourceMode.cmEditor;
}
var hasFormulaRegexp = /^\{\{.+\}\}.*/;
var curNum = cmDoc.getCursor().line;
var curText = cmDoc.getLine(curNum);
if (!hasFormulaRegexp.test(curText)) {
return;
}
var isEmbed = cmDoc.getLine(curNum - 1) === '```expander'
&& cmDoc.getLine(curNum + 1) === '```';
var fstLineNumToReplace = isEmbed
? curNum - 1
: curNum;
var lstLineNumToReplace = isEmbed
? getLastLineNum(cmDoc)
: curNum;
var searchQuery = curText.replace('{{', '').replace('}}', '');
var size = _this.defaultSize;
if (searchQuery.indexOf("/") !== -1) {
size = +searchQuery.split("/")[1];
searchQuery = searchQuery.split("/")[0];
}
var embedFormula = '```expander\n' +
'{{' + searchQuery + '}}\n' +
'```\n';
var replaceLine = function (content) { return cmDoc.replaceRange(embedFormula + content + '\n\n', { line: fstLineNumToReplace, ch: 0 }, { line: lstLineNumToReplace, ch: cmDoc.getLine(lstLineNumToReplace).length }); };
search(inlineLog(searchQuery));
getFoundFilenames(config, replaceLine, size);
};
config.forEach(function (e) {
_this.addCommand({
id: e.id,
name: e.name,
callback: function () { return initExpander(e); },
hotkeys: []
});
});
};
SearchPP.prototype.onunload = function () {
console.log('unloading plugin');
};
return SearchPP;
}(obsidian.Plugin));
var SettingTab = /** @class */ (function (_super) {
__extends(SettingTab, _super);
function SettingTab(app, plugin) {
var _this = _super.call(this, app, plugin) || this;
_this.app = app;
_this.plugin = plugin;
return _this;
}
SettingTab.prototype.display = function () {
var _this = this;
var containerEl = this.containerEl;
containerEl.empty();
containerEl.createEl('h2', { text: 'Settings for Search++' });
new obsidian.Setting(containerEl)
.setName('Delay')
.setDesc('Search++ don\' wait until search completed. It waits for a delay and paste result after that.')
.addSlider(function (slider) {
slider.setLimits(1000, 10000, 1000);
slider.setValue(_this.plugin.delay);
slider.onChange(function (value) { return _this.plugin.delay = value; });
slider.setDynamicTooltip();
});
new obsidian.Setting(containerEl)
.setName('Text Extraction')
.setDesc('Add extracted text to the found results.')
.addDropdown(function (cb) {
cb.addOption("Activated", "Activated");
cb.addOption("Disabled", "Disabled");
cb.setValue(_this.plugin.textExtraction);
cb.onChange(function (value) { return _this.plugin.textExtraction = value; });
});
new obsidian.Setting(containerEl)
.setName('Default Size')
.setDesc('The number of the chars to extract before and after the found text')
.addText(function (text) {
text.setValue(_this.plugin.defaultSize.toString());
text.onChange(function (value) { return _this.plugin.defaultSize = +value; });
});
};
return SettingTab;
}(obsidian.PluginSettingTab));
module.exports = SearchPP;
/* nosourcemap */

View File

@ -0,0 +1,10 @@
{
"id": "searchpp",
"name": "Search++",
"version": "0.0.1",
"repo": "https://github.com/nhaouari/searchpp",
"description": "Allow inserting text context search results on the active note, the plugin is based on the plugin mrj-text-expand-witb-text of MrJackphil.",
"isDesktopOnly": false,
"author": "Noureddine Haouari",
"authorUrl": "https://haouari.com"
}

365
.obsidian/plugins/word-frequency/main.js vendored Normal file
View File

@ -0,0 +1,365 @@
'use strict';
var obsidian = require('obsidian');
const DEFAULT_SETTINGS = {
blacklist: 'the,and,to,of,a,in,for,on,is,it,that,with,as,this,by,your,you',
threshold: 3,
};
const ELEMENT_CLASSES = {
containerButton: 'word-frequency-button-container',
containerContent: 'word-frequency-sidebar-content',
containerCount: 'word-frequency-count-container',
containerFilter: 'word-frequency-filter-container',
containerRow: 'word-frequency-row',
containerThreshold: 'word-frequency-threshold-display',
containerWordList: 'word-frequency-word-list',
filter: 'word-frequency-filter',
settingBlacklist: 'word-frequency-setting-blacklist',
settingInfoItem: 'word-frequency-setting-item-info',
settingItem: 'word-frequency-setting-item',
};
const COMMAND_ID_SHOW_SIDEBAR = 'word-frequency-show-sidebar';
const EVENT_UPDATE = 'word-frequency-update';
const FREQUENCY_ICON = 'file-chart-column-increasing';
const PLUGIN_NAME = 'Word frequency';
const SETTINGS_DESCRIPTIONS = {
blacklist: 'Comma-separated list of words to exclude.',
threshold: 'Only show words that appear at least this many times.',
};
const SETTINGS_NAMES = {
blacklist: 'Blacklist',
threshold: 'Word frequency threshold',
};
const VIEW_TYPE = 'word-frequency-view';
class ViewManager {
plugin;
constructor(plugin) {
this.plugin = plugin;
}
getOrCreateLeaf(workspace, viewType) {
const leaves = workspace.getLeavesOfType(viewType);
if (leaves.length > 0) {
return leaves[0];
}
return workspace.getRightLeaf(false);
}
async setViewState(leaf, viewType) {
await leaf.setViewState({
type: viewType,
active: true,
});
}
updateContent() {
const editor = this.plugin.app.workspace.getActiveViewOfType(obsidian.MarkdownView)?.editor;
this.plugin.frequencyCounter.triggerUpdateContent(editor);
}
}
function segmentText(content) {
const normalized = content.toLowerCase().normalize('NFKC');
const stripped = normalized.replace(/[^\p{L}\p{N}\s]+/gu, '');
return stripped
.trim()
.split(/\s+/)
.filter((word) => word.length > 0);
}
class WordFrequencyCounter {
debouncedEditorChange;
lastActiveEditor;
plugin;
constructor(plugin,
/* eslint-disable no-unused-vars */
debouncedEditorChange = obsidian.debounce((editor) => this.triggerUpdateContent(editor), 3000)
/* eslint-enable no-unused-vars */
) {
this.debouncedEditorChange = debouncedEditorChange;
this.plugin = plugin;
}
calculateWordFrequencies(content) {
if (content.length === 0) {
return [];
}
const words = segmentText(content);
const wordCounts = new Map();
for (const word of words) {
wordCounts.set(word, (wordCounts.get(word) || 0) + 1);
}
return Array.from(wordCounts.entries()).sort(([, countA], [, countB]) => countB - countA);
}
handleActiveLeafChange(leaf, workspace) {
if (leaf === null) {
return;
}
if (!(leaf.view instanceof obsidian.MarkdownView)) {
return;
}
this.plugin.registerEvent(workspace.on('editor-change', (editor) => this.debouncedEditorChange(editor)));
const activeView = workspace.getActiveViewOfType(obsidian.MarkdownView);
if (activeView) {
this.lastActiveEditor = activeView.editor;
}
if (workspace.getLeavesOfType(VIEW_TYPE).length > 0) {
this.triggerUpdateContent(this.lastActiveEditor);
}
}
triggerUpdateContent(editor) {
if (editor === undefined) {
if (this.lastActiveEditor === undefined) {
return;
}
editor = this.lastActiveEditor;
}
try {
const wordCounts = this.calculateWordFrequencies(editor.getValue());
window.document.dispatchEvent(new CustomEvent(EVENT_UPDATE, { detail: { wordCounts } }));
}
catch (error) {
console.error('error in triggerUpdateContent', error);
}
}
}
class WordFrequencyDisplay {
getFilter;
debouncedFilterInput;
filter = '';
plugin;
view;
constructor(plugin, view,
/* eslint-disable no-unused-vars */
getFilter = () => this.filter, debouncedFilterInput = obsidian.debounce((event) => {
const target = event.target;
this.filter = target.value;
this.view.updateContent();
}, 500)
/* eslint-enable no-unused-vars */
) {
this.getFilter = getFilter;
this.debouncedFilterInput = debouncedFilterInput;
this.plugin = plugin;
this.view = view;
}
addWordToSidebar(blacklist, word, count, contentContainer) {
if (blacklist.has(word) ||
count < this.plugin.settings.threshold ||
!word.toLowerCase().includes(this.getFilter().toLowerCase())) {
return;
}
const row = contentContainer.createEl('div', {
cls: ELEMENT_CLASSES.containerRow,
});
const wordCountContainer = row.createEl('div', {
cls: ELEMENT_CLASSES.containerCount,
});
wordCountContainer.createEl('span', { text: word });
wordCountContainer.createEl('span', { text: count.toString() });
const buttonContainer = row.createEl('div', {
cls: ELEMENT_CLASSES.containerButton,
});
const button = buttonContainer.createEl('button');
obsidian.setIcon(button, 'trash-2');
this.plugin.registerDomEvent(button, 'click', () => {
this.saveWordToBlacklist(word);
});
}
createFilter(contentEl) {
const filterContainer = contentEl.createEl('div', {
cls: ELEMENT_CLASSES.containerFilter,
});
const filterInput = filterContainer.createEl('input', {
cls: ELEMENT_CLASSES.filter,
attr: {
type: 'text',
placeholder: 'Type to filter results',
},
});
this.plugin.registerDomEvent(filterInput, 'input', (event) => this.debouncedFilterInput(event));
}
createHeader(contentEl) {
const headerContainer = contentEl.createEl('div');
const headerElement = headerContainer.createEl('h4');
headerElement.setText(PLUGIN_NAME);
}
createThresholdDisplay(contentEl) {
const thresholdDisplay = contentEl.createEl('div', {
cls: ELEMENT_CLASSES.containerThreshold,
});
thresholdDisplay.setText(`Current frequency threshold is ${this.plugin.settings.threshold}.`);
thresholdDisplay.setAttr('title', 'Configure settings for this plugin to update the frequency threshold.');
}
saveWordToBlacklist(word) {
const settings = this.plugin.settings;
settings.blacklist += `,${word}`;
this.plugin.saveData(settings);
this.view.updateContent();
}
}
class WordFrequencyView extends obsidian.ItemView {
display;
eventListener = () => { };
plugin;
wordCountList = [];
wordListContainer;
constructor(leaf, plugin, display, divElement) {
super(leaf);
this.plugin = plugin;
this.display = display ?? new WordFrequencyDisplay(plugin, this);
// TODO: find a better way to set a default value
this.wordListContainer = divElement ?? this.containerEl.createDiv();
}
getDisplayText() {
return PLUGIN_NAME;
}
getIcon() {
return FREQUENCY_ICON;
}
getPlugin() {
return this.plugin;
}
getViewType() {
return VIEW_TYPE;
}
async onOpen() {
this.eventListener = (event) => {
if (event.type === EVENT_UPDATE) {
this.wordCountList = event.detail.wordCounts;
this.updateContent();
}
};
window.document.addEventListener(EVENT_UPDATE, this.eventListener);
this.contentEl.empty();
const contentContainer = this.contentEl.createDiv({
cls: ELEMENT_CLASSES.containerContent,
});
this.display.createHeader(contentContainer);
this.display.createFilter(contentContainer);
this.wordListContainer = contentContainer.createDiv({
cls: ELEMENT_CLASSES.containerWordList,
});
this.display.createThresholdDisplay(contentContainer);
this.updateContent();
}
async onClose() {
window.document.removeEventListener(EVENT_UPDATE, this.eventListener);
}
updateContent() {
this.wordListContainer.empty();
const blacklist = new Set(this.plugin.settings.blacklist.split(',').map((word) => word.trim()));
this.wordCountList.forEach(([word, count]) => {
this.display.addWordToSidebar(blacklist, word, count, this.wordListContainer);
});
}
}
class WordFrequencySettingTab extends obsidian.PluginSettingTab {
plugin;
settingFactory;
constructor(plugin, settingFactory = (element) => new obsidian.Setting(element)) {
super(plugin.app, plugin);
this.plugin = plugin;
this.settingFactory = settingFactory;
}
display() {
const { containerEl } = this;
containerEl.empty();
const blacklist = this.settingFactory(containerEl)
.setName(SETTINGS_NAMES.blacklist)
.setDesc(SETTINGS_DESCRIPTIONS.blacklist)
.setClass(ELEMENT_CLASSES.settingItem)
.addTextArea((text) => {
text.setValue(this.plugin.settings.blacklist)
.onChange(async (value) => {
await this.saveBlacklistValue(value);
})
.inputEl.classList.add(ELEMENT_CLASSES.settingBlacklist);
});
blacklist.infoEl.addClass(ELEMENT_CLASSES.settingInfoItem);
this.settingFactory(containerEl)
.setName(SETTINGS_NAMES.threshold)
.setDesc(SETTINGS_DESCRIPTIONS.threshold)
.addText((text) => text
.setPlaceholder('3')
.setValue(this.plugin.settings.threshold.toString())
.onChange(async (value) => {
await this.updateThreshold(value);
}));
}
async saveBlacklistValue(value) {
this.plugin.settings.blacklist = value;
await this.plugin.saveSettings();
}
async updateThreshold(value) {
const num = parseInt(value, 10);
if (isNaN(num)) {
return;
}
this.plugin.settings.threshold = num;
await this.plugin.saveSettings();
this.plugin.app.workspace.getLeavesOfType(VIEW_TYPE).forEach((leaf) => {
if (leaf.view instanceof WordFrequencyView) {
leaf.view.updateContent();
}
});
}
}
class WordFrequencyPlugin extends obsidian.Plugin {
createView;
frequencyCounter;
settings = DEFAULT_SETTINGS;
settingTab;
viewManager;
constructor(app, manifest, viewManager, settingTab, frequencyCounter,
/* eslint-disable no-unused-vars */
createView = (leaf) => new WordFrequencyView(leaf, this)
/* eslint-enable no-unused-vars */
) {
super(app, manifest);
this.createView = createView;
this.settingTab = settingTab ?? new WordFrequencySettingTab(this);
this.viewManager = viewManager ?? new ViewManager(this);
this.frequencyCounter =
frequencyCounter ?? new WordFrequencyCounter(this);
}
async onload() {
const title = `Show ${PLUGIN_NAME.toLowerCase()} sidebar`;
await this.loadSettings();
this.registerView(VIEW_TYPE, this.createView);
this.addRibbonIcon(FREQUENCY_ICON, title, () => this.activateView());
this.addCommand({
id: COMMAND_ID_SHOW_SIDEBAR,
name: title,
callback: () => this.activateView(),
});
this.registerEvent(this.app.workspace.on('active-leaf-change', (leaf) => {
this.frequencyCounter.handleActiveLeafChange(leaf, this.app.workspace);
}));
this.addSettingTab(this.settingTab);
}
onunload() { }
async activateView() {
const { workspace } = this.app;
const leaf = this.viewManager.getOrCreateLeaf(workspace, VIEW_TYPE);
if (leaf === null) {
return;
}
await this.viewManager.setViewState(leaf, VIEW_TYPE);
await workspace.revealLeaf(leaf);
this.viewManager.updateContent();
}
async saveSettings() {
await this.saveData(this.settings);
}
async loadSettings() {
const settings = await this.loadData();
this.settings = Object.assign({}, DEFAULT_SETTINGS, settings);
}
}
module.exports = WordFrequencyPlugin;
/* nosourcemap */

View File

@ -0,0 +1,14 @@
{
"id": "word-frequency",
"name": "Word Frequency",
"version": "1.3.3",
"minAppVersion": "1.0.0",
"description": "Counts the most frequently used words in a note and displays them in the sidebar.",
"author": "Mike Rodarte",
"authorUrl": "https://github.com/mts7",
"isDesktopOnly": false,
"fundingUrl": {
"GitHub Sponsor": "https://github.com/sponsors/mts7",
"Buy Me a Coffee": "https://www.buymeacoffee.com/mts7"
}
}

View File

@ -0,0 +1,41 @@
.word-frequency-setting-item {
display: flex;
align-items: flex-start;
}
.word-frequency-setting-item-info {
flex-shrink: 0;
}
.word-frequency-setting-blacklist {
min-height: 150px;
width: 100%;
}
.word-frequency-row {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.word-frequency-count-container {
display: flex;
justify-content: space-between;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
}
.word-frequency-count-container span {
flex-shrink: 1;
max-width: 80%;
overflow: hidden;
padding-right: 10px;
}
.word-frequency-button-container {
margin-left: 10px;
margin-top: 0;
}

7
.obsidian/themes/Simple/manifest.json vendored Normal file
View File

@ -0,0 +1,7 @@
{
"name": "Simple",
"version": "1.0.7",
"minAppVersion": "1.0.7",
"author": "Diego Eis",
"authorUrl": "https://diegoeis.com/"
}

1005
.obsidian/themes/Simple/theme.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
{
"name": "Tokyo Night",
"version": "1.1.5",
"minAppVersion": "0.0.1",
"author": "tcmmichaelb139"
}

2078
.obsidian/themes/Tokyo Night/theme.css vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
{
"name": "Wikipedia",
"version": "2.0.4",
"minAppVersion": "1.0.0",
"author": "Ha'ani Whitlock",
"authorUrl": "https://github.com/Bluemoondragon07"
}

1134
.obsidian/themes/Wikipedia/theme.css vendored Normal file

File diff suppressed because one or more lines are too long

13
.obsidian/types.json vendored Normal file
View File

@ -0,0 +1,13 @@
{
"types": {
"aliases": "aliases",
"cssclasses": "multitext",
"tags": "tags",
"activity": "number",
"country": "text",
"duration": "text",
"rm": "checkbox",
"items": "multitext",
"en": "text"
}
}

303
.obsidian/workspace.json vendored Normal file
View File

@ -0,0 +1,303 @@
{
"main": {
"id": "b83a08a30604bbce",
"type": "split",
"children": [
{
"id": "88af96269c5a87a8",
"type": "tabs",
"children": [
{
"id": "ea337600d6d40ef9",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "es/2025/06/Prueba de nota.md",
"mode": "source",
"source": false,
"backlinks": true,
"backlinkOpts": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
},
"icon": "lucide-file",
"title": "Prueba de nota"
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "ed7e0b2914551963",
"type": "split",
"children": [
{
"id": "9a5598f2aaf579d6",
"type": "tabs",
"children": [
{
"id": "63b944b95147256e",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical",
"autoReveal": false
},
"icon": "lucide-folder-closed",
"title": "Files"
}
},
{
"id": "eb3eaf6d4050ec5c",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "fi",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
},
"icon": "lucide-search",
"title": "Search"
}
},
{
"id": "efa5337609c790b6",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {},
"icon": "lucide-bookmark",
"title": "Bookmarks"
}
},
{
"id": "f6dff2ffb8e28402",
"type": "leaf",
"state": {
"type": "file-tree-view",
"state": {},
"icon": "sheets-in-box",
"title": "File Tree"
}
}
]
}
],
"direction": "horizontal",
"width": 776.5
},
"right": {
"id": "d75212a88a57fa15",
"type": "split",
"children": [
{
"id": "8539d979e7333e43",
"type": "tabs",
"children": [
{
"id": "5b1e816bdec0bf77",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "es/2025/06/Prueba de nota.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "Backlinks for Prueba de nota"
}
},
{
"id": "333431ef3b28ff5a",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "Outgoing links"
}
},
{
"id": "f8305c05bf6c5c33",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-tags",
"title": "Tags"
}
},
{
"id": "fbfe7834b59af137",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "Outline"
}
},
{
"id": "62b3cbc295ffcd98",
"type": "leaf",
"state": {
"type": "all-properties",
"state": {
"sortOrder": "frequency",
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-archive",
"title": "All properties"
}
},
{
"id": "7830ac5c60f184cc",
"type": "leaf",
"state": {
"type": "BC-matrix",
"state": {},
"icon": "lucide-file",
"title": "Plugin no longer active"
}
},
{
"id": "84868046ee0e004b",
"type": "leaf",
"state": {
"type": "BC-tree",
"state": {},
"icon": "lucide-file",
"title": "Plugin no longer active"
}
},
{
"id": "4df0c32583908cb8",
"type": "leaf",
"state": {
"type": "file-properties",
"state": {},
"icon": "lucide-info",
"title": "File properties"
}
},
{
"id": "60fde61f41df72e7",
"type": "leaf",
"state": {
"type": "word-frequency-view",
"state": {},
"icon": "file-chart-column-increasing",
"title": "Word frequency"
}
},
{
"id": "4c9a3b55dc2f7ca3",
"type": "leaf",
"state": {
"type": "git-view",
"state": {},
"icon": "git-pull-request",
"title": "Source Control"
}
}
],
"currentTab": 9
}
],
"direction": "horizontal",
"width": 395.5
},
"left-ribbon": {
"hiddenItems": {
"switcher:Open quick switcher": false,
"graph:Open graph view": false,
"canvas:Create new canvas": false,
"daily-notes:Open today's daily note": false,
"templates:Insert template": false,
"command-palette:Open command palette": false,
"markdown-importer:Open format converter": false,
"workspaces:Manage workspace layouts": false,
"remotely-save:Remotely Save": false,
"omnisearch:Omnisearch": false,
"obsidian-git:Open Git source control": false,
"file-tree-alternative:File Tree Alternative Plugin": false,
"obsidian-bible-reference:Bible Verse Lookup": false,
"word-frequency:Show word frequency sidebar": false
}
},
"active": "5b1e816bdec0bf77",
"lastOpenFiles": [
"es/2025/06/Prueba de nota.md",
"es/2025/06",
"es/2025",
"es/1996/02/spa-1996-02-25-2-vi_encuentro_juvenil_latinomericano_y_caribeno_los_jovenes_del_futuro_en_la_edad_del_amor_divino_el_hijo_de_la_diestra-SANCL.md",
"es/1996/02/spa-1996-02-06-2-la_revelacion_de_jesucristo_en_el_fin_del_tiempo-SANCO.md",
"es/1996/01/spa-1996-01-21-1-los_requisitos_para_la_adopcion_de_un_hijo_de_dios-CAYPR.md",
"es/1996/05/spa-1996-05-12--la_creacion_del_nuevo_hombre-CIUMX.md",
"es/1996/09/spa-1996-09-15--el_misterio_de_dios_revelado-CAYPR.md",
"es/1996/10/spa-1996-10-27-1-la_manifestacion_de_la_gloria_de_jehova_para_el_dia_postrero-LIMPE.md",
"es/1996/09/spa-1996-09-01-1-lo_que_vera_la_iglesia_del_senor_jesucristo_en_el_dia_postrero-CAYPR.md",
"es/1996/01",
"es/1996/02",
"es/1996/10",
"es/1996/09",
"es/1996/05",
"es/1996",
"es/1997/11/spa-1997-11-30-2-el_misterio_de_la_venida_del_hijo_del_hombre_con_sus_angeles_en_el_occidente-BOABR.md",
"es/1997/11/spa-1997-11-26-2-el_misterio_de_las_cuatro_clases_de_tierra-JI-BR.md",
"es/1997/11/spa-1997-11-26-1-los_obreros_de_la_hora_undecima_decimotercera_promocion_de_obreros_para_el_ministerio_los_obreros_de_la_hora_undecima-JI-BR.md",
"es/1997/11/spa-1997-11-25-2-el_misterio_de_la_buena_tierra_que_es_bendecida-ARIBR.md",
"es/1997/11/spa-1997-11-25-1-el_misterio_del_padre_de_la_creacion-PORBR.md",
"es/1997/11/spa-1997-11-24-1-el_misterio_del_occidente-PORBR.md",
"es/1997/11/spa-1997-11-23-2-el_misterio_de_gabriel_y_miguel_en_el_dia_postrero_1er_encuentro_juvenil_paulista_el_misterio_de_la_cosecha_del_dia_postrero-ITABR.md",
"es/1997/11/spa-1997-11-23-1-el_misterio_de_moises_elias_y_jesus_1er_encuentro_juvenil_paulista_el_misterio_de_la_cosecha_del_dia_postrero-ITABR.md",
"es/1997/11/spa-1997-11-22-4-el_misterio_de_la_obra_maestra_de_dios_1er_encuentro_juvenil_paulista_el_misterio_de_la_cosecha_del_dia_postrero-ITABR.md",
"es/1997/11/spa-1997-11-22-3-el_misterio_de_los_cosechadores_del_dia_postrero_1er_encuentro_juvenil_paulista_el_misterio_de_la_cosecha_del_dia_postrero-ITABR.md",
"es/1997/11/spa-1997-11-21-1-el_misterio_de_la_venida_del_senor_como_el_sol_de_justicia_1er_encuentro_juvenil_paulista_el_misterio_de_la_cosecha_del_dia_postrero-ITABR.md",
"es/1997/11/spa-1997-11-20-1-el_misterio_de_su_venida_como_ladron_en_la_noche-SãBR.md",
"es/1997/11/spa-1997-11-19-1-el_misterio_de_los_angeles_de_la_cosecha-SUMBR.md",
"es/1997/11/spa-1997-11-18-1-el_misterio_de_la_plenitud_de_los_gentiles-FRABR.md",
"es/1997/11/spa-1997-11-17-1-el_misterio_de_la_transformacion_y_el_arrebatamiento_de_los_escogidos_de_dios-SANBR.md",
"es/1997/11/spa-1997-11-16-1-el_misterio_de_la_venida_del_senor_en_las_nubes_primer_congreso_regional_juvenil_mineiro-BELBR.md",
"es/1997/11/spa-1997-11-15-3-el_misterio_de_las_tres_biblias_primer_congreso_regional_juvenil_mineiro-BELBR.md",
"es/1997/11/spa-1997-11-14-4-el_misterio_del_sol_la_luna_y_las_estrellas_marcando_el_tiempo_primer_congreso_regional_juvenil_mineiro-BELBR.md",
"es/1997/11",
"es/1997/12",
"banner-printing.webp",
"Untitled 1.canvas",
"Untitled.canvas"
]
}

Some files were not shown because too many files have changed in this diff Show More