migrate
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"shouldConfirmBeforeCreate": true,
|
||||
"weekStart": "locale",
|
||||
"wordsPerDot": 250,
|
||||
"showWeeklyNote": false,
|
||||
"weeklyNoteFormat": "",
|
||||
"weeklyNoteTemplate": "",
|
||||
"weeklyNoteFolder": "",
|
||||
"localeOverride": "system-default"
|
||||
}
|
||||
+4459
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "calendar",
|
||||
"name": "Calendar",
|
||||
"description": "Calendar view of your daily notes",
|
||||
"version": "1.5.10",
|
||||
"author": "Liam Cain",
|
||||
"authorUrl": "https://github.com/liamcain/",
|
||||
"isDesktopOnly": false,
|
||||
"minAppVersion": "0.9.11"
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"confirmDeletion": true,
|
||||
"showAddCommand": true,
|
||||
"debug": false,
|
||||
"editorMenu": [],
|
||||
"fileMenu": [],
|
||||
"leftRibbon": [],
|
||||
"rightRibbon": [],
|
||||
"titleBar": [],
|
||||
"statusBar": [],
|
||||
"pageHeader": [
|
||||
{
|
||||
"id": "omnisearch:show-modal",
|
||||
"icon": "lucide-search",
|
||||
"name": "Omnisearch: Vault search",
|
||||
"mode": "any"
|
||||
}
|
||||
],
|
||||
"macros": [],
|
||||
"explorer": [],
|
||||
"hide": {
|
||||
"statusbar": [],
|
||||
"leftRibbon": []
|
||||
},
|
||||
"spacing": 8,
|
||||
"advancedToolbar": {
|
||||
"rowHeight": 48,
|
||||
"rowCount": 1,
|
||||
"spacing": 0,
|
||||
"buttonWidth": 48,
|
||||
"columnLayout": false,
|
||||
"mappedIcons": [],
|
||||
"tooltips": false,
|
||||
"heightOffset": 0
|
||||
}
|
||||
}
|
||||
+11
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "cmdr",
|
||||
"name": "Commander",
|
||||
"version": "0.5.5",
|
||||
"minAppVersion": "1.4.0",
|
||||
"description": "Customize your workspace by adding commands everywhere, create Macros and supercharge your mobile toolbar.",
|
||||
"author": "jsmorabito & phibr0",
|
||||
"authorUrl": "https://github.com/phibr0",
|
||||
"fundingUrl": "https://ko-fi.com/phibr0",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,457 @@
|
||||
{
|
||||
"themes": {
|
||||
"Default": {
|
||||
"settings": {
|
||||
"codeblock": {
|
||||
"lineNumbers": true,
|
||||
"unwrapLines": true,
|
||||
"wrapLinesActive": false,
|
||||
"curvature": 4
|
||||
},
|
||||
"gutter": {
|
||||
"highlight": true,
|
||||
"activeLine": false
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"textFont": "",
|
||||
"textBold": false,
|
||||
"textItalic": true
|
||||
},
|
||||
"languageTag": {
|
||||
"display": "none",
|
||||
"textFont": "",
|
||||
"textBold": true,
|
||||
"textItalic": false
|
||||
},
|
||||
"languageIcon": {
|
||||
"display": "none",
|
||||
"displayColour": true
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepository": true,
|
||||
"displayVersion": true,
|
||||
"displayTimestamp": true
|
||||
},
|
||||
"fontSize": 14,
|
||||
"foldPlaceholder": ""
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLine": false,
|
||||
"activeEditorLine": false
|
||||
},
|
||||
"inline": {
|
||||
"syntaxHighlight": true,
|
||||
"style": true,
|
||||
"fontWeight": 4,
|
||||
"curvature": 6,
|
||||
"paddingVertical": 5,
|
||||
"paddingHorizontal": 5,
|
||||
"marginHorizontal": 0,
|
||||
"titleFontWeight": 8
|
||||
},
|
||||
"advanced": {
|
||||
"gradientHighlights": false,
|
||||
"gradientHighlightsColourStop": "70%",
|
||||
"languageBorderColour": false,
|
||||
"languageBorderWidth": 5,
|
||||
"iconSize": 28
|
||||
}
|
||||
},
|
||||
"colours": {
|
||||
"light": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--text-faint",
|
||||
"activeTextColour": "--text-muted"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "--code-background",
|
||||
"title": {
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#FF00FF",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "--color-base-30"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "--color-base-30",
|
||||
"activeEditorLineColour": "--color-base-20",
|
||||
"defaultColour": "--text-highlight-bg",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal",
|
||||
"activeTextColour": "--code-normal",
|
||||
"titleTextColour": "--code-comment"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
},
|
||||
"dark": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--text-faint",
|
||||
"activeTextColour": "--text-muted"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "--code-background",
|
||||
"title": {
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-comment"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#FF00FF",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "--color-base-30"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "--color-base-30",
|
||||
"activeEditorLineColour": "--color-base-20",
|
||||
"defaultColour": "--text-highlight-bg",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "--code-background",
|
||||
"textColour": "--code-normal",
|
||||
"activeTextColour": "--code-normal",
|
||||
"titleTextColour": "--code-comment"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Solarized": {
|
||||
"settings": {
|
||||
"codeblock": {
|
||||
"lineNumbers": true,
|
||||
"unwrapLines": true,
|
||||
"wrapLinesActive": false,
|
||||
"curvature": 4
|
||||
},
|
||||
"gutter": {
|
||||
"highlight": true,
|
||||
"activeLine": false
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"textFont": "",
|
||||
"textBold": false,
|
||||
"textItalic": true
|
||||
},
|
||||
"languageTag": {
|
||||
"display": "none",
|
||||
"textFont": "",
|
||||
"textBold": true,
|
||||
"textItalic": false
|
||||
},
|
||||
"languageIcon": {
|
||||
"display": "none",
|
||||
"displayColour": true
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepository": true,
|
||||
"displayVersion": true,
|
||||
"displayTimestamp": true
|
||||
},
|
||||
"fontSize": 14,
|
||||
"foldPlaceholder": ""
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLine": false,
|
||||
"activeEditorLine": false
|
||||
},
|
||||
"inline": {
|
||||
"syntaxHighlight": true,
|
||||
"style": true,
|
||||
"fontWeight": 4,
|
||||
"curvature": 6,
|
||||
"paddingVertical": 5,
|
||||
"paddingHorizontal": 5,
|
||||
"marginHorizontal": 0,
|
||||
"titleFontWeight": 8
|
||||
},
|
||||
"advanced": {
|
||||
"gradientHighlights": false,
|
||||
"gradientHighlightsColourStop": "70%",
|
||||
"languageBorderColour": false,
|
||||
"languageBorderWidth": 5,
|
||||
"iconSize": 28
|
||||
}
|
||||
},
|
||||
"colours": {
|
||||
"light": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "#fdf6e3",
|
||||
"textColour": "#bababa"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "#eee8d5",
|
||||
"textColour": "#6c6c6c",
|
||||
"activeTextColour": "#8c8c8c"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "#D5CCB4",
|
||||
"title": {
|
||||
"textColour": "#866704"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "#B8B5AA",
|
||||
"textColour": "#C25F30"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#941100",
|
||||
"displayVersionColour": "#ff9300",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "#EDD489"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "#eee8d5",
|
||||
"activeEditorLineColour": "#60460633",
|
||||
"defaultColour": "#E9DFBA",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "#fdf6e3",
|
||||
"textColour": "#bababa",
|
||||
"activeTextColour": "#bababa",
|
||||
"titleTextColour": "#C25F30"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
},
|
||||
"dark": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "#002b36",
|
||||
"textColour": "#bababa"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "#073642",
|
||||
"textColour": "#6c6c6c",
|
||||
"activeTextColour": "#4c4c4c"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "#0a4554",
|
||||
"title": {
|
||||
"textColour": "#dadada"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "#008080",
|
||||
"textColour": "#000000"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#9437ff",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "#46cced"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "#073642",
|
||||
"activeEditorLineColour": "#468eeb33",
|
||||
"defaultColour": "#054b5c",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "#002b36",
|
||||
"textColour": "#bababa",
|
||||
"activeTextColour": "#bababa",
|
||||
"titleTextColour": "#000000"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"selectedTheme": "Solarized",
|
||||
"currentTheme": {
|
||||
"settings": {
|
||||
"codeblock": {
|
||||
"lineNumbers": true,
|
||||
"unwrapLines": true,
|
||||
"wrapLinesActive": false,
|
||||
"curvature": 4
|
||||
},
|
||||
"gutter": {
|
||||
"highlight": true,
|
||||
"activeLine": false
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"textFont": "",
|
||||
"textBold": false,
|
||||
"textItalic": true
|
||||
},
|
||||
"languageTag": {
|
||||
"display": "none",
|
||||
"textFont": "",
|
||||
"textBold": true,
|
||||
"textItalic": false
|
||||
},
|
||||
"languageIcon": {
|
||||
"display": "none",
|
||||
"displayColour": true
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepository": true,
|
||||
"displayVersion": true,
|
||||
"displayTimestamp": true
|
||||
},
|
||||
"fontSize": 14,
|
||||
"foldPlaceholder": ""
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLine": false,
|
||||
"activeEditorLine": false
|
||||
},
|
||||
"inline": {
|
||||
"syntaxHighlight": true,
|
||||
"style": true,
|
||||
"fontWeight": 4,
|
||||
"curvature": 6,
|
||||
"paddingVertical": 5,
|
||||
"paddingHorizontal": 5,
|
||||
"marginHorizontal": 0,
|
||||
"titleFontWeight": 8
|
||||
},
|
||||
"advanced": {
|
||||
"gradientHighlights": false,
|
||||
"gradientHighlightsColourStop": "70%",
|
||||
"languageBorderColour": false,
|
||||
"languageBorderWidth": 5,
|
||||
"iconSize": 28
|
||||
}
|
||||
},
|
||||
"colours": {
|
||||
"light": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "#fdf6e3",
|
||||
"textColour": "#bababa"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "#eee8d5",
|
||||
"textColour": "#6c6c6c",
|
||||
"activeTextColour": "#8c8c8c"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "#D5CCB4",
|
||||
"title": {
|
||||
"textColour": "#866704"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "#B8B5AA",
|
||||
"textColour": "#C25F30"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#941100",
|
||||
"displayVersionColour": "#ff9300",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "#EDD489"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "#eee8d5",
|
||||
"activeEditorLineColour": "#60460633",
|
||||
"defaultColour": "#E9DFBA",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "#fdf6e3",
|
||||
"textColour": "#bababa",
|
||||
"activeTextColour": "#bababa",
|
||||
"titleTextColour": "#C25F30"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
},
|
||||
"dark": {
|
||||
"codeblock": {
|
||||
"backgroundColour": "#002b36",
|
||||
"textColour": "#bababa"
|
||||
},
|
||||
"gutter": {
|
||||
"backgroundColour": "#073642",
|
||||
"textColour": "#6c6c6c",
|
||||
"activeTextColour": "#4c4c4c"
|
||||
},
|
||||
"header": {
|
||||
"backgroundColour": "#0a4554",
|
||||
"title": {
|
||||
"textColour": "#dadada"
|
||||
},
|
||||
"languageTag": {
|
||||
"backgroundColour": "#008080",
|
||||
"textColour": "#000000"
|
||||
},
|
||||
"externalReference": {
|
||||
"displayRepositoryColour": "#00FFFF",
|
||||
"displayVersionColour": "#9437ff",
|
||||
"displayTimestampColour": "#808080"
|
||||
},
|
||||
"lineColour": "#46cced"
|
||||
},
|
||||
"highlights": {
|
||||
"activeCodeblockLineColour": "#073642",
|
||||
"activeEditorLineColour": "#468eeb33",
|
||||
"defaultColour": "#054b5c",
|
||||
"alternativeHighlights": {}
|
||||
},
|
||||
"inline": {
|
||||
"backgroundColour": "#002b36",
|
||||
"textColour": "#bababa",
|
||||
"activeTextColour": "#bababa",
|
||||
"titleTextColour": "#000000"
|
||||
},
|
||||
"advanced": {
|
||||
"buttonColour": "--text-muted",
|
||||
"buttonActiveColour": "--text-normal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"newTheme": "",
|
||||
"newHighlight": "",
|
||||
"exampleCodeblockParameters": "python title:foo",
|
||||
"exampleCodeblockContent": "print(\"This line is very long and should be used as an example for how the plugin deals with wrapping and unwrapping very long lines given the choice of codeblock parameters and settings.\")\nprint(\"This line is highlighted.\")",
|
||||
"exampleInlineCode": "{python icon title:foo} print(\"This is inline code\")",
|
||||
"decoratePrint": true,
|
||||
"excludedLanguages": "ad-*, reference",
|
||||
"externalReferenceUpdateOnLoad": false,
|
||||
"processedCodeblocksWhitelist": "run-*, include",
|
||||
"redirectLanguages": {},
|
||||
"version": "1.1.7"
|
||||
}
|
||||
+20047
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "code-styler",
|
||||
"name": "Code Styler",
|
||||
"version": "1.1.7",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Style and customize codeblocks and inline code in both editing mode and reading mode.",
|
||||
"author": "Mayuran Visakan",
|
||||
"authorUrl": "https://github.com/mayurankv",
|
||||
"fundingUrl": "https://www.buymeacoffee.com/mayurankv2",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
+1348
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"palette": {
|
||||
"seed": 0,
|
||||
"selected": "adaptive-soft",
|
||||
"custom": "e12729-f37324-f8cc1b-72b043-007f4e"
|
||||
},
|
||||
"mixColors": true,
|
||||
"transition": true,
|
||||
"accessibility": {
|
||||
"highTextContrast": false
|
||||
},
|
||||
"knownTags": {
|
||||
"ai": 20,
|
||||
"ansible": 10,
|
||||
"authentik": 3,
|
||||
"backup": 11,
|
||||
"bookstack": 33,
|
||||
"cheetsheet": 17,
|
||||
"chezmoi": 37,
|
||||
"ci": 38,
|
||||
"ci-cd": 39,
|
||||
"clippings": 43,
|
||||
"configs": 40,
|
||||
"containers": 21,
|
||||
"dashboard": 7,
|
||||
"desktop": 30,
|
||||
"docker": 4,
|
||||
"documentation": 34,
|
||||
"documents": 5,
|
||||
"email": 8,
|
||||
"git": 36,
|
||||
"hermes": 29,
|
||||
"ip": 32,
|
||||
"lxc": 22,
|
||||
"management": 31,
|
||||
"manager": 9,
|
||||
"media": 16,
|
||||
"monitoring": 12,
|
||||
"mount": 23,
|
||||
"networking": 24,
|
||||
"notes": 35,
|
||||
"patching": 15,
|
||||
"persona": 25,
|
||||
"powershell": 18,
|
||||
"proxmox": 26,
|
||||
"proxy": 13,
|
||||
"resizing": 27,
|
||||
"scirpts": 42,
|
||||
"security": 6,
|
||||
"server": 41,
|
||||
"storage": 28,
|
||||
"windows": 19,
|
||||
"wireguard": 14,
|
||||
"xrandr": 2,
|
||||
"ci/cd": 1
|
||||
},
|
||||
"tagColors": {},
|
||||
"_version": 4
|
||||
}
|
||||
+5402
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "colored-tags",
|
||||
"name": "Colored Tags",
|
||||
"version": "6.1.3",
|
||||
"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
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
/* src/styles.css */
|
||||
.colored-tags-settings .tagsExample {
|
||||
display: flex;
|
||||
gap: 0.5em;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
margin: 1em 0 2em;
|
||||
}
|
||||
.colored-tags-settings .palette {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
border-radius: var(--radius-m);
|
||||
overflow: hidden;
|
||||
}
|
||||
.colored-tags-settings .visually-hidden {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
white-space: nowrap;
|
||||
border: 0;
|
||||
}
|
||||
.colored-tags-settings .community-palettes {
|
||||
display: block;
|
||||
}
|
||||
.colored-tags-settings .community-palettes > *:first-child {
|
||||
margin-inline-end: 0;
|
||||
}
|
||||
.colored-tags-settings .community-palettes__scroll {
|
||||
margin-top: var(--size-4-3);
|
||||
max-height: 400px;
|
||||
overflow-y: auto;
|
||||
padding: var(--size-4-3);
|
||||
}
|
||||
.colored-tags-settings .community-palettes__grid {
|
||||
display: grid;
|
||||
gap: var(--size-4-4);
|
||||
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
|
||||
}
|
||||
.colored-tags-settings .community-palettes__status {
|
||||
color: var(--text-faint);
|
||||
padding: var(--size-4-3);
|
||||
border-radius: var(--radius-m);
|
||||
background-color: var(--background-primary);
|
||||
border: var(--border-width) solid var(--background-modifier-border);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--size-4-2);
|
||||
padding: var(--size-4-3);
|
||||
border-radius: var(--radius-m);
|
||||
position: relative;
|
||||
background-color: var(--dropdown-background);
|
||||
box-shadow: var(--input-shadow);
|
||||
cursor: pointer;
|
||||
transition: all 120ms ease-in-out;
|
||||
}
|
||||
.colored-tags-settings .community-palette-card.is-selected {
|
||||
box-shadow: 0 0 0 2px var(--interactive-accent), var(--input-shadow);
|
||||
cursor: auto;
|
||||
}
|
||||
.colored-tags-settings .community-palette-card.is-selected::after {
|
||||
content: "\2713";
|
||||
position: absolute;
|
||||
top: var(--size-4-2);
|
||||
right: var(--size-4-2);
|
||||
width: var(--size-4-4);
|
||||
height: var(--size-4-4);
|
||||
border-radius: var(--radius-round, 999px);
|
||||
background-color: var(--interactive-accent);
|
||||
color: var(--text-on-accent, var(--background-primary));
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: var(--font-semibold, 600);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card:hover {
|
||||
background-color: var(--dropdown-background-hover);
|
||||
box-shadow: var(--input-shadow-hover);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card.is-selected:hover {
|
||||
box-shadow: 0 0 0 2px var(--interactive-accent), var(--input-shadow);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card:focus-visible {
|
||||
outline: var(--border-width) solid var(--interactive-accent);
|
||||
outline-offset: var(--outline-offset);
|
||||
box-shadow: 0 0 0 3px var(--background-modifier-border-focus);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card__preview {
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
border-radius: var(--radius-m);
|
||||
height: var(--input-height);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card__meta {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: var(--size-4-2);
|
||||
min-height: var(--line-height-tight);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card__author {
|
||||
font-family: var(--font-monospace);
|
||||
color: var(--text-muted);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card.is-selected .community-palette-card__author {
|
||||
font-weight: var(--font-semibold, 600);
|
||||
}
|
||||
.colored-tags-settings .community-palette-card__upvotes {
|
||||
color: var(--text-muted);
|
||||
font-size: var(--font-ui-smaller);
|
||||
font-weight: var(--font-medium);
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting-item {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: var(--size-4-2);
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting-item .setting-item-control {
|
||||
width: 100%;
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--size-4-2);
|
||||
width: 100%;
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__row {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
gap: var(--size-4-3);
|
||||
align-items: start;
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__input input[type=text] {
|
||||
width: 220px;
|
||||
font-weight: var(--font-normal, 400);
|
||||
}
|
||||
.theme-light .colored-tags-settings .tag-color-setting__input input[type=text] {
|
||||
color-scheme: light;
|
||||
background-color: var(--background-primary);
|
||||
color: var(--text-normal);
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__palette {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: var(--size-2-2);
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__swatch {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: var(--radius-s);
|
||||
cursor: pointer;
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__swatch:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__swatch.is-selected {
|
||||
box-shadow: 0 0 0 3px var(--interactive-accent);
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__chips {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: var(--size-2-2);
|
||||
margin-top: var(--size-2-3);
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__chip {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: var(--size-2-1);
|
||||
text-decoration: none;
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__chip-remove {
|
||||
background: none;
|
||||
border: none;
|
||||
color: var(--text-faint);
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
box-shadow: none;
|
||||
font-size: var(--font-ui-smaller);
|
||||
margin-left: -6px;
|
||||
}
|
||||
.colored-tags-settings .tag-color-setting__empty {
|
||||
color: var(--text-faint);
|
||||
font-style: italic;
|
||||
}
|
||||
+338
@@ -0,0 +1,338 @@
|
||||
{
|
||||
"userId": "2ded4caa-c74d-4fac-98fa-7d569a80824a",
|
||||
"isPlusUser": false,
|
||||
"plusLicenseKey": "",
|
||||
"openAIApiKey": "",
|
||||
"openAIOrgId": "",
|
||||
"huggingfaceApiKey": "",
|
||||
"cohereApiKey": "",
|
||||
"anthropicApiKey": "",
|
||||
"azureOpenAIApiKey": "",
|
||||
"azureOpenAIApiInstanceName": "",
|
||||
"azureOpenAIApiDeploymentName": "",
|
||||
"azureOpenAIApiVersion": "",
|
||||
"azureOpenAIApiEmbeddingDeploymentName": "",
|
||||
"googleApiKey": "",
|
||||
"openRouterAiApiKey": "",
|
||||
"xaiApiKey": "",
|
||||
"mistralApiKey": "",
|
||||
"deepseekApiKey": "",
|
||||
"defaultChainType": "llm_chain",
|
||||
"defaultModelKey": "dolphin3.0-llama3.2-3b|lm-studio",
|
||||
"embeddingModelKey": "text-embedding-3-small|openai",
|
||||
"temperature": 0.1,
|
||||
"maxTokens": 6000,
|
||||
"contextTurns": 15,
|
||||
"userSystemPrompt": "",
|
||||
"openAIProxyBaseUrl": "",
|
||||
"openAIEmbeddingProxyBaseUrl": "",
|
||||
"stream": true,
|
||||
"defaultSaveFolder": "copilot-conversations",
|
||||
"defaultConversationTag": "copilot-conversation",
|
||||
"autosaveChat": false,
|
||||
"includeActiveNoteAsContext": true,
|
||||
"defaultOpenArea": "view",
|
||||
"customPromptsFolder": "copilot-custom-prompts",
|
||||
"indexVaultToVectorStore": "ON MODE SWITCH",
|
||||
"qaExclusions": "copilot-conversations,copilot-custom-prompts",
|
||||
"qaInclusions": "",
|
||||
"chatNoteContextPath": "",
|
||||
"chatNoteContextTags": [],
|
||||
"enableIndexSync": true,
|
||||
"debug": false,
|
||||
"enableEncryption": false,
|
||||
"maxSourceChunks": 3,
|
||||
"groqApiKey": "",
|
||||
"activeModels": [
|
||||
{
|
||||
"name": "copilot-plus-flash",
|
||||
"provider": "copilot-plus",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"plusExclusive": true,
|
||||
"projectEnabled": false,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "google/gemini-2.5-flash-lite-preview-06-17",
|
||||
"provider": "openrouterai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"projectEnabled": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "google/gemini-2.5-flash",
|
||||
"provider": "openrouterai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"projectEnabled": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "google/gemini-2.5-pro",
|
||||
"provider": "openrouterai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"projectEnabled": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gpt-5",
|
||||
"provider": "openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gpt-5-mini",
|
||||
"provider": "openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gpt-5-nano",
|
||||
"provider": "openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gpt-4.1",
|
||||
"provider": "openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"projectEnabled": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gpt-4.1-mini",
|
||||
"provider": "openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"projectEnabled": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gpt-4.1-nano",
|
||||
"provider": "openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "o4-mini",
|
||||
"provider": "openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"reasoning"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claude-3-5-sonnet-latest",
|
||||
"provider": "anthropic",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"core": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claude-sonnet-4-20250514",
|
||||
"provider": "anthropic",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"capabilities": [
|
||||
"reasoning",
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claude-3-7-sonnet-latest",
|
||||
"provider": "anthropic",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"capabilities": [
|
||||
"reasoning",
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claude-3-5-haiku-latest",
|
||||
"provider": "anthropic",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "grok-3-beta",
|
||||
"provider": "xai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "grok-3-mini-beta",
|
||||
"provider": "xai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "gemini-2.5-flash",
|
||||
"provider": "google",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"projectEnabled": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gemini-2.5-pro",
|
||||
"provider": "google",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true,
|
||||
"projectEnabled": true,
|
||||
"capabilities": [
|
||||
"vision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command-r",
|
||||
"provider": "cohereai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "command-r-plus",
|
||||
"provider": "cohereai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
},
|
||||
{
|
||||
"name": "azure-openai",
|
||||
"provider": "azure openai",
|
||||
"enabled": false,
|
||||
"isBuiltIn": true
|
||||
}
|
||||
],
|
||||
"activeEmbeddingModels": [
|
||||
{
|
||||
"name": "copilot-plus-small",
|
||||
"provider": "copilot-plus",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true,
|
||||
"core": true,
|
||||
"plusExclusive": true
|
||||
},
|
||||
{
|
||||
"name": "copilot-plus-large",
|
||||
"provider": "copilot-plus-jina",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true,
|
||||
"core": true,
|
||||
"plusExclusive": true,
|
||||
"believerExclusive": true,
|
||||
"dimensions": 1024
|
||||
},
|
||||
{
|
||||
"name": "copilot-plus-multilingual",
|
||||
"provider": "copilot-plus-jina",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true,
|
||||
"core": true,
|
||||
"plusExclusive": true,
|
||||
"dimensions": 512
|
||||
},
|
||||
{
|
||||
"name": "text-embedding-3-small",
|
||||
"provider": "openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true,
|
||||
"core": true
|
||||
},
|
||||
{
|
||||
"name": "text-embedding-3-large",
|
||||
"provider": "openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true
|
||||
},
|
||||
{
|
||||
"name": "embed-multilingual-light-v3.0",
|
||||
"provider": "cohereai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true
|
||||
},
|
||||
{
|
||||
"name": "text-embedding-004",
|
||||
"provider": "google",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true
|
||||
},
|
||||
{
|
||||
"name": "azure-openai",
|
||||
"provider": "azure openai",
|
||||
"enabled": true,
|
||||
"isBuiltIn": true,
|
||||
"isEmbeddingModel": true
|
||||
}
|
||||
],
|
||||
"embeddingRequestsPerMin": 90,
|
||||
"embeddingBatchSize": 16,
|
||||
"disableIndexOnMobile": true,
|
||||
"showSuggestedPrompts": true,
|
||||
"showRelevantNotes": true,
|
||||
"numPartitions": 1,
|
||||
"promptUsageTimestamps": {},
|
||||
"promptSortStrategy": "timestamp",
|
||||
"defaultConversationNoteName": "{$topic}@{$date}_{$time}",
|
||||
"inlineEditCommands": [],
|
||||
"projectList": [],
|
||||
"enableAutocomplete": false,
|
||||
"autocompleteAcceptKey": "Tab",
|
||||
"allowAdditionalContext": true,
|
||||
"enableWordCompletion": false,
|
||||
"lastDismissedVersion": "2.9.5",
|
||||
"passMarkdownImages": true,
|
||||
"enableCustomPromptTemplating": true,
|
||||
"suggestedDefaultCommands": true
|
||||
}
|
||||
+1787
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "copilot",
|
||||
"name": "Copilot",
|
||||
"version": "2.9.5",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Your AI Copilot: Chat with Your Second Brain, Learn Faster, Work Smarter.",
|
||||
"author": "Logan Yang",
|
||||
"authorUrl": "https://twitter.com/logancyang",
|
||||
"fundingUrl": {
|
||||
"Buy Me a Coffee": "https://www.buymeacoffee.com/logancyang",
|
||||
"GitHub Sponsor": "https://github.com/sponsors/logancyang"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -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": "#2DC26B",
|
||||
"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
@@ -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
@@ -0,0 +1,973 @@
|
||||
'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],
|
||||
});
|
||||
let rootTitle = this.rootFolderEl.createEl('div', {
|
||||
cls: ['oz-explorer-root-nav-folder-title'],
|
||||
attr: { 'data-path': '/' },
|
||||
});
|
||||
let titleContent = rootTitle.createEl('div', {
|
||||
cls: ['tree-item-inner', 'nav-folder-title-content'],
|
||||
});
|
||||
titleContent.textContent = this.app.vault.getName();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
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 */
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "file-explorer-note-count",
|
||||
"name": "File Explorer Note Count",
|
||||
"version": "1.2.4",
|
||||
"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
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"hideStrictPathFilters": true,
|
||||
"pinFilters": {
|
||||
"active": true,
|
||||
"tags": [
|
||||
{
|
||||
"name": "",
|
||||
"active": true,
|
||||
"pattern": "",
|
||||
"patternType": "STRICT"
|
||||
}
|
||||
],
|
||||
"paths": [
|
||||
{
|
||||
"name": "",
|
||||
"active": true,
|
||||
"type": "FILES_AND_DIRECTORIES",
|
||||
"pattern": "",
|
||||
"patternType": "WILDCARD"
|
||||
}
|
||||
],
|
||||
"frontMatter": [
|
||||
{
|
||||
"name": "",
|
||||
"active": true,
|
||||
"path": "",
|
||||
"pattern": "",
|
||||
"patternType": "STRICT"
|
||||
}
|
||||
]
|
||||
},
|
||||
"hideFilters": {
|
||||
"active": true,
|
||||
"tags": [
|
||||
{
|
||||
"name": "",
|
||||
"active": true,
|
||||
"pattern": "",
|
||||
"patternType": "STRICT"
|
||||
}
|
||||
],
|
||||
"paths": [
|
||||
{
|
||||
"name": "",
|
||||
"active": true,
|
||||
"type": "FILES_AND_DIRECTORIES",
|
||||
"pattern": "",
|
||||
"patternType": "WILDCARD"
|
||||
}
|
||||
],
|
||||
"frontMatter": [
|
||||
{
|
||||
"name": "",
|
||||
"active": true,
|
||||
"path": "",
|
||||
"pattern": "",
|
||||
"patternType": "STRICT"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "file-explorer-plus",
|
||||
"name": "File Explorer++",
|
||||
"version": "1.3.1",
|
||||
"minAppVersion": "1.6.3",
|
||||
"description": "Hide and pin files and folders in the file explorer using custom filters, such as wildcards and regex, based on their names, paths, and tags. Additionally, achieve the same with a single click in the file menu.",
|
||||
"author": "kelszo",
|
||||
"authorUrl": "https://github.com/kelszo",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
.file-explorer-plus.pin-icon {
|
||||
color: hsl(var(--accent-h), var(--accent-s), var(--accent-l));
|
||||
margin-right: 0.2em;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-top: -4px;
|
||||
align-self: center;
|
||||
scale: 0.75;
|
||||
rotate: 45deg;
|
||||
opacity: 0.7;
|
||||
}
|
||||
.file-explorer-plus.filters-activated-modal {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
}
|
||||
.file-explorer-plus table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.file-explorer-plus th {
|
||||
text-align: center;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
border-bottom: 2px solid var(--text-normal);
|
||||
}
|
||||
.file-explorer-plus td {
|
||||
padding: 3px;
|
||||
}
|
||||
.file-explorer-plus h2.settings-header {
|
||||
font-size: calc(var(--font-ui-medium) * 1.3);
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
+89813
File diff suppressed because one or more lines are too long
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "local-rest-api-second-brain-mcp-extension",
|
||||
"name": "Local REST API Second Brain MCP Extension",
|
||||
"version": "1.0.9",
|
||||
"minAppVersion": "1.4.0",
|
||||
"description": "Extension for Local REST API plugin to add second brain MCP server.",
|
||||
"author": "Mehran Ziadloo",
|
||||
"isDesktopOnly": true
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
|
||||
This CSS file will be included with your plugin, and
|
||||
available in the app when your plugin is enabled.
|
||||
|
||||
If your plugin does not need CSS, delete this file.
|
||||
|
||||
*/
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"mcpTransport": {
|
||||
"bearerToken": "Jw2Zr-cuvoS8yGaj-zGMpPzjAgK3tN3AfOFr6Tzbq-c"
|
||||
},
|
||||
"semanticSearch": {
|
||||
"provider": "auto",
|
||||
"indexingMode": "live",
|
||||
"unloadModelWhenIdle": false
|
||||
},
|
||||
"commandPermissions": {
|
||||
"enabled": true,
|
||||
"allowlist": [
|
||||
"editor:toggle-bold",
|
||||
"editor:toggle-strikethrough",
|
||||
"editor:toggle-highlight",
|
||||
"editor:toggle-code",
|
||||
"editor:toggle-inline-math",
|
||||
"editor:toggle-blockquote",
|
||||
"editor:toggle-bullet-list",
|
||||
"editor:toggle-numbered-list",
|
||||
"editor:toggle-checklist-status",
|
||||
"editor:toggle-comments",
|
||||
"editor:insert-link",
|
||||
"editor:insert-wikilink",
|
||||
"editor:insert-embed",
|
||||
"editor:insert-horizontal-rule",
|
||||
"editor:insert-callout",
|
||||
"editor:insert-tag",
|
||||
"app:go-back",
|
||||
"app:go-forward",
|
||||
"editor:focus-top",
|
||||
"editor:focus-bottom",
|
||||
"editor:focus-left",
|
||||
"editor:focus-right",
|
||||
"workspace:split-vertical",
|
||||
"workspace:split-horizontal",
|
||||
"workspace:close",
|
||||
"workspace:next-tab",
|
||||
"workspace:previous-tab",
|
||||
"graph:open",
|
||||
"graph:open-local",
|
||||
"global-search:open",
|
||||
"switcher:open",
|
||||
"file-explorer:reveal-active-file",
|
||||
"recent-files-obsidian:recent-files-open",
|
||||
"tag-pane:open",
|
||||
"outline:open",
|
||||
"outline:open-for-current",
|
||||
"daily-notes",
|
||||
"insert-current-date",
|
||||
"insert-current-time",
|
||||
"insert-template",
|
||||
"open-with-default-app:open",
|
||||
"open-with-default-app:show",
|
||||
"omnisearch:show-modal",
|
||||
"omnisearch:show-modal-infile",
|
||||
"obsidian-paste-image-rename:batch-rename-all-images",
|
||||
"obsidian-paste-image-rename:batch-rename-embeded-files",
|
||||
"obsidian-importer:open-modal",
|
||||
"note-composer:merge-file",
|
||||
"note-composer:split-file",
|
||||
"note-composer:extract-heading",
|
||||
"markdown:toggle-preview",
|
||||
"markdown:clear-metadata-properties",
|
||||
"markdown:add-metadata-property",
|
||||
"markdown:add-alias",
|
||||
"graph:animate",
|
||||
"file-recovery:open",
|
||||
"file-explorer:open",
|
||||
"file-explorer:new-folder",
|
||||
"file-explorer:new-file-in-new-pane",
|
||||
"file-explorer:new-file-in-current-tab",
|
||||
"file-explorer:new-file",
|
||||
"file-explorer:move-file",
|
||||
"file-explorer:duplicate-file",
|
||||
"editor:add-cursor-above",
|
||||
"editor:add-cursor-below",
|
||||
"editor:attach-file",
|
||||
"editor:clear-formatting",
|
||||
"editor:context-menu",
|
||||
"editor:cycle-list-checklist",
|
||||
"editor:delete-paragraph",
|
||||
"editor:download-attachments",
|
||||
"editor:focus",
|
||||
"editor:fold-all",
|
||||
"editor:fold-less",
|
||||
"editor:fold-more",
|
||||
"editor:follow-link",
|
||||
"editor:indent-list",
|
||||
"editor:insert-codeblock",
|
||||
"editor:insert-footnote",
|
||||
"editor:insert-mathblock",
|
||||
"editor:insert-table",
|
||||
"editor:open-link-in-new-split",
|
||||
"editor:open-link-in-new-leaf",
|
||||
"editor:set-heading-1",
|
||||
"editor:set-heading-0",
|
||||
"editor:set-heading",
|
||||
"editor:save-file",
|
||||
"editor:rename-heading",
|
||||
"editor:open-search-replace",
|
||||
"editor:open-search",
|
||||
"editor:open-link-in-new-window",
|
||||
"editor:table-col-align-center",
|
||||
"editor:table-col-after",
|
||||
"editor:swap-line-up",
|
||||
"editor:swap-line-down",
|
||||
"editor:set-heading-6",
|
||||
"editor:set-heading-5",
|
||||
"editor:set-heading-4",
|
||||
"editor:set-heading-3",
|
||||
"editor:set-heading-2",
|
||||
"editor:table-col-align-left",
|
||||
"editor:table-col-align-right",
|
||||
"editor:table-col-before",
|
||||
"editor:table-col-copy",
|
||||
"editor:table-col-delete",
|
||||
"editor:table-col-left",
|
||||
"editor:table-col-right",
|
||||
"editor:table-row-after",
|
||||
"editor:table-row-down",
|
||||
"editor:table-row-delete",
|
||||
"editor:table-row-copy",
|
||||
"editor:table-row-before",
|
||||
"editor:table-row-up",
|
||||
"editor:toggle-fold-properties",
|
||||
"editor:toggle-fold",
|
||||
"editor:toggle-line-numbers",
|
||||
"editor:toggle-italics",
|
||||
"editor:toggle-spellcheck",
|
||||
"editor:toggle-source",
|
||||
"editor:toggle-readable-line-length",
|
||||
"editor:unfold-all",
|
||||
"editor:unindent-list",
|
||||
"daily-notes:goto-prev",
|
||||
"daily-notes:goto-next",
|
||||
"command-palette:open",
|
||||
"canvas:new-file",
|
||||
"canvas:jump-to-group",
|
||||
"canvas:export-as-image",
|
||||
"canvas:convert-to-file",
|
||||
"bookmarks:unbookmark-current-view",
|
||||
"bookmarks:open",
|
||||
"bookmarks:bookmark-current-view",
|
||||
"bookmarks:bookmark-current-section",
|
||||
"bookmarks:bookmark-current-search",
|
||||
"bookmarks:bookmark-current-heading",
|
||||
"bookmarks:bookmark-all-tabs",
|
||||
"bases:new-file",
|
||||
"bases:insert",
|
||||
"bases:copy-table",
|
||||
"bases:change-view",
|
||||
"bases:add-view",
|
||||
"bases:add-item",
|
||||
"backlink:open",
|
||||
"backlink:open-backlinks",
|
||||
"backlink:toggle-backlinks-in-document",
|
||||
"app:open-another-vault",
|
||||
"app:open-help",
|
||||
"app:open-sandbox-vault",
|
||||
"app:open-settings",
|
||||
"app:open-vault",
|
||||
"app:reload",
|
||||
"app:toggle-ribbon",
|
||||
"app:toggle-left-sidebar",
|
||||
"app:toggle-default-new-pane-mode",
|
||||
"app:switch-vault",
|
||||
"app:show-release-notes",
|
||||
"app:show-debug-info",
|
||||
"app:toggle-right-sidebar",
|
||||
"app:delete-file"
|
||||
]
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "mcp-tools-istefox",
|
||||
"name": "MCP Connector",
|
||||
"version": "0.22.0",
|
||||
"minAppVersion": "1.7.2",
|
||||
"description": "Connect MCP-compatible clients (Claude Desktop, Claude Code, Cline) to your vault with semantic search, templates, file management and gated command execution.",
|
||||
"author": "Stefano Ferri",
|
||||
"authorUrl": "https://github.com/istefox",
|
||||
"isDesktopOnly": true
|
||||
}
|
||||
@@ -0,0 +1,554 @@
|
||||
{
|
||||
"vaultProfiles": [
|
||||
{
|
||||
"id": "default",
|
||||
"name": "Default",
|
||||
"fileVisibility": "supported",
|
||||
"propertyKeys": [],
|
||||
"hiddenFolders": [],
|
||||
"hiddenTags": [],
|
||||
"hiddenFileNames": [],
|
||||
"hiddenFileTags": [],
|
||||
"hiddenFileProperties": [],
|
||||
"navigationBanner": null,
|
||||
"periodicNotesFolder": "",
|
||||
"shortcuts": [],
|
||||
"navRainbow": {
|
||||
"mode": "foreground",
|
||||
"balanceHueLuminance": true,
|
||||
"separateThemeColors": false,
|
||||
"shortcuts": {
|
||||
"enabled": true,
|
||||
"firstColor": "#ef4444",
|
||||
"lastColor": "#8b5cf6",
|
||||
"darkFirstColor": "#ef4444",
|
||||
"darkLastColor": "#8b5cf6",
|
||||
"transitionStyle": "rgb"
|
||||
},
|
||||
"recent": {
|
||||
"enabled": true,
|
||||
"firstColor": "#ef4444",
|
||||
"lastColor": "#8b5cf6",
|
||||
"darkFirstColor": "#ef4444",
|
||||
"darkLastColor": "#8b5cf6",
|
||||
"transitionStyle": "rgb"
|
||||
},
|
||||
"folders": {
|
||||
"enabled": true,
|
||||
"firstColor": "#ef4444",
|
||||
"lastColor": "#8b5cf6",
|
||||
"darkFirstColor": "#fb7185",
|
||||
"darkLastColor": "#c084fc",
|
||||
"transitionStyle": "hue",
|
||||
"scope": "root"
|
||||
},
|
||||
"tags": {
|
||||
"enabled": true,
|
||||
"firstColor": "#ef4444",
|
||||
"lastColor": "#8b5cf6",
|
||||
"darkFirstColor": "#fb7185",
|
||||
"darkLastColor": "#c084fc",
|
||||
"transitionStyle": "hue",
|
||||
"scope": "root"
|
||||
},
|
||||
"properties": {
|
||||
"enabled": true,
|
||||
"firstColor": "#ef4444",
|
||||
"lastColor": "#8b5cf6",
|
||||
"darkFirstColor": "#fb7185",
|
||||
"darkLastColor": "#c084fc",
|
||||
"transitionStyle": "hue",
|
||||
"scope": "root"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"vaultProfile": "default",
|
||||
"vaultTitle": "navigation",
|
||||
"syncModes": {
|
||||
"vaultProfile": "synced",
|
||||
"homepage": "synced",
|
||||
"folderSortOrder": "synced",
|
||||
"tagSortOrder": "synced",
|
||||
"propertySortOrder": "synced",
|
||||
"includeDescendantNotes": "synced",
|
||||
"useFloatingToolbars": "synced",
|
||||
"dualPane": "synced",
|
||||
"dualPaneOrientation": "synced",
|
||||
"narrowSidebarLayout": "synced",
|
||||
"narrowSidebarTriggerMode": "synced",
|
||||
"narrowSidebarCustomWidth": "synced",
|
||||
"paneTransitionDuration": "synced",
|
||||
"toolbarVisibility": "synced",
|
||||
"pinNavigationBanner": "synced",
|
||||
"navIndent": "synced",
|
||||
"navItemHeight": "synced",
|
||||
"navItemHeightScaleText": "synced",
|
||||
"calendarPlacement": "synced",
|
||||
"calendarLeftPlacement": "synced",
|
||||
"calendarWeeksToShow": "synced",
|
||||
"compactItemHeight": "synced",
|
||||
"compactItemHeightScaleText": "synced",
|
||||
"featureImageSize": "synced",
|
||||
"featureImagePixelSize": "synced",
|
||||
"uiScale": "synced"
|
||||
},
|
||||
"createNewNotesInNewTab": true,
|
||||
"autoRevealActiveFile": true,
|
||||
"autoRevealShortestPath": true,
|
||||
"autoRevealIgnoreRightSidebar": true,
|
||||
"autoRevealIgnoreOtherWindows": true,
|
||||
"paneTransitionDuration": 150,
|
||||
"multiSelectModifier": "cmdCtrl",
|
||||
"enterToOpenFiles": false,
|
||||
"shiftEnterOpenContext": "tab",
|
||||
"cmdCtrlEnterOpenContext": "split",
|
||||
"mouseBackForwardAction": "history",
|
||||
"startView": "files",
|
||||
"showInfoButtons": true,
|
||||
"homepage": {
|
||||
"source": "none",
|
||||
"file": null,
|
||||
"createMissingPeriodicNote": true
|
||||
},
|
||||
"dualPane": true,
|
||||
"dualPaneOrientation": "horizontal",
|
||||
"narrowSidebarLayout": "singlePane",
|
||||
"narrowSidebarTriggerMode": "fitPanes",
|
||||
"narrowSidebarCustomWidth": 350,
|
||||
"showTooltips": false,
|
||||
"showTooltipPath": true,
|
||||
"showTooltipWordCount": false,
|
||||
"desktopBackground": "separate",
|
||||
"desktopScale": 1,
|
||||
"mobileScale": 1,
|
||||
"useFloatingToolbars": true,
|
||||
"toolbarVisibility": {
|
||||
"navigation": {
|
||||
"toggleDualPane": true,
|
||||
"expandCollapse": true,
|
||||
"calendar": true,
|
||||
"hiddenItems": true,
|
||||
"rootReorder": true,
|
||||
"newFolder": true
|
||||
},
|
||||
"list": {
|
||||
"back": true,
|
||||
"search": true,
|
||||
"reveal": false,
|
||||
"descendants": true,
|
||||
"sort": true,
|
||||
"appearance": true,
|
||||
"newNote": true
|
||||
}
|
||||
},
|
||||
"interfaceIcons": {},
|
||||
"colorIconOnly": false,
|
||||
"dateFormat": "MMM D, YYYY",
|
||||
"timeFormat": "h:mm a",
|
||||
"calendarTemplateFolder": "",
|
||||
"confirmBeforeDelete": true,
|
||||
"deleteAttachments": "ask",
|
||||
"moveFileConflicts": "ask",
|
||||
"externalIconProviders": {
|
||||
"bootstrap-icons": true,
|
||||
"fontawesome-solid": true,
|
||||
"material-icons": true,
|
||||
"phosphor": true,
|
||||
"rpg-awesome": true,
|
||||
"simple-icons": true
|
||||
},
|
||||
"checkForUpdatesOnStart": true,
|
||||
"pinNavigationBanner": true,
|
||||
"showNoteCount": true,
|
||||
"separateNoteCounts": true,
|
||||
"showIndentGuides": false,
|
||||
"navCountLeaderStyle": "none",
|
||||
"rootLevelSpacing": 0,
|
||||
"navIndent": 16,
|
||||
"navItemHeight": 28,
|
||||
"navItemHeightScaleText": true,
|
||||
"collapseBehavior": "all",
|
||||
"smartCollapse": true,
|
||||
"excludeVaultRootFromCollapse": false,
|
||||
"collapseOtherBranchesOnExpand": false,
|
||||
"autoSelectFirstFileOnFocusChange": false,
|
||||
"autoExpandNavItems": false,
|
||||
"springLoadedFolders": true,
|
||||
"springLoadedFoldersInitialDelay": 0.5,
|
||||
"springLoadedFoldersSubsequentDelay": 0.5,
|
||||
"showSectionIcons": true,
|
||||
"showShortcuts": true,
|
||||
"shortcutBadgeDisplay": "index",
|
||||
"skipAutoScroll": false,
|
||||
"showRecentNotes": true,
|
||||
"hideRecentNotes": "none",
|
||||
"pinRecentNotesWithShortcuts": false,
|
||||
"recentNotesCount": 5,
|
||||
"showFolderIcons": true,
|
||||
"showRootFolder": true,
|
||||
"inheritFolderColors": true,
|
||||
"folderSortOrder": "alpha-asc",
|
||||
"enableFolderNotes": false,
|
||||
"folderNoteType": "markdown",
|
||||
"folderNoteName": "",
|
||||
"folderNoteNamePattern": "",
|
||||
"folderNoteTemplate": null,
|
||||
"enableFolderNoteLinks": true,
|
||||
"hideFolderNoteInList": true,
|
||||
"pinCreatedFolderNote": false,
|
||||
"folderNoteOpenLocation": "current-tab",
|
||||
"showNearestFolderNoteInSidebar": true,
|
||||
"showTags": true,
|
||||
"showTagIcons": true,
|
||||
"showAllTagsFolder": true,
|
||||
"showUntagged": true,
|
||||
"scopeTagsToCurrentContext": false,
|
||||
"tagSortOrder": "alpha-asc",
|
||||
"inheritTagColors": true,
|
||||
"keepEmptyTagsProperty": false,
|
||||
"showProperties": true,
|
||||
"showPropertyIcons": true,
|
||||
"inheritPropertyColors": true,
|
||||
"propertySortOrder": "alpha-asc",
|
||||
"showAllPropertiesFolder": true,
|
||||
"scopePropertiesToCurrentContext": false,
|
||||
"defaultListMode": "standard",
|
||||
"includeDescendantNotes": false,
|
||||
"defaultFolderSort": "modified-desc",
|
||||
"propertySortKey": "",
|
||||
"propertySortSecondary": "title",
|
||||
"manualSortPropertyKey": "sort_index",
|
||||
"manualSortGroupHeaderProperty": "group_header",
|
||||
"manualSortNewNotePlacement": "below-selected-note",
|
||||
"confirmBeforeManualSort": true,
|
||||
"revealFileOnListChanges": true,
|
||||
"listPaneTitle": "header",
|
||||
"noteGrouping": "date",
|
||||
"showSelectedNavigationPills": false,
|
||||
"stickyGroupHeaders": true,
|
||||
"showFolderGroupPaths": true,
|
||||
"showCurrentFolderFilesAtBottom": false,
|
||||
"filterPinnedByFolder": false,
|
||||
"compactItemHeight": 28,
|
||||
"compactItemHeightScaleText": true,
|
||||
"showQuickActions": true,
|
||||
"quickActionRevealInFolder": false,
|
||||
"quickActionAddTag": true,
|
||||
"quickActionAddToShortcuts": true,
|
||||
"quickActionPinNote": true,
|
||||
"quickActionOpenInNewTab": false,
|
||||
"hideDrawingPreviewImages": true,
|
||||
"useFrontmatterMetadata": false,
|
||||
"frontmatterIconField": "icon",
|
||||
"frontmatterColorField": "color",
|
||||
"frontmatterBackgroundField": "background",
|
||||
"frontmatterNameField": "",
|
||||
"frontmatterCreatedField": "",
|
||||
"frontmatterModifiedField": "",
|
||||
"frontmatterDateFormat": "",
|
||||
"showFileIconUnfinishedTask": false,
|
||||
"showFileBackgroundUnfinishedTask": false,
|
||||
"unfinishedTaskBackgroundColor": "#ef000050",
|
||||
"showFileIcons": true,
|
||||
"useFolderIconForFiles": true,
|
||||
"showFilenameMatchIcons": false,
|
||||
"fileNameIconMap": {},
|
||||
"showCategoryIcons": false,
|
||||
"fileTypeIconMap": {},
|
||||
"fileTypeIconPreset": "none",
|
||||
"fileNameRows": 1,
|
||||
"useFolderColorForTitles": false,
|
||||
"showFilePreview": true,
|
||||
"skipHeadingsInPreview": true,
|
||||
"skipCodeBlocksInPreview": true,
|
||||
"stripHtmlInPreview": true,
|
||||
"stripLatexInPreview": true,
|
||||
"previewRows": 2,
|
||||
"previewProperties": [],
|
||||
"previewPropertiesFallback": true,
|
||||
"showFeatureImage": true,
|
||||
"featureImageProperties": [],
|
||||
"featureImageExcludeProperties": [],
|
||||
"featureImageSize": "64",
|
||||
"featureImagePixelSize": "256",
|
||||
"forceSquareFeatureImage": true,
|
||||
"downloadExternalFeatureImages": true,
|
||||
"showFileTags": true,
|
||||
"colorFileTags": true,
|
||||
"prioritizeColoredFileTags": true,
|
||||
"showFileTagAncestors": false,
|
||||
"showFileTagsInCompactMode": false,
|
||||
"showFileProperties": true,
|
||||
"colorFileProperties": true,
|
||||
"prioritizeColoredFileProperties": true,
|
||||
"showFilePropertiesInCompactMode": false,
|
||||
"showPropertiesOnSeparateRows": false,
|
||||
"enablePropertyInternalLinks": true,
|
||||
"enablePropertyExternalLinks": true,
|
||||
"textCountDisplay": "none",
|
||||
"textCountPlacement": "title",
|
||||
"characterCountSpaces": "include",
|
||||
"wordCountTargetProperty": "word-goal",
|
||||
"showWordCountPercentage": false,
|
||||
"showFileDate": true,
|
||||
"alphabeticalDateMode": "modified",
|
||||
"showParentFolder": true,
|
||||
"showParentFolderFullPath": false,
|
||||
"parentFolderClickRevealsFile": false,
|
||||
"showParentFolderColor": false,
|
||||
"showParentFolderIcon": false,
|
||||
"calendarEnabled": true,
|
||||
"calendarPlacement": "left-sidebar",
|
||||
"calendarConfirmBeforeCreate": true,
|
||||
"calendarLocale": "system-default",
|
||||
"calendarWeekendDays": "sat-sun",
|
||||
"calendarMonthHeadingFormat": "full",
|
||||
"calendarHighlightToday": true,
|
||||
"calendarShowFeatureImage": true,
|
||||
"calendarMonthHighlights": {},
|
||||
"calendarShowWeekNumber": false,
|
||||
"calendarShowQuarter": false,
|
||||
"calendarShowYearCalendar": true,
|
||||
"calendarLeftPlacement": "navigation",
|
||||
"calendarWeeksToShow": 1,
|
||||
"calendarIntegrationMode": "notebook-navigator",
|
||||
"calendarPeriodicNotesLocaleSource": "calendar",
|
||||
"calendarCustomFilePattern": "YYYY/YYYYMMDD",
|
||||
"calendarCustomWeekPattern": "gggg/[W]ww",
|
||||
"calendarCustomMonthPattern": "YYYY/YYYYMM",
|
||||
"calendarCustomQuarterPattern": "YYYY/[Q]Q",
|
||||
"calendarCustomYearPattern": "YYYY",
|
||||
"calendarCustomFileTemplate": null,
|
||||
"calendarCustomWeekTemplate": null,
|
||||
"calendarCustomMonthTemplate": null,
|
||||
"calendarCustomQuarterTemplate": null,
|
||||
"calendarCustomYearTemplate": null,
|
||||
"keyboardShortcuts": {
|
||||
"pane:move-up": [
|
||||
{
|
||||
"key": "ArrowUp",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"pane:move-down": [
|
||||
{
|
||||
"key": "ArrowDown",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"pane:page-up": [
|
||||
{
|
||||
"key": "PageUp",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"pane:page-down": [
|
||||
{
|
||||
"key": "PageDown",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"pane:home": [
|
||||
{
|
||||
"key": "Home",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"pane:end": [
|
||||
{
|
||||
"key": "End",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"pane:rename": [
|
||||
{
|
||||
"key": "F2",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"navigation:collapse-or-parent": [
|
||||
{
|
||||
"key": "ArrowLeft",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"navigation:expand-or-focus-list": [
|
||||
{
|
||||
"key": "ArrowRight",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"navigation:focus-list": [
|
||||
{
|
||||
"key": "Tab",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"pane:delete-selected": [
|
||||
{
|
||||
"key": "Delete",
|
||||
"modifiers": []
|
||||
},
|
||||
{
|
||||
"key": "Backspace",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"list:focus-navigation": [
|
||||
{
|
||||
"key": "ArrowLeft",
|
||||
"modifiers": []
|
||||
},
|
||||
{
|
||||
"key": "Tab",
|
||||
"modifiers": [
|
||||
"Shift"
|
||||
]
|
||||
}
|
||||
],
|
||||
"list:focus-editor": [
|
||||
{
|
||||
"key": "ArrowRight",
|
||||
"modifiers": []
|
||||
},
|
||||
{
|
||||
"key": "Tab",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"list:select-all": [
|
||||
{
|
||||
"key": "A",
|
||||
"modifiers": [
|
||||
"Mod"
|
||||
]
|
||||
}
|
||||
],
|
||||
"list:extend-selection-up": [
|
||||
{
|
||||
"key": "ArrowUp",
|
||||
"modifiers": [
|
||||
"Shift"
|
||||
]
|
||||
}
|
||||
],
|
||||
"list:extend-selection-down": [
|
||||
{
|
||||
"key": "ArrowDown",
|
||||
"modifiers": [
|
||||
"Shift"
|
||||
]
|
||||
}
|
||||
],
|
||||
"list:manual-sort-up": [
|
||||
{
|
||||
"key": "ArrowUp",
|
||||
"modifiers": [
|
||||
"Mod"
|
||||
]
|
||||
}
|
||||
],
|
||||
"list:manual-sort-down": [
|
||||
{
|
||||
"key": "ArrowDown",
|
||||
"modifiers": [
|
||||
"Mod"
|
||||
]
|
||||
}
|
||||
],
|
||||
"list:range-to-start": [
|
||||
{
|
||||
"key": "Home",
|
||||
"modifiers": [
|
||||
"Shift"
|
||||
]
|
||||
}
|
||||
],
|
||||
"list:range-to-end": [
|
||||
{
|
||||
"key": "End",
|
||||
"modifiers": [
|
||||
"Shift"
|
||||
]
|
||||
}
|
||||
],
|
||||
"search:focus-list": [
|
||||
{
|
||||
"key": "Tab",
|
||||
"modifiers": []
|
||||
},
|
||||
{
|
||||
"key": "Enter",
|
||||
"modifiers": []
|
||||
}
|
||||
],
|
||||
"search:focus-navigation": [
|
||||
{
|
||||
"key": "Tab",
|
||||
"modifiers": [
|
||||
"Shift"
|
||||
]
|
||||
}
|
||||
],
|
||||
"search:close": [
|
||||
{
|
||||
"key": "Escape",
|
||||
"modifiers": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"customVaultName": "",
|
||||
"pinnedNotes": {},
|
||||
"collapsedPinnedContexts": {},
|
||||
"fileIcons": {},
|
||||
"fileColors": {},
|
||||
"fileBackgroundColors": {},
|
||||
"folderIcons": {},
|
||||
"folderColors": {},
|
||||
"folderBackgroundColors": {},
|
||||
"folderSortOverrides": {},
|
||||
"folderTreeSortOverrides": {},
|
||||
"folderAppearances": {},
|
||||
"tagIcons": {},
|
||||
"tagColors": {},
|
||||
"tagBackgroundColors": {},
|
||||
"tagSortOverrides": {},
|
||||
"tagTreeSortOverrides": {},
|
||||
"tagAppearances": {},
|
||||
"propertyIcons": {},
|
||||
"propertyColors": {},
|
||||
"propertyBackgroundColors": {},
|
||||
"propertySortOverrides": {},
|
||||
"propertyTreeSortOverrides": {},
|
||||
"propertyAppearances": {},
|
||||
"virtualFolderColors": {},
|
||||
"virtualFolderBackgroundColors": {},
|
||||
"navigationSeparators": {},
|
||||
"userColors": [
|
||||
"#ffffff",
|
||||
"#d9d9d9",
|
||||
"#a6a6a6",
|
||||
"#737373",
|
||||
"#000000",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040",
|
||||
"#404040"
|
||||
],
|
||||
"lastShownVersion": "3.2.2",
|
||||
"rootFolderOrder": [],
|
||||
"rootTagOrder": [],
|
||||
"rootPropertyOrder": []
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "notebook-navigator",
|
||||
"name": "Notebook Navigator",
|
||||
"version": "3.2.2",
|
||||
"minAppVersion": "1.11.0",
|
||||
"description": "Replace the default file explorer with a clean two-pane interface featuring folder tree, tag browsing, file previews, keyboard navigation, drag-and-drop, pinned notes, and customizable display options.",
|
||||
"author": "Johan Sanneblad",
|
||||
"authorUrl": "https://github.com/johansan",
|
||||
"fundingUrl": "https://github.com/sponsors/johansan/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"cascadeColors": true,
|
||||
"colorBackground": true,
|
||||
"palette": [
|
||||
{
|
||||
"id": "PbkbBOekkylxRskByXevs",
|
||||
"name": "Calgary",
|
||||
"value": "#657b9f"
|
||||
},
|
||||
{
|
||||
"id": "mT7Y6J5p2UWGraEutdbBw",
|
||||
"name": "Reddish",
|
||||
"value": "#af4141"
|
||||
},
|
||||
{
|
||||
"id": "jMNeXlsuD37N4KWe33CHD",
|
||||
"name": "",
|
||||
"value": "#cbd44e"
|
||||
},
|
||||
{
|
||||
"id": "D7BkFsf6bdqf6QeNsVxTH",
|
||||
"name": "",
|
||||
"value": "#6dee87"
|
||||
},
|
||||
{
|
||||
"id": "ueHvc6VOvvkec3znswDC3",
|
||||
"name": "",
|
||||
"value": "#de8117"
|
||||
}
|
||||
],
|
||||
"fileColors": []
|
||||
}
|
||||
+23291
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "obsidian-file-color",
|
||||
"name": "File Color",
|
||||
"version": "1.1.0",
|
||||
"minAppVersion": "1.2.7",
|
||||
"description": "An Obsidian plugin for setting colors on folders and files in the file tree.",
|
||||
"author": "ecustic",
|
||||
"authorUrl": "https://github.com/ecustic",
|
||||
"fundingUrl": "https://www.buymeacoffee.com/ecustic",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
/* TEXT COLORING, NO CASCADE */
|
||||
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container .file-color-file.file-color-type-text > .nav-folder-title,
|
||||
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container .file-color-file.file-color-type-text > .nav-file-title
|
||||
{
|
||||
color: var(--file-color-color);
|
||||
}
|
||||
|
||||
/* TEXT COLORING, WITH CASCADE */
|
||||
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container .file-color-file.file-color-type-text.file-color-cascade .nav-folder-title,
|
||||
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container .file-color-file.file-color-type-text.file-color-cascade .nav-file-title
|
||||
{
|
||||
color: var(--file-color-color);
|
||||
}
|
||||
|
||||
/* BACKGROUND COLORING, NO CASCADE */
|
||||
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container .file-color-file.file-color-type-background > .nav-folder-title,
|
||||
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container .file-color-file.file-color-type-background > .nav-file-title
|
||||
{
|
||||
background-color: color-mix(in srgb, var(--file-color-color) 15%, transparent);
|
||||
}
|
||||
|
||||
/* BACKGROUND COLORING, WITH CASCADE */
|
||||
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container .file-color-file.file-color-type-background.file-color-cascade .nav-folder-title,
|
||||
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container .file-color-file.file-color-type-background.file-color-cascade .nav-file-title
|
||||
{
|
||||
background-color: color-mix(in srgb, var(--file-color-color) 15%, transparent);
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"settings": {
|
||||
"migrated": 6,
|
||||
"iconPacksPath": ".obsidian/icons",
|
||||
"fontSize": 16,
|
||||
"emojiStyle": "native",
|
||||
"iconColor": null,
|
||||
"recentlyUsedIcons": [
|
||||
"FabMicrosoft",
|
||||
"LiBackpack"
|
||||
],
|
||||
"recentlyUsedIconsSize": 5,
|
||||
"rules": [],
|
||||
"extraMargin": {
|
||||
"top": 0,
|
||||
"right": 4,
|
||||
"bottom": 0,
|
||||
"left": 0
|
||||
},
|
||||
"iconInTabsEnabled": false,
|
||||
"iconInTitleEnabled": false,
|
||||
"iconInTitlePosition": "above",
|
||||
"iconInFrontmatterEnabled": false,
|
||||
"iconInFrontmatterFieldName": "icon",
|
||||
"iconColorInFrontmatterFieldName": "iconColor",
|
||||
"iconsBackgroundCheckEnabled": false,
|
||||
"iconsInNotesEnabled": true,
|
||||
"iconsInLinksEnabled": true,
|
||||
"iconIdentifier": ":",
|
||||
"lucideIconPackType": "native",
|
||||
"debugMode": false,
|
||||
"useInternalPlugins": false
|
||||
},
|
||||
"Learning CI-CD": "LiBackpack",
|
||||
"Microsoft Windows": "FabMicrosoft"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-icon-folder",
|
||||
"name": "Iconize",
|
||||
"version": "2.14.7",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Add icons to anything you desire in Obsidian, including files, folders, and text.",
|
||||
"author": "Florian Woelki",
|
||||
"authorUrl": "https://florianwoelki.com/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
.iconize-inline-title-wrapper {
|
||||
width: var(--line-width);
|
||||
max-width: var(--max-width);
|
||||
margin-inline: var(--content-margin);
|
||||
}
|
||||
|
||||
.iconize-title-icon {
|
||||
max-width: var(--max-width);
|
||||
margin-right: var(--size-4-2);
|
||||
}
|
||||
|
||||
.iconize-icon-in-link {
|
||||
transform: translateY(20%);
|
||||
margin-right: var(--size-2-2);
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.iconize-icon {
|
||||
border: 1px solid transparent;
|
||||
margin: 0px 4px 0px 0px;
|
||||
display: flex;
|
||||
align-self: center;
|
||||
margin: auto 0;
|
||||
}
|
||||
|
||||
.nav-folder-title,
|
||||
.nav-file-title {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.iconize-setting input[type='color'] {
|
||||
margin: 0 6px;
|
||||
}
|
||||
|
||||
.iconize-modal.prompt-results {
|
||||
margin: 0;
|
||||
overflow-y: auto;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.prompt .iconize-subheadline {
|
||||
margin-top: 12px;
|
||||
font-size: 12px;
|
||||
color: gray;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 6;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.iconize-modal.prompt-results {
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
}
|
||||
.prompt .iconize-subheadline {
|
||||
grid-column-end: 4;
|
||||
}
|
||||
}
|
||||
|
||||
.iconize-modal.prompt-results .suggestion-item {
|
||||
cursor: pointer;
|
||||
white-space: pre-wrap;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
flex-direction: column-reverse;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
color: var(--text-muted);
|
||||
padding: 16px 8px;
|
||||
line-break: auto;
|
||||
word-break: break-word;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.iconize-modal.prompt-results .suggestion-item.suggestion-item__center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.iconize-icon-preview {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.iconize-icon-preview img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.iconize-icon-preview svg {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
color: currentColor;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.iconize-dragover {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.iconize-dragover-el {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: var(--text-normal);
|
||||
background-color: var(--background-secondary-alt);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* Custom rule modal. */
|
||||
.iconize-custom-modal .modal-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.iconize-custom-modal .modal-content input {
|
||||
width: 100%;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
@@ -0,0 +1,465 @@
|
||||
{
|
||||
"importers": {
|
||||
"onenote": {
|
||||
"previouslyImportedIDs": [
|
||||
"0-c866819f4dc14b5f8222f471a9f6372b!1-A17362FB20FDB35!s88eb6bb0d39e4f23908d5f7f2891bba7",
|
||||
"0-92121ffa1a7e4ff0abf0404c94ae1da5!1-A17362FB20FDB35!s021bdabf6dba42159bc029f07ee6c19d",
|
||||
"0-acefaf2d7a254f7e897c43a2e4a1eac7!1-A17362FB20FDB35!sf3dd6b73070245e68aa7b66765025032",
|
||||
"0-787c09521e4341f68c470a90bf1b7c67!1-A17362FB20FDB35!sf3dd6b73070245e68aa7b66765025032",
|
||||
"0-2426f18a225f45bda55866736b78cd81!1-A17362FB20FDB35!sf3dd6b73070245e68aa7b66765025032",
|
||||
"0-ab277567bf2648fd80bac5baaac46274!1-A17362FB20FDB35!sf3dd6b73070245e68aa7b66765025032",
|
||||
"0-cabc5546baae4beeaa1d3874eabcc7d6!1-A17362FB20FDB35!10085",
|
||||
"0-09a8664f9084054422bfe9133b2c0aed!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-040ec452ae0e424aaecea2c6c407199c!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-f5f5a1bcb955449c91d438a45f8ebad4!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-9dac01913cdf0b243aaaf04da2934917!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-f277ac574fa5494a9fd4e9c0167c827d!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-cb32a4dfd7470c8f0ac5e3b7d84ebfb0!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-c8b848149c4845fea07702fb4da7792c!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-1defefbf911048f5b4b1e6ec33132957!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-13829412a5d445e1aa16718aa38bed57!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-1e0122aacdd749ff9f8a46f9e1bfde84!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-09c69b4e58b24f50938dfa0bc33630b2!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-d12ad78df8164bd48f06b1070e1d2ea4!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-6bd1cb92183e4202adab2df7605a24c6!1-A17362FB20FDB35!sbc7c62849fa4460d96f1d8d0dfa1636a",
|
||||
"0-09a8664f9084054422bfe9133b2c0aed!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-040ec452ae0e424aaecea2c6c407199c!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-f5f5a1bcb955449c91d438a45f8ebad4!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-9dac01913cdf0b243aaaf04da2934917!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-f277ac574fa5494a9fd4e9c0167c827d!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-cb32a4dfd7470c8f0ac5e3b7d84ebfb0!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-c8b848149c4845fea07702fb4da7792c!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-1defefbf911048f5b4b1e6ec33132957!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-13829412a5d445e1aa16718aa38bed57!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-1e0122aacdd749ff9f8a46f9e1bfde84!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-09c69b4e58b24f50938dfa0bc33630b2!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-d12ad78df8164bd48f06b1070e1d2ea4!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-6bd1cb92183e4202adab2df7605a24c6!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-12ac3ef6e3a14304b201cb4f7ecd50a2!1-A17362FB20FDB35!se76343828f4745f694c67022df4e6e1e",
|
||||
"0-75516fd9f1a60cf91add345e88cc6a49!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-44aeb3a211944961ae08ed584ad8fcca!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-0f2561d79af7016d320c90ef8d3a3ccb!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-7e6855a77d474bad8ab1643ea8f715b7!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-6be781b7e3790303242773fc4c9d2f2d!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-0703223f422f0ebf2f604e7d8d71db51!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-4d9a118f05b104d92a86ce358cd69456!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-1f079d5b43f20b1f1a9934e476cc5dc5!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-e6fde5370a8a044a379ee7cae3c01159!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-d0358b72a6a70b782c9e42b34da359b4!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-53ae3d92692e036e3636083a29d4629d!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-672f83e740f943e8b08ff56700796b21!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-598c6dbdd2ef4e92a5f275a21d777c35!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-43ed671240e14e4bbb76d5e6cea42cdc!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-fdbcc8f5439249a9820093c4578a8fdd!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-8586470f2bcc02a41e31e37502b135e3!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-c65ce38688f40d703e932b7f57e8062b!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-de09662a52cc0849221bd5f1a2e9ef86!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-5a84187f5ec14b0484a4177ec67643ac!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-07e551ae2ab70d191e2f135c358a885e!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-021ffa68741d0d89387ed6cda6465065!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-1fb2767959bf4e36a1d9c397abb80c6d!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-6295219f34680ff307c257a5174b6ed4!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-dba7b37e136201542042ad56851fefcc!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-6177526fd4f9071d085ab9172c76ca64!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-39b36a47280309940ce1f2ac6cd8b5da!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-28fab697e2c400a121dcd1cc62f6b53e!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-25feab25973e039b0c2d3865414df372!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-e332d8d3e2a04a998460538e13ecbb64!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-e68565a9eda74e31baf9510eb2453582!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-914c61f792394208bc452a2ad22f6333!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-5add95a0dea3491184e5454ed692ea9b!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-8c17cda4c80b455397d2fd6667c02612!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-a9438e23a7584fa382bf9fe2e081be1d!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-da6f07ad9ff24240a3c79196528503b6!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-b94b51769509489aab6bbb7712c3411b!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-8dbeae69ff6143f2af453aafc549d47e!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-d8cc6c0f225a4510b19cccf0fa233449!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-86d08654d40e46009ab8909101b4069f!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-3e2e47c8d0eb4648be569224aad76892!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-352c8be445e24809a595bd92571a2a93!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-05cb4ad9d3ac4ed79ca38f99fa4c27da!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-49a248c4ceb94f8ab17e89ec2cbf753f!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-413f2b2a513843aaba09742db47b48dd!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-74bb026e59dd4afa805cc87f1a0a4dbb!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-4637c318154c4b11aaa950c22ecfcb03!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-0e22a4ced155407da7457f737e85922e!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-2ab60ff1bd114d35aaddb5af1492364a!1-A17362FB20FDB35!s31da0d0c5dab4eb58cf7c6bb913c5376",
|
||||
"0-75516fd9f1a60cf91add345e88cc6a49!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-44aeb3a211944961ae08ed584ad8fcca!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-0f2561d79af7016d320c90ef8d3a3ccb!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-7e6855a77d474bad8ab1643ea8f715b7!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-6be781b7e3790303242773fc4c9d2f2d!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-0703223f422f0ebf2f604e7d8d71db51!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-4d9a118f05b104d92a86ce358cd69456!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-1f079d5b43f20b1f1a9934e476cc5dc5!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-e6fde5370a8a044a379ee7cae3c01159!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-d0358b72a6a70b782c9e42b34da359b4!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-53ae3d92692e036e3636083a29d4629d!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-672f83e740f943e8b08ff56700796b21!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-598c6dbdd2ef4e92a5f275a21d777c35!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-43ed671240e14e4bbb76d5e6cea42cdc!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-fdbcc8f5439249a9820093c4578a8fdd!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-8586470f2bcc02a41e31e37502b135e3!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-c65ce38688f40d703e932b7f57e8062b!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-de09662a52cc0849221bd5f1a2e9ef86!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-5a84187f5ec14b0484a4177ec67643ac!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-07e551ae2ab70d191e2f135c358a885e!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-021ffa68741d0d89387ed6cda6465065!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-1fb2767959bf4e36a1d9c397abb80c6d!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-6295219f34680ff307c257a5174b6ed4!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-dba7b37e136201542042ad56851fefcc!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-6177526fd4f9071d085ab9172c76ca64!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-39b36a47280309940ce1f2ac6cd8b5da!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-28fab697e2c400a121dcd1cc62f6b53e!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-25feab25973e039b0c2d3865414df372!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-e332d8d3e2a04a998460538e13ecbb64!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-e68565a9eda74e31baf9510eb2453582!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-914c61f792394208bc452a2ad22f6333!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-5add95a0dea3491184e5454ed692ea9b!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-8c17cda4c80b455397d2fd6667c02612!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-a9438e23a7584fa382bf9fe2e081be1d!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-da6f07ad9ff24240a3c79196528503b6!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-b94b51769509489aab6bbb7712c3411b!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-8dbeae69ff6143f2af453aafc549d47e!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-d8cc6c0f225a4510b19cccf0fa233449!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-86d08654d40e46009ab8909101b4069f!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-3e2e47c8d0eb4648be569224aad76892!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-352c8be445e24809a595bd92571a2a93!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-05cb4ad9d3ac4ed79ca38f99fa4c27da!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-49a248c4ceb94f8ab17e89ec2cbf753f!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-413f2b2a513843aaba09742db47b48dd!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-74bb026e59dd4afa805cc87f1a0a4dbb!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-4637c318154c4b11aaa950c22ecfcb03!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-0e22a4ced155407da7457f737e85922e!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-2ab60ff1bd114d35aaddb5af1492364a!1-A17362FB20FDB35!s19d52da316fd4e1c8c7a98c0891ab8c0",
|
||||
"0-9f37e99c27930d1c14610200236bb780!1-A17362FB20FDB35!s802cdad8e3ad451ca1b2732e2e4d4ffe",
|
||||
"0-700f16cd2434010d1a29fe8328255afb!1-A17362FB20FDB35!s802cdad8e3ad451ca1b2732e2e4d4ffe",
|
||||
"0-7b313306c6830100012b5f1f153cda52!1-A17362FB20FDB35!s802cdad8e3ad451ca1b2732e2e4d4ffe",
|
||||
"0-b9c4d30c63600b41369e8272f2b92db8!1-A17362FB20FDB35!s802cdad8e3ad451ca1b2732e2e4d4ffe",
|
||||
"0-f25b804e359706981b9be352d286825c!1-A17362FB20FDB35!s802cdad8e3ad451ca1b2732e2e4d4ffe",
|
||||
"0-978963bc40940e8a1c542ce0aa731e0b!1-A17362FB20FDB35!s802cdad8e3ad451ca1b2732e2e4d4ffe",
|
||||
"0-a294613abcf50e8f14a03b40152866bd!1-A17362FB20FDB35!s802cdad8e3ad451ca1b2732e2e4d4ffe",
|
||||
"0-9f37e99c27930d1c14610200236bb780!1-A17362FB20FDB35!sa75ebbe004434211803fa9f0451820c5",
|
||||
"0-700f16cd2434010d1a29fe8328255afb!1-A17362FB20FDB35!sa75ebbe004434211803fa9f0451820c5",
|
||||
"0-7b313306c6830100012b5f1f153cda52!1-A17362FB20FDB35!sa75ebbe004434211803fa9f0451820c5",
|
||||
"0-b9c4d30c63600b41369e8272f2b92db8!1-A17362FB20FDB35!sa75ebbe004434211803fa9f0451820c5",
|
||||
"0-f25b804e359706981b9be352d286825c!1-A17362FB20FDB35!sa75ebbe004434211803fa9f0451820c5",
|
||||
"0-978963bc40940e8a1c542ce0aa731e0b!1-A17362FB20FDB35!sa75ebbe004434211803fa9f0451820c5",
|
||||
"0-a294613abcf50e8f14a03b40152866bd!1-A17362FB20FDB35!sa75ebbe004434211803fa9f0451820c5",
|
||||
"0-18490057bedb0eb227b9cd8ba4b1c4c4!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-f9375004e3f8486e868bfc11b8b846ac!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-c9566c8abdff0248361c5875dec6da1d!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-47a903bdf1214e98b6cbfd9a3d7b0bff!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-eed003ccc46f4e3788519f4b963e23ee!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-71e160becd5d0b770cc64657be7634f2!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-a5221a10912002d83b82d584331eb461!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-03d100a8b4df0d2204ac5e1066e78668!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-a3a7fb93b1b80ca7202baba61906b987!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-4830c5106fcb0d021648de5d8517ebc4!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-922172e61db90f92126c77dc2f8939e9!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-27ecdd4281f74bbda13d0b874c58ea10!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-4b599b1c8a2705c91559f72c9faa4d1e!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-9414e265c4040b5f0dc73bc40d78cd74!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-72a33f8c96410d340955bd94ce1d5298!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-16c2674821d00bdc0801ec969f6226b8!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-449ffb4f571e492088e2b6d69c01fd64!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-d01a46a4b1350df713ff809cd813fb70!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-23bba4f62351069124d87b4beb4f2ce1!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-c18c9d0f497b4cca95ae76b8765aaf64!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-311d1d5b430a4b419dd873c0155aa5b8!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-8b0ae4bdafc547688c550497ed7c164e!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-40f8e2ffc6024d9abe9ee3246c94a013!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-5ec358d6ef6b4f968fd36e307fa7833a!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-48dc0b44218c4f1b8ffc74d3e49f11f6!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-abde233087664ad7a48a454a4ccf346d!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-0b9d4749fcf74e81b2d3a374f29c43cf!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-9beb2edcf9924629965658e19eb1de03!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-676677eb8f864020a2a1aed50b0bdac8!1-A17362FB20FDB35!s75047b4dd74045c8b91882fa22e9ef9c",
|
||||
"0-18490057bedb0eb227b9cd8ba4b1c4c4!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-f9375004e3f8486e868bfc11b8b846ac!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-c9566c8abdff0248361c5875dec6da1d!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-47a903bdf1214e98b6cbfd9a3d7b0bff!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-eed003ccc46f4e3788519f4b963e23ee!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-71e160becd5d0b770cc64657be7634f2!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-a5221a10912002d83b82d584331eb461!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-03d100a8b4df0d2204ac5e1066e78668!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-a3a7fb93b1b80ca7202baba61906b987!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-4830c5106fcb0d021648de5d8517ebc4!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-922172e61db90f92126c77dc2f8939e9!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-27ecdd4281f74bbda13d0b874c58ea10!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-4b599b1c8a2705c91559f72c9faa4d1e!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-9414e265c4040b5f0dc73bc40d78cd74!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-72a33f8c96410d340955bd94ce1d5298!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-16c2674821d00bdc0801ec969f6226b8!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-449ffb4f571e492088e2b6d69c01fd64!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-d01a46a4b1350df713ff809cd813fb70!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-23bba4f62351069124d87b4beb4f2ce1!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-c18c9d0f497b4cca95ae76b8765aaf64!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-311d1d5b430a4b419dd873c0155aa5b8!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-8b0ae4bdafc547688c550497ed7c164e!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-40f8e2ffc6024d9abe9ee3246c94a013!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-5ec358d6ef6b4f968fd36e307fa7833a!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-48dc0b44218c4f1b8ffc74d3e49f11f6!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-abde233087664ad7a48a454a4ccf346d!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-0b9d4749fcf74e81b2d3a374f29c43cf!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-9beb2edcf9924629965658e19eb1de03!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-676677eb8f864020a2a1aed50b0bdac8!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-cc2bef22faa74943b23ad350650ba8fb!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-86571a28686744f7a00a21562b20775c!1-A17362FB20FDB35!s175fd18b180b4651b22504ba1fdbc102",
|
||||
"0-71c272ca4214045438906c9766dd0e12!1-A17362FB20FDB35!s41c8f595616c4415a5073c427db6ebc2",
|
||||
"0-968200594798058c0b555ce1f71119dd!1-A17362FB20FDB35!s10eb4051e61347d4966085693709b8c2",
|
||||
"0-7f1f8f9051ce0270297535f716dac952!1-A17362FB20FDB35!s92ad9e8ec8b14d518a4f9210976383e1",
|
||||
"0-b5f99ef288ea051d13b3b2f4b64bbe8b!1-A17362FB20FDB35!s92ad9e8ec8b14d518a4f9210976383e1",
|
||||
"0-e7c3526105d708dd323d1018617c7091!1-A17362FB20FDB35!s92ad9e8ec8b14d518a4f9210976383e1",
|
||||
"0-54cf0f0f28c503a8066fb8289cd6aa9b!1-A17362FB20FDB35!s92ad9e8ec8b14d518a4f9210976383e1",
|
||||
"0-ec329669a93708630f2583076b23862f!1-A17362FB20FDB35!s92ad9e8ec8b14d518a4f9210976383e1",
|
||||
"0-59306a5cf59a09d7101b599c927ab404!1-A17362FB20FDB35!s92ad9e8ec8b14d518a4f9210976383e1",
|
||||
"0-c5f057cf2ee34b64944cace969e086ec!1-A17362FB20FDB35!sde7c5d2b4bd54dc881dea47c72ec9b6c",
|
||||
"0-cb0849f71c9a407a86c83fec6824df70!1-A17362FB20FDB35!sde7c5d2b4bd54dc881dea47c72ec9b6c",
|
||||
"0-af3fbf96c621413b88d58f0c696dd110!1-A17362FB20FDB35!sde7c5d2b4bd54dc881dea47c72ec9b6c",
|
||||
"0-726de65b9cd542e99972101c43ab7bfd!1-A17362FB20FDB35!sde7c5d2b4bd54dc881dea47c72ec9b6c",
|
||||
"0-c5f057cf2ee34b64944cace969e086ec!1-A17362FB20FDB35!s58276b3e29424354a5e8d7576f84c404",
|
||||
"0-cc38f313511240fea9d0996155d2c919!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-969b6ff7d4e44a0abe1b22014377905c!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-14527592b9f600413034d56dfdafff31!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-e685e64e75ec080129886856ee14b730!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-669716ae2e4c0a01166c0ceef11dca3b!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-4a14c352c2c64f1fa556d4be42040703!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!98-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!146-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-ca136ea651310fae13708fd6e40cedc6!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-12f5e1b969de0cf41bd7ea60eb117bb5!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!27-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-e22839fe648e4ed989a36c5c266e2ab1!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-1b3c8688eea24d25ba679ab1d4ff8daf!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-07df92115fda03b70db6ce474cf190a6!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-e30d31c5fe1d0dd232769b02e160e747!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-7152829923da0595142aef346ed03ba6!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-e67391ac23d40af70573a9c9e4f5d55f!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-13ef8e5ffe0405b924ac139a04aeac17!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-d6d1fc04ac254a7daed0ad71d66e8b87!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!122-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!79-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!164-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-10a92889a2d102a525b2979889b22d83!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-011157b8eb150b7d1ad632409fd4ad25!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-c627774b9e7904f61f06d9f685516051!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-e03d40c62f420e6a27aec6bfe605ac86!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-3ccd7d56f0c20ffd0fffc40fbb6961bc!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-99615b6a9d234d3e8809c1033f4632d8!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-59caf69e30be41a6bf184981412c90cc!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-3ed476a14f9145dc8164bba8c8ff5e2f!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-cfb72ff23ce94434b8887db73875e2f3!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-25aa697d02674182b8a0762e988629f1!1-A17362FB20FDB35!sa8eda7fdadad49caac6dd72de32aae12",
|
||||
"0-cc38f313511240fea9d0996155d2c919!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-969b6ff7d4e44a0abe1b22014377905c!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-14527592b9f600413034d56dfdafff31!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-e685e64e75ec080129886856ee14b730!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-669716ae2e4c0a01166c0ceef11dca3b!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-4a14c352c2c64f1fa556d4be42040703!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!98-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!146-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-ca136ea651310fae13708fd6e40cedc6!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-12f5e1b969de0cf41bd7ea60eb117bb5!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!27-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-e22839fe648e4ed989a36c5c266e2ab1!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-1b3c8688eea24d25ba679ab1d4ff8daf!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-07df92115fda03b70db6ce474cf190a6!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-e30d31c5fe1d0dd232769b02e160e747!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-7152829923da0595142aef346ed03ba6!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-e67391ac23d40af70573a9c9e4f5d55f!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-13ef8e5ffe0405b924ac139a04aeac17!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-d6d1fc04ac254a7daed0ad71d66e8b87!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!122-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!79-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-c9897ba1df0405042977fba7bca4b2ed!164-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-10a92889a2d102a525b2979889b22d83!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-011157b8eb150b7d1ad632409fd4ad25!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-c627774b9e7904f61f06d9f685516051!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-e03d40c62f420e6a27aec6bfe605ac86!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-3ccd7d56f0c20ffd0fffc40fbb6961bc!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-99615b6a9d234d3e8809c1033f4632d8!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-59caf69e30be41a6bf184981412c90cc!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-3ed476a14f9145dc8164bba8c8ff5e2f!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-cfb72ff23ce94434b8887db73875e2f3!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-25aa697d02674182b8a0762e988629f1!1-A17362FB20FDB35!sfe34c1e4663141b296f3f37b8a924183",
|
||||
"0-ad7c9efe77fc03d60439ea1ea38c87d8!1-A17362FB20FDB35!sb62c969a726b47dcba74a7288ab9199e",
|
||||
"0-12d64f52d8a804d81a41a64605a917f6!1-A17362FB20FDB35!sb62c969a726b47dcba74a7288ab9199e",
|
||||
"0-ad7c9efe77fc03d60439ea1ea38c87d8!1-A17362FB20FDB35!s7fe8149e120c4b48a67399ff140908d6",
|
||||
"0-12d64f52d8a804d81a41a64605a917f6!1-A17362FB20FDB35!s7fe8149e120c4b48a67399ff140908d6",
|
||||
"0-83f950c96fa10e6535b22e3e43694b40!1-A17362FB20FDB35!s29646bac687f4a3c9bffe399d93f7530",
|
||||
"0-d3215a45bdb24e219b1b3eddd0fff4d2!1-A17362FB20FDB35!s29646bac687f4a3c9bffe399d93f7530",
|
||||
"0-0d3ab4ec846e4f01ba5a14ce2db58775!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-ff88e3a7a62c4183bd600bb00911bb8c!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-bdb0b5b109aa06d200c354543d1956de!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-943a9a2d396403a83034d1641d450db6!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-3f4d5ac65cbf0e5d3de6e186d8c752bd!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-49ed72c5fc0f000201f829ce398d6930!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-26cfb0d58a620616068aea5cf3ec7ab7!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-d3391649e4610c2b14562cfc2377ab63!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-f5208760dd43046c177bd6327c617bd9!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-423ae252e97004af0aeca8f2847eb595!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-0f8ed51262064665971f049ba4cc2209!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-3286dafb932e03dc10ce41bc2073903a!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-afc3cc7dd24208e41400c961193bd475!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-f1336e84c3410a6e1a2b6ffe9c5a2fcd!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-3c9f9fed83cf01400b560926010001b2!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-77bd76ad7f6f4599a2fc92699f97cfde!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-3d6b35dba21709a63928554d13e59e7a!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-7601901019e30ec620abe81fc9a60abc!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-4fdd7d77639701a337b742ef1834d866!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-6fae50656c5d087527e0a546b9323ba6!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-130089a3db8e0d09266c7a05439f6725!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-3669be627aed04352e9917402c633aa2!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-946779f292090f7c092c985892bbb25d!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-525c2f44175205c537e15c0ee7d1de02!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-71b7a9e9d2b706a730f75ca6352ca89b!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-df83008abd080ae70c6fd25e021157e4!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-d430ae28516a0f2910210fef3cdde12e!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-7fa9b3da46a4063d0cf9257624ead189!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-190bd771d54b014b01497603c3ceb234!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-db8dc63c1c2f05c40e99c4c1dd6d36ce!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-02e44bb3ec0a02c6182d624b42bb38c1!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-7d3ed9111e9a483c8f24dd9518d57142!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-ea1735fe9370065b34d4b20be5138c43!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-ebbc4e53b30f08e40082d4214a551e40!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-0bbb9fc29c1807d3276b30ba688e66d4!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-dbd436bd7659098e27a57c46de99f7ba!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-eee67e91637109541a4d5cbdf6696cba!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-e9a9f673ed8702373c1bea771fb1407f!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-86ed7399fcf44923943e633849408201!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-6505a471551341a6a81b6f7bed25b4f5!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-d8f555da265545c383128e6ed9c1a7c4!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-7eb58707ecb746bd8c61bdd9f2f2c0c9!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-e0b0b7d6c2b849f6a3e7f79a007b8678!1-A17362FB20FDB35!s03d4c52edb0b44aa984a1add84ca780e",
|
||||
"0-0d3ab4ec846e4f01ba5a14ce2db58775!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-ff88e3a7a62c4183bd600bb00911bb8c!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-bdb0b5b109aa06d200c354543d1956de!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-943a9a2d396403a83034d1641d450db6!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-3f4d5ac65cbf0e5d3de6e186d8c752bd!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-49ed72c5fc0f000201f829ce398d6930!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-26cfb0d58a620616068aea5cf3ec7ab7!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-d3391649e4610c2b14562cfc2377ab63!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-f5208760dd43046c177bd6327c617bd9!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-423ae252e97004af0aeca8f2847eb595!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-0f8ed51262064665971f049ba4cc2209!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-3286dafb932e03dc10ce41bc2073903a!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-b5649645b0b3062639003f3c4990faf8!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-afc3cc7dd24208e41400c961193bd475!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-f1336e84c3410a6e1a2b6ffe9c5a2fcd!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-3c9f9fed83cf01400b560926010001b2!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-77bd76ad7f6f4599a2fc92699f97cfde!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-3d6b35dba21709a63928554d13e59e7a!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-7601901019e30ec620abe81fc9a60abc!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-4fdd7d77639701a337b742ef1834d866!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-6fae50656c5d087527e0a546b9323ba6!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-130089a3db8e0d09266c7a05439f6725!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-3669be627aed04352e9917402c633aa2!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-946779f292090f7c092c985892bbb25d!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-525c2f44175205c537e15c0ee7d1de02!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-71b7a9e9d2b706a730f75ca6352ca89b!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-df83008abd080ae70c6fd25e021157e4!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-d430ae28516a0f2910210fef3cdde12e!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-7fa9b3da46a4063d0cf9257624ead189!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-190bd771d54b014b01497603c3ceb234!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-db8dc63c1c2f05c40e99c4c1dd6d36ce!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-02e44bb3ec0a02c6182d624b42bb38c1!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-fb5619efd94302b83ba292031042a836!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-7d3ed9111e9a483c8f24dd9518d57142!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-ea1735fe9370065b34d4b20be5138c43!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-ebbc4e53b30f08e40082d4214a551e40!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-e85ea45481a60cf5234c311bd1cd0b28!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-0bbb9fc29c1807d3276b30ba688e66d4!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-dbd436bd7659098e27a57c46de99f7ba!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-eee67e91637109541a4d5cbdf6696cba!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-e9a9f673ed8702373c1bea771fb1407f!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-86ed7399fcf44923943e633849408201!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-6505a471551341a6a81b6f7bed25b4f5!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-d8f555da265545c383128e6ed9c1a7c4!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-7eb58707ecb746bd8c61bdd9f2f2c0c9!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-e0b0b7d6c2b849f6a3e7f79a007b8678!1-A17362FB20FDB35!se41d4944881e451a80d7212b24930583",
|
||||
"0-6713acad97020a4e1e48c459e10426f2!1-A17362FB20FDB35!sb69115ab5f1348cf92349373682ef8f0",
|
||||
"0-d5abc54a86000a6b290d02662f01825d!1-A17362FB20FDB35!sb69115ab5f1348cf92349373682ef8f0",
|
||||
"0-b85dcf2ff1ef082501bca9c82b6c3319!1-A17362FB20FDB35!sb69115ab5f1348cf92349373682ef8f0",
|
||||
"0-0f2bcf64d0884ed1960833801b7bba6c!1-A17362FB20FDB35!s6378e6e93e044a9e9888b9f96c904154",
|
||||
"0-9f339cc994e7014c1bc0c45376948f4d!1-A17362FB20FDB35!s6378e6e93e044a9e9888b9f96c904154",
|
||||
"0-0f2bcf64d0884ed1960833801b7bba6c!1-A17362FB20FDB35!s651e6e4b885946ea97032ebc8ffcdf78",
|
||||
"0-9f339cc994e7014c1bc0c45376948f4d!1-A17362FB20FDB35!s651e6e4b885946ea97032ebc8ffcdf78",
|
||||
"0-4030c20a963206411d4aab91473a0dc5!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-a343156939210f0222036ede060df938!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-58c34f2e305f08061cb803f6ee29dfea!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-5059c7489bbd065d22410553734d5116!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-b93a8d5784530e0a1d8c6491879b8328!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-26551afa0cf84a94a175e0981ee7e4c4!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-5c3233b026180c4d3c47d9fed403e401!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-92b24a1469ac000a129b700fc25f67dc!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-02cdaa5b32ee44909e3a4fd0e112f12f!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-bf20b4e5d8b347a2ad0896dbbf9b94df!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-773a640d3329487685b8dbab4e01c7de!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-8c00d24886504e279fcb0324aa62e053!1-A17362FB20FDB35!s79ac6e45250341d4bf86ebb1768e5e9d",
|
||||
"0-4030c20a963206411d4aab91473a0dc5!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-a343156939210f0222036ede060df938!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-58c34f2e305f08061cb803f6ee29dfea!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-5059c7489bbd065d22410553734d5116!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-b93a8d5784530e0a1d8c6491879b8328!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-26551afa0cf84a94a175e0981ee7e4c4!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-5c3233b026180c4d3c47d9fed403e401!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-92b24a1469ac000a129b700fc25f67dc!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-02cdaa5b32ee44909e3a4fd0e112f12f!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-bf20b4e5d8b347a2ad0896dbbf9b94df!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-773a640d3329487685b8dbab4e01c7de!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-8c00d24886504e279fcb0324aa62e053!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-da543a840f1c44f7b1e11e31b7d89903!1-A17362FB20FDB35!s8df3ae898f57460e838e3782372a6530",
|
||||
"0-23a815a387c202cd068fcc21c2308823!1-A17362FB20FDB35!s4fe06a34bfdb4fc59d3e518cffe2d739",
|
||||
"0-acb5e43c5b790dbd2dc5f06a7136b361!1-A17362FB20FDB35!s4fe06a34bfdb4fc59d3e518cffe2d739",
|
||||
"0-ffffd96e8a7800bb1bd8031f019fb737!1-A17362FB20FDB35!s4fe06a34bfdb4fc59d3e518cffe2d739",
|
||||
"0-12bdaa42cee104bb2dd00992765797cc!1-A17362FB20FDB35!s967706cc844349eebbe57cc5ba5876aa",
|
||||
"0-acaac477894e07cc05e1413a55e2f06d!1-A17362FB20FDB35!s967706cc844349eebbe57cc5ba5876aa",
|
||||
"0-fcf08052e13f04450e59ae03fd2346ec!1-A17362FB20FDB35!s967706cc844349eebbe57cc5ba5876aa",
|
||||
"0-e17e68afd3c140ada20812fb953a1aa8!1-A17362FB20FDB35!s967706cc844349eebbe57cc5ba5876aa",
|
||||
"0-ed300b667bac010301046b7c558b93f3!1-A17362FB20FDB35!s967706cc844349eebbe57cc5ba5876aa",
|
||||
"0-23046a1f10ee4f9c8f339d63c4dc2187!1-A17362FB20FDB35!s967706cc844349eebbe57cc5ba5876aa",
|
||||
"0-5e6484e4301448e3af76fa8479969fe0!1-A17362FB20FDB35!s967706cc844349eebbe57cc5ba5876aa",
|
||||
"0-12bdaa42cee104bb2dd00992765797cc!1-A17362FB20FDB35!sb5a4b2cec84c4d5c92e6000792d4cec4",
|
||||
"0-acaac477894e07cc05e1413a55e2f06d!1-A17362FB20FDB35!sb5a4b2cec84c4d5c92e6000792d4cec4",
|
||||
"0-fcf08052e13f04450e59ae03fd2346ec!1-A17362FB20FDB35!sb5a4b2cec84c4d5c92e6000792d4cec4",
|
||||
"0-e17e68afd3c140ada20812fb953a1aa8!1-A17362FB20FDB35!sb5a4b2cec84c4d5c92e6000792d4cec4",
|
||||
"0-ed300b667bac010301046b7c558b93f3!1-A17362FB20FDB35!sb5a4b2cec84c4d5c92e6000792d4cec4",
|
||||
"0-23046a1f10ee4f9c8f339d63c4dc2187!1-A17362FB20FDB35!sb5a4b2cec84c4d5c92e6000792d4cec4",
|
||||
"0-5e6484e4301448e3af76fa8479969fe0!1-A17362FB20FDB35!sb5a4b2cec84c4d5c92e6000792d4cec4",
|
||||
"0-ce694770f9640ef82a5bca5ef42e12e2!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-bdf53935bc22018127fd1aa8b077eb77!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-99de1069187c08f320a7377fbd01c610!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-9e46756060ba076f1b6e86fc7529c65c!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-c4075ebd90e505e1085deaf065af4c2b!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-345d8ac649cb07273d1b26cfb1868e16!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-f21ba087e698017c22263aa423f41e0f!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-8441e4698a204cc5b1d171ef2d1a0848!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-26747730097a4c1fba7dedd430f5997a!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-220cdfce4c21413097867f2ff001c5ae!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-78a57d5a76f94d4aae399f643f505d94!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-97c4cab2bcd544b79e8668231d687317!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-ee61ce076cec4dc5ac09d84d35d68202!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-c1d8d131d081427d89eacbd25ddb3d56!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-400fe2ba446043779e876a333c3108ed!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-50de44df2d0147e09e63e950cfafc2ba!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-07ab08d03a3d46b09395ddd82295b111!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-ad8df5abe91c400ca7e4f1175c58d940!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-f6f04f03cab44e98987af9981525271b!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-9914eeeb1eb24bec9335a0bcaa0ad083!1-A17362FB20FDB35!s411c3abc39fa43faae46f8dc1684474f",
|
||||
"0-ce694770f9640ef82a5bca5ef42e12e2!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-bdf53935bc22018127fd1aa8b077eb77!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-99de1069187c08f320a7377fbd01c610!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-9e46756060ba076f1b6e86fc7529c65c!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-c4075ebd90e505e1085deaf065af4c2b!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-345d8ac649cb07273d1b26cfb1868e16!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-f21ba087e698017c22263aa423f41e0f!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-8441e4698a204cc5b1d171ef2d1a0848!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-26747730097a4c1fba7dedd430f5997a!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-220cdfce4c21413097867f2ff001c5ae!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-78a57d5a76f94d4aae399f643f505d94!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931",
|
||||
"0-97c4cab2bcd544b79e8668231d687317!1-A17362FB20FDB35!seee75fc5ca2a430780abcda5804bc931"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-importer",
|
||||
"name": "Importer",
|
||||
"version": "1.6.21",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Import data from Notion, Evernote, Apple Notes, Microsoft OneNote, Google Keep, Bear, Roam, and HTML files.",
|
||||
"author": "Obsidian",
|
||||
"authorUrl": "https://obsidian.md",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
.modal.mod-importer {
|
||||
max-height: var(--modal-height);
|
||||
padding: var(--size-4-4) 0 0 0;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.modal.mod-importer .modal-title {
|
||||
padding: 0 var(--size-4-4);
|
||||
}
|
||||
.modal.mod-importer .modal-content {
|
||||
overflow: auto;
|
||||
padding: var(--size-4-4);
|
||||
margin-bottom: calc(var(--input-height) + var(--size-4-8));
|
||||
border-top: var(--border-width) solid var(--background-modifier-border);
|
||||
}
|
||||
.modal.mod-importer .modal-button-container {
|
||||
margin: 0 0 0 calc(var(--size-4-4) * -1);
|
||||
padding: var(--size-4-4);
|
||||
gap: var(--size-4-2);
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
background-color: var(--background-primary);
|
||||
border-top: var(--border-width) solid var(--background-modifier-border);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.importer-progress-bar {
|
||||
width: 100%;
|
||||
height: 8px;
|
||||
background-color: var(--background-secondary);
|
||||
overflow: hidden;
|
||||
box-shadow: inset 0px 0px 0px 1px var(--background-modifier-border);
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
.importer-progress-bar-inner {
|
||||
width: 0;
|
||||
height: 100%;
|
||||
background-color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.importer-status {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
padding: var(--size-4-2) 0;
|
||||
}
|
||||
|
||||
.importer-stats-container {
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
margin-top: var(--size-4-5);
|
||||
margin-bottom: var(--size-4-5);
|
||||
}
|
||||
|
||||
.importer-stat {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.importer-stat-count {
|
||||
font-size: var(--font-ui-large);
|
||||
}
|
||||
|
||||
.importer-log {
|
||||
overflow: auto;
|
||||
flex-grow: 1;
|
||||
font-family: var(--font-monospace);
|
||||
font-size: var(--font-ui-smaller);
|
||||
color: var(--text-muted);
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
padding: var(--size-4-4);
|
||||
background-color: var(--background-secondary);
|
||||
border-radius: var(--radius-s);
|
||||
max-height: 300px;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
.importer-log .list-item {
|
||||
display: inline-block;
|
||||
line-height: var(--line-height-normal);
|
||||
white-space: pre;
|
||||
margin: var(--size-2-1);
|
||||
}
|
||||
|
||||
.importer-error {
|
||||
color: var(--text-error);
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"remoteType": "",
|
||||
"useCustomRequestHandler": false,
|
||||
"couchDB_URI": "",
|
||||
"couchDB_USER": "",
|
||||
"couchDB_PASSWORD": "",
|
||||
"couchDB_DBNAME": "",
|
||||
"liveSync": false,
|
||||
"syncOnSave": false,
|
||||
"syncOnStart": true,
|
||||
"savingDelay": 200,
|
||||
"lessInformationInLog": false,
|
||||
"gcDelay": 0,
|
||||
"versionUpFlash": "",
|
||||
"minimumChunkSize": 20,
|
||||
"longLineThreshold": 250,
|
||||
"showVerboseLog": false,
|
||||
"suspendFileWatching": false,
|
||||
"trashInsteadDelete": true,
|
||||
"periodicReplication": true,
|
||||
"periodicReplicationInterval": 60,
|
||||
"syncOnFileOpen": true,
|
||||
"encrypt": true,
|
||||
"passphrase": "",
|
||||
"usePathObfuscation": true,
|
||||
"doNotDeleteFolder": false,
|
||||
"resolveConflictsByNewerFile": false,
|
||||
"batchSave": true,
|
||||
"batchSaveMinimumDelay": 5,
|
||||
"batchSaveMaximumDelay": 60,
|
||||
"deviceAndVaultName": "",
|
||||
"usePluginSettings": false,
|
||||
"showOwnPlugins": false,
|
||||
"showStatusOnEditor": true,
|
||||
"showStatusOnStatusbar": true,
|
||||
"showOnlyIconsOnEditor": false,
|
||||
"hideFileWarningNotice": false,
|
||||
"usePluginSync": false,
|
||||
"autoSweepPlugins": false,
|
||||
"autoSweepPluginsPeriodic": false,
|
||||
"notifyPluginOrSettingUpdated": false,
|
||||
"checkIntegrityOnSave": false,
|
||||
"batch_size": 50,
|
||||
"batches_limit": 50,
|
||||
"useHistory": true,
|
||||
"disableRequestURI": true,
|
||||
"skipOlderFilesOnSync": true,
|
||||
"checkConflictOnlyOnOpen": false,
|
||||
"showMergeDialogOnlyOnActive": false,
|
||||
"syncInternalFiles": false,
|
||||
"syncInternalFilesBeforeReplication": false,
|
||||
"syncInternalFilesIgnorePatterns": "\\/node_modules\\/, \\/\\.git\\/, \\/obsidian-livesync\\/",
|
||||
"syncInternalFilesTargetPatterns": "",
|
||||
"syncInternalFilesInterval": 60,
|
||||
"additionalSuffixOfDatabaseName": "61fcc0be27d0c623",
|
||||
"ignoreVersionCheck": false,
|
||||
"lastReadUpdates": 0,
|
||||
"deleteMetadataOfDeletedFiles": false,
|
||||
"syncIgnoreRegEx": "",
|
||||
"syncOnlyRegEx": "",
|
||||
"customChunkSize": 50,
|
||||
"readChunksOnline": true,
|
||||
"watchInternalFileChanges": true,
|
||||
"automaticallyDeleteMetadataOfDeletedFiles": 0,
|
||||
"disableMarkdownAutoMerge": false,
|
||||
"writeDocumentsIfConflicted": false,
|
||||
"useDynamicIterationCount": false,
|
||||
"syncAfterMerge": false,
|
||||
"configPassphraseStore": "",
|
||||
"encryptedPassphrase": "%a57e3279017d17a1cc64a3b104000000139d7cc3156fab1f39931c34c76facb0HcSvGbJmxL0ybbCQu85RXc5O5djY6wdJ1KXsx8ip",
|
||||
"encryptedCouchDBConnection": "%a57e3279017d17a1cc64a3b103000000139d7cc3156fab1f39931c34c76facb0gTnylUguutu7k7/0sHULlu9w9CIrHBsu/b2GC2ZAQXGQ6bV+/5Djl7e7OkmQxcmisv00CbbObJD7a1AWwyKmwtIqxylzVuNTGfAdy4momyNYFjmIdiezrLBULecFjNzOtvy1oDBWBaLKhzQ7F7W7Wq5RgObpIBlOwc95SXkQWj3XdpHMc7I76k6MkOk0O+18nGwayORYaG+gIvRSAAzb7Ny+t+43QEfakTFsmCZLr+dY25cy0wOG1ZtFJQq9tbZgfFK9IiGt1yET4wLPfnRsmy7XrzuwV7IFN6rtPFOR89p3vpXzLb0960cAHidoDZfF3ZG5eOm0vB67btnSMWkPqrqaVREBdRhqji6YPes/DqRujwp898Qm6Py1WJ57/nZC/unT1IGJOf5Coygm7NbqH9pZWayjZ/HYHgLa9BclwvjireS5M9bMMDiTdYlRwWlUU5VXoiJ7144EURI9zWKf+BufWGtsWZ+Mg0N56J/PPkOEF8Huk/aZZq0kgFKqqjO292tfL5GcxzcFWyW+w01yKsmFATrxsQ47gRvVMyp8JcJvtQt1bXfpkvG1nnGOcC6DBPJs4xzF3mA=",
|
||||
"permitEmptyPassphrase": false,
|
||||
"useIndexedDBAdapter": true,
|
||||
"useTimeouts": false,
|
||||
"writeLogToTheFile": false,
|
||||
"doNotPaceReplication": false,
|
||||
"hashCacheMaxCount": 300,
|
||||
"hashCacheMaxAmount": 50,
|
||||
"concurrencyOfReadChunksOnline": 100,
|
||||
"minimumIntervalOfReadChunksOnline": 100,
|
||||
"hashAlg": "xxhash64",
|
||||
"suspendParseReplicationResult": false,
|
||||
"doNotSuspendOnFetching": false,
|
||||
"useIgnoreFiles": false,
|
||||
"ignoreFiles": ".gitignore",
|
||||
"syncOnEditorSave": false,
|
||||
"pluginSyncExtendedSetting": {},
|
||||
"syncMaxSizeInMB": 50,
|
||||
"settingSyncFile": "",
|
||||
"writeCredentialsForSettingSync": false,
|
||||
"notifyAllSettingSyncFile": false,
|
||||
"isConfigured": true,
|
||||
"settingVersion": 10,
|
||||
"enableCompression": false,
|
||||
"accessKey": "",
|
||||
"bucket": "",
|
||||
"endpoint": "",
|
||||
"region": "",
|
||||
"secretKey": "",
|
||||
"useEden": false,
|
||||
"maxChunksInEden": 10,
|
||||
"maxTotalLengthInEden": 1024,
|
||||
"maxAgeInEden": 10,
|
||||
"disableCheckingConfigMismatch": false,
|
||||
"displayLanguage": "def",
|
||||
"enableChunkSplitterV2": false,
|
||||
"disableWorkerForGeneratingChunks": false,
|
||||
"processSmallFilesInUIThread": false,
|
||||
"notifyThresholdOfRemoteStorageSize": 800,
|
||||
"usePluginSyncV2": false,
|
||||
"usePluginEtc": false,
|
||||
"handleFilenameCaseSensitive": false,
|
||||
"doNotUseFixedRevisionForChunks": true,
|
||||
"showLongerLogInsideEditor": false,
|
||||
"sendChunksBulk": false,
|
||||
"sendChunksBulkMaxSize": 1,
|
||||
"useSegmenter": false,
|
||||
"useAdvancedMode": false,
|
||||
"usePowerUserMode": false,
|
||||
"useEdgeCaseMode": false,
|
||||
"enableDebugTools": false,
|
||||
"suppressNotifyHiddenFilesChange": false,
|
||||
"syncMinimumInterval": 2000,
|
||||
"P2P_Enabled": false,
|
||||
"P2P_AutoAccepting": 0,
|
||||
"P2P_AppID": "self-hosted-livesync",
|
||||
"P2P_roomID": "",
|
||||
"P2P_passphrase": "",
|
||||
"P2P_relays": "wss://exp-relay.vrtmrz.net/",
|
||||
"P2P_AutoBroadcast": false,
|
||||
"P2P_AutoStart": false,
|
||||
"P2P_AutoSyncPeers": "",
|
||||
"P2P_AutoWatchPeers": "",
|
||||
"P2P_SyncOnReplication": "",
|
||||
"P2P_RebuildFrom": "",
|
||||
"P2P_AutoAcceptingPeers": "",
|
||||
"P2P_AutoDenyingPeers": "",
|
||||
"P2P_IsHeadless": false,
|
||||
"doctorProcessedVersion": "0.24.16",
|
||||
"bucketCustomHeaders": "",
|
||||
"couchDB_CustomHeaders": "",
|
||||
"useJWT": false,
|
||||
"jwtAlgorithm": "",
|
||||
"jwtKey": "",
|
||||
"jwtKid": "",
|
||||
"jwtSub": "",
|
||||
"jwtExpDuration": 5,
|
||||
"useRequestAPI": false,
|
||||
"bucketPrefix": ""
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-livesync",
|
||||
"name": "Self-hosted LiveSync",
|
||||
"version": "0.24.28",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
|
||||
"author": "vorotamoroz",
|
||||
"authorUrl": "https://github.com/vrtmrz",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,454 @@
|
||||
.added {
|
||||
color: var(--text-on-accent);
|
||||
background-color: var(--text-accent);
|
||||
}
|
||||
|
||||
.normal {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.deleted {
|
||||
color: var(--text-on-accent);
|
||||
background-color: var(--text-muted);
|
||||
}
|
||||
|
||||
.op-scrollable {
|
||||
overflow-y: scroll;
|
||||
/* min-height: 280px; */
|
||||
max-height: 280px;
|
||||
user-select: text;
|
||||
-webkit-user-select: text;
|
||||
}
|
||||
|
||||
.op-pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.op-warn {
|
||||
border: 1px solid salmon;
|
||||
padding: 2px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.op-warn::before {
|
||||
content: "Warning";
|
||||
font-weight: bold;
|
||||
color: salmon;
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.op-warn-info {
|
||||
border: 1px solid rgb(255, 209, 81);
|
||||
padding: 2px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.op-warn-info::before {
|
||||
content: "Notice";
|
||||
font-weight: bold;
|
||||
color: rgb(255, 209, 81);
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.syncstatusbar {
|
||||
-webkit-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
.tcenter {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sls-plugins-wrap {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
max-height: 50vh;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.sls-plugins-tbl {
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
width: 100%;
|
||||
max-height: 80%;
|
||||
}
|
||||
|
||||
.divider th {
|
||||
border-top: 1px solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.sls-header-button {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
.sls-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:root {
|
||||
--sls-log-text: "";
|
||||
}
|
||||
|
||||
.sls-troubleshoot-preview {
|
||||
max-width: max-content;
|
||||
}
|
||||
|
||||
.sls-troubleshoot-preview img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.sls-setting-tab {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.sls-setting-menu-btn {
|
||||
color: var(--text-normal);
|
||||
background-color: var(--background-secondary-alt);
|
||||
border-radius: 4px 4px 0 0;
|
||||
padding: 6px 10px;
|
||||
cursor: pointer;
|
||||
margin-right: 12px;
|
||||
font-family: "Inter", sans-serif;
|
||||
outline: none;
|
||||
user-select: none;
|
||||
flex-grow: 1;
|
||||
text-align: center;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
|
||||
.sls-setting-label.selected {
|
||||
/* order: 1; */
|
||||
flex-grow: 1;
|
||||
/* width: 100%; */
|
||||
}
|
||||
|
||||
.sls-setting-tab:hover~div.sls-setting-menu-btn,
|
||||
.sls-setting-label.selected .sls-setting-tab:checked~div.sls-setting-menu-btn {
|
||||
background-color: var(--interactive-accent);
|
||||
color: var(--text-on-accent);
|
||||
}
|
||||
|
||||
.sls-setting-menu-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
background-color: rgba(var(--background-primary), 0.3);
|
||||
backdrop-filter: blur(4px);
|
||||
border-radius: 4px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.sls-setting-menu {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
body {
|
||||
--sls-col-transparent: transparent;
|
||||
--sls-col-warn: rgba(var(--background-modifier-error-rgb), 0.1);
|
||||
--sls-col-warn-stripe1: var(--sls-col-transparent);
|
||||
--sls-col-warn-stripe2: var(--sls-col-warn);
|
||||
}
|
||||
|
||||
.sls-setting-menu-buttons {
|
||||
border: 1px solid var(--sls-col-warn);
|
||||
padding: 2px;
|
||||
margin: 1px;
|
||||
border-radius: 4px;
|
||||
background-image: linear-gradient(-45deg,
|
||||
var(--sls-col-warn-stripe1) 25%, var(--sls-col-warn-stripe2) 25%, var(--sls-col-warn-stripe2) 50%,
|
||||
var(--sls-col-warn-stripe1) 50%, var(--sls-col-warn-stripe1) 75%, var(--sls-col-warn-stripe2) 75%, var(--sls-col-warn-stripe2));
|
||||
background-size: 30px 30px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-end;
|
||||
padding: 0.5em 0.25em;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
/* transition: background-position 1s; */
|
||||
animation: sls-scroll-warn 1s linear 0s infinite;
|
||||
}
|
||||
|
||||
@keyframes sls-scroll-warn {
|
||||
0% {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
background-position: 30px 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.sls-setting-menu-buttons label {
|
||||
margin-right: auto;
|
||||
flex-grow: 1;
|
||||
color: var(--text-warning);
|
||||
}
|
||||
|
||||
.sls-setting-label {
|
||||
flex-grow: 1;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.setting-collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sls-plugins-tbl-buttons {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.sls-plugins-tbl-buttons button {
|
||||
flex-grow: 0;
|
||||
padding: 6px 10px;
|
||||
}
|
||||
|
||||
.sls-plugins-tbl-device-head {
|
||||
background-color: var(--background-secondary-alt);
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.op-flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.op-flex input {
|
||||
display: inline-flex;
|
||||
flex-grow: 1;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.op-info {
|
||||
display: inline-flex;
|
||||
flex-grow: 1;
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
width: 100%;
|
||||
margin-bottom: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.history-added {
|
||||
color: var(--text-on-accent);
|
||||
background-color: var(--text-accent);
|
||||
}
|
||||
|
||||
.history-normal {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.history-deleted {
|
||||
color: var(--text-on-accent);
|
||||
background-color: var(--text-muted);
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
.ob-btn-config-fix label {
|
||||
margin-right: 40px;
|
||||
}
|
||||
|
||||
.ob-btn-config-info {
|
||||
border: 1px solid salmon;
|
||||
padding: 2px;
|
||||
margin: 1px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.ob-btn-config-head {
|
||||
padding: 2px;
|
||||
margin: 1px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.isWizard .wizardHidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sls-setting:not(.isWizard) .wizardOnly {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sls-item-dirty::before {
|
||||
content: "✏";
|
||||
}
|
||||
|
||||
.sls-item-dirty-help::after {
|
||||
content: " ❓";
|
||||
}
|
||||
|
||||
.sls-item-invalid-value {
|
||||
background-color: rgba(var(--background-modifier-error-rgb), 0.3) !important;
|
||||
}
|
||||
|
||||
.sls-setting-disabled input[type=text],
|
||||
.sls-setting-disabled input[type=number],
|
||||
.sls-setting-disabled input[type=password] {
|
||||
filter: brightness(80%);
|
||||
color: var(--text-muted);
|
||||
|
||||
}
|
||||
|
||||
.sls-setting-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.sls-setting-obsolete {
|
||||
background-image: linear-gradient(-45deg,
|
||||
var(--sls-col-warn-stripe1) 25%, var(--sls-col-warn-stripe2) 25%, var(--sls-col-warn-stripe2) 50%,
|
||||
var(--sls-col-warn-stripe1) 50%, var(--sls-col-warn-stripe1) 75%, var(--sls-col-warn-stripe2) 75%, var(--sls-col-warn-stripe2));
|
||||
background-image: linear-gradient(-45deg,
|
||||
transparent 25%, rgba(var(--background-secondary), 0.1) 25%, rgba(var(--background-secondary), 0.1) 50%, transparent 50%, transparent 75%, rgba(var(--background-secondary), 0.1) 75%, rgba(var(--background-secondary), 0.1));
|
||||
background-size: 60px 60px;
|
||||
}
|
||||
|
||||
.password-input>.setting-item-control>input {
|
||||
-webkit-text-security: disc;
|
||||
}
|
||||
|
||||
span.ls-mark-cr::after {
|
||||
user-select: none;
|
||||
content: "↲";
|
||||
color: var(--text-muted);
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.deleted span.ls-mark-cr::after {
|
||||
color: var(--text-on-accent);
|
||||
}
|
||||
|
||||
.ls-imgdiff-wrap {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.ls-imgdiff-wrap .overlay {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.ls-imgdiff-wrap .overlay .img-base {
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.ls-imgdiff-wrap .overlay .img-overlay {
|
||||
-webkit-filter: invert(100%) opacity(50%);
|
||||
filter: invert(100%) opacity(50%);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
animation: ls-blink-diff 0.5s cubic-bezier(0.4, 0, 1, 1) infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes ls-blink-diff {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.livesync-status {
|
||||
user-select: none;
|
||||
pointer-events: none;
|
||||
height: auto;
|
||||
min-height: 1em;
|
||||
position: absolute;
|
||||
background-color: transparent;
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
padding-right: 16px;
|
||||
top: var(--header-height);
|
||||
z-index: calc(var(--layer-cover) + 1);
|
||||
|
||||
font-variant-numeric: tabular-nums;
|
||||
tab-size: 4;
|
||||
text-align: right;
|
||||
white-space: pre-wrap;
|
||||
display: inline-block;
|
||||
color: var(--text-normal);
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
.livesync-status div {
|
||||
opacity: 0.6;
|
||||
-webkit-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
.livesync-status .livesync-status-loghistory {
|
||||
text-align: left;
|
||||
opacity: 0.4;
|
||||
|
||||
}
|
||||
|
||||
.livesync-status div.livesync-status-messagearea {
|
||||
opacity: 0.6;
|
||||
color: var(--text-on-accent);
|
||||
background: var(--background-modifier-error);
|
||||
-webkit-filter: unset;
|
||||
filter: unset;
|
||||
}
|
||||
|
||||
.menu-setting-poweruser-disabled .sls-setting-poweruser {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.menu-setting-advanced-disabled .sls-setting-advanced {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.menu-setting-edgecase-disabled .sls-setting-edgecase {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sls-setting-panel-title {
|
||||
position: sticky;
|
||||
}
|
||||
|
||||
.sls-setting-panel-title {
|
||||
top: 2em;
|
||||
background-color: rgba(var(--background-primary), 0.3);
|
||||
backdrop-filter: blur(4px);
|
||||
border-radius: 30%;
|
||||
}
|
||||
|
||||
.sls-dialogue-note-wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sls-dialogue-note-countdown {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.sls-qr {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
max-width: max-content;
|
||||
}
|
||||
|
||||
.sls-keypair pre {
|
||||
max-width: 100%;
|
||||
overflow-x: auto;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-local-rest-api",
|
||||
"name": "Local REST API with MCP",
|
||||
"version": "4.1.3",
|
||||
"minAppVersion": "1.4.0",
|
||||
"description": "A secure REST API and Model Context Protocol (MCP) server for your vault.",
|
||||
"author": "Adam Coddington",
|
||||
"authorUrl": "https://adamcoddington.net/",
|
||||
"isDesktopOnly": true
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/* 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 pre {
|
||||
font-size: 0.8em;
|
||||
padding: 10px 20px;
|
||||
margin: 10px 25px;
|
||||
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;
|
||||
}
|
||||
|
||||
div.obsidian-local-rest-api-settings p {
|
||||
padding: 0px 15px;
|
||||
}
|
||||
@@ -0,0 +1,944 @@
|
||||
/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD */
|
||||
var __defProp = Object.defineProperty;
|
||||
var __defProps = Object.defineProperties;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
||||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
||||
var __spreadValues = (a, b) => {
|
||||
for (var prop in b || (b = {}))
|
||||
if (__hasOwnProp.call(b, prop))
|
||||
__defNormalProp(a, prop, b[prop]);
|
||||
if (__getOwnPropSymbols)
|
||||
for (var prop of __getOwnPropSymbols(b)) {
|
||||
if (__propIsEnum.call(b, prop))
|
||||
__defNormalProp(a, prop, b[prop]);
|
||||
}
|
||||
return a;
|
||||
};
|
||||
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
||||
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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var __async = (__this, __arguments, generator) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
var fulfilled = (value) => {
|
||||
try {
|
||||
step(generator.next(value));
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
var rejected = (value) => {
|
||||
try {
|
||||
step(generator.throw(value));
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||||
step((generator = generator.apply(__this, __arguments)).next());
|
||||
});
|
||||
};
|
||||
|
||||
// package.json
|
||||
var require_package = __commonJS({
|
||||
"package.json"(exports, module2) {
|
||||
module2.exports = {
|
||||
name: "obsidian-paste-image-rename",
|
||||
version: "1.6.1",
|
||||
main: "main.js",
|
||||
scripts: {
|
||||
start: "node esbuild.config.mjs",
|
||||
build: "tsc -noEmit -skipLibCheck && BUILD_ENV=production node esbuild.config.mjs && cp manifest.json build",
|
||||
version: "node version-bump.mjs && git add manifest.json versions.json",
|
||||
release: "npm run build && gh release create ${npm_package_version} build/*"
|
||||
},
|
||||
keywords: [],
|
||||
author: "Reorx",
|
||||
license: "MIT",
|
||||
devDependencies: {
|
||||
"@types/node": "^18.11.18",
|
||||
"@typescript-eslint/eslint-plugin": "^5.49.0",
|
||||
"@typescript-eslint/parser": "^5.49.0",
|
||||
"builtin-modules": "^3.3.0",
|
||||
esbuild: "0.16.17",
|
||||
obsidian: "^1.1.1",
|
||||
tslib: "2.5.0",
|
||||
typescript: "4.9.4"
|
||||
},
|
||||
dependencies: {
|
||||
"cash-dom": "^8.1.2"
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// src/main.ts
|
||||
var main_exports = {};
|
||||
__export(main_exports, {
|
||||
default: () => PasteImageRenamePlugin
|
||||
});
|
||||
module.exports = __toCommonJS(main_exports);
|
||||
var import_obsidian2 = require("obsidian");
|
||||
|
||||
// src/batch.ts
|
||||
var import_obsidian = require("obsidian");
|
||||
|
||||
// src/utils.ts
|
||||
var DEBUG = false;
|
||||
if (DEBUG)
|
||||
console.log("DEBUG is enabled");
|
||||
function debugLog(...args) {
|
||||
if (DEBUG) {
|
||||
console.log(new Date().toISOString().slice(11, 23), ...args);
|
||||
}
|
||||
}
|
||||
function createElementTree(rootEl, opts) {
|
||||
const result = {
|
||||
el: rootEl.createEl(opts.tag, opts),
|
||||
children: []
|
||||
};
|
||||
const children = opts.children || [];
|
||||
for (const child of children) {
|
||||
result.children.push(createElementTree(result.el, child));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
var path = {
|
||||
// Credit: @creationix/path.js
|
||||
join(...partSegments) {
|
||||
let parts = [];
|
||||
for (let i = 0, l = partSegments.length; i < l; i++) {
|
||||
parts = parts.concat(partSegments[i].split("/"));
|
||||
}
|
||||
const newParts = [];
|
||||
for (let i = 0, l = parts.length; i < l; i++) {
|
||||
const part = parts[i];
|
||||
if (!part || part === ".")
|
||||
continue;
|
||||
else
|
||||
newParts.push(part);
|
||||
}
|
||||
if (parts[0] === "")
|
||||
newParts.unshift("");
|
||||
return newParts.join("/");
|
||||
},
|
||||
// returns the last part of a path, e.g. 'foo.jpg'
|
||||
basename(fullpath) {
|
||||
const sp = fullpath.split("/");
|
||||
return sp[sp.length - 1];
|
||||
},
|
||||
// return extension without dot, e.g. 'jpg'
|
||||
extension(fullpath) {
|
||||
const positions = [...fullpath.matchAll(new RegExp("\\.", "gi"))].map((a) => a.index);
|
||||
return fullpath.slice(positions[positions.length - 1] + 1);
|
||||
}
|
||||
};
|
||||
var filenameNotAllowedChars = /[^\p{L}0-9~`!@$&*()\-_=+{};'",<.>? ]/ug;
|
||||
var sanitizer = {
|
||||
filename(s) {
|
||||
return s.replace(filenameNotAllowedChars, "").trim();
|
||||
},
|
||||
delimiter(s) {
|
||||
s = this.filename(s);
|
||||
if (!s)
|
||||
s = "-";
|
||||
return s;
|
||||
}
|
||||
};
|
||||
function escapeRegExp(s) {
|
||||
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
||||
}
|
||||
function lockInputMethodComposition(el) {
|
||||
const state = {
|
||||
lock: false
|
||||
};
|
||||
el.addEventListener("compositionstart", () => {
|
||||
state.lock = true;
|
||||
});
|
||||
el.addEventListener("compositionend", () => {
|
||||
state.lock = false;
|
||||
});
|
||||
return state;
|
||||
}
|
||||
|
||||
// src/batch.ts
|
||||
var ImageBatchRenameModal = class extends import_obsidian.Modal {
|
||||
constructor(app, activeFile, renameFunc, onClose) {
|
||||
super(app);
|
||||
this.activeFile = activeFile;
|
||||
this.renameFunc = renameFunc;
|
||||
this.onCloseExtra = onClose;
|
||||
this.state = {
|
||||
namePattern: "",
|
||||
extPattern: "",
|
||||
nameReplace: "",
|
||||
renameTasks: []
|
||||
};
|
||||
}
|
||||
onOpen() {
|
||||
this.containerEl.addClass("image-rename-modal");
|
||||
const { contentEl, titleEl } = this;
|
||||
titleEl.setText("Batch rename embeded files");
|
||||
const namePatternSetting = new import_obsidian.Setting(contentEl).setName("Name pattern").setDesc("Please input the name pattern to match files (regex)").addText((text) => text.setValue(this.state.namePattern).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.state.namePattern = value;
|
||||
})
|
||||
));
|
||||
const npInputEl = namePatternSetting.controlEl.children[0];
|
||||
npInputEl.focus();
|
||||
const npInputState = lockInputMethodComposition(npInputEl);
|
||||
npInputEl.addEventListener("keydown", (e) => __async(this, null, function* () {
|
||||
if (e.key === "Enter" && !npInputState.lock) {
|
||||
e.preventDefault();
|
||||
if (!this.state.namePattern) {
|
||||
errorEl.innerText = 'Error: "Name pattern" could not be empty';
|
||||
errorEl.style.display = "block";
|
||||
return;
|
||||
}
|
||||
this.matchImageNames(tbodyEl);
|
||||
}
|
||||
}));
|
||||
const extPatternSetting = new import_obsidian.Setting(contentEl).setName("Extension pattern").setDesc("Please input the extension pattern to match files (regex)").addText((text) => text.setValue(this.state.extPattern).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.state.extPattern = value;
|
||||
})
|
||||
));
|
||||
const extInputEl = extPatternSetting.controlEl.children[0];
|
||||
extInputEl.addEventListener("keydown", (e) => __async(this, null, function* () {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
this.matchImageNames(tbodyEl);
|
||||
}
|
||||
}));
|
||||
const nameReplaceSetting = new import_obsidian.Setting(contentEl).setName("Name replace").setDesc("Please input the string to replace the matched name (use $1, $2 for regex groups)").addText((text) => text.setValue(this.state.nameReplace).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.state.nameReplace = value;
|
||||
})
|
||||
));
|
||||
const nrInputEl = nameReplaceSetting.controlEl.children[0];
|
||||
const nrInputState = lockInputMethodComposition(nrInputEl);
|
||||
nrInputEl.addEventListener("keydown", (e) => __async(this, null, function* () {
|
||||
if (e.key === "Enter" && !nrInputState.lock) {
|
||||
e.preventDefault();
|
||||
this.matchImageNames(tbodyEl);
|
||||
}
|
||||
}));
|
||||
const matchedContainer = contentEl.createDiv({
|
||||
cls: "matched-container"
|
||||
});
|
||||
const tableET = createElementTree(matchedContainer, {
|
||||
tag: "table",
|
||||
children: [
|
||||
{
|
||||
tag: "thead",
|
||||
children: [
|
||||
{
|
||||
tag: "tr",
|
||||
children: [
|
||||
{
|
||||
tag: "td",
|
||||
text: "Original path"
|
||||
},
|
||||
{
|
||||
tag: "td",
|
||||
text: "Renamed Name"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
tag: "tbody"
|
||||
}
|
||||
]
|
||||
});
|
||||
const tbodyEl = tableET.children[1].el;
|
||||
const errorEl = contentEl.createDiv({
|
||||
cls: "error",
|
||||
attr: {
|
||||
style: "display: none;"
|
||||
}
|
||||
});
|
||||
new import_obsidian.Setting(contentEl).addButton((button) => {
|
||||
button.setButtonText("Rename all").setClass("mod-cta").onClick(() => {
|
||||
new ConfirmModal(
|
||||
this.app,
|
||||
"Confirm rename all",
|
||||
`Are you sure? This will rename all the ${this.state.renameTasks.length} images matched the pattern.`,
|
||||
() => {
|
||||
this.renameAll();
|
||||
this.close();
|
||||
}
|
||||
).open();
|
||||
});
|
||||
}).addButton((button) => {
|
||||
button.setButtonText("Cancel").onClick(() => {
|
||||
this.close();
|
||||
});
|
||||
});
|
||||
}
|
||||
onClose() {
|
||||
const { contentEl } = this;
|
||||
contentEl.empty();
|
||||
this.onCloseExtra();
|
||||
}
|
||||
renameAll() {
|
||||
return __async(this, null, function* () {
|
||||
debugLog("renameAll", this.state);
|
||||
for (const task of this.state.renameTasks) {
|
||||
yield this.renameFunc(task.file, task.name);
|
||||
}
|
||||
});
|
||||
}
|
||||
matchImageNames(tbodyEl) {
|
||||
const { state } = this;
|
||||
const renameTasks = [];
|
||||
tbodyEl.empty();
|
||||
const fileCache = this.app.metadataCache.getFileCache(this.activeFile);
|
||||
if (!fileCache || !fileCache.embeds)
|
||||
return;
|
||||
const namePatternRegex = new RegExp(state.namePattern, "g");
|
||||
const extPatternRegex = new RegExp(state.extPattern);
|
||||
fileCache.embeds.forEach((embed) => {
|
||||
const file = this.app.metadataCache.getFirstLinkpathDest(embed.link, this.activeFile.path);
|
||||
if (!file) {
|
||||
console.warn("file not found", embed.link);
|
||||
return;
|
||||
}
|
||||
if (state.extPattern) {
|
||||
const m0 = extPatternRegex.exec(file.extension);
|
||||
if (!m0)
|
||||
return;
|
||||
}
|
||||
const stem = file.basename;
|
||||
namePatternRegex.lastIndex = 0;
|
||||
const m1 = namePatternRegex.exec(stem);
|
||||
if (!m1)
|
||||
return;
|
||||
let renamedName = file.name;
|
||||
if (state.nameReplace) {
|
||||
namePatternRegex.lastIndex = 0;
|
||||
renamedName = stem.replace(namePatternRegex, state.nameReplace);
|
||||
renamedName = `${renamedName}.${file.extension}`;
|
||||
}
|
||||
renameTasks.push({
|
||||
file,
|
||||
name: renamedName
|
||||
});
|
||||
createElementTree(tbodyEl, {
|
||||
tag: "tr",
|
||||
children: [
|
||||
{
|
||||
tag: "td",
|
||||
children: [
|
||||
{
|
||||
tag: "span",
|
||||
text: file.name
|
||||
},
|
||||
{
|
||||
tag: "div",
|
||||
text: file.path,
|
||||
attr: {
|
||||
class: "file-path"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
tag: "td",
|
||||
children: [
|
||||
{
|
||||
tag: "span",
|
||||
text: renamedName
|
||||
},
|
||||
{
|
||||
tag: "div",
|
||||
text: path.join(file.parent.path, renamedName),
|
||||
attr: {
|
||||
class: "file-path"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
});
|
||||
debugLog("new renameTasks", renameTasks);
|
||||
state.renameTasks = renameTasks;
|
||||
}
|
||||
};
|
||||
var ConfirmModal = class extends import_obsidian.Modal {
|
||||
constructor(app, title, message, onConfirm) {
|
||||
super(app);
|
||||
this.title = title;
|
||||
this.message = message;
|
||||
this.onConfirm = onConfirm;
|
||||
}
|
||||
onOpen() {
|
||||
const { contentEl, titleEl } = this;
|
||||
titleEl.setText(this.title);
|
||||
contentEl.createEl("p", {
|
||||
text: this.message
|
||||
});
|
||||
new import_obsidian.Setting(contentEl).addButton((button) => {
|
||||
button.setButtonText("Yes").setClass("mod-warning").onClick(() => {
|
||||
this.onConfirm();
|
||||
this.close();
|
||||
});
|
||||
}).addButton((button) => {
|
||||
button.setButtonText("No").onClick(() => {
|
||||
this.close();
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// src/template.ts
|
||||
var dateTmplRegex = /{{DATE:([^}]+)}}/gm;
|
||||
var frontmatterTmplRegex = /{{frontmatter:([^}]+)}}/gm;
|
||||
var replaceDateVar = (s, date) => {
|
||||
const m = dateTmplRegex.exec(s);
|
||||
if (!m)
|
||||
return s;
|
||||
return s.replace(m[0], date.format(m[1]));
|
||||
};
|
||||
var replaceFrontmatterVar = (s, frontmatter) => {
|
||||
if (!frontmatter)
|
||||
return s;
|
||||
const m = frontmatterTmplRegex.exec(s);
|
||||
if (!m)
|
||||
return s;
|
||||
return s.replace(m[0], frontmatter[m[1]] || "");
|
||||
};
|
||||
var renderTemplate = (tmpl, data, frontmatter) => {
|
||||
const now = window.moment();
|
||||
let text = tmpl;
|
||||
let newtext;
|
||||
while ((newtext = replaceDateVar(text, now)) != text) {
|
||||
text = newtext;
|
||||
}
|
||||
while ((newtext = replaceFrontmatterVar(text, frontmatter)) != text) {
|
||||
text = newtext;
|
||||
}
|
||||
text = text.replace(/{{imageNameKey}}/gm, data.imageNameKey).replace(/{{fileName}}/gm, data.fileName).replace(/{{dirName}}/gm, data.dirName).replace(/{{firstHeading}}/gm, data.firstHeading);
|
||||
return text;
|
||||
};
|
||||
|
||||
// src/main.ts
|
||||
var DEFAULT_SETTINGS = {
|
||||
imageNamePattern: "{{fileName}}",
|
||||
dupNumberAtStart: false,
|
||||
dupNumberDelimiter: "-",
|
||||
dupNumberAlways: false,
|
||||
autoRename: false,
|
||||
handleAllAttachments: false,
|
||||
excludeExtensionPattern: "",
|
||||
disableRenameNotice: false
|
||||
};
|
||||
var PASTED_IMAGE_PREFIX = "Pasted image ";
|
||||
var PasteImageRenamePlugin = class extends import_obsidian2.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.modals = [];
|
||||
}
|
||||
onload() {
|
||||
return __async(this, null, function* () {
|
||||
const pkg = require_package();
|
||||
console.log(`Plugin loading: ${pkg.name} ${pkg.version} BUILD_ENV=${"production"}`);
|
||||
yield this.loadSettings();
|
||||
this.registerEvent(
|
||||
this.app.vault.on("create", (file) => {
|
||||
if (!(file instanceof import_obsidian2.TFile))
|
||||
return;
|
||||
const timeGapMs = new Date().getTime() - file.stat.ctime;
|
||||
if (timeGapMs > 1e3)
|
||||
return;
|
||||
if (isMarkdownFile(file))
|
||||
return;
|
||||
if (isPastedImage(file)) {
|
||||
debugLog("pasted image created", file);
|
||||
this.startRenameProcess(file, this.settings.autoRename);
|
||||
} else {
|
||||
if (this.settings.handleAllAttachments) {
|
||||
debugLog("handleAllAttachments for file", file);
|
||||
if (this.testExcludeExtension(file)) {
|
||||
debugLog("excluded file by ext", file);
|
||||
return;
|
||||
}
|
||||
this.startRenameProcess(file, this.settings.autoRename);
|
||||
}
|
||||
}
|
||||
})
|
||||
);
|
||||
const startBatchRenameProcess = () => {
|
||||
this.openBatchRenameModal();
|
||||
};
|
||||
this.addCommand({
|
||||
id: "batch-rename-embeded-files",
|
||||
name: "Batch rename embeded files (in the current file)",
|
||||
callback: startBatchRenameProcess
|
||||
});
|
||||
if (DEBUG) {
|
||||
this.addRibbonIcon("wand-glyph", "Batch rename embeded files", startBatchRenameProcess);
|
||||
}
|
||||
const batchRenameAllImages = () => {
|
||||
this.batchRenameAllImages();
|
||||
};
|
||||
this.addCommand({
|
||||
id: "batch-rename-all-images",
|
||||
name: "Batch rename all images instantly (in the current file)",
|
||||
callback: batchRenameAllImages
|
||||
});
|
||||
if (DEBUG) {
|
||||
this.addRibbonIcon("wand-glyph", "Batch rename all images instantly (in the current file)", batchRenameAllImages);
|
||||
}
|
||||
this.addSettingTab(new SettingTab(this.app, this));
|
||||
});
|
||||
}
|
||||
startRenameProcess(file, autoRename = false) {
|
||||
return __async(this, null, function* () {
|
||||
const activeFile = this.getActiveFile();
|
||||
if (!activeFile) {
|
||||
new import_obsidian2.Notice("Error: No active file found.");
|
||||
return;
|
||||
}
|
||||
const { stem, newName, isMeaningful } = this.generateNewName(file, activeFile);
|
||||
debugLog("generated newName:", newName, isMeaningful);
|
||||
if (!isMeaningful || !autoRename) {
|
||||
this.openRenameModal(file, isMeaningful ? stem : "", activeFile.path);
|
||||
return;
|
||||
}
|
||||
this.renameFile(file, newName, activeFile.path, true);
|
||||
});
|
||||
}
|
||||
renameFile(file, inputNewName, sourcePath, replaceCurrentLine) {
|
||||
return __async(this, null, function* () {
|
||||
const { name: newName } = yield this.deduplicateNewName(inputNewName, file);
|
||||
debugLog("deduplicated newName:", newName);
|
||||
const originName = file.name;
|
||||
const linkText = this.app.fileManager.generateMarkdownLink(file, sourcePath);
|
||||
const newPath = path.join(file.parent.path, newName);
|
||||
try {
|
||||
yield this.app.fileManager.renameFile(file, newPath);
|
||||
} catch (err) {
|
||||
new import_obsidian2.Notice(`Failed to rename ${newName}: ${err}`);
|
||||
throw err;
|
||||
}
|
||||
if (!replaceCurrentLine) {
|
||||
return;
|
||||
}
|
||||
const newLinkText = this.app.fileManager.generateMarkdownLink(file, sourcePath);
|
||||
debugLog("replace text", linkText, newLinkText);
|
||||
const editor = this.getActiveEditor();
|
||||
if (!editor) {
|
||||
new import_obsidian2.Notice(`Failed to rename ${newName}: no active editor`);
|
||||
return;
|
||||
}
|
||||
const cursor = editor.getCursor();
|
||||
const line = editor.getLine(cursor.line);
|
||||
const replacedLine = line.replace(linkText, newLinkText);
|
||||
debugLog("current line -> replaced line", line, replacedLine);
|
||||
editor.transaction({
|
||||
changes: [
|
||||
{
|
||||
from: __spreadProps(__spreadValues({}, cursor), { ch: 0 }),
|
||||
to: __spreadProps(__spreadValues({}, cursor), { ch: line.length }),
|
||||
text: replacedLine
|
||||
}
|
||||
]
|
||||
});
|
||||
if (!this.settings.disableRenameNotice) {
|
||||
new import_obsidian2.Notice(`Renamed ${originName} to ${newName}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
openRenameModal(file, newName, sourcePath) {
|
||||
const modal = new ImageRenameModal(
|
||||
this.app,
|
||||
file,
|
||||
newName,
|
||||
(confirmedName) => {
|
||||
debugLog("confirmedName:", confirmedName);
|
||||
this.renameFile(file, confirmedName, sourcePath, true);
|
||||
},
|
||||
() => {
|
||||
this.modals.splice(this.modals.indexOf(modal), 1);
|
||||
}
|
||||
);
|
||||
this.modals.push(modal);
|
||||
modal.open();
|
||||
debugLog("modals count", this.modals.length);
|
||||
}
|
||||
openBatchRenameModal() {
|
||||
const activeFile = this.getActiveFile();
|
||||
const modal = new ImageBatchRenameModal(
|
||||
this.app,
|
||||
activeFile,
|
||||
(file, name) => __async(this, null, function* () {
|
||||
yield this.renameFile(file, name, activeFile.path);
|
||||
}),
|
||||
() => {
|
||||
this.modals.splice(this.modals.indexOf(modal), 1);
|
||||
}
|
||||
);
|
||||
this.modals.push(modal);
|
||||
modal.open();
|
||||
}
|
||||
batchRenameAllImages() {
|
||||
return __async(this, null, function* () {
|
||||
const activeFile = this.getActiveFile();
|
||||
const fileCache = this.app.metadataCache.getFileCache(activeFile);
|
||||
if (!fileCache || !fileCache.embeds)
|
||||
return;
|
||||
const extPatternRegex = /jpe?g|png|gif|tiff|webp/i;
|
||||
for (const embed of fileCache.embeds) {
|
||||
const file = this.app.metadataCache.getFirstLinkpathDest(embed.link, activeFile.path);
|
||||
if (!file) {
|
||||
console.warn("file not found", embed.link);
|
||||
return;
|
||||
}
|
||||
const m0 = extPatternRegex.exec(file.extension);
|
||||
if (!m0)
|
||||
return;
|
||||
const { newName, isMeaningful } = this.generateNewName(file, activeFile);
|
||||
debugLog("generated newName:", newName, isMeaningful);
|
||||
if (!isMeaningful) {
|
||||
new import_obsidian2.Notice("Failed to batch rename images: the generated name is not meaningful");
|
||||
break;
|
||||
}
|
||||
yield this.renameFile(file, newName, activeFile.path, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
// returns a new name for the input file, with extension
|
||||
generateNewName(file, activeFile) {
|
||||
let imageNameKey = "";
|
||||
let firstHeading = "";
|
||||
let frontmatter;
|
||||
const fileCache = this.app.metadataCache.getFileCache(activeFile);
|
||||
if (fileCache) {
|
||||
debugLog("frontmatter", fileCache.frontmatter);
|
||||
frontmatter = fileCache.frontmatter;
|
||||
imageNameKey = (frontmatter == null ? void 0 : frontmatter.imageNameKey) || "";
|
||||
firstHeading = getFirstHeading(fileCache.headings);
|
||||
} else {
|
||||
console.warn("could not get file cache from active file", activeFile.name);
|
||||
}
|
||||
const stem = renderTemplate(
|
||||
this.settings.imageNamePattern,
|
||||
{
|
||||
imageNameKey,
|
||||
fileName: activeFile.basename,
|
||||
dirName: activeFile.parent.name,
|
||||
firstHeading
|
||||
},
|
||||
frontmatter
|
||||
);
|
||||
const meaninglessRegex = new RegExp(`[${this.settings.dupNumberDelimiter}\\s]`, "gm");
|
||||
return {
|
||||
stem,
|
||||
newName: stem + "." + file.extension,
|
||||
isMeaningful: stem.replace(meaninglessRegex, "") !== ""
|
||||
};
|
||||
}
|
||||
// newName: foo.ext
|
||||
deduplicateNewName(newName, file) {
|
||||
return __async(this, null, function* () {
|
||||
const dir = file.parent.path;
|
||||
const listed = yield this.app.vault.adapter.list(dir);
|
||||
debugLog("sibling files", listed);
|
||||
const newNameExt = path.extension(newName), newNameStem = newName.slice(0, newName.length - newNameExt.length - 1), newNameStemEscaped = escapeRegExp(newNameStem), delimiter = this.settings.dupNumberDelimiter, delimiterEscaped = escapeRegExp(delimiter);
|
||||
let dupNameRegex;
|
||||
if (this.settings.dupNumberAtStart) {
|
||||
dupNameRegex = new RegExp(
|
||||
`^(?<number>\\d+)${delimiterEscaped}(?<name>${newNameStemEscaped})\\.${newNameExt}$`
|
||||
);
|
||||
} else {
|
||||
dupNameRegex = new RegExp(
|
||||
`^(?<name>${newNameStemEscaped})${delimiterEscaped}(?<number>\\d+)\\.${newNameExt}$`
|
||||
);
|
||||
}
|
||||
debugLog("dupNameRegex", dupNameRegex);
|
||||
const dupNameNumbers = [];
|
||||
let isNewNameExist = false;
|
||||
for (let sibling of listed.files) {
|
||||
sibling = path.basename(sibling);
|
||||
if (sibling == newName) {
|
||||
isNewNameExist = true;
|
||||
continue;
|
||||
}
|
||||
const m = dupNameRegex.exec(sibling);
|
||||
if (!m)
|
||||
continue;
|
||||
dupNameNumbers.push(parseInt(m.groups.number));
|
||||
}
|
||||
if (isNewNameExist || this.settings.dupNumberAlways) {
|
||||
const newNumber = dupNameNumbers.length > 0 ? Math.max(...dupNameNumbers) + 1 : 1;
|
||||
if (this.settings.dupNumberAtStart) {
|
||||
newName = `${newNumber}${delimiter}${newNameStem}.${newNameExt}`;
|
||||
} else {
|
||||
newName = `${newNameStem}${delimiter}${newNumber}.${newNameExt}`;
|
||||
}
|
||||
}
|
||||
return {
|
||||
name: newName,
|
||||
stem: newName.slice(0, newName.length - newNameExt.length - 1),
|
||||
extension: newNameExt
|
||||
};
|
||||
});
|
||||
}
|
||||
getActiveFile() {
|
||||
const view = this.app.workspace.getActiveViewOfType(import_obsidian2.MarkdownView);
|
||||
const file = view == null ? void 0 : view.file;
|
||||
debugLog("active file", file == null ? void 0 : file.path);
|
||||
return file;
|
||||
}
|
||||
getActiveEditor() {
|
||||
const view = this.app.workspace.getActiveViewOfType(import_obsidian2.MarkdownView);
|
||||
return view == null ? void 0 : view.editor;
|
||||
}
|
||||
onunload() {
|
||||
this.modals.map((modal) => modal.close());
|
||||
}
|
||||
testExcludeExtension(file) {
|
||||
const pattern = this.settings.excludeExtensionPattern;
|
||||
if (!pattern)
|
||||
return false;
|
||||
return new RegExp(pattern).test(file.extension);
|
||||
}
|
||||
loadSettings() {
|
||||
return __async(this, null, function* () {
|
||||
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
||||
});
|
||||
}
|
||||
saveSettings() {
|
||||
return __async(this, null, function* () {
|
||||
yield this.saveData(this.settings);
|
||||
});
|
||||
}
|
||||
};
|
||||
function getFirstHeading(headings) {
|
||||
if (headings && headings.length > 0) {
|
||||
for (const heading of headings) {
|
||||
if (heading.level === 1) {
|
||||
return heading.heading;
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
function isPastedImage(file) {
|
||||
if (file instanceof import_obsidian2.TFile) {
|
||||
if (file.name.startsWith(PASTED_IMAGE_PREFIX)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function isMarkdownFile(file) {
|
||||
if (file instanceof import_obsidian2.TFile) {
|
||||
if (file.extension === "md") {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
var ImageRenameModal = class extends import_obsidian2.Modal {
|
||||
constructor(app, src, stem, renameFunc, onClose) {
|
||||
super(app);
|
||||
this.src = src;
|
||||
this.stem = stem;
|
||||
this.renameFunc = renameFunc;
|
||||
this.onCloseExtra = onClose;
|
||||
}
|
||||
onOpen() {
|
||||
this.containerEl.addClass("image-rename-modal");
|
||||
const { contentEl, titleEl } = this;
|
||||
titleEl.setText("Rename image");
|
||||
const imageContainer = contentEl.createDiv({
|
||||
cls: "image-container"
|
||||
});
|
||||
imageContainer.createEl("img", {
|
||||
attr: {
|
||||
src: this.app.vault.getResourcePath(this.src)
|
||||
}
|
||||
});
|
||||
let stem = this.stem;
|
||||
const ext = this.src.extension;
|
||||
const getNewName = (stem2) => stem2 + "." + ext;
|
||||
const getNewPath = (stem2) => path.join(this.src.parent.path, getNewName(stem2));
|
||||
const infoET = createElementTree(contentEl, {
|
||||
tag: "ul",
|
||||
cls: "info",
|
||||
children: [
|
||||
{
|
||||
tag: "li",
|
||||
children: [
|
||||
{
|
||||
tag: "span",
|
||||
text: "Origin path"
|
||||
},
|
||||
{
|
||||
tag: "span",
|
||||
text: this.src.path
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
tag: "li",
|
||||
children: [
|
||||
{
|
||||
tag: "span",
|
||||
text: "New path"
|
||||
},
|
||||
{
|
||||
tag: "span",
|
||||
text: getNewPath(stem)
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
const doRename = () => __async(this, null, function* () {
|
||||
debugLog("doRename", `stem=${stem}`);
|
||||
this.renameFunc(getNewName(stem));
|
||||
});
|
||||
const nameSetting = new import_obsidian2.Setting(contentEl).setName("New name").setDesc("Please input the new name for the image (without extension)").addText((text) => text.setValue(stem).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
stem = sanitizer.filename(value);
|
||||
infoET.children[1].children[1].el.innerText = getNewPath(stem);
|
||||
})
|
||||
));
|
||||
const nameInputEl = nameSetting.controlEl.children[0];
|
||||
nameInputEl.focus();
|
||||
const nameInputState = lockInputMethodComposition(nameInputEl);
|
||||
nameInputEl.addEventListener("keydown", (e) => __async(this, null, function* () {
|
||||
if (e.key === "Enter" && !nameInputState.lock) {
|
||||
e.preventDefault();
|
||||
if (!stem) {
|
||||
errorEl.innerText = 'Error: "New name" could not be empty';
|
||||
errorEl.style.display = "block";
|
||||
return;
|
||||
}
|
||||
doRename();
|
||||
this.close();
|
||||
}
|
||||
}));
|
||||
const errorEl = contentEl.createDiv({
|
||||
cls: "error",
|
||||
attr: {
|
||||
style: "display: none;"
|
||||
}
|
||||
});
|
||||
new import_obsidian2.Setting(contentEl).addButton((button) => {
|
||||
button.setButtonText("Rename").onClick(() => {
|
||||
doRename();
|
||||
this.close();
|
||||
});
|
||||
}).addButton((button) => {
|
||||
button.setButtonText("Cancel").onClick(() => {
|
||||
this.close();
|
||||
});
|
||||
});
|
||||
}
|
||||
onClose() {
|
||||
const { contentEl } = this;
|
||||
contentEl.empty();
|
||||
this.onCloseExtra();
|
||||
}
|
||||
};
|
||||
var imageNamePatternDesc = `
|
||||
The pattern indicates how the new name should be generated.
|
||||
|
||||
Available variables:
|
||||
- {{fileName}}: name of the active file, without ".md" extension.
|
||||
- {{imageNameKey}}: this variable is read from the markdown file's frontmatter, from the same key "imageNameKey".
|
||||
- {{DATE:$FORMAT}}: use "$FORMAT" to format the current date, "$FORMAT" must be a Moment.js format string, e.g. {{DATE:YYYY-MM-DD}}.
|
||||
|
||||
Here are some examples from pattern to image names (repeat in sequence), variables: fileName = "My note", imageNameKey = "foo":
|
||||
- {{fileName}}: My note, My note-1, My note-2
|
||||
- {{imageNameKey}}: foo, foo-1, foo-2
|
||||
- {{imageNameKey}}-{{DATE:YYYYMMDD}}: foo-20220408, foo-20220408-1, foo-20220408-2
|
||||
`;
|
||||
var SettingTab = class extends import_obsidian2.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
display() {
|
||||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
new import_obsidian2.Setting(containerEl).setName("Image name pattern").setDesc(imageNamePatternDesc).setClass("long-description-setting-item").addText((text) => text.setPlaceholder("{{imageNameKey}}").setValue(this.plugin.settings.imageNamePattern).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.plugin.settings.imageNamePattern = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})
|
||||
));
|
||||
new import_obsidian2.Setting(containerEl).setName("Duplicate number at start (or end)").setDesc(`If enabled, duplicate number will be added at the start as prefix for the image name, otherwise it will be added at the end as suffix for the image name.`).addToggle((toggle) => toggle.setValue(this.plugin.settings.dupNumberAtStart).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.plugin.settings.dupNumberAtStart = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})
|
||||
));
|
||||
new import_obsidian2.Setting(containerEl).setName("Duplicate number delimiter").setDesc(`The delimiter to generate the number prefix/suffix for duplicated names. For example, if the value is "-", the suffix will be like "-1", "-2", "-3", and the prefix will be like "1-", "2-", "3-". Only characters that are valid in file names are allowed.`).addText((text) => text.setValue(this.plugin.settings.dupNumberDelimiter).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.plugin.settings.dupNumberDelimiter = sanitizer.delimiter(value);
|
||||
yield this.plugin.saveSettings();
|
||||
})
|
||||
));
|
||||
new import_obsidian2.Setting(containerEl).setName("Always add duplicate number").setDesc(`If enabled, duplicate number will always be added to the image name. Otherwise, it will only be added when the name is duplicated.`).addToggle((toggle) => toggle.setValue(this.plugin.settings.dupNumberAlways).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.plugin.settings.dupNumberAlways = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})
|
||||
));
|
||||
new import_obsidian2.Setting(containerEl).setName("Auto rename").setDesc(`By default, the rename modal will always be shown to confirm before renaming, if this option is set, the image will be auto renamed after pasting.`).addToggle((toggle) => toggle.setValue(this.plugin.settings.autoRename).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.plugin.settings.autoRename = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})
|
||||
));
|
||||
new import_obsidian2.Setting(containerEl).setName("Handle all attachments").setDesc(`By default, the plugin only handles images that starts with "Pasted image " in name,
|
||||
which is the prefix Obsidian uses to create images from pasted content.
|
||||
If this option is set, the plugin will handle all attachments that are created in the vault.`).addToggle((toggle) => toggle.setValue(this.plugin.settings.handleAllAttachments).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.plugin.settings.handleAllAttachments = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})
|
||||
));
|
||||
new import_obsidian2.Setting(containerEl).setName("Exclude extension pattern").setDesc(`This option is only useful when "Handle all attachments" is enabled.
|
||||
Write a Regex pattern to exclude certain extensions from being handled. Only the first line will be used.`).setClass("single-line-textarea").addTextArea((text) => text.setPlaceholder("docx?|xlsx?|pptx?|zip|rar").setValue(this.plugin.settings.excludeExtensionPattern).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.plugin.settings.excludeExtensionPattern = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})
|
||||
));
|
||||
new import_obsidian2.Setting(containerEl).setName("Disable rename notice").setDesc(`Turn off this option if you don't want to see the notice when renaming images.
|
||||
Note that Obsidian may display a notice when a link has changed, this option cannot disable that.`).addToggle((toggle) => toggle.setValue(this.plugin.settings.disableRenameNotice).onChange(
|
||||
(value) => __async(this, null, function* () {
|
||||
this.plugin.settings.disableRenameNotice = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
/* nosourcemap */
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-paste-image-rename",
|
||||
"name": "Paste image rename",
|
||||
"version": "1.6.1",
|
||||
"minAppVersion": "0.12.0",
|
||||
"description": "Rename pasted images and all the other attchments added to the vault",
|
||||
"author": "Reorx",
|
||||
"authorUrl": "https://github.com/reorx",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
/* src/styles.css */
|
||||
:root {
|
||||
--shadow-color: 0deg 0% 0%;
|
||||
--shadow-elevation-medium:
|
||||
0.5px 0.5px 0.7px hsl(var(--shadow-color) / 0.14),
|
||||
1.1px 1.1px 1.5px -0.9px hsl(var(--shadow-color) / 0.12),
|
||||
2.4px 2.5px 3.3px -1.8px hsl(var(--shadow-color) / 0.1),
|
||||
5.3px 5.6px 7.3px -2.7px hsl(var(--shadow-color) / 0.09),
|
||||
11px 11.4px 15.1px -3.6px hsl(var(--shadow-color) / 0.07);
|
||||
}
|
||||
.image-rename-modal .modal {
|
||||
width: 65%;
|
||||
min-width: 600px;
|
||||
}
|
||||
.image-rename-modal .modal-content {
|
||||
padding: 10px 5px;
|
||||
}
|
||||
.image-rename-modal .image-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.image-rename-modal .info {
|
||||
padding: 10px 0;
|
||||
color: var(--text-muted);
|
||||
user-select: text;
|
||||
}
|
||||
.image-rename-modal .info li > span:nth-of-type(1) {
|
||||
display: inline-block;
|
||||
width: 6em;
|
||||
margin-right: .5em;
|
||||
}
|
||||
.image-rename-modal .info li > span:nth-of-type(1):after {
|
||||
content: ":";
|
||||
float: right;
|
||||
}
|
||||
.image-rename-modal .image-container img {
|
||||
display: block;
|
||||
max-height: 300px;
|
||||
box-shadow: var(--shadow-elevation-medium);
|
||||
}
|
||||
.image-rename-modal .setting-item-control input {
|
||||
min-width: 300px;
|
||||
}
|
||||
.image-rename-modal .error {
|
||||
border: 1px solid rgb(201, 90, 90);
|
||||
color: rgb(134, 22, 22);
|
||||
padding: 10px;
|
||||
}
|
||||
.image-rename-modal table {
|
||||
font-size: .9em;
|
||||
line-height: 1.8;
|
||||
margin-bottom: 1.5em;
|
||||
user-select: text;
|
||||
}
|
||||
.image-rename-modal table td {
|
||||
padding-right: 1em;
|
||||
}
|
||||
.image-rename-modal table thead td {
|
||||
font-weight: 700;
|
||||
}
|
||||
.image-rename-modal table tbody td .file-path {
|
||||
font-size: .8em;
|
||||
color: var(--text-faint);
|
||||
line-height: 1;
|
||||
}
|
||||
.long-description-setting-item {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.long-description-setting-item .setting-item-description {
|
||||
white-space: pre-wrap;
|
||||
line-height: 1.3em;
|
||||
}
|
||||
.long-description-setting-item .setting-item-control {
|
||||
padding-top: 10px;
|
||||
}
|
||||
.long-description-setting-item .setting-item-control input {
|
||||
min-width: 300px;
|
||||
width: 50%;
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"presets": {
|
||||
"this_file": "path includes {{query.file.path}}",
|
||||
"this_folder": "folder includes {{query.file.folder}}",
|
||||
"this_folder_only": "filter by function task.file.folder === query.file.folder",
|
||||
"this_root": "root includes {{query.file.root}}",
|
||||
"hide_date_fields": "# Hide any values for all date fields\nhide due date\nhide scheduled date\nhide start date\nhide created date\nhide done date\nhide cancelled date",
|
||||
"hide_non_date_fields": "# Hide all the non-date fields, but not tags\nhide id\nhide depends on\nhide recurrence rule\nhide on completion\nhide priority",
|
||||
"hide_query_elements": "# Hide toolbar, postpone, edit and backlinks\nhide toolbar\nhide postpone button\nhide edit button\nhide backlinks",
|
||||
"hide_everything": "# Hide everything except description and any tags\npreset hide_date_fields\npreset hide_non_date_fields\npreset hide_query_elements"
|
||||
},
|
||||
"globalQuery": "",
|
||||
"globalFilter": "",
|
||||
"removeGlobalFilter": false,
|
||||
"taskFormat": "tasksPluginEmoji",
|
||||
"setCreatedDate": false,
|
||||
"setDoneDate": true,
|
||||
"setCancelledDate": true,
|
||||
"autoSuggestInEditor": true,
|
||||
"autoSuggestMinMatch": 0,
|
||||
"autoSuggestMaxItems": 20,
|
||||
"provideAccessKeys": true,
|
||||
"useFilenameAsScheduledDate": false,
|
||||
"filenameAsScheduledDateFormat": "",
|
||||
"filenameAsDateFolders": [],
|
||||
"recurrenceOnNextLine": false,
|
||||
"removeScheduledDateOnRecurrence": false,
|
||||
"searchResults": {
|
||||
"taskCountLocation": "bottom"
|
||||
},
|
||||
"statusSettings": {
|
||||
"coreStatuses": [
|
||||
{
|
||||
"symbol": " ",
|
||||
"name": "Todo",
|
||||
"nextStatusSymbol": "x",
|
||||
"availableAsCommand": true,
|
||||
"type": "TODO"
|
||||
},
|
||||
{
|
||||
"symbol": "x",
|
||||
"name": "Done",
|
||||
"nextStatusSymbol": " ",
|
||||
"availableAsCommand": true,
|
||||
"type": "DONE"
|
||||
}
|
||||
],
|
||||
"customStatuses": [
|
||||
{
|
||||
"symbol": "/",
|
||||
"name": "In Progress",
|
||||
"nextStatusSymbol": "x",
|
||||
"availableAsCommand": true,
|
||||
"type": "IN_PROGRESS"
|
||||
},
|
||||
{
|
||||
"symbol": "-",
|
||||
"name": "Cancelled",
|
||||
"nextStatusSymbol": " ",
|
||||
"availableAsCommand": true,
|
||||
"type": "CANCELLED"
|
||||
}
|
||||
]
|
||||
},
|
||||
"isShownInEditModal": {
|
||||
"priority": true,
|
||||
"recurrence": true,
|
||||
"due": true,
|
||||
"scheduled": true,
|
||||
"start": true,
|
||||
"before_this": true,
|
||||
"after_this": true,
|
||||
"status": true,
|
||||
"created": true,
|
||||
"done": true,
|
||||
"cancelled": true
|
||||
},
|
||||
"dismissedNotices": {
|
||||
"live-preview-callout-warning": false
|
||||
},
|
||||
"features": {
|
||||
"INTERNAL_TESTING_ENABLED_BY_DEFAULT": true
|
||||
},
|
||||
"generalSettings": {},
|
||||
"headingOpened": {
|
||||
"Core Statuses": true,
|
||||
"Custom Statuses": true
|
||||
},
|
||||
"debugSettings": {
|
||||
"ignoreSortInstructions": false,
|
||||
"showTaskHiddenData": false,
|
||||
"recordTimings": false
|
||||
},
|
||||
"loggingOptions": {
|
||||
"minLevels": {
|
||||
"": "info",
|
||||
"tasks": "info",
|
||||
"tasks.Cache": "info",
|
||||
"tasks.Events": "info",
|
||||
"tasks.File": "info",
|
||||
"tasks.Query": "info",
|
||||
"tasks.Task": "info"
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "obsidian-tasks-plugin",
|
||||
"name": "Tasks",
|
||||
"version": "8.2.2",
|
||||
"minAppVersion": "1.8.7",
|
||||
"description": "Track tasks across your vault. Supports due dates, recurring tasks, done dates, sub-set of checklist items, and filtering.",
|
||||
"helpUrl": "https://publish.obsidian.md/tasks/",
|
||||
"author": "Clare Macrae and Ilyas Landikov (created by Martin Schenck)",
|
||||
"authorUrl": "https://github.com/obsidian-tasks-group",
|
||||
"fundingUrl": "https://github.com/sponsors/claremacrae",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"useCache": true,
|
||||
"hideExcluded": false,
|
||||
"recencyBoost": "0",
|
||||
"downrankedFoldersFilters": [],
|
||||
"ignoreDiacritics": true,
|
||||
"ignoreArabicDiacritics": false,
|
||||
"indexedFileTypes": [],
|
||||
"indexFilesWithoutExtension": false,
|
||||
"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
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"id": "omnisearch",
|
||||
"name": "Omnisearch",
|
||||
"version": "1.29.3",
|
||||
"minAppVersion": "1.7.2",
|
||||
"description": "A search engine that just works.",
|
||||
"author": "Simon Cambier",
|
||||
"authorUrl": "https://scambier.xyz",
|
||||
"fundingUrl": {
|
||||
"Github": "https://github.com/sponsors/scambier",
|
||||
"Ko-fi": "https://ko-fi.com/scambier"
|
||||
},
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
.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;
|
||||
}
|
||||
|
||||
.omnisearch-result-highlight .cm-content ::selection,
|
||||
.omnisearch-result-highlight .cm-line::selection {
|
||||
background-color: var(
|
||||
--omnisearch-highlight-color,
|
||||
rgba(222, 183, 110, 1)
|
||||
) !important;
|
||||
color: var(--omnisearch-highlight-text-color, black) !important;
|
||||
}
|
||||
|
||||
.omnisearch-result-highlight .cm-selectionLayer .cm-selectionBackground {
|
||||
background-color: var(
|
||||
--omnisearch-highlight-color,
|
||||
rgba(222, 183, 110, 1)
|
||||
) !important;
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
{
|
||||
"recentFiles": [
|
||||
{
|
||||
"basename": "Secure Server Build",
|
||||
"path": "Linux/Security/Secure Server Build.md"
|
||||
},
|
||||
{
|
||||
"basename": "IP Address Tracking",
|
||||
"path": "IP Address Tracking.md"
|
||||
},
|
||||
{
|
||||
"basename": "Configuring Arr Stack",
|
||||
"path": "Application Install Notes/ArrStack - Testing/Configuring Arr Stack.md"
|
||||
},
|
||||
{
|
||||
"basename": "arrstack One-command media server (SonarrRadarrProwlarrqBittorrent behind a VPN). Now maintained as SparkBox → tomsparkbox.com",
|
||||
"path": "Application Install Notes/ArrStack - Testing/arrstack One-command media server (SonarrRadarrProwlarrqBittorrent behind a VPN). Now maintained as SparkBox → tomsparkbox.com.md"
|
||||
},
|
||||
{
|
||||
"basename": "wg-down.sh",
|
||||
"path": "Scripts/wireguard/wg-down.sh.md"
|
||||
},
|
||||
{
|
||||
"basename": "APT - Update and Upgrade",
|
||||
"path": "Scripts/APT - Update and Upgrade.md"
|
||||
},
|
||||
{
|
||||
"basename": "Initial Server Setup with Debian-Based Distributions",
|
||||
"path": "Linux/Security/Initial Server Setup with Debian-Based Distributions.md"
|
||||
},
|
||||
{
|
||||
"basename": "zshrc - Zsh aliases and functions",
|
||||
"path": "Linux/zshrc - Zsh aliases and functions.md"
|
||||
},
|
||||
{
|
||||
"basename": "SSH Config file for desktop",
|
||||
"path": "Linux/SSH Config file for desktop.md"
|
||||
},
|
||||
{
|
||||
"basename": "Automatic Deployment Rollback",
|
||||
"path": "Learning CI-CD/Automatic Deployment Rollback.md"
|
||||
},
|
||||
{
|
||||
"basename": "Build & Push to Gitea Container Registry First",
|
||||
"path": "Learning CI-CD/Build & Push to Gitea Container Registry First.md"
|
||||
},
|
||||
{
|
||||
"basename": "Handle Local Storage Path Differences",
|
||||
"path": "Learning CI-CD/Handle Local Storage Path Differences.md"
|
||||
},
|
||||
{
|
||||
"basename": "README",
|
||||
"path": "Desktop/Chemoi_Doc/dotfiles_samples/LoganDonley/README.md"
|
||||
},
|
||||
{
|
||||
"basename": "ChezmoiNotes",
|
||||
"path": "Desktop/Chemoi_Doc/ChezmoiNotes.md"
|
||||
},
|
||||
{
|
||||
"basename": "Installing Targus Display Driver",
|
||||
"path": "Desktop/Installing Targus Display Driver.md"
|
||||
},
|
||||
{
|
||||
"basename": "Asusctl",
|
||||
"path": "Desktop/Asusctl.md"
|
||||
},
|
||||
{
|
||||
"basename": "web-application-firewall-waf",
|
||||
"path": "Bookstack/web-application-firewall-waf.md"
|
||||
},
|
||||
{
|
||||
"basename": "scripts",
|
||||
"path": "Bookstack/scripts.md"
|
||||
},
|
||||
{
|
||||
"basename": "Hestia Setup",
|
||||
"path": "Application Install Notes/Hestia Setup.md"
|
||||
},
|
||||
{
|
||||
"basename": "Hermes agent Troubleshooting",
|
||||
"path": "Hermes agent Troubleshooting.md"
|
||||
},
|
||||
{
|
||||
"basename": "AI - Persona entries",
|
||||
"path": "AI - Persona entries.md"
|
||||
},
|
||||
{
|
||||
"basename": "rClone sync to OneDrive",
|
||||
"path": "Application Install Notes/rClone sync to OneDrive.md"
|
||||
},
|
||||
{
|
||||
"basename": "Hermes agent Troubleshooting",
|
||||
"path": "AI Brain/Hermes agent Troubleshooting.md"
|
||||
},
|
||||
{
|
||||
"basename": "Project_Docker_Boilerplates_Master",
|
||||
"path": "AI Brain/Project_Docker_Boilerplates_Master.md"
|
||||
},
|
||||
{
|
||||
"basename": "Initial Server Setup with Windows Server 2019",
|
||||
"path": "Microsoft Windows/Initial Server Setup with Windows Server 2019.md"
|
||||
},
|
||||
{
|
||||
"basename": "Git",
|
||||
"path": "Cheat Sheets/Git.md"
|
||||
},
|
||||
{
|
||||
"basename": "ARRSTACK CONFIG",
|
||||
"path": "Application Install Notes/ArrStack - Testing/ARRSTACK CONFIG.md"
|
||||
},
|
||||
{
|
||||
"basename": "Trilium Notes - Install Syncing Server and Desktop App",
|
||||
"path": "Application Install Notes/Docker Apps/Trilium Notes - Install Syncing Server and Desktop App.md"
|
||||
},
|
||||
{
|
||||
"basename": "Watchtower - Update Docker Containers Automatically 1",
|
||||
"path": "Application Install Notes/Docker Apps/Watchtower - Update Docker Containers Automatically 1.md"
|
||||
},
|
||||
{
|
||||
"basename": "Portainer",
|
||||
"path": "Application Install Notes/Docker Apps/Portainer.md"
|
||||
},
|
||||
{
|
||||
"basename": "CheckMK - Open Source Network, Server, and Machine Monitoring",
|
||||
"path": "Application Install Notes/Docker Apps/CheckMK - Open Source Network, Server, and Machine Monitoring.md"
|
||||
},
|
||||
{
|
||||
"basename": "Zabbix - Setup and Install",
|
||||
"path": "Application Install Notes/Docker Apps/Zabbix - Setup and Install.md"
|
||||
},
|
||||
{
|
||||
"basename": "wg-easy - install",
|
||||
"path": "Application Install Notes/Docker Apps/wg-easy - install.md"
|
||||
},
|
||||
{
|
||||
"basename": "Authelia - Setup and Install",
|
||||
"path": "Application Install Notes/Docker Apps/Authelia - Setup and Install.md"
|
||||
},
|
||||
{
|
||||
"basename": "Authentik - Install and Setup",
|
||||
"path": "Application Install Notes/Docker Apps/Authentik - Install and Setup.md"
|
||||
},
|
||||
{
|
||||
"basename": "AI - Persona entries",
|
||||
"path": "AI Brain/AI - Persona entries.md"
|
||||
},
|
||||
{
|
||||
"basename": "Docker Install Script",
|
||||
"path": "Application Install Notes/Docker Apps/Docker Install Script.md"
|
||||
},
|
||||
{
|
||||
"basename": "arrstack",
|
||||
"path": "Bookstack/arrstack.md"
|
||||
},
|
||||
{
|
||||
"basename": "docker",
|
||||
"path": "Bookstack/docker.md"
|
||||
}
|
||||
],
|
||||
"omittedPaths": [],
|
||||
"omittedTags": [],
|
||||
"updateOn": "file-open",
|
||||
"omitBookmarks": false
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "recent-files-obsidian",
|
||||
"name": "Recent Files",
|
||||
"version": "1.7.9",
|
||||
"minAppVersion": "0.16.3",
|
||||
"description": "List files by most recently opened.",
|
||||
"author": "Tony Grosinger",
|
||||
"authorUrl": "https://grosinger.net",
|
||||
"isDesktopOnly": false,
|
||||
"fundingUrl": {
|
||||
"Github Sponsor": "https://github.com/sponsors/tgrosinger",
|
||||
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
|
||||
"Paypal": "https://paypal.me/tgrosinger"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
.recent-files-file {
|
||||
.tree-item-spacer {
|
||||
flex-grow: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.recent-files-title {
|
||||
justify-content: flex-start;
|
||||
align-items: unset;
|
||||
}
|
||||
|
||||
.recent-files-file-delete {
|
||||
justify-content: right;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.recent-files-title:hover .recent-files-file-delete {
|
||||
display: flex;
|
||||
cursor: var(--cursor);
|
||||
}
|
||||
|
||||
.recent-files-file-delete:hover {
|
||||
color: var(--nav-item-color-hover);
|
||||
}
|
||||
|
||||
.recent-files-donation {
|
||||
width: 70%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.recent-files-donate-button {
|
||||
margin: 10px;
|
||||
}
|
||||
@@ -0,0 +1,512 @@
|
||||
/*
|
||||
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 __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
||||
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
||||
var __export = (target, all) => {
|
||||
__markAsModule(target);
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __reExport = (target, module2, desc) => {
|
||||
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||
for (let key of __getOwnPropNames(module2))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
||||
}
|
||||
return target;
|
||||
};
|
||||
var __toModule = (module2) => {
|
||||
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
||||
};
|
||||
var __publicField = (obj, key, value) => {
|
||||
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
||||
return value;
|
||||
};
|
||||
|
||||
// src/main.ts
|
||||
__export(exports, {
|
||||
default: () => SettingsSearch
|
||||
});
|
||||
var import_obsidian = __toModule(require("obsidian"));
|
||||
|
||||
// node_modules/monkey-around/mjs/index.js
|
||||
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);
|
||||
if (original)
|
||||
Object.setPrototypeOf(current, original);
|
||||
Object.setPrototypeOf(wrapper, current);
|
||||
obj[method] = wrapper;
|
||||
return remove;
|
||||
function wrapper(...args) {
|
||||
if (current === original && obj[method] === wrapper)
|
||||
remove();
|
||||
return current.apply(this, args);
|
||||
}
|
||||
function remove() {
|
||||
if (obj[method] === wrapper) {
|
||||
if (hadOwn)
|
||||
obj[method] = original;
|
||||
else
|
||||
delete obj[method];
|
||||
}
|
||||
if (current === original)
|
||||
return;
|
||||
current = original;
|
||||
Object.setPrototypeOf(wrapper, original || Function);
|
||||
}
|
||||
}
|
||||
|
||||
// src/main.ts
|
||||
var SettingsSearch = class extends import_obsidian.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
__publicField(this, "settingsSearchEl", createDiv("settings-search-container vertical-tab-header-group"));
|
||||
__publicField(this, "settingsResultsContainerEl", createDiv("settings-search-results-container vertical-tab-content"));
|
||||
__publicField(this, "settingsNavItemContainer", this.settingsSearchEl.createDiv("vertical-tab-header-group-items").createDiv("vertical-tab-nav-item settings-search-input"));
|
||||
__publicField(this, "settingsResultsEl");
|
||||
__publicField(this, "search");
|
||||
__publicField(this, "locale");
|
||||
__publicField(this, "resources", []);
|
||||
__publicField(this, "results", []);
|
||||
__publicField(this, "loaded", false);
|
||||
__publicField(this, "tabIndex", 0);
|
||||
__publicField(this, "pluginTabIndex", 0);
|
||||
__publicField(this, "seen", []);
|
||||
__publicField(this, "settingCache", new Map());
|
||||
__publicField(this, "searchAppended", false);
|
||||
__publicField(this, "activeIndex", -1);
|
||||
__publicField(this, "activeSetting");
|
||||
__publicField(this, "scope", new import_obsidian.Scope(this.app.scope));
|
||||
__publicField(this, "mobileContainers", []);
|
||||
}
|
||||
async onload() {
|
||||
(window["SettingsSearch"] = {
|
||||
addResources: this.addResources.bind(this),
|
||||
removeResources: this.removeResources.bind(this),
|
||||
removeTabResources: this.removeTabResources.bind(this)
|
||||
}) && this.register(() => delete window["SettingsSearch"]);
|
||||
this.app.workspace.onLayoutReady(async () => {
|
||||
this.settingsResultsContainerEl.createEl("h3", {
|
||||
text: "Settings Search Results"
|
||||
});
|
||||
this.settingsResultsEl = this.settingsResultsContainerEl.createDiv("settings-search-results");
|
||||
this.buildScope();
|
||||
this.buildSearch();
|
||||
this.buildResources();
|
||||
this.buildPluginResources();
|
||||
this.patchSettings();
|
||||
this.loaded = true;
|
||||
this.app.workspace.trigger("settings-search-loaded");
|
||||
});
|
||||
}
|
||||
buildResources() {
|
||||
const tab = this.app.setting.settingTabs[this.tabIndex];
|
||||
if (tab && tab.id !== void 0 && !this.seen.includes(tab.id)) {
|
||||
this.getTabResources(tab);
|
||||
this.tabIndex++;
|
||||
setTimeout(() => this.buildResources());
|
||||
}
|
||||
}
|
||||
buildPluginResources() {
|
||||
const tab = this.app.setting.pluginTabs[this.pluginTabIndex];
|
||||
if (tab) {
|
||||
this.getTabResources(tab);
|
||||
this.pluginTabIndex++;
|
||||
setTimeout(() => this.buildPluginResources());
|
||||
}
|
||||
}
|
||||
get manifests() {
|
||||
return Object.values(this.app.plugins.manifests);
|
||||
}
|
||||
addResourceToCache(resource) {
|
||||
if (!resource || !resource.text || !resource.name || !resource.tab) {
|
||||
return new Error("A valid resource must be provided.");
|
||||
}
|
||||
let name;
|
||||
if (resource.external) {
|
||||
name = createFragment((el) => {
|
||||
(0, import_obsidian.setIcon)(el.createSpan({
|
||||
attr: {
|
||||
"aria-label": "This setting was added by another plugin."
|
||||
}
|
||||
}), "info");
|
||||
el.createSpan({ text: resource.text });
|
||||
});
|
||||
} else {
|
||||
name = resource.text;
|
||||
}
|
||||
const setting = new import_obsidian.Setting(createDiv()).setName(name).setDesc(createFragment((e) => e.createDiv().innerHTML = resource.desc ?? ""));
|
||||
if (resource.external) {
|
||||
setting.settingEl.addClass("set-externally");
|
||||
}
|
||||
if (resource.tab == "community-plugins") {
|
||||
let plugin = this.manifests.find((p) => p.name == resource.text);
|
||||
if (plugin && this.app.plugins.getPlugin(plugin.id)?._loaded && this.app.setting.pluginTabs.find((t) => t.id == plugin.id)) {
|
||||
setting.addExtraButton((b) => {
|
||||
b.setTooltip(`Open ${resource.text} Settings`).onClick(() => {
|
||||
this.app.setting.openTabById(plugin.id);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (resource.tab == "plugins") {
|
||||
const plugins = Object.values(this.app.internalPlugins.plugins);
|
||||
const plugin = plugins.find((p) => p._loaded && p.instance.name == resource.text);
|
||||
if (plugin && this.app.setting.pluginTabs.find((t) => t.id == plugin.instance.id)) {
|
||||
setting.addExtraButton((b) => {
|
||||
b.setTooltip(`Open ${resource.text} Settings`).onClick(() => {
|
||||
this.app.setting.openTabById(plugin.instance.id);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
setting.addExtraButton((b) => {
|
||||
b.setIcon("forward-arrow").onClick(() => {
|
||||
this.showResult(resource);
|
||||
});
|
||||
});
|
||||
this.settingCache.set(resource, setting);
|
||||
}
|
||||
getResourceFromCache(resource) {
|
||||
if (!this.settingCache.has(resource)) {
|
||||
this.addResourceToCache(resource);
|
||||
}
|
||||
return this.settingCache.get(resource);
|
||||
}
|
||||
removeResourcesFromCache(resources) {
|
||||
for (const resource of resources) {
|
||||
this.settingCache.delete(resource);
|
||||
}
|
||||
}
|
||||
addResources(...resources) {
|
||||
for (const resource of resources) {
|
||||
resource.external = true;
|
||||
if (this.resources.find((k) => this.equivalent(resource, k)))
|
||||
continue;
|
||||
this.resources.push(resource);
|
||||
this.addResourceToCache(resource);
|
||||
}
|
||||
return () => this.removeResources(...resources);
|
||||
}
|
||||
equivalent(resource1, resource2) {
|
||||
return resource1.name == resource2.name && resource1.tab == resource2.tab && resource1.text == resource2.text && resource1.desc == resource2.desc && resource1.external == resource2.external;
|
||||
}
|
||||
removeResources(...resources) {
|
||||
const removing = [];
|
||||
const keys = [...this.settingCache.keys()];
|
||||
for (const resource of resources) {
|
||||
if (!resource || !resource.text || !resource.name || !resource.tab) {
|
||||
continue;
|
||||
}
|
||||
resource.external = true;
|
||||
this.resources = this.resources.filter((r) => !this.equivalent(resource, r));
|
||||
removing.push(...keys.filter((k) => k == resource || this.equivalent(resource, k)));
|
||||
}
|
||||
this.removeResourcesFromCache(removing);
|
||||
}
|
||||
removeTabResources(tab) {
|
||||
const removing = this.resources.filter((t) => t.tab == tab);
|
||||
this.resources = this.resources.filter((t) => t.tab != tab);
|
||||
this.removeResourcesFromCache(removing);
|
||||
}
|
||||
async getTabResources(tab) {
|
||||
await tab.display();
|
||||
const settings = tab.containerEl.querySelectorAll(".setting-item:not(.setting-item-header)");
|
||||
for (const el of Array.from(settings)) {
|
||||
const text = el.querySelector(".setting-item-name")?.textContent;
|
||||
if (!text)
|
||||
continue;
|
||||
const desc = el.querySelector(".setting-item-description")?.innerHTML ?? "";
|
||||
const resource = {
|
||||
tab: tab.id,
|
||||
name: tab.name,
|
||||
text,
|
||||
desc
|
||||
};
|
||||
this.resources.push(resource);
|
||||
this.addResourceToCache(resource);
|
||||
}
|
||||
if (this.app.setting.activeTab?.id == tab.id)
|
||||
return;
|
||||
this.seen.push(tab.id);
|
||||
tab.containerEl.detach();
|
||||
tab.hide();
|
||||
}
|
||||
patchSettings() {
|
||||
const self = this;
|
||||
this.register(around(this.app.setting, {
|
||||
onOpen: function(next) {
|
||||
return function() {
|
||||
next.apply(this);
|
||||
if (!import_obsidian.Platform.isMobile)
|
||||
self.search.inputEl.focus();
|
||||
return next;
|
||||
};
|
||||
}
|
||||
}));
|
||||
this.register(around(this.app.setting, {
|
||||
addSettingTab: function(next) {
|
||||
return function(tab) {
|
||||
if (tab && tab.id !== void 0 && !self.seen.includes(tab.id)) {
|
||||
self.getTabResources(tab);
|
||||
}
|
||||
return next.call(this, tab);
|
||||
};
|
||||
}
|
||||
}));
|
||||
this.register(around(this.app.setting, {
|
||||
removeSettingTab: function(next) {
|
||||
return function(tab) {
|
||||
if (this.isPluginSettingTab(tab)) {
|
||||
self.removeTabResources(tab.id);
|
||||
}
|
||||
return next.call(this, tab);
|
||||
};
|
||||
}
|
||||
}));
|
||||
this.register(around(this.app.setting, {
|
||||
openTab: function(next) {
|
||||
return function(tab) {
|
||||
self.searchAppended = false;
|
||||
self.app.keymap.popScope(self.scope);
|
||||
return next.call(this, tab);
|
||||
};
|
||||
},
|
||||
openTabById: function(next) {
|
||||
return function(tab) {
|
||||
self.searchAppended = false;
|
||||
self.app.keymap.popScope(self.scope);
|
||||
return next.call(this, tab);
|
||||
};
|
||||
},
|
||||
onClose: function(next) {
|
||||
return function() {
|
||||
if (import_obsidian.Platform.isMobile) {
|
||||
self.detach();
|
||||
}
|
||||
return next.call(this);
|
||||
};
|
||||
}
|
||||
}));
|
||||
}
|
||||
buildSearch() {
|
||||
const tempSetting = new import_obsidian.Setting(createDiv()).addSearch((s) => {
|
||||
this.search = s;
|
||||
});
|
||||
this.settingsNavItemContainer.append(tempSetting.controlEl);
|
||||
tempSetting.settingEl.detach();
|
||||
this.search.onChange((v) => {
|
||||
this.onChange(v);
|
||||
});
|
||||
this.search.setPlaceholder("Search settings...");
|
||||
this.app.setting.tabHeadersEl.prepend(this.settingsSearchEl);
|
||||
}
|
||||
buildScope() {
|
||||
this.scope.register(["Ctrl"], "N", () => {
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
}
|
||||
this.activeIndex = ((this.activeIndex + 1) % this.results.length + this.results.length) % this.results.length;
|
||||
this.centerActiveSetting();
|
||||
});
|
||||
this.scope.register([], "ArrowDown", () => {
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
}
|
||||
this.activeIndex = ((this.activeIndex + 1) % this.results.length + this.results.length) % this.results.length;
|
||||
this.centerActiveSetting();
|
||||
});
|
||||
this.scope.register(["Ctrl"], "P", () => {
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
}
|
||||
this.activeIndex = ((this.activeIndex - 1) % this.results.length + this.results.length) % this.results.length;
|
||||
this.centerActiveSetting();
|
||||
});
|
||||
this.scope.register([], "ArrowUp", () => {
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
}
|
||||
this.activeIndex = ((this.activeIndex - 1) % this.results.length + this.results.length) % this.results.length;
|
||||
this.centerActiveSetting();
|
||||
});
|
||||
this.scope.register([], "Enter", () => {
|
||||
if (this.activeSetting) {
|
||||
this.showResult(this.results[this.activeIndex]);
|
||||
}
|
||||
});
|
||||
}
|
||||
centerActiveSetting() {
|
||||
const result = this.results[this.activeIndex];
|
||||
this.activeSetting = this.getResourceFromCache(result);
|
||||
this.activeSetting.settingEl.addClass("active");
|
||||
this.activeSetting.settingEl.scrollIntoView({
|
||||
behavior: "auto",
|
||||
block: "nearest"
|
||||
});
|
||||
}
|
||||
detachFromMobile() {
|
||||
if (import_obsidian.Platform.isMobile) {
|
||||
this.settingsResultsContainerEl.detach();
|
||||
for (const header of this.mobileContainers) {
|
||||
this.app.setting.tabHeadersEl.append(header);
|
||||
}
|
||||
this.search.setValue("");
|
||||
}
|
||||
}
|
||||
detachFromDesktop() {
|
||||
if (import_obsidian.Platform.isDesktop) {
|
||||
this.app.setting.openTabById(this.app.setting.lastTabId);
|
||||
}
|
||||
}
|
||||
detach() {
|
||||
this.detachFromDesktop();
|
||||
this.detachFromMobile();
|
||||
this.searchAppended = false;
|
||||
}
|
||||
onChange(v) {
|
||||
if (!v) {
|
||||
this.detach();
|
||||
this.app.keymap.popScope(this.scope);
|
||||
return;
|
||||
}
|
||||
if (!this.searchAppended) {
|
||||
this.activeIndex = -1;
|
||||
this.app.keymap.popScope(this.scope);
|
||||
this.app.keymap.pushScope(this.scope);
|
||||
if (this.activeSetting) {
|
||||
this.activeSetting.settingEl.removeClass("active");
|
||||
this.activeSetting = null;
|
||||
}
|
||||
if (!import_obsidian.Platform.isMobile) {
|
||||
this.app.setting.activeTab.navEl.removeClass("is-active");
|
||||
this.app.setting.tabContentContainer.empty();
|
||||
this.app.setting.tabContentContainer.append(this.settingsResultsContainerEl);
|
||||
} else {
|
||||
const headers = this.app.setting.tabHeadersEl.querySelectorAll(".vertical-tab-header-group:not(.settings-search-container)");
|
||||
for (const header of Array.from(headers)) {
|
||||
this.mobileContainers.push(header);
|
||||
header.detach();
|
||||
}
|
||||
this.app.setting.tabHeadersEl.append(this.settingsResultsContainerEl);
|
||||
}
|
||||
this.searchAppended = true;
|
||||
}
|
||||
this.appendResults(this.performFuzzySearch(v));
|
||||
}
|
||||
getMatchText(text, result) {
|
||||
const matchElements = {};
|
||||
return createFragment((content) => {
|
||||
for (let i = 0; i < text.length; i++) {
|
||||
let match = result.matches.find((m) => m[0] === i);
|
||||
if (match) {
|
||||
const index = result.matches.indexOf(match);
|
||||
if (!matchElements[index]) {
|
||||
matchElements[index] = createSpan("suggestion-highlight");
|
||||
}
|
||||
let element = matchElements[index];
|
||||
content.appendChild(element);
|
||||
element.appendText(text.substring(match[0], match[1]));
|
||||
i += match[1] - match[0] - 1;
|
||||
continue;
|
||||
}
|
||||
content.appendText(text[i]);
|
||||
}
|
||||
});
|
||||
}
|
||||
appendResults(results) {
|
||||
this.settingsResultsEl.empty();
|
||||
if (results.length) {
|
||||
const headers = {};
|
||||
for (const resource of results) {
|
||||
if (!(resource.tab in headers)) {
|
||||
headers[resource.tab] = this.settingsResultsEl.createDiv();
|
||||
new import_obsidian.Setting(headers[resource.tab]).setHeading().setName(resource.name);
|
||||
}
|
||||
const setting = this.getResourceFromCache(resource);
|
||||
headers[resource.tab].append(setting.settingEl);
|
||||
}
|
||||
} else {
|
||||
this.settingsResultsEl.setText("No results found :(");
|
||||
}
|
||||
}
|
||||
showResult(result) {
|
||||
this.search.setValue("");
|
||||
const tab = this.app.setting.settingTabs.find((t) => t.id == result.tab) ?? this.app.setting.pluginTabs.find((t) => t.id == result.tab);
|
||||
if (!tab) {
|
||||
new import_obsidian.Notice("There was an issue opening the setting tab.");
|
||||
return;
|
||||
}
|
||||
this.app.setting.openTabById(tab.id);
|
||||
this.app.keymap.popScope(this.scope);
|
||||
this.detach();
|
||||
try {
|
||||
const names = tab.containerEl.querySelectorAll(".setting-item-name");
|
||||
const el = Array.from(names).find((n) => n.textContent == result.text);
|
||||
if (!el)
|
||||
return;
|
||||
const setting = el.closest(".setting-item");
|
||||
if (!setting)
|
||||
return;
|
||||
if (tab.id == "obsidian-style-settings") {
|
||||
let collapsed = setting.closest(".style-settings-container");
|
||||
let previous = collapsed?.previousElementSibling;
|
||||
while (previous != null && previous.hasClass("is-collapsed") && previous.hasClass("style-settings-heading")) {
|
||||
previous.removeClass("is-collapsed");
|
||||
collapsed = collapsed.parentElement?.closest(".style-settings-container");
|
||||
previous = collapsed?.previousElementSibling;
|
||||
}
|
||||
}
|
||||
let details = setting.closest("details");
|
||||
while (details) {
|
||||
details.setAttr("open", "open");
|
||||
details = details.parentElement?.closest("details");
|
||||
}
|
||||
setting.scrollIntoView(true);
|
||||
setting.addClass("is-flashing");
|
||||
window.setTimeout(() => setting.removeClass("is-flashing"), 3e3);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
performFuzzySearch(input) {
|
||||
const results = [], hotkeys = [];
|
||||
for (const resource of this.resources) {
|
||||
let result = (0, import_obsidian.prepareSimpleSearch)(input)(resource.text) ?? (0, import_obsidian.prepareSimpleSearch)(input)(resource.desc);
|
||||
if (result) {
|
||||
if (resource.tab == "hotkeys") {
|
||||
hotkeys.push(resource);
|
||||
} else {
|
||||
results.push(resource);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.results = [...results, ...hotkeys];
|
||||
return this.results;
|
||||
}
|
||||
onunload() {
|
||||
this.settingsSearchEl.detach();
|
||||
this.settingsResultsEl.detach();
|
||||
this.detach();
|
||||
if (this.searchAppended && import_obsidian.Platform.isDesktop)
|
||||
this.app.setting.openTabById(this.app.setting.lastTabId);
|
||||
}
|
||||
};
|
||||
|
||||
/* nosourcemap */
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "settings-search",
|
||||
"name": "Settings Search",
|
||||
"version": "1.3.10",
|
||||
"minAppVersion": "0.12.17",
|
||||
"author": "Jeremy Valentine",
|
||||
"description": "Globally search settings in Obsidian.md",
|
||||
"authorUrl": "https://github.com/valentine195",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
/* src/assets/main.css */
|
||||
.settings-search-container.vertical-tab-header-group {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
.settings-search-input {
|
||||
padding-left: 6px;
|
||||
}
|
||||
.vertical-tab-nav-item.settings-search-input {
|
||||
background-color: inherit !important;
|
||||
}
|
||||
.settings-search-input .setting-item-control {
|
||||
display: block;
|
||||
}
|
||||
.settings-search-input .search-input-container {
|
||||
margin: 0;
|
||||
}
|
||||
.settings-search-results .setting-item.active {
|
||||
background-color: var(--background-secondary);
|
||||
}
|
||||
.settings-search-results .set-externally .setting-item-name {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
/* src/styles.css */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "supercharged-links-obsidian",
|
||||
"name": "Supercharged Links",
|
||||
"version": "0.13.10",
|
||||
"minAppVersion": "1.11.0",
|
||||
"description": "Add properties and menu options to links and style them!",
|
||||
"author": "mdelobelle & Emile",
|
||||
"authorUrl": "https://github.com/mdelobelle/mdelobelle/tree/main",
|
||||
"helpUrl": "https://github.com/mdelobelle/obsidian_supercharged_links#readme",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
.css-boilerplate-result {
|
||||
width: 30em
|
||||
}
|
||||
|
||||
div.supercharged-modal {
|
||||
height: 70vh;
|
||||
}
|
||||
|
||||
div.supercharged-modal h4 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
span.data-link-text > a.cm-underline {
|
||||
color: inherit;
|
||||
}
|
||||
Reference in New Issue
Block a user